postfix + geoip で国別ドメインスパム制御(Debian Etch)

元ネタはここからGeoIP面白そうということで
http://blog.browncat.org/2007/07/postfixgeoippolicy.html

GeoIP関連はaptでいれる。他はsrcより

apt-get update
apt-get install geoip-bin libgeoip-dev libgeoip1

wget http://www.maxmind.com/download/geoip/api/perl/Geo-IP-1.27.tar.gz
wget http://www.maxmind.com/download/geoip/api/perl/Geo-IP-1.28.tar.gz
wget http://www.maxmind.com/download/geoip/api/pureperl/Geo-IP-PurePerl-1.18.tar.gz
wget http://blog.browncat.org/files/geoip-policyd-0.01.tar.gz

tar zxf Geo-IP-1.27.tar.gz
cd Geo-IP-1.27
perl Makefile.pl
make
make test
make install
cd ..


tar zxf Geo-IP-PurePerl-1.18.tar.gz
cd Geo-IP-PurePerl-1.18
perl Makefile.pl
make
make test
make install
cd ..


tar zxf geoip-policyd-0.01.tar.gz
cd geoip-policyd-0.01
cp geoip-policyd /usr/local/sbin/
cp geoip-policyd.conf /usr/local/etc/

etchの環境ではGeo-IP-1.28.tar.gzではmake testが通らなかったので1.27で

制御したい国はこんな感じ

cat /usr/local/etc/geoip-policyd.conf
deny: CN KR RU BR AR TH TW PR PH FR DE IT

postfixの設定変更

vi /etc/postfix/master.cf
追加
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/sbin/geoip-policyd

vi /etc/postfix/main.cf

smtpd_client_restrictionsに追加
check_policy_service unix:private/policy,
permitの後に
policy_time_limit=3600
追加

/etc/init.d/postfix stop
/etc/init.d/postfix start

GeoIPデータベース更新

http://flatray.com/geoip/
上記の「GeoIPデータベースの更新」をそのまま使わせてもらう
そのままだとデータが多少古いのでついでにshellscriptを実行して最新のdatに

ログ確認

grep geoip /var/log/mail.log
Oct 4 21:00:00 example /usr/local/sbin/geoip-policyd[16720]: address:xxx.xxx.xxx.xxx country:JP result:DUNNO
通った場合


Oct 4 21:00:00 example /usr/local/sbin/geoip-policyd[16720]: address:xxx.xxx.xxx.xxx country:TW result:REJECT
弾いた場合

メンテナンスが楽なのがいいですね

#policy serverが使えるのはpostfix 2.1以降