greeting pauseを使う
- 発信側から受信側へTCP/25で接続
- 受信側から発信側へOKを送信
- 発信側から受信側へEHLO(またはHELO)
- 受信側から発信側へOKを送信
というやりとりが行われます。手動でこれをやってみるとこんな感じ。
0 :# telnet localhost 25 1 :Trying 127.0.0.1... 2 :Connected to localhost. 3 :Escape character is '^]'. 4 :220 hoge.com ESMTP Sendmail 8.14.3/8.14.3; Fri, 9 Oct 2009 17:20:42 +0900 (JST) 5 :EHLO hogehoge 6 :250-smtp.example.com Hello localhost [127.0.0.1], pleased to meet you 7 :250-ENHANCEDSTATUSCODES 8 :250-PIPELINING 9 :250-8BITMIME 10:250-SIZE 11:250-DSN 12:250-ETRN 13:250-DELIVERBY 14:250 HELP 15:mail from:hoge@hoge.com 16:250 2.1.0 hoge@hoge.com... Sender ok
説明のために行数を入れてあります。まず接続(0行目)。220を返信(4行目)。EHLOで名乗り(5行目)。6〜14行目で250を返信。とここまできてから送信者情報とか、メール本文とかがやりとりできる状態になります。メールを発信する方は接続してから受信側が220を返してくれるまで最小でも5分間待つことになっています。RFC5321の4.5.3.2.1ですね。
これをちょっと大きな値にしてあげる。5秒とか10秒とか。スパムって単位時間あたりに大量にメールを送りたい人たちなので、ある程度接続を試みて220が帰ってこなかったら諦めるらしいですよ。
ということで設定してみました。
sendmail.mcを編集
sendmail.mcに以下を追加。
FEATURE(`greet_pause',`5000')dnl 5 seconds
これは5秒待つとき。ミリセカンドなんですね。
それでsendmail.cfをmakeして、/etc/mailへコピー。
$ make sendmail.cf # cp sendmail.cf /etc/mail
例外を設定
とはいえ、内部からの接続とかローカルホストからの接続は迅速にお願いしたいところ。access_dbが有効になっていれば例外設定もできます。
sendmail.mcに
FEATURE(`access_db',`hash -T<TMPF> /etc/mail/access.db')dnl
を入れておいて、 /etc/mail/accessにこんなのを書く。
GreetPause: hoge.com 0 (ローカルドメイン) GreetPause: 127.0.0.1 (localhost)
カッコは書いちゃだめですよ。でもってaccess.dbを作成。
# /usr/sbin/makemap hash /usr/mail/access.db < /etc/mail/access
効果を見てみる
最初から小さい数字だとおもしろくないので、50秒に設定してみる。ログをみるとこんな感じ。
Oct 9 16:55:59 hoge sendmail[22423]: [ID 801593 mail.info] n997tXoc022423: rejecting commands from fedsmta2.email.global.factiva.com [205.203.134.162] due to pre-greeting traffic after 26 seconds Oct 9 16:55:59 hoge sendmail[22424]: [ID 801593 mail.info] n997tX6n022424: rejecting commands from fedsmta2.email.global.factiva.com [205.203.134.162] due to pre-greeting traffic after 26 seconds Oct 9 16:56:17 hoge sendmail[22475]: [ID 801593 mail.info] n997tpIT022475: rejecting commands from fedsmta1.email.global.factiva.com [205.203.134.161] due to pre-greeting traffic after 25 seconds Oct 9 16:59:37 hoge sendmail[23152]: [ID 801593 mail.info] n997xMQs023152: rejecting commands from [120.87.99.48] [120.87.99.48] due to pre-greeting traffic after 15 seconds Oct 9 17:00:45 hoge sendmail[23418]: [ID 801593 mail.info] n9980K3e023418: rejecting commands from mxl144v222.mxlogic.net [208.65.144.222] due to pre-greeting traffic after 25 seconds
ごく一部ですが、25秒もまってる奴がいるのか。。5秒で効果あるかな。といっても30秒だとでかいような気がする。