つい最近、SMTPを空けたんですが、不正アクセスがいっぱい来ます。
外からは、利用出来なくしているので、問題無いのですが、ログが汚れて見にくい状態となりました。
得意のbruteblockで防ぐかなと思ったのですが、どうせなら ブラックリストチェックも行ってみよーと思い作ってみました。
前提として、ipfwとsyslogが有効なことを確認して下さい。
まず、ブロック用のテーブルを作成します。
ipfw add 6 deny ip from table\(2\) to me
ブロックするスクリプトをrootホームに でも作成します。
smtpdnsbl.sh
#!/bin/sh
read line
result=`echo $line | grep 'smtpd.*\[.*\]*warning:*.\[*\]*.*authentication failed' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
if [ "${result}" = "" ] ; then
exit 0
else
reverse=$(echo $result |
sed -ne "s~^\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)$~\4.\3.\2.\1~p")
dnsresult=`dig +short -t a ${reverse}.zen.spamhaus.org.`
if [ "${dnsresult}" = "" ] ; then
exit 0
else
ipfw table 2 add $result
exit 1
fi
fi
実行権限を付けます。
chmod a+x smtpdnsbl.sh
最後に 1日 1回 ブロック用のテーブルをcronで解放します。
0 0 * * * ipfw table 2 flush
とりあえず、DNSBLに引っかかったIP(IPv4のみ)は、0時まで、ブロックされます。
syslogから、呼び出します。
/etc/syslog.d/dnsbl.conf
mail.info |exec /root/smtpdnsbl.sh
後は、ログを見て微笑んで下さい。
tail -f /var/log/maillog
ブロック中のIPリストを閲覧出来るようにしてみました。
以下のコマンドで、IPアドレスリストが閲覧出来ますが、どこのお国からの刺客かわからないので、逆引きしてみました。
ipfw table 1 list
iplist.sh
#!/usr/local/bin/bash
while read line
do
ipaddr=`echo $line | awk '{sub("/32 0","");print $0;}' | awk '{print substr($0, 0, index($0, "/") -1 )}'`
country=`curl -s ipinfo.io/{$ipaddr}/country`
echo $ipaddr " " $country
done
このスクリプトを経由させて、ファイル出力します。
ipfw table 1 list | iplist.sh > blacklist.txt
これを、WEBに埋め込んで、表示するようにしてみました。
現在のブラックリスト状況