« 手軽なサイトマップの更新通知方法のメモ | メイン | オープンソース携帯OpenMokoの開発者プレビューキットが欲しい! »

CentOSにpostgreyインストール&geoipパッチ

CentOS 5にpostgreyをインストールする手順と、geoipで日本以外の国をgreyとして処理するパッチです。

postgreyはpostfixのpolicyサーバです。greylistingは受信を一旦拒否し、リトライしてきたメールサーバからのみ受信を行うというスパム対策手法です。

さくっとインストールを。 

  1. rpmforgeをリポジトリに加えます
  2. yum -y install postgrey
  3. 以下アップデートで修正された模様。不要です。(2007/8/8)
    /etc/sysconfig/postgreyに以下の1行を追加
    OPTIONS="--unix=$SOCKET --group postgrey"
  4. /etc/postfix/main.cfのsmtpd_recipient_restrictionを以下のようにします
    smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination,
     check_policy_service unix:/var/spool/postfix/postgrey/socket
  5. chkconfig postgrey on
  6. /etc/init.d/postgrey start
  7. /etc/init.d/postifix restart

以上でpostgreyが有効になります。

geoipのパッチ

全てのメールをgreylistingするのは無駄なので、選択的にやりたいものです。動的IPアドレスからっぽい奴をフィルタするS25R方式と組み合わせる手法が使われているようですが、ここではgeoipでアクセスしてきたサーバの国を基準にgreyにするかどうかの判定を入れることにします。
以下のパッチでは日本以外は全てgrey行きです。

--- /usr/sbin/postgrey.orig     2007-08-02 18:46:44.000000000 +0900
+++ /usr/sbin/postgrey  2007-08-06 19:34:34.000000000 +0900
@@ -18,6 +18,7 @@
 use Sys::Hostname;
 use Sys::Syslog; # used only to find out which version we use
 use POSIX qw(strftime setlocale LC_ALL);
+use Geo::IP;

 use vars qw(@ISA);
 @ISA = qw(Net::Server::Multiplex);
@@ -26,6 +27,10 @@
 my $DEFAULT_DBDIR = '/var/spool/postfix/postgrey';
 my $CONFIG_DIR = '/etc/postfix';

+my $geoip;
+$geoip = Geo::IP->new(GEOIP_STANDARD);
+die("geoip open error") if (!$geoip);
+
 sub read_clients_whitelists($)
 {
     my ($self) = @_;
@@ -293,6 +298,12 @@
     my $real_now = $now;
     if(defined $attr->{policy_test_time}) { $now = $attr->{policy_test_time} }

+    my $client = $attr->{client_address};
+    my $country = $geoip->country_code_by_addr($client);
+    my $result = ($country =~ /JP/) ? 'DUNNO' : 'GREY';
+    syslog 'info', "address:%s country:%s result:%s",$client,$country,$result;
+    return 'DUNNO' if ($country =~ /JP/);
+
     # whitelists
     for my $w (@{$self->{postgrey}{whitelist_clients}}) {
         if($attr->{client_name} =~ $w) {

後はpostfix停止、postgrey再起動, postfix開始の順で行います。ご利用には適宜国コードや条件をいじってくださいませ。

私のところでは、まずメールが来ないだろう国からのアクセスは即座に拒否。残りについては上のパッチを少しいじってホワイトリストはそのまま通し、日本からのものはDNSBLでチェック後アウトなメールをgrey処理、海外のものはそのままgreyとして処理するようにしています。

各所でレポートされているとおりgreylistingは結構効果があるようですが、最近のスパムの中にはちゃんとリトライする奴がいます。いずれそういう奴が増えてくるのではないかと予想され、やはりいたちごっこになりそうです。ちゃんとしたメールサーバと同じように振る舞い、リソースをたくさん使えばtarpit(接続時の応答を遅らせる手法)もgreylistingも抜けれますからあまり安心できません。 

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/411


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2007年08月06日 19:55に投稿されたエントリーのページです。

ひとつ前の投稿は「手軽なサイトマップの更新通知方法のメモ」です。

次の投稿は「オープンソース携帯OpenMokoの開発者プレビューキットが欲しい!」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー