Postfix + postgrey を使ったグレイリスティングでスパム対策をしてみる
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
今回は、Postfixで postgrey という グレイリスティングを行うためのポリシーサーバーを使って
スパム対策を行ってみます。
グレイリスティング (Greylisting )とは、
名前の通り灰色のリスト という意味合いで、
メール配送を許可するリスト(White List)、メール配送を拒否するリスト(Black List) の間で、判断を保留するリスト(Grey List)から
その名が採られたものです。
(狭義の意味では、セレクティブ・グレイリスティング(selective greylisting)と呼ばれることもあります。
この場合、単純にグレイリスティングというと、すべての配送要求を保留するリスト(Grey List)と判断します。)
動作は、至ってシンプルで、保留するリスト(Grey List)からのメール配送要求が着た場合、一時的に拒否します。
ただし、SMTPのプロトコル(規格)では、一時的な拒否の場合は、ある程度時間を空けて再配送する事が求められており、
プロトコルに沿ったメールサーバであれば、該メールサーバであらかじめ設定されている一定時間(一般的に15分前後)の後に
再配送を試みるはずです。グレイリスティングでは、その2回目以降の配信要求でメールを受け付けることになります。
つまり、このグレイリスティングを組み込めば、少なくとも怪しげなスパムメールツールでないSMTPサーバーから送られてきたメールであろうことが判断できるわけです。
Postfix + postgrey を使ったグレイリスティングでスパム対策をしてみる
以降に、postgreyから セッティング、簡単な動作確認までの手順を簡単に解説します。
postgrey をインストールする
postgrey は、Linuxの各ディストリビューションでは、バイナリパッケージがあるので、yum あるいは apt を使ってインストールしてみます。
(yum あるいは apt を使ってインストールすると必要なPERLモジュールなども一気にインストールされるので非常に簡単です。)
CentOS Scientific Linux
$ yum install postgrey
...
Debian Ubuntu
$ aptitude install postgrey
...
postgrey の設定を行う
postgrey は、デフォルトの設定でもすぐに動作可能ですが、
ここでは必要最小限、知っておくべき設定項目のみについて、簡単に解説しておきます。
postgrey サーバーのTCPポート番号を設定する
オプションの設定を変更しておきます。
ここでは、unix ソケット でなく TCP PORT での接続 とします。
CentOS Scientific Linux
オプションは、/etc/sysconfig/postgrey で設定します。
Debian Ubuntu
オプションは、/etc/default/postgrey で設定します。
POSTGREY_OPTS="--inet=10023"
グレイリスティングの対象としない サーバーを設定する
postgreyは、グレイリスティングの対象としない サーバーを White List として設定することができます。
CentOS Scientific Linux
White Listは、/etc/postfix/postgrey_whitelist_clients.local で設定します。
...
# Yahoo Japan
yahoo.co.jp
# Japan IP address
1.0.16.0/20
...
Debian Ubuntu
White Listは、/etc/postgrey/whitelist_clients.local で設定します。
...
# Yahoo Japan
yahoo.co.jp
# Japan IP address
1.0.16.0/20
...
ここの例では、
Yahoo JAPANのドメインは、グレイリスティングの対象としない、
日本のIPアドレス(上記では省略しています)は、グレイリスティングの対象としない、
という設定を行っています。ここの設定例は、以下のファイルでダウンロードできます。
White Listの設定ファイルには、以下のものがあります。
(postgrey_)whitelist_clients : 接続してくるメールサーバに対するリスト
(postgrey_)whitelist_clients.local : 接続してくるメールサーバに対するローカルリスト
(postgrey_)whitelist_recipients : 宛先メールアドレスに対するリスト
(postgrey_)whitelist_recipients.local : 宛先メールアドレスに対するローカルリスト
個別のWhiteListを追加したい場合は、いずれかのローカルリストに追加していきます。
(postgrey_)whitelist_recipients では、デフォルトで以下の設定があります。
# postgrey whitelist for mail recipients
# --------------------------------------
# put this file in /etc/postfix or specify its path
# with --whitelist-recipients=xxx
postmaster@
abuse@
つまり、上記では、postmaster@ 宛は、グレイリスティングの対象としない、ことになります。
それでは困る場合は、上記の設定をコメントアウトしてきましょう。
Postfix のsmtpd_recipient_restrictions (利用制限設定)にてpostgreyサーバーを設定する
smtpd_recipient_restrictionsは、/etc/postfix/main.cf で設定します。
...
smtpd_recipient_restrictions =
permit_mynetworks,
...
reject_unauth_destination ,
check_policy_service inet:127.0.0.1:10023
...
reject_unauth_destination の後に設定します。
Postfix , postgrey を再起動する
$ /etc/init.d/postgrey restart
...
$ /etc/init.d/postfix restart
...
動作確認する
ここまでで、必要最小限の設定ができたので、postgrey の動作確認をやってみます。
別の端末から telnet コマンドでメール配送してみます。(詳しくは、telnetを使ったsendmailのメール中継のテスト方法 参照)
端末Aからtelent コマンドを使ってメール配送する
ここでは、
端末A : 192.168.1.9
Postfixサーバー : 192.168.1.100
としています。
$ telnet 192. 168. 1. 100 25
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
220 mail.sample.net ESMTP Postfix
> mail from: hoge@example. com
250 2.1.0 Ok
> rcpt to: hanako@sample. net
450 4.2.0 <hanako@sample.net>: Recipient address rejected : Greylisted, see http://postgrey.schweikert.ch/help/mail.sample.net.html
> data
554 5.5.1 Error: no valid recipients
> QUIT
221 2.0.0 Bye
Connection closed by foreign host.
初回のメール配送要求では、Recipient address rejected と出力され、以降の要求は、すべて無視され、メールの配送はできません。
この時のサーバーのメールログは、以下のようなログが出力されているはずです。
$ tail - f / var/ log/ maillog
$ tail - f / var/ log/ mail. log
...
May 26 12:20:50 mail postfix/smtpd[13400]: NOQUEUE: reject : RCPT from unknown[192.168.1.9]: 450 4.2.0 <hanako@sample.net>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/mail.sample.net.html; from=<hoge@example.com> to=<hanako@sample.net> proto=SMTP
...
一定時間経過後、同じ端末Aからtelent コマンドを使ってメール配送する
一定時間は、デフォルトでは、300秒(5分)となっています。上記での設定のように特別に時間を指定していない場合は、
5分以上経過後に、同じ端末Aからtelent コマンドを使ってメール配送してみます。
$ telnet 192. 168. 1. 100 25
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
220 mail.sample.net ESMTP Postfix
> mail from: hoge@example. com
250 2.1.0 Ok
> rcpt to: hanako@sample. net
250 2.1.5 Ok
> data
354 End data with <CR><LF>.<CR><LF>
This is test mail.
.
250 2.0.0 Ok: queued as C561E4102E
> QUIT
221 2.0.0 Bye
Connection closed by foreign host.
今度は、ちゃんとメール配送要求を受け付けてくれました。
この時のサーバーのメールログは、以下のようなログが出力されているはずです。
$ tail - f / var/ log/ maillog
$ tail - f / var/ log/ mail. log
...
May 26 12:33:43 mail postgrey[13398]: action=pass, reason=triplet found, delay=773, client_name=unknown, client_address=192.168.1.3, sender=hoge@example.com, recipient=hanako@sample.net
May 26 12:33:43 mail postfix/smtpd[13403]: B656341026: client=unknown[192.168.1.9]
May 26 12:33:49 mail postfix/cleanup[13406]: B656341026: message-id=<>
May 26 12:33:49 mail postfix/qmgr[13373]: B656341026: from=<hoge@example.com>, size=269, nrcpt=1 (queue active)
May 26 12:33:49 mail postfix/local[13407]: B656341026: to=<hoge@example.com>, relay=local, delay=10, delays=10/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
May 26 12:33:49 mail postfix/qmgr[13373]: B656341026: removed
...
次回接続可能となる一定時間を変更したい場合は、先の
オプション設定 で以下のように設定します。
以下の例では、1800(秒)=30(分)の設定例となっています。
CentOS Scientific Linux
オプションは、/etc/sysconfig/postgrey で設定します。
options="--inet=10023 --delay=1800"
Debian Ubuntu
オプションは、/etc/default/postgrey で設定します。
POSTGREY_OPTS="--inet=10023 --delay=1800"
どうでしょうか、このやり方で、スパムが完全に駆除できるわけではありません。
特に最近では、格安のVPSが手に入るので、一般ユーザにとってうれしいことは、スパマーにとってもうれしいことで、
スパマーも簡単にSMTPサーバーを手に入れることができるようになりました。
つまり、スパマーがちゃんとしたSMTPサーバーからスパムを送信する場合、上記のグレイリスティングは、ほとんど効果はないでしょう。
なぜなら、グレイリスティングは、礼儀正しいSMTPサーバーからのメールか否かを判断しているに過ぎないので、区別がつかないのです。
このグレイリスティングは、結構、古くからあるスパム対策の一つで、スパマーが一般のSMTPサーバーを使わず、
スパム専用のSMTPを使っていて、短時間に大量のスパムを送信しようとする行為を想定したスパム対策です。
そのため、踏み台として SMTPサーバー を経由したスパムメールや、先の格安VPSなどでSMTPサーバーを立ててスパムメールを送信している場合などには、効果がありません。
ただ、少なくもこのグレイリスティングをやらないより、やった方が、間違いなく良いでしょう。
今でも、個人的には、このグレイリスティングをやることで、スパムメールの半数以上は撃退できましたので、それなりに効果はあると思います。お試しあれ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :