postfixでメールのお勉強をしてみる SMTP-AUTHとSubmissionポート

次はSMTP-AUTHに対応させてみたいと思います。奇しくもeoはOP25Bではじかれてしまうことがわかったので合わせてsubmissionポートの設定も行おうと思います。submissionポートの説明を調べると、送信専用のポートなんて説明だけが出てくる事がしばしばありますが、これは

  • SMTPプロトコルとして認証を定義していないため25番ポートをそのまま開けちゃうとスパム投げたい放題になる可能性がある。
  • 25番で認証をかけたくてもMTA<->MTA間もSMTP(25番ポート)でやりとりするので、25番ポートを認証ありき(絶対認証が必要)として使えない

といった事情から一般ユーザが送信専用に利用する、認証ありきのポートとしてsubmissionポート(587番ポート)を用意しているのだと思われます。また、プロトコルして定義されていないためか、認証にはSASLというライブラリの力をかります。ということでSASLを入れないとダメなんですが

# yum list installed | grep sasl
cyrus-sasl.i386                          2.1.22-4               installed       
cyrus-sasl-lib.i386                      2.1.22-4               installed       
cyrus-sasl-plain.i386                    2.1.22-4               installed

のようにCentOSでは最初っからパッケージで入るみたいです(Postfix入れた時に一緒に入った?)。さらにsearchしてみると

# yum search sasl 
cyrus-sasl-plain.i386 : PLAIN and LOGIN support for Cyrus SASL.
cyrus-sasl-sql.i386 : SQL auxprop support for Cyrus SASL.
cyrus-sasl.i386 : The Cyrus SASL library.
postfix.i386 : Postfix Mail Transport Agent
cyrus-sasl-ntlm.i386 : NTLM support for Cyrus SASL.
php-pear-Auth-SASL.noarch : PEAR: Abstraction of various SASL mechanism responses
cyrus-sasl-ldap.i386 : LDAP auxprop support for Cyrus SASL.
postfix.i386 : Postfix Mail Transport Agent
cyrus-imapd.i386 : A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
cyrus-sasl-devel.i386 : Files needed for developing applications with Cyrus SASL.
cyrus-sasl-md5.i386 : CRAM-MD5 and DIGEST-MD5 support for Cyrus SASL.
cyrus-sasl-lib.i386 : Shared libraries needed by applications which use Cyrus SASL.
php-pear-Net-SMTP.noarch : Provides an implementation of the SMTP protocol
cyrus-sasl.i386 : The Cyrus SASL library.
cyrus-sasl-gssapi.i386 : GSSAPI support for Cyrus SASL.
cyrus-sasl-plain.i386 : PLAIN and LOGIN support for Cyrus SASL.
gnu-crypto-sasl-jdk1.4.i386 : Gnu Crypto SASL API
cyrus-sasl-lib.i386 : Shared libraries needed by applications which use Cyrus SASL.

結構ありますね。SASLでは認証メカニズムにPLAIN, LOGIN, OTP, DIGEST-MD5, KERBEROS, ANONYMOUSなんかが選べるみたいなんですが、今回使うつもりのmd5はパッケージが入ってないみたいなんで前もってインストール。他にも必要なライブラリがありそう。

# yum -y install cyrus-sasl-md5

ものを入れたら後はPostfixの設定です。

saslの設定

saslの設定をしてSMTP-AUTHを使えるようにします。

# vi /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes  # saslを有効に
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination

smtpd_recipient_restrictionsは宛先(RCPT TO)に指定される値を見て受信(転送)を許可するかどうかの制限をかけるための項目みたいです。上記だと自ネットワーク(自ドメイン宛て)及び認証に成功した場合は許可する設定でしょうか。結構調べましたが正確にどのような制限をかけるものなのかいまいちわからないです...。permit削ると確かに送信できなくなったりはするんですけどね。
この他にもsaslまわりの項目は結構あるみたいなので色々試し中です。ほらみろ、かっちかちやぞ!と言えるくらいにしたい。ある程度まとまったらまた書こうと思います。とりあえずは動く様に。

saslauthd起動

SASLはデーモンとして上げることで利用できるみたいなので上げる。

# /etc/init.d/sasulsuthd start
# chkconfig saslauthd on

確認

postfixをreloadして設定を確認。確認はtelnetでとりあえず叩いてみてデーモンからのお返事で確認。

# /etc/init.d/postfix reload
$ telnet localhost 25
EHLO localhost
250-AUTH LOGIN DIGEST-MD5 CRAM-MD5 PLAIN

だいぶ省略しましたが前に送信テストした時と違って、250-AUTH LOGIN DIGEST-MD5 CRAM-MD5 PLAINが返ってくるようになりました。これでいけてるかな?とりあえず続けてsubmissionポートの設定もします。

Submissionポート

# vi /etc/postfix/master.cf

submission inet n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

こんな感じ。ここも認証をしないと送信できないようにする制限をかけてます。postfixを再度リロードして設定を反映させます。

# /etc/init.d/postfix reload

続けてnetstatで確認

# netstat -na | grep 587
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN  

Listenしてるぽい。ということでthunderbirdをインストールしてアレしてアレしたら送信できました。OP25Bなんて怖くないんだからね!
次はDovecotを入れてメール取れる様にしますかね。その前にDNS設定して送信時にSPFできちんとok返せるようにしますか。