fail2banのフィルタ作成【Qpopper, dovecot】 | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

logを見てアクセスを遮断してくれるfail2banがとても便利なので、最近は管理している全てのサーバに投入しています。sipサーバへの総当たり攻撃用のフィルタは以前書いたので、今回は標準のフィルターには入っていないQpopperとdovecotのフィルタについて書いてみます。

フィルタを作成するには正規表現が解っていないといけないのですが、しっかり理解するのはなにげに大変です。最後に参照ページをまとめておきますので、興味があれば読んでみてください。

【環境】
Debian GNU 6.0 squeeze
linux-image-2.6.32-5-686
fail2ban 0.8.4-3
dovecot-imapd 1:1.2.15-7
dovecot-pop3d 1:1.2.15-7
qpopper 4.0.9.dfsg-1

1.QpopperはQUALCOMM社がメンテしていて、pop3デーモンとしては歴史のあるプログラムです。最近はimapが主流になってきましたが、まだまだ現役で使われています。
※フィルタは2個作りましたが、たぶんどちらか一つで大丈夫だと思います。
※デフォルトのbanタイム(アクセスを遮断する時間)は600秒ですが、7,200秒(2時間)程度が良いと思います。

1-1.auth.logを監視するフィルタ
/etc/fail2ban/filter.d/qpopperauth.conf
[Definition]
failregex = in.qpopper.* authentication failure.* tty=<HOST>

/etc/fail2ban/jail.conf には以下を追加してください。
[qpopperauth]
enabled = true
port = pop3
filter = qpopperauth
logpath = /var/log/auth.log
maxretry = 10
bantime = 7200


1-2.mail.logを監視するフィルタ
/etc/fail2ban/filter.d/qpoppermail.conf
[Definition]
failregex = qpopper.* \(<HOST>\):.* Password supplied.*


/etc/fail2ban/jail.conf には以下を追加してください。
[qpoppermail]
enabled = true
port = pop3
filter = qpoppermail
logpath = /var/log/mail.log
maxretry = 10
bantime = 7200

2.dovecotはimapデーモンではなんとなくデファクトっぽい感じになってきました。
mail dir形式でもmail box形式どちらも対応していて、もちろん暗号化も出来ますのでとても使いやすいプログラムです。
下記のフィルターでpop3とimapどちらのアクセスでも動作します。
     /etc/fail2ban/filter.d/dovecot.conf
[INCLUDES]
before = common.conf

[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|
Aborted login \(auth failed|Aborted login \(tried to use disabled|
Disconnected \(auth failed|Aborted login \(\d+ authentication attempts)
.*rip=(?P<HOST>\S*),.*

注)上記は画面の表示上改行してますが、設定するときは1行にしてください。

/etc/fail2ban/jail.conf には以下を追加してください。
[dovecot]
enabled = true
port = imap3,imaps,pop3,pop3s
filter = dovecot
logpath = /var/log/mail.log

3.最後にフィルタで検知したときの動作を指定するのを忘れずに!
     /etc/fail2ban/jail.conf
action = %(action_mwl)s ←初期状態ではコメントアウトされてます。
※action_mwlとaction_mwは通知メールに詳細が出るか否かの違いです。

4./etc/fail2ban/jail.confの[DEFAULT]の中にignoreip = 127.0.0.1 という行があります。
ここにネットワークアドレスを書いておくと、そのアドレスからのアクセスについてはフィルタが働かなくなります。
DMZにサーバがいて、社内からはローカルIPでアクセスするような場合は、そのネットワークアドレス(例:192.168.0.0/24)を書いておくと良いです。もし社内からのアクセスはIPマスカレード等で一個のアドレスに絞られていて、その状態で誰かがフィルターに引っかかると、社内全員がサーバにアクセス出来なくなります。

■出来上がったフィルタは、fail2ban-regex で動作をテスト出来ます。
もし、logファイルにフィルタに引っかかるようなアクセスが記録されている場合、
fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/dovecot.conf
と入力してエンターを押すと、logファイルを調べフィルタに引っかかる行があるとリストアップしてくれます。

【参照サイト】
○正規表現について サルにもわかる正規表現入門
○dovecotのフィルタ Using Fail2ban with Dovecot