Postfixのアドレス検証について検証した時の備忘録です。

■イメージ図


■説明
ここでは、Postfixのアドレス検証について設定し検証してみました。
上図のようなイメージ図のサーバを作ったとします。
メールの最初の受信はDMZ側にあるホスト名「dmz-mta」が受け取ります。
ちなみにユーザー情報は、ホスト名「in-mta」がもっているとします。
「dmz-mta」は受け取ったメールのユーザー(アドレス)が存在するか「in-mta」に問い合わせにいき存在する場合は「in-mta」にリレーします。
もし、いない場合はその場で拒否します。
ちなみに、一度問い合わせたユーザー情報は「dmz-mta」のメモリー上に一定期間保存されます。

ここでやる事
1. アドレス検証が問題無く行えるか確認
2. 一度認証されたユーザーはメモリー上に保存されて次回以降一定期間問い合わせが発生しないか確認

■システム情報
OS: CentOS 6.3 64bit
Postfix: postfix-2.6.6-2.2.el6_1.x86_64
送信に利用するユーザー:test、test2
送信に利用するドメイン: example2.com

(1)「dmz-mta」にアドレス検証の設定をする

relayhost = [192.168.0.202]
relay_domains = example2.com
smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unauth_destination,
        reject_unknown_recipient_domain,
        reject_unverified_recipient
address_verify_transport_maps = hash:$config_directory/verify

「address_verify_transport_maps」にアドレス検証(問い合わせ先)に利用するMTAを設定する。
「smtpd_recipient_restrictions」の「reject_unverified_recipient」でアドレス検証に失敗したユーザー(存在しないユーザー)を拒否する。

・verifyを作成

[root@dmz-mta ~]# cd /etc/postfix/
[root@dmz-mta postfix]# vi verify
example2.com    smtp:[192.168.0.202]
[root@dmz-mta postfix]# postmap verify


(2)「in-mta」にtestユーザーを作成をする

[root@in-mta ~]# useradd test


(3)「example」からtest@example2.com宛てにメールを送信する

[root@example ~]# vi mail_body
This is Test Mail.
[root@example ~]# cat mail_body | sendmail -oi -f root@example.com test@example2.com

問題無く受信できることを確認
※アドレス検証が実行されると少しだけ遅延が発生します。メモリにキャッシュされてしまえばキャッシュされた分は遅延が発生しません。

(4)「example」から存在しないtest2@example2.com宛てにメールを送信する

[root@example ~]# cat mail_body | sendmail -oi -f root@example.com test2@example2.com


・「dmz-mta」のログ

Aug 25 20:41:54 dmz-mta postfix/smtpd[1843]: connect from example.com[192.168.0.200]
Aug 25 20:41:54 dmz-mta postfix/cleanup[1848]: 5D99E23E79: message-id=<20120825114154.5D99E23E79@mx.dmz-mta.com>
Aug 25 20:41:54 dmz-mta postfix/qmgr[1841]: 5D99E23E79: from=<double-bounce@dmz-mta.com>, size=258, nrcpt=1 (queue active)
Aug 25 20:41:54 dmz-mta postfix/smtp[1853]: 5D99E23E79: to=<test2@example2.com>, relay=192.168.0.202[192.168.0.202]:25, delay=0.03, delays=0/0.01/0/0.02, dsn=5.1.1, status=undeliverable (host 192.168.0.202[192.168.0.202] said: 550 5.1.1 <test2@example2.com>: Recipient address rejected: User unknown in local recipient table (in reply to RCPT TO command))
Aug 25 20:41:54 dmz-mta postfix/qmgr[1841]: 5D99E23E79: removed
Aug 25 20:41:57 dmz-mta postfix/smtpd[1843]: NOQUEUE: reject: RCPT from example.com[192.168.0.200]: 450 4.1.1 <test2@example2.com>: Recipient address rejected: unverified address: host 192.168.0.202[192.168.0.202] said: 550 5.1.1 <test2@example2.com>: Recipient address rejected: User unknown in local recipient table (in reply to RCPT TO command); from=<root@example.com> to=<test2@example2.com> proto=ESMTP helo=<example.localdomain>
Aug 25 20:41:57 dmz-mta postfix/smtpd[1843]: disconnect from example.com[192.168.0.200]


・「in-mta」のログ

Aug 25 20:41:54 in-mta postfix/smtpd[1516]: connect from example2.com[192.168.0.201]
Aug 25 20:41:54 in-mta postfix/smtpd[1516]: NOQUEUE: reject: RCPT from example2.com[192.168.0.201]: 550 5.1.1 <test2@example2.com>: Recipient address rejected: User unknown in local recipient table; from=<double-bounce@dmz-mta.com> to=<test2@example2.com> proto=ESMTP helo=<mx.dmz-mta.com>
Aug 25 20:41:54 in-mta postfix/smtpd[1516]: disconnect from example2.com[192.168.0.201]


(5)もう一度「example」から存在しないtest2@example2.com宛てにメールを送信する
「in-mta」に再度問い合わせがなく「dmz-mta」でメールが拒否されていることを確認

メモリー上の情報をフレッシュしたい場合は、postfixをreloadすればいい。

ちなみに、キャッシュのクリア・フレッシュのデフォルト期間は参考文献「1」を参照のこと:D

参考文献
1. http://www.postfix-jp.info/trans-2.2/jhtml/verify.8.html


8月 25, 2012 at 8:35 pm by 黒ぶちメガネ
Category: Linux, Postfix