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)ポート

監視するポートを指定します。 ssh222200など、任意のポート番号またはサービス名に設定できます。

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_configLogLevel VERBOSEを設定して、ログに十分な情報が含まれるようにすることが最善であることに注意してください。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0