2013年11月04日
POP3サーバー(dovecot)のブルートフォースアタック対策です。
前回、iptables で対策をしようとしたけど、上手く設定できなかったので、別の方法を google 先生に聞きましたYo
どうやら、fail2banというツールを使うみたいなのです。
fail2banの事を調べると、ログを監視して認証に失敗しているログを見つけては、そのIPアドレスを接続禁止に設定すると説明がありましたYo
これなら、スクリプトで作れるんじゃない?と思い、自作で挑戦してみましたので、備忘のために書いておきますね。
ログの監視方法
まずは、最新のログの 200行を抽出です。
$ tail -n 200 /var/log/auth.log
Oct 30 07:47:37 kuronekodoh auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=minghe rhost=210.57.210.2
Oct 30 07:47:57 kuronekodoh auth: pam_unix(dovecot:auth): check pass; user unknown
Oct 30 07:47:57 kuronekodoh auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=minh rhost=210.57.210.2
Oct 30 07:48:17 kuronekodoh auth: pam_unix(dovecot:auth): check pass; user unknown
…
認証失敗のログがいっぱいですね。
必要な行を grep で抽出です。
$ tail -n 200 /var/log/auth.log | grep -i "authentication failure"
Oct 30 07:47:37 kuronekodoh auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=minghe rhost=210.57.210.2
Oct 30 07:47:57 kuronekodoh auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=minh rhost=210.57.210.2
…
必要な情報を awk で抽出です。
$ tail -n 200 /var/log/auth.log | grep -i "authentication failure" | awk '{print $6 "/" $14}'
pam_unix(dovecot:auth):/rhost=210.57.210.2
pam_unix(dovecot:auth):/rhost=210.57.210.2
…
ソートして集計をします。
コマンドは sort と uniq です。
$ tail -n 200 /var/log/auth.log | grep -i "authentication failure" | awk '{print $6 "/" $14}' | sort | uniq -c
8 pam_unix(dovecot:auth):/rhost=122.182.10.250
59 pam_unix(dovecot:auth):/rhost=210.57.210.2
1 pam_unix(sshd:auth):/rhost=118.244.181.33
…
こんな感じで抽出完了です。
あとは、失敗回数とIPアドレスを抽出して一定以上の失敗者を iptables で排除して完了ですYo
$ iptables -I INPUT -p tcp --dport 110 -s 210.57.210.2 -j DROP
上の流れを シェルスクリプトに組んで cron さんで定期実行させれば完了です。
どうも、pop3 へのブルートフォースアタックは、土日に来るみたいですので今週末が楽しみです。
pop3 も閉じたし、次は、smtp に来るのかな?かな?
ではでは、良い週末を \(´-`)ノ
/ Linux
/ サーバー