いまさらだけどfail2ban(基本編)

はじめに

今更ではありますが、fail2banはSSHサービスやFTPサービス、メールサービス等に対してID/PWを総当たりで試して不正にそのサービスを利用しようとしている攻撃を防ごうとする為のものです。検出は各サービスのログを監視し、一定の時間内に同じIPアドレスからログインに失敗した回数が設定を超えたら該当のIPを設定期間ファイアーウォールで拒否するというものです。
例えば同じIPから10分以内に5回失敗したら10分間拒否するとかです。

最近は非常に優秀なWAF製品もあるので出番は少なくなってきたが、WAFの中にはウェッブ関係しか見ないものもあり、FTPサービスやメール系の総当たり攻撃(ブルートフォースアタック)を防ぐ為に補助的にfail2banがまだまだ使える。
特にブルートフォースアタックはアカウント漏洩のリスクよりも攻撃を受け続ける事でサービス不能に陥ったり、サーバーの負荷が高くなることが問題になる場合があり、少しでもリスク軽減の為にも設定しておいた方が良いだろう。

fail2ban のインストール

RedHat系(CentOS、AlmaLinuxなど)では、OS標準のリポジトリには無い為、epelのリポジトリを使う

# dnf install epel-release -y
# dnf install fail2ban -y

設定

設定ファイルは /etc/fail2ban/ 以下に存在する。

CentOS7やAlmaLinux8などの場合は基本的に最初から設置されているファイルを変更する必要は無いが、そのままでは監視は無効にされているので、サーバーのサービスに合わせて/etc/jail.localファイルを作成する。
簡単に有効にするには以下の程度でもよいだろう。

[DEFAULT]

ignoreip = 127.0.0.1/8

bantime  = 600
findtime = 600
maxretry = 5

[sshd]
enabled  = true

[vsftpd]
enabled = true

[postfix]
enabled = true

[dovecot]
enabled = true

[postfix-sasl]
enabled = true

[DEFAULT] セクションに全体の標準になる設定を入れる。
ignoreip には制限しない除外IPを記述
bantime は検出してから該当のIPを拒否する時間を設定
findtime は検出する時間となる
maxretry は失敗した検出回数
上記の設定だと、「10分以内に同じIPから5回失敗を検出したら10分間該当のIPからの接続を拒否」となる

[ssh]や[vsftpd]等は監視するサービスを有効にするだけで特殊な設定をしていない限り問題ないだろう。

最後に

元から標準的な設定をしている場合は、該当のサービスを true にするだけで問題ないが、ログの出力先を変更していたり、独自のサービスについて監視したいといった事や、いくらbanしてもしつこくアクセスしてくるような場合はbanの時間を延長させるといった事もできるので、次回ではもう少し詳しく見て行こうと思う。