所有している公開サーバでFTPによる不正アタックが頻発してきましたので、SSHやFTPといった様々なアプリケーションのログファイルを監視し、指定したフィルターにマッチした場合に自動的に iptables (ファイアウォール) へポリシーを追加して攻撃をブロックしてくれる fail2ban を導入してみることにしました。
fail2ban では自動的にポリシーを追加するだけじゃなく、指定した時間が経過するとポリシーから削除(Banを解除)してくれる機能もあるのでワリと便利です。
インストールする
まずは関連するパッケージとして ipset (公式リポジトリ) と python-inotify (EPELリポジトリ) をインストールします。
続いて fail2ban をEPELリポジトリからダウンロードしてインストールします。
試しに動作させてみると、今のところ何もリストに存在していないことが分かります。これでひとまずインストールは完了。
fail2banのログファイルを変更する
ail2ban のログがデフォルトではシスログ( /var/log/messages )になっているので、独自のログファイル( /var/log/fail2ban.log )に変更します。
ちなみにログファイルのローテート設定は自動で行われます。便利。
初期設定(フィルタの用意)
いろいろなサービスの監視ができますが、今回はFTP(vsftpd)の監視をしたいと思います。
独自のフィルタは /etc/fail2ban/jail.local というファイルを新規で作成して設定します。
今回は
- 1200秒(20分間)の間に
- 5回の接続処理(失敗)が発生した場合
- 300秒(5分間)の間、該当IPからの接続をブロックする
という閾値をとります。
尚、action を指定することで、ban(ブロック)が発生した場合はメールが通知されます。
試しにFTP攻撃をして動作を確認する
攻撃元サーバで下記を実行します。
これで接続失敗を短時間で5回連続実施することになります。
FTPサーバでログを参照して攻撃状態を確認します。
キチンと攻撃をブロックするようになりました。
念の為に iptables も確認してみます。
これで一通りの検証まで完了です。
サクッと便利。
規制を手動で解除する方法
尚、規制された場合に手動で規制を解除するには下記方法しかなさそうです。
- ホワイトリストに追加する。
- 規制時間が過ぎるのを待つ。
おまけ:試しに検証してみて分かったこと
ちなみに何らかの規制が実施中にfail2ban を再起動した場合、ban中の規制時間はリセットされるっぽいです。
つまり再起動のタイミングからまた待機。