今年の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]