このSPAMに対する対策にはいろんなやり方があるのですが、今回は簡単に実装できて思った以上に効果がある… つまり、コストパフォーマンスが高いstarpitという方式について書いてみます。
スパム対策技術に詳しくやり方について書いてあります。
また、私が採用したstarpitを発展させたRgrey - S25R + greylistingという方法もあるようです。
それではstarpitというのはどういう技術かというと、
----
1.postfixが稼動しているメールサーバ上で実行されます。
2.特別なプログラムは必要ありません。
3.SPAMの検出率は93%程度(上記の佐藤さんのサイトでは)
4.メールサーバには殆ど負荷は掛からない。
----
と、結構いいことづくめのようですがメールサーバの運用がちゃんとできる人がやらないと、いろいろと弊害が出るので注意が必要です。
次に、starpitを動かす環境(条件)は、postfixのバージョンが2.3以上であること!
これだけです。
qmailやsendmailでも出来るようですが、私が動かしているサーバの環境(2009/01/27現在)は、
debian GNU/4.0 Linux etch
kernel 2.6.18-6
postfix 2.3.8-2+etch1
で、動かしています。
基本的には、S25Rのフィルター条件にあてはまるものに対して、指定時間応答を遅らせています。
具体的には、postfixのmain.cfの中の以下の部分です。
smtpd_client_restrictions = permit_mynetworks, |
permit_mynetworksの次の2行はファイル名の通り、ホワイトリストです。
S25Rのフィルタルールに引っかかるが正規のメールサーバの場合には、ここに記載して下さい。
次のwarn_clientとtarpit_clientは、ルール自体は同じです。
# cat /etc/postfix/warn_client |
これは実際の応答遅延の処理はtarpit_clientで実行されますが、このままだと後でログを見たときに、starpitのフィルターではじかれたかどうかが解らないため、ログに記録するようにwarn_clientを走らせます。
※ログにはこんな感じで記録されます。
Oct 30 17:18:01 rickdom postfix/smtpd[10116]: NOQUEUE: warn: CONNECT from unknown[88.238.15.231]: ; proto=SMTP
尚、SMTPでは応答のTime outは5分となっているので、ちゃんと設定されているメールサーバであれば、125秒の応答遅延を行っても、本来正常に通信が行われます。 それに対し、スパマーが使うメールサーバでは、なるべく多くの相手にSPAMメールを送る事が要求されるため、starpitのように応答遅延が行われると、125秒も待たず相手側(スパマー側)から接続を切ってきます。
smtpのタイムアウトについては、RFC2821の4.5.3.2 Timeoutsを見てください。
詳しく載っています。
■starpitを設定した場合、他の注意点
postfixの機能であるsleepを使っていますが、このsleepという機能は単に指定時間寝てるだけなので、寝てる間に相手がコネクションを切っても、タスクとしては存在し続けます。
これは、単純にtime waitしているコネクション=タスクの数が増えることを意味しますが、postfixのデフォルト設定では接続待ちのタスクは最大100となっています。
この設定値だとちょっと足りない場合がありますので、ここを増やします。
ただし、メモリー見合いなのでむやみに増やしてはいけません(たぶん200くらいが適当かな?)。
# cat /etc/postfix/master.cf ↓は内容の一部 |
このようにデフォルト設定をコメントアウトし、プロセスの最大数を200に設定して下さい。
これで、S25Rというフィルターに引っかかった接続元には、応答遅延を行うというstarpitが働きます。
logwatchとかを走らせておけば解るのですが、このstarpitでも結構なSPAMやウィルスメールをはじいてくれます。
実は、該当となるメールサーバでsmtp認証とかやっていると、ちょっと問題がでるのでその対応策については、また別項で書くことにします。
2009/03/03 追記
starpitの設定で、大切な事を書き忘れていました。
smtpd_delay_reject = no
という一文を必ずmain.cfに書き加えてください。
これがないと、各種フィルターの動作が遅延するのでセッション成立時にtarpitの動作をしません。