印刷
カテゴリ: FreeBSDとLinux
参照数: 1562

つい最近、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に埋め込んで、表示するようにしてみました。

 

現在のブラックリスト状況