本日も乙

ただの自己満足な備忘録。

スパムメールを転送しないようにする

今年の1月に書いて下書きのままだったのを載せてみます。

今までPostfixに関する記事を幾つか書いてきましたが、(小規模ですが)メールサーバを運用して難しいと思ったことは、当たり前かもしれませんがメールがスパム判定されずに送信することと、外部からのスパムからいかに守るかということです。

特にスパム対策の場合、メールのリレー設定を正しく施さないと外部からのスパムメールを異なる外部へ転送することになってしまい、自分たちがスパムメールの送り手になってしまいます。

そこで明らかにブラックリストに載っていたり、怪しい(DNS逆引きしていない)サーバからのメールを転送しないように設定します。

# /etc/postfix/main.cf

smtpd_client_restrictions =
  permit_mynetworks,
  reject_rbl_client all.rbl.jp,
  reject_rbl_client spamcop.net,
  reject_rbl_client dynablock.wirehub.net,
  reject_rbl_client sbl.spamhaus.org,
  reject_rbl_client list.dsbl.org,
  check_client_access hash:/etc/postfix/reject_client,
  reject_unknown_client,
  permit
パラメータ 説明
permit_mynetworks mynetworksで指定した送信元IPアドレスからのメール送信は許可する
reject_rbl_client ブラックリストに載っている送信元IPアドレスからのメール送信は許可しない
check_client_access 別ファイルで記載した送信元IPアドレスからのメール送信は許可(または不許可)する
reject_unknown_client 逆引きができないホストからのメール送信は許可しない

reject_rbl_clientブラックリストを管理しているデータベース(RBL)を指定しています。 check_client_accessは現時点で特定のIPアドレスブラックリストに載せることはしないため、空ファイルを作成するだけにします。

$ sudo touch /etc/postfix/reject_client
$ sudo postmap /etc/postfix/reject_client

Postfixの設定を読みこめば完了です。

$ sudo service postfix reload

試してみる

逆引き設定していないサーバ(EC2インスタンス)からメール送信した結果を載せます。

メール送信側(hogehoge@bar.com)

$ sendmail contact@foo.com
Subject:test
test
.

$ sudo tail /var/log/maillog

Jan 19 12:09:06 ip-10-146-85-78 postfix/smtpd[11133]: warning: xxx.xxx.xxx.xxx: address not listed for hostname ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
Jan 19 12:09:06 ip-10-146-85-78 postfix/smtpd[11133]: connect from unknown[xxx.xxx.xxx.xxx]
Jan 19 12:09:06 ip-10-146-85-78 postfix/smtpd[11133]: disconnect from unknown[xxx.xxx.xxx.xxx]
Jan 19 12:09:16 ip-10-146-85-78 postfix/qmgr[12277]: 75984534E2: from=<hogehoge@bar.com>, size=306, nrcpt=1 (queue active)
Jan 19 12:09:16 ip-10-146-85-78 postfix/smtp[11492]: 75984534E2: to=<contact@foo.com>, relay=mail.foo.com[xxx.xxx.xxx.xxx]:25, delay=330, delays=330/0.03/0.02/0.71, dsn=4.7.1, status=deferred (host mail.foo.com[xxx.xxx.xxx.xxx] said: 450 4.7.1 Client host rejected: cannot find your hostname, [xxx.xxx.xxx.xxx] (in reply to RCPT TO command))
Jan 19 12:09:26 ip-10-146-85-78 postfix/pickup[10124]: 3E0CC534EA: uid=1002 from=<hogehoge>
Jan 19 12:09:26 ip-10-146-85-78 postfix/cleanup[11501]: 3E0CC534EA: message-id=<20150119030926.3E0CC534EA@bar.com>
Jan 19 12:09:26 ip-10-146-85-78 postfix/qmgr[12277]: 3E0CC534EA: from=<hogehoge@bar.com>, size=310, nrcpt=1 (queue active)
Jan 19 12:09:26 ip-10-146-85-78 postfix/smtp[11492]: 3E0CC534EA: to=<contact@foo.com>, relay=mail.foo.com[xxx.xxx.xxx.xxx]:25, delay=7.6, delays=7.6/0/0.01/0.02, dsn=4.7.1, status=deferred (host mail.foo.com[xxx.xxx.xxx.xxx] said: 450 4.7.1 Client host rejected: cannot find your hostname, [xxx.xxx.xxx.xxx] (in reply to RCPT TO command))

メール受信側(contact@foo.com)

$ sudo tail /var/log/maillog

Jan 19 12:09:16 ip-10-126-162-5 postfix/smtpd[9523]: warning: xxx.xxx.xxx.xxx: address not listed for hostname ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
Jan 19 12:09:16 ip-10-126-162-5 postfix/smtpd[9523]: connect from unknown[xxx.xxx.xxx.xxx]
Jan 19 12:09:16 ip-10-126-162-5 postfix/smtpd[9523]: NOQUEUE: reject: RCPT from unknown[xxx.xxx.xxx.xxx]: 450 4.7.1 Client host rejected: cannot find your hostname, [xxx.xxx.xxx.xxx]; rom=<hogehoge@bar.com> to=<contact@foo.com> proto=ESMTP helo=<bar.com>
Jan 19 12:09:16 ip-10-126-162-5 postfix/smtpd[9523]: disconnect from unknown[xxx.xxx.xxx.xxx]
Jan 19 12:09:26 ip-10-126-162-5 postfix/smtpd[9523]: warning: xxx.xxx.xxx.xxx: address not listed for hostname ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
Jan 19 12:09:26 ip-10-126-162-5 postfix/smtpd[9523]: connect from unknown[xxx.xxx.xxx.xxx]
Jan 19 12:09:26 ip-10-126-162-5 postfix/smtpd[9523]: NOQUEUE: reject: RCPT from unknown[xxx.xxx.xxx.xxx]: 450 4.7.1 Client host rejected: cannot find your hostname, [xxx.xxx.xxx.xxx]; from=<hogehoge@bar.com> to=<contact@foo.com> proto=ESMTP helo=<bar.com>
Jan 19 12:09:26 ip-10-126-162-5 postfix/smtpd[9523]: disconnect from unknown[xxx.xxx.xxx.xxx]

Client host rejected: cannot find your hostnameと表示されており、逆引きできないホストを拒否していることが分かります。

ちなみにブラックリストに登録されているホストからメールが来た場合は以下のようになります。

Jan 20 17:07:02 ip-10-120-90-219 postfix/smtpd[1825]: connect from unknown[XXX.XXX.XXX.XXX]
Jan 20 17:07:02 ip-10-120-90-219 postfix/smtpd[1825]: NOQUEUE: reject: RCPT from unknown[XXX.XXX.XXX.XXX]: 554 5.7.1 Service unavailable; Client host [XXX.XXX.XXX.XXX] blocked using all.rbl.jp; XXX.XXX.XXX.XXX is listed in short.rbl.jp.; from=<spam@gmail.com> to=<contact@foo.com> proto=ESMTP helo=<noname>
Jan 20 17:07:02 ip-10-120-90-219 postfix/smtpd[1825]: disconnect from unknown[XXX.XXX.XXX.XXX]

参考URL