トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Postfix Greylisting Policy Server(Postgrey)

Last-modified: 2016-03-23 (水) 12:31:59 (2953d)
Top / Postfix Greylisting Policy Server(Postgrey)

Postfix Greylisting Policy Server(Postgrey)

最近、社内の一部メールアカウントに対し、SPAMメールの受信が増大してしまい、メールサーバが過負荷状態になっていました。
SPAM対策として、SpamAssassin?等のベイジアンフィルタを導入していましたが、効果はあるものの多くがすり抜けてしまっている状態でした。

原因として、ベイジアンフィルタの学習機能を有効にするためには、

  • IMAPでのメール運用をし
  • すり抜けたSPAMメールを、SPAM用のフォルダに分類し
  • 定期的に、分類されたSPAMメールを学習させる

必要があるため、潤沢なHDD容量があるサーバなら良いのですが、現実的に運用が出来ない状態でした。
このため、他の方法がないか試行錯誤していたところ、Postgreyに出会いました。

Postgreyとは

Postgrey は ISG.EE の Devid Schweikert 氏によって開発された greylisting(SPAMを防御するための一種の方法)を実装するPostfix ポリシーサーバです。
(Postgrey日本語ポータルより引用)
技術的な説明等は、上記ページに詳しく記載されています。

インストール

Postgreyのインストールには、以下のPerlモジュールが必要になります。

  • Perl (version ≥ 5.6.0)
  • Net::Server
  • IO::Multiplex
  • BerkeleyDB

まず、CPANを用いて、Perlモジュールをインストールします。

perl -MCPAN -e shell
>cpan install Net::Server
>cpan install IO::Multiplex
>cpan install BerkeieyDB

rpmモジュールをDLしインストール

wget http://apt.sw.be/packages/postgrey/postgrey-1.27-1...
rpm -ivh postgrey-1.27-1.fc3.rf.noarch.rpm

postgreyの実行

/usr/local/bin/postgrey --inet=10023 -d

postfixの設定

/etc/postfix/main.cfに、以下の設定を追記

smtpd_recipient_restrictions =
permit_mynetworks,
reject_unauth_destination,
check_policy_service,
inet:127.0.0.1:10023

最後に、postfixをreload

service postfix reload

追記:

上記では、全ての初回アクセスサーバからの接続も遅延させてしまうため、FQDNを逆引きして動的IPっぽくないサーバからの接続はスルーするように変更

/etc/postfix/main.cfに、以下の設定を追記

smtpd_restriction_classes =
check_greylist
check_greylist = check_policy_service inet:127.0.0.1:10023

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_client_access,
regexp:/etc/postfix/check_client_fqdn

/etc/postfix/check_client_fqdnを新規作成

/^unknown$/ check_greylist
/^[^\.]*[0-9][^0-9\.]+[0-9]/ check_greylist
/^[^\.]*[0-9]{5}/ check_greylist
/^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]/ check_greylist
/^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]/ check_greylist
/^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\./ check_greylist
/^(dhcp|dialup|ppp|adsl)[^\.]*[0-9]/ check_greylist