「Sshguard」の版間の差分
編集の要約なし |
同期 |
||
| 3行目: | 3行目: | ||
[[es:Sshguard]] |
[[es:Sshguard]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related| |
{{Related|Fail2ban}} |
||
{{Related|Secure Shell}} |
|||
{{Related articles end}} |
{{Related articles end}} |
||
{{warning|IP ブラックリストを使えば取るに足らない攻撃を防ぐことはできますが、 |
{{warning|IP ブラックリストを使えば取るに足らない攻撃を防ぐことはできますが、専用のデーモンを使う必要がありログは残ります (特に攻撃者が何度もサーバーにアタックした場合 {{ic|/var}} を含むパーティションが一杯になってしまう可能性もあります)。さらに、攻撃者が IP アドレスを知っている場合、ソースヘッダーを偽装したパケットを送りつけてサーバーからロックアウトさせるよう仕向けてくるかもしれません。[[SSH 鍵]]はこれらの問題に煩わされることなくブルートフォースの問題を解決する方法を提供します。}} |
||
[http://www.sshguard.net sshguard] は [[SSH]] などのサービスをブルートフォース攻撃から守るためのサービスで、[[fail2ban]] と似ています。 |
[http://www.sshguard.net sshguard] は [[SSH]] などのサービスをブルートフォース攻撃から守るためのサービスで、[[fail2ban]] と似ています。 |
||
| 13行目: | 14行目: | ||
==インストール== |
==インストール== |
||
{{Pkg|sshguard}} パッケージを[[インストール]]してください。 |
|||
==設定== |
==設定== |
||
| ⚫ | |||
{{Warning|現在、[community] の ufw-033-3 は以下の方法と互換性がありません。ユーザーは AUR の {{AUR|ufw-bzr}} を使う必要があります。}} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
sshguard によるブロックを機能させるにはファイアウォールを設定する必要があります。 |
|||
| ⚫ | |||
| ⚫ | |||
{{Note|sshd を標準のポートで動作させていない場合は最後の行を修正する必要があります (22 が標準ポートです)。}} |
{{Note|sshd を標準のポートで動作させていない場合は最後の行を修正する必要があります (22 が標準ポートです)。}} |
||
{{hc|/etc/ufw/before.rules| |
|||
# hand off control for sshd to sshguard |
|||
# hand off control for sshd to sshguard |
|||
| ⚫ | |||
-A ufw-before-input -p tcp --dport 22 -j sshguard |
|||
}} |
|||
上記の変更を行った後に ufw を[[systemd#ユニットを使う|再起動]]してください。 |
|||
=== |
==== iptables ==== |
||
| ⚫ | |||
{{Note|先に [[iptables]] や[[シンプルなステートフルファイアウォール]]を読んでファイアウォールをセットアップしてください。}} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
IPv6 を使っている場合: |
|||
# ip6tables -N sshguard |
|||
# ip6tables -A INPUT -p tcp --dport 22 -j sshguard |
|||
# ip6tables-save > /etc/iptables/ip6tables.rules |
|||
IPv6 を使っていない場合、次のコマンドで空の {{ic|ip6tables.rules}} ファイルを作成して下さい: |
|||
# touch /etc/iptables/ip6tables.rules |
|||
最後に: |
|||
# systemctl reload iptables |
|||
| ⚫ | |||
iptables を使用しておらず、sshguard を立ち上げるのにシステムに影響を与えたくない場合、以下のコマンドで sshguard を動かすのに必要なことだけをする iptables の設定が作成・保存されます: |
|||
# iptables -F |
|||
# iptables -X |
|||
| ⚫ | |||
# iptables -P FORWARD ACCEPT |
|||
# iptables -P OUTPUT ACCEPT |
|||
# iptables -N sshguard |
# iptables -N sshguard |
||
# iptables -A INPUT -j sshguard |
|||
# iptables-save > /etc/iptables/iptables.rules |
|||
次に {{ic|INPUT}} チェインから {{ic|sshguard}} チェインにジャンプするルールを追加します。以下のルールは sshguard が保護するポートを処理する他のルールよりも前に追加してください [http://www.sshguard.net/docs/setup/#netfilter-iptables]: |
|||
上記の手順を {{ic|ip6tables}} で IPv6 のファイアウォールルールも繰り返し設定して {{ic|ip6tables-save}} を使って {{ic|/etc/iptables/ip6tables.rules}} に保存して下さい。 |
|||
| ⚫ | |||
ルールを保存するには: |
|||
| ⚫ | |||
{{Note|IPv6 を使っている場合、''ip6tables'' でも同じ設定を行ってから ''ip6tables-save'' で {{ic|/etc/iptables/ip6tables.rules}} にルールを保存してください。}} |
|||
強力なファイアウォールを作成するのに iptables を使う方法は、[[シンプルなステートフルファイアウォール]]を見て下さい。 |
|||
==使用方法== |
==使用方法== |
||
sshguard には設定ファイルが存在しません。全てのオプションは sshguard を起動するときに引数として指定します。{{ic|man sshguard}} を見て下さい。 |
|||
===systemd |
===systemd=== |
||
{{ic|sshguard.service}} を[[systemd#ユニットを使う|起動・有効化]]してください。 |
{{ic|sshguard.service}} を[[systemd#ユニットを使う|起動・有効化]]してください。同梱されている systemd ユニットは {{ic|/var/db/sshguard/blacklist.db}} のブラックリストを使って journalctl を sshguard にパイプで渡しています。 |
||
sshguard に任意の引数を追加したいときは、[[systemd#ユニットファイルの編集]] |
sshguard に任意の引数を追加したいときは、[[systemd#ユニットファイルの編集]]に書かれているようにパッケージに入っているサービスを修正して下さい。 |
||
===syslog-ng |
===syslog-ng=== |
||
{{Pkg|syslog-ng}} をインストールしている場合、コマンドラインから直接 sshguard を起動することができます: |
{{Pkg|syslog-ng}} をインストールしている場合、コマンドラインから直接 sshguard を起動することができます: |
||
/usr/sbin/sshguard -l /var/log/auth.log -b /var/db/sshguard/blacklist.db |
/usr/sbin/sshguard -l /var/log/auth.log -b /var/db/sshguard/blacklist.db |
||
== |
==設定== |
||
ExecStart= |
|||
| ⚫ | |||
{{Note|sshguard v2 から設定は {{ic|/etc/sshguard.conf}} で行うことができます。sshguard を設定するために systemd ユニットを作成していた場合、{{ic|/etc/systemd/system/sshguard.service}} ファイルを削除することでパッケージに同梱されている systemd ユニットにリバートすることができます。その後 {{ic|/etc/sshguard.conf}} ファイルを編集してください。}} |
|||
| ⚫ | |||
===脅威レベルの変更=== |
|||
| ⚫ | |||
| ⚫ | |||
[Service] |
|||
ExecStart= |
|||
ExecStart=/usr/lib/systemd/scripts/sshguard-journalctl "-b 200:/var/db/sshguard/blacklist.db" SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 |
|||
BLACKLIST_FILE=200:/var/db/sshguard/blacklist.db |
|||
| ⚫ | |||
| ⚫ | |||
設定後 {{ic|sshguard.service}} ユニットを[[再起動]]してください。 |
|||
===アグレッシブに ban をおこなう=== |
===アグレッシブに ban をおこなう=== |
||
断続的な攻撃に悩まされているユーザーにとっては、もっとアグレッシブな ban ポリシーを有効にしたほうが効果的でしょう。偶発的にログインを失敗するようなことは絶対ないと言えるのであれば、一度でもログインを失敗したらホストを自動的に ban するよう SSHGuard を設定することができます。 |
断続的な攻撃に悩まされているユーザーにとっては、もっとアグレッシブな ban ポリシーを有効にしたほうが効果的でしょう。偶発的にログインを失敗するようなことは絶対ないと言えるのであれば、一度でもログインを失敗したらホストを自動的に ban するよう SSHGuard を設定することができます。設定ファイルのパラメータを以下のように編集してください: |
||
THRESHOLD=10 |
|||
BLACKLIST_FILE=10:/var/db/sshguard/blacklist.db |
|||
設定したら {{ic|sshguard.service}} ユニットを[[再起動]]してください。 |
|||
SSHGuard を停止: |
|||
==Tips and tricks== |
|||
# systemctl stop sshguard |
|||
| ⚫ | |||
{{ic|/usr/lib/systemd/system/sshguard.service}} の以下の行を編集: |
|||
| ⚫ | |||
[Service] |
|||
| ⚫ | |||
ExecStart= |
|||
ExecStart=/usr/lib/systemd/scripts/sshguard-journalctl "-a 1 -b 10:/var/db/sshguard/blacklist.db" SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 |
|||
| ⚫ | |||
次のコマンドでユニットをリロードする必要があります: |
|||
| ⚫ | |||
永続的に ban を解除するには {{ic|/var/db/sshguard/blacklist.db}} から IP アドレスを削除する必要があります: |
|||
# systemctl daemon-reload |
|||
# sed -i '/<ip-address>/d' /var/db/sshguard/blacklist.db |
|||
=== ログ出力 === |
|||
そして SSHGuard を再起動: |
|||
sshguard に渡されたものを確認したい場合、{{ic|/usr/lib/systemd/scripts/sshguard-journalctl}} のスクリプトや systemd サービス {{ic|sshguard.service}} をチェックしてください。以下のコマンドでもターミナルで同じログを表示できます: |
|||
# systemctl start sshguard |
|||
$ journalctl -afb -p info SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
# iptables -D sshguard <line-number> |
|||
2017年3月13日 (月) 22:54時点における版
関連記事
/var を含むパーティションが一杯になってしまう可能性もあります)。さらに、攻撃者が IP アドレスを知っている場合、ソースヘッダーを偽装したパケットを送りつけてサーバーからロックアウトさせるよう仕向けてくるかもしれません。SSH 鍵はこれらの問題に煩わされることなくブルートフォースの問題を解決する方法を提供します。sshguard は SSH などのサービスをブルートフォース攻撃から守るためのサービスで、fail2ban と似ています。
sshguard は他の2つと違って C で書かれており、軽量かつシンプルです。コアの機能は同等ながら機能は抑えめに作られています。
sshguard は同じようなツールが持っている、ログ解析による 脆弱性 から攻撃されることは (ほとんど、または絶対に) ありません。
インストール
設定
sshguard は /var/log/auth.log や syslog-ng、そして systemd の journal にログイン試行の失敗がないか監視することで動作します。試行が失敗するたびに、問題のホストは ban されて、しばらく通信ができなくなります。違反者が通信できなくなるデフォルトの時間は7分で、ログインを失敗するたびに2倍になります。何度もログイン失敗したホストは永久的に追放するように sshguard を設定することもできます。
一時的な ban も永続的な ban も、どちらも iptables の "sshguard" チェインにエントリを追加して違反者からのパケットを全て拒否することで行われています。ban は syslog に記録され /var/log/auth.log に残ったり、systemd を使っている場合、systemd の journal に記録されます。ban の効果がポート 22 だけ影響するようにするには、単純に他のポートで "sshguard" チェインをパケットが通過しないようにしてください。
sshguard によるブロックを機能させるにはファイアウォールを設定する必要があります。
UFW
UFW をインストール・有効化している場合、DROP の制御を sshguard に渡す必要があります。/etc/ufw/before.rules を編集して以下の行を記述することで設定できます。ループバックデバイスのセクションの後に挿入してください。
/etc/ufw/before.rules
# hand off control for sshd to sshguard -N sshguard -A ufw-before-input -p tcp --dport 22 -j sshguard
上記の変更を行った後に ufw を再起動してください。
iptables
必要な設定は iptables に sshguard という名前のチェインを作成することです。sshguard はこのチェインに自動的に悪いホストからのパケットを拒否するルールを追加します:
# iptables -N sshguard
次に INPUT チェインから sshguard チェインにジャンプするルールを追加します。以下のルールは sshguard が保護するポートを処理する他のルールよりも前に追加してください [1]:
# iptables -A INPUT -p tcp --dport 22 -j sshguard
ルールを保存するには:
# iptables-save > /etc/iptables/iptables.rules
/etc/iptables/ip6tables.rules にルールを保存してください。使用方法
systemd
sshguard.service を起動・有効化してください。同梱されている systemd ユニットは /var/db/sshguard/blacklist.db のブラックリストを使って journalctl を sshguard にパイプで渡しています。
sshguard に任意の引数を追加したいときは、systemd#ユニットファイルの編集に書かれているようにパッケージに入っているサービスを修正して下さい。
syslog-ng
syslog-ng をインストールしている場合、コマンドラインから直接 sshguard を起動することができます:
/usr/sbin/sshguard -l /var/log/auth.log -b /var/db/sshguard/blacklist.db
設定
/etc/sshguard.conf で行うことができます。sshguard を設定するために systemd ユニットを作成していた場合、/etc/systemd/system/sshguard.service ファイルを削除することでパッケージに同梱されている systemd ユニットにリバートすることができます。その後 /etc/sshguard.conf ファイルを編集してください。脅威レベルの変更
Arch に含まれているデフォルトの systemd ユニットでは、違反者の "danger" レベルが 120 に淘汰すると永続的に ban されるようになっています (もしくはログインを12回失敗。詳しくは terminology を参照)。ブラックリストファイルの前に脅威レベルを付けることで挙動を変えることができます:
BLACKLIST_FILE=200:/var/db/sshguard/blacklist.db
上記の例では 200: によって、ホストの脅威レベルが 200 にまで達したときに sshguard によって永続的に ban されるようになります。
設定後 sshguard.service ユニットを再起動してください。
アグレッシブに ban をおこなう
断続的な攻撃に悩まされているユーザーにとっては、もっとアグレッシブな ban ポリシーを有効にしたほうが効果的でしょう。偶発的にログインを失敗するようなことは絶対ないと言えるのであれば、一度でもログインを失敗したらホストを自動的に ban するよう SSHGuard を設定することができます。設定ファイルのパラメータを以下のように編集してください:
THRESHOLD=10 BLACKLIST_FILE=10:/var/db/sshguard/blacklist.db
設定したら sshguard.service ユニットを再起動してください。
Tips and tricks
ban を解除する
自分自身が ban されてしまった場合、自動的に ban が解除されるのを待つか、iptables を使って自分で ban を解除することができます。まず sshguard によって IP が ban されているか確認してください:
# iptables -L sshguard --line-numbers --numeric
それから次のコマンドを使って ban を解除します、line-number は前のコマンドで確認した番号に置き換えてください:
# iptables -D sshguard <line-number>
永続的に ban を解除するには /var/db/sshguard/blacklist.db から IP アドレスを削除する必要があります:
# sed -i '/<ip-address>/d' /var/db/sshguard/blacklist.db
ログ出力
sshguard に渡されたものを確認したい場合、/usr/lib/systemd/scripts/sshguard-journalctl のスクリプトや systemd サービス sshguard.service をチェックしてください。以下のコマンドでもターミナルで同じログを表示できます:
$ journalctl -afb -p info SYSLOG_FACILITY=4 SYSLOG_FACILITY=10