debian postfix + dovecot + sasl(PAM)
postfix + dovecot をインストールしている前提。
http://d.hatena.ne.jp/kt_hiro/20120317/1331972844
PAM(Pluggable Authentication Modules)を使って、OSユーザでSMTP認証を行う方法。
OSユーザとは別で認証を行う方法もある。
sasl
・インストール
# apt-get install sasl2-bin libsasl2-modules libsasl2-2 libsasl2-dev
・postfixとの連携設定
# adduser postfix sasl
※postfixグループに sasl ユーザを追加
・設定変更
# vi /etc/default/saslauthd START=yes MECHANISMS="pam" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" の設定は postfix が chroot環境で動いている場合に必要。
/etc/postfix/master.cf のsmtp行のchrootの位置が - であれば chroot環境で動作している。
# vi /etc/postfix/master.cf ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) ========================================================================== smtp inet n - - - - smtpd
chroot環境で動いている場合はOPTIONSパラメータで指定したディレクトリを作成する。
# mkdir -p /var/spool/postfix/var/run/saslauthd
・起動
# /etc/init.d/saslauthd restart
・動作確認
# testsaslauthd -u "username" -p "password"
postfix
・設定追加
# vi /etc/postfix/main.cf smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_security_options = noanonymous
・認証方法の設定
# vi /etc/postfix/sasl/smtpd.conf pwcheck_method: saslauthd mech_list: plain login
・sasl認証を有効にする
※main.cf で有効にしていれば不要かも
# vim /etc/postfix/master.cf -o smtpd_sasl_auth_enable=yes
・動作確認
# telnet 192.168.0.108 25 Trying 192.168.0.108... Connected to 192.168.0.108. Escape character is '^]'. 220 mail.hirohiro.net ESMTP Postfix (@@DISTRO@@) EHLO localhost 250-mail.hirohiro.net 250-PIPELINING 250-SIZE 10485760 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 334 VXNlcm5hbWU6 aGlybw== 334 UGFzc3dvcmQ6 bnlhbmtv 235 2.7.0 Authentication successful
※ユーザ名とパスワードはBASE64でエンコードしたものを入力する必要がある
下記で取得可能
# perl -MMIME::Base64 -e 'print encode_base64("username");`' # perl -MMIME::Base64 -e 'print encode_base64("password");'
※応答もBASE64でエンコードされている
334 VXNlcm5hbWU6 → 334 Username:
334 UGFzc3dvcmQ6 → 334 Password: