2013/08/09

[Linux]fail2banを使ってqmailへのブルートフォースアタックを阻止する

fail2banでqmailのログインアタックをbanする設定。Pleskで運用している古いサーバーで、POPへのブルートフォースアタック(総当たり攻撃)が酷かったので導入に踏み切りました。




fail2banをgitからcloneしてインストール

pythonで動作しているので、まずpythonの有無、バージョンを調べます。Python >= 2.4とのことです。
適宜インストール&バージョンアップ。

http://www.fail2ban.org/wiki/index.php/Downloadsからお好みのバージョンをダウンロード。今回は安定のstableを選びました。


セットアップ

ダウンロードしたtarballを展開すると、setup.pyというファイルがあるのでそれを実行。
python setup.py install

インストールが終わると、/etc/fail2ban以下に設定ファイル一式が生成されます。


フィルターを作る

SSHやFTPなど、頻度が高そうなフィルターはプリセットされていますが、今回は該当するフィルターがなかったので、さらっと書きました。
PHPerでも理解できる正規表現です。
# Fail2Ban configuration file
#
# Author: ystream

[Definition]

failregex =www pop3d: IMAP connect from @ \[\]checkmailpasswd: FAILED:
ignoreregex = 

まぁ何の正規表現らしい事はしていないです。ログから「checkmailpasswd: FAILED」という部分を検知しているだけです。


場合によっては、アクションも作る

だいたいはaction.dにあるiptables.confで対応可能ですが、ログを書いてメールを送って・・・とかトリッキーなことをしたい場合はアクションも作らねばなりません。
アクションの書き方は、普通のコマンドラインと少しの変数を利用してつらつらと書くだけなのでここでは割愛します。


/etc/fail2ban/jail.confを修正

各種設定の実行をここで制御しますが、基本全部動作しないようになっております。欲しいフィルターをenable = trueにする必要があります。
今回は、自作のフィルターを通すので、一番下に新しい設定を加えました。
以下が今回作ったjail.confの設定。
[qmail-pop3-pw-fail]
enabled  = true
filter   = qmail-password
action   = iptables[name=POP3, port=110, protocol=tcp]
logpath  = /usr/local/psa/var/log/maillog
maxretry = 100
bantime  = 86400
findtime = 600

fail2ban-client start

設定完了後、fail2banをスタートします。fail2banはiptablesを自動的に直接いじるので、SSHなど重要なフィルターをかます場合は、ディスプレイの向こう側が見えるくらいに見直す、くらいの慎重さをもって実行します。リモートでSSH蹴られたら為す術がないです。直接ログインするか再起動するような現地作業しかなくなります。


今回困ったこと

fail2banのフィルターの書き方は日本語のいい情報がなかなかないのでfail2ban.orgのwikiに書いてあったvpopmailログからbanするフィルターを参考に、書いてみましたが、jail.confの部分をコピペしても動かなかったのに苦労しました。
参考元→ http://www.fail2ban.org/wiki/index.php/Fail2ban:Community_Portal#Qmail_vpopmail_pop3_filter
[qmail-vpopmail-pop3-user-notfound]
enabled = true
filter = qmail-vpopmail-pop3-username
action = iptables[name=POP3, port="110,995" protocol=tcp]
logpath = /var/log/maillog
maxretry = 5
bantime = 864000
findtime = 3600

ログにはbanしたよというログが出ているんですが、iptables -n -Lで確認すると、載ってない。何がおかしいのかさっぱり分からず、1日経過。起動時にチェインは作れているのに、banしたよのログの後、iptablesに設定が追加されていないので、その辺りの処理を確認しますが、おかしいところは見つからず。
jail.confを見直すと、アクションのポート指定が他の設定とは違う設定方法をしているのに気づく。

以下のように書き換える。
[qmail-pop3-pw-fail]
enabled  = true
filter   = qmail-password
action   = iptables[name=POP3, port=110, protocol=tcp]
logpath  = /usr/local/psa/var/log/maillog
maxretry = 100
bantime  = 86400
findtime = 600

995番ポートの分も新たに設定を書き足します。
[qmail-pop3-pw-fail-ssl]
enabled  = true
filter   = qmail-password
action   = iptables[name=POP3, port=995, protocol=tcp]
logpath  = /usr/local/psa/var/log/maillog
maxretry = 100
bantime  = 86400
findtime = 600

これでいいのかな。なんか機嫌よくbanしているようなのでこれくらいで許してやろう。
過去のバージョンではできたのかも知れないけれど、本家のwikiに書いてあるのだからなかなか疑わないよ・・・。1日悩んで全てに疑心暗鬼になったからこそ分かったのでしょう。:-P

以下、fail2banの動作チェック用のコマンド群
fail2banの設定ファイル
/etc/fail2ban/fail2ban.conf
fail2banのルールファイル
/etc/fail2ban/jail.conf
fail2banのアクション
/etc/fail2ban/action.d/
fail2banのフィルターファイル
/etc/fail2ban/filter.d/
fail2banのログファイル
/var/log/fail2ban.log
fail2banの起動
fail2ban-client start
fail2banの停止
fail2ban-client stop
稼働しているfail2banのルールの確認
fail2ban-client status
#実行結果
Status
|- Number of jail:      2
`- Jail list:           qmail-pop3-pw-fail, qmail-pop3-pw-fail-ssl
iptables -L -n
iptablesに登録されているチェインとルールを表示

不審なアクセスを効率よくbanして、平穏な休みを過ごしたいですね!

see also:
[qmail]メールサーバーがスパムの踏み台になった時にハッピーになれるツールを紹介します
[qmail]スパムは続くよどこまでも - qmail vs spam 全面戦争編 -


0 件のコメント:

コメントを投稿