Postfix SMTP AUTHの設定
saslインストール
postfixがsasl対応していない場合、sasl対応したpostfixを再インストールする。
最近ははじめからPostfixにsasl対応されたものが配布されているので省略。
SMTP認証ユーザ設定
# saslpasswd -c -u `postconf -h myhostname` ユーザ名 Password:************* Again (for verification):*************
送信サーバの認証に必要なアカウント全てに行う。
ここで設定したユーザ名、パスワードが、
メーラーの送信サーバの認証アカウントで使えるようになる。
送信認証登録したユーザの確認
# sasldblistusers user: user1 realm: ***** mech: PLAIN user: user1 realm: ***** mech: DIGEST-MD5 user: user1 realm: ***** mech: CRAM-MD5
sasldbのアクセス権をpostfixにも与える
# chgrp postfix /etc/sasldb # chmod 640 /etc/sasldb
/etc/postfix/main.cfを編集
# SMTP AUTHの利用を設定 smtpd_sasl_auth_enable = yes # SASL で認証する local domain(これがsasldblistusersコマンドのrealmと一致しないと認証NG) smtpd_sasl_local_domain = $myhostname # リレーを許可するものを設定する。 # 「permit_sasl_authenticated」SMTP-AUTHを通過したものを許可。必ず加える。 # 「permit_mynetworks」は「mynetworks」で設定されたネットワークからの接続を許可する。 # 「reject」はそれ以外は拒否 #smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,check_relay_domains,reject smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination #smtpd_sasl_security_options = noanonymous,noplaintext smtpd_sasl_security_options = noanonymous # AUTHコマンドを認識できないメールソフトに対応させる broken_sasl_auth_clients = yes # メールサイズの上限を設定(50MB) message_size_limit = 50000000
Postfix再起動
# /usr/sbin/postfix reload
SaslAuthd起動、自動起動設定
service saslauthd start chkconfig saslauthd on
以上で設定完了。
メーラでSMTP認証設定をしないと送信できなくなる。
TELNETで実際に確認
EHLOコマンドのあとに、
「250-AUTH=DIGEST-MD5 NTLM PLAIN LOGIN GSSAPI CRAM-MD5」
の行が表示されれば、MTAがSMTP認証を行うようになっていることを示している。
[xxx@xxx ~]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. 220 ****.net ESMTP Postfix ehlo ****.net 250-****.net 250-PIPELINING 250-SIZE 50000000 250-VRFY 250-ETRN 250-AUTH DIGEST-MD5 NTLM PLAIN LOGIN GSSAPI CRAM-MD5 250-AUTH=DIGEST-MD5 NTLM PLAIN LOGIN GSSAPI CRAM-MD5 250 8BITMIME AUTH PLAIN dXNlcjEAdXNlcjEAbXlwYXNzd29yZA== 235 Authentication successful
「AUTH PLAIN 認証番号」コマンドにより認証をうけられる。
認証番号は、PLAINの場合は
「ユーザ名\0ユーザ名\0パスワード」をBASE64エンコードしたものを指定する。
$ echo '<? echo base64_encode("user1\0user1\0mypassword");' | php -q dXNlcjEAdXNlcjEAbXlwYXNzd29yZA==