メールサーバ(Postfix+Dovecot)でのアクセス制限

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サービスを再起動させればと。

これを定期的に行っていけば、メールサーバのアクセス制限になるかなぁと。

にほんブログ村 IT技術ブログ CentOSへ

コメント