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返せるようにしますか。