WordPressでのログインに対するアクセス制限は行っているけれど、メールサーバ(Postfix+Dovecot)でもアクセス制限を行いたいなぁと。
で、アクセス制限を行うためのIPアドレスの抽出として、シェルスクリプトを作ってみた。
—–ここから—–
#!/bin/sh
TODAY=`date ‘+%Y%m%d’`
grep reject /var/log/maillog-$TODAY > /var/log/postfix-reject.$TODAY.log
egrep -o ‘[0-9]{1,3}(\.[0-9]{1,3}){3}’ /var/log/postfix-reject.$TODAY.log | grep -v (自サーバIP) | sort | uniq -c | sort -n -r > /var/log/ip.postfix-reject.$TODAY.log
grep failed /var/log/maillog-$TODAY > /var/log/dovecot-failed.$TODAY.log
egrep -o ‘[0-9]{1,3}(\.[0-9]{1,3}){3}’ /var/log/dovecot-failed.$TODAY.log | grep -v (自サーバIP) | sort | uniq -c | sort -n -r > /var/log/ip.dovecot-failed.$TODAY.log
—–ここまで—–
と、まあ、こんな感じ。
簡単に説明すると、
・メールログからPostfixでのrejectの行を抽出して、それに対してIPアドレスを抽出して自サーバIPを除いて、重複した行数を出力しつつ重複した行数を降順に並びかえ
・メールログからDovecotでのfailedrejectの行を抽出して、それに対してIPアドレスを抽出して自サーバIPを除いて、重複した行数を出力しつつ重複した行数を降順に並びかえ
“sort | uniq -c | sort -n -r”はソートして重複行を削除、その際にuniqの-cオプションで重複した行数を出力、重複した行数をsortの-nオプションで降順に並びかえる。
このシェルスクリプトをメールログのログローテーションに会わせて実行すれば、アクセス制限の対象IPアドレスが抽出できるかと。
で、あとは抽出したIPアドレスをiptablesに登録。
# vi /etc/sysconfig/iptables で、
#Postfix
-A INPUT -s (制限するIPアドレス) -m state –state NEW -m tcp -p tcp –dport 25 -j DROP
#Dovecot
-A INPUT -s (制限するIPアドレス) -m state –state NEW -m multiport -p tcp –dport 110,143,587,993,995 -j DROP
と、こんな感じにつらつらと書いていけばよいかと。
あとは、iptablesサービスを再起動させればと。
これを定期的に行っていけば、メールサーバのアクセス制限になるかなぁと。
コメント