Fail2Ban チュートリアル
導入
Fail2Ban は、システム侵入を防止するために使用される Linux システム アプリケーション ソフトウェアであり、主にシステム パスワードのブルート フォース クラッキングを防止します。 Pythonで開発されています。
これは主にログ ファイル (/var/log/auth.log
、/var/log/apache/access.log
など) を監視することによって有効になります。悪意のある攻撃によるログイン要求が発見されると、相手の IP アドレスがブロックされ、相手が要求を開始できなくなります。
Fail2Ban は、誰かが SSH パスワードを使用して繰り返しログインしようとするのを防ぐことができます。ただし、SSH がログインにキーを使用し、パスワード ログインが無効になっている場合は、Fail2Ban で保護する必要はありません。
Fail2Banのインストールコマンドは以下の通りです。
# ubuntu & Debian
$ sudo apt install fail2ban
# Fedora
$ sudo dnf install epel-release
$ sudo dnf install fail2ban
# Centos & Red hat
$ yum install fail2ban
インストール後、以下のコマンドを使用して Fail2Ban のステータスを表示します。
$ systemctl status fail2ban.service
起動していない場合は、Fail2Ban を起動します。
$ sudo systemctl start fail2ban
Fail2Ban を再起動します。
$ sudo systemctl restart fail2ban
再起動後に Fail2Ban が自動的に実行されるように設定します。
$ sudo systemctl enable fail2ban
失敗2禁止クライアント
Fail2Ban には、Fail2Ban を操作するために使用されるクライアント failed2ban-client が付属しています。
$ fail2ban-client
上記のコマンドは、fail2ban-client のすべての使用法を出力します。
次のコマンドは、アクティブな監視ターゲットを表示します。
$ fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
以下のコマンドは監視対象(ここではsshd)の稼働状況を確認します。
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 9
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 0.0.0.0
次のコマンドは、監視対象のブロックされているすべての IP アドレスを含む簡潔なバージョンを出力します。
$ sudo fail2ban-client banned
[{'sshd': ['192.168.100.50']}, {'apache-auth': []}]
次のコマンドは、IP アドレスのブロックを解除できます。
$ sudo fail2ban-client set sshd unbanip 192.168.1.69
構成
メイン設定ファイル
Fail2Ban のメイン設定ファイルは /etc/fail2ban/fail2ban.conf
にあり、新しいコピー /etc/fail2ban/fail2ban.local
を作成でき、変更はそのコピーに対して行われます。
$ sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
以下は、Fail2Ban を設定するためのログの場所です。
[Definition]
logtarget = /var/log/fail2ban/fail2ban.log
設定を変更した後、それを有効にするにはfail2ban.service
を再起動する必要があります。
禁止設定
Fail2Ban 禁止動作の設定ファイルは /etc/fail2ban/jail.conf
です。変更を容易にするために、これを /etc/fail2ban/jail.local
にコピーすると、その後の変更は jail.local
ファイルに反映されます。
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.d/sshd.local
など、ディレクトリ/etc/fail2ban/jail.d
に新しい個別のサブ設定ファイルを作成することもできます。
同様に、設定を変更した後、それを有効にするためにfail2ban.service
を再起動する必要があります。
設定ファイルの[DEFAULT]
ヘッダー行は、すべての禁止されたターゲットに対して有効であることを示しています。たとえば、禁止期間を 1 日に変更した場合、/etc/fail2ban/jail.local
は次のように記述できます。
[DEFAULT]
bantime = 1d
誰かがブロックされた場合、Webマスターにメール通知が送信されます。次のように設定できます。
[DEFAULT]
destemail = yourname@example.com
sender = yourname@example.com
# to ban & send an e-mail with whois report to the destemail.
action = %(action_mw)s
# same as action_mw but also send relevant log lines
#action = %(action_mwl)s
他のヘッダー行の下に設定が記述されている場合は、禁止されたターゲットに対してのみ有効であることを意味します。たとえば、[sshd]
の下に記述されている場合は、sshd に対してのみ有効であることを意味します。
デフォルトでは、Fail2Ban はさまざまなサービスに対して閉じられています。特定のサービスに対して Fail2Ban を有効にしたい場合は、設定ファイルで宣言する必要があります。
[sshd]
enabled = true
上記のステートメントは、Fail2Ban が sshd に対して有効であることを示しています。
設定項目
設定ファイルjail.local
の設定項目の意味は以下のとおりです。設定項目の形式はすべてkey=value
です。
(1)禁止時間
禁止の長さ。単位m
は分を意味し、d
は日を意味します。単位が書かれていない場合は秒を意味します。 Fail2Ban は、デフォルトでユーザーを 10 分間禁止します (10 分または 600)。
[DEFAULT]
bantime = 10m
(2)時間を見つける
ログイン失敗に対して計算される時間の長さ。単位m
は分を意味し、d
は日を意味します。単位が書かれていない場合は秒を意味します。 Fail2Ban は、デフォルトで 10 分以内に 5 回ログインに失敗したクライアントを禁止します。
[DEFAULT]
findtime = 10m
maxretry = 5
(3)maxretry
失敗したログイン試行の最大数。
(4)デスメール
通知を受信するための電子メール アドレス。
[DEFAULT]
destemail = root@localhost
sender = root@<fq-hostname>
mta = sendmail
(5)差出人名
通知メッセージの From フィールドの値。
(6) メタ
電子メールを送信するための電子メール サービス。デフォルトは sendmail
です。
(7) アクション
禁止するときに実行されるアクション。
[DEFAULT]
action = $(action_)s
上記のaction_
はデフォルトのアクションで、禁止期間が終了するまで禁止されたオブジェクトのトラフィックを拒否することを意味します。
Fail2Ban が提供する他のアクションをいくつか示します。
# ban & send an e-mail with whois report to the destemail.
action_mw = %(action_)s
%(mta)s-whois[sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(action_)s
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
#
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
# to the destemail.
action_xarf = %(action_)s
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]
# ban IP on CloudFlare & send an e-mail with whois report and relevant log lines
# to the destemail.
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
%(mta)s-whois-lines[sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
(8)無視
Fail2Ban が無視できる信頼できる IP アドレス。複数の IP アドレスはスペースで区切ります。
ignoreip = 127.0.0.1/8 192.168.1.10 192.168.1.20
(9)ポート
監視するポートを指定します。 ssh
、22
、2200
など、任意のポート番号またはサービス名に設定できます。
SSH 構成
以下は sshd の設定例です。
[sshd]
enabled = true
port = ssh
filter = sshd
banaction = iptables
backend = systemd
maxretry = 5
findtime = 1d
bantime = 2w
ignoreip = 127.0.0.1/8
まず、Fail2Ban が完全に機能するには、/etc/ssh/sshd_config
でLogLevel VERBOSE
を設定して、ログに十分な情報が含まれるようにすることが最善であることに注意してください。
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0