SMTP 認証を特定のユーザアカウントに限定する
最近は LDAP や RDBMS でアカウント管理をするのが一般的なのであまり役に立たないと思いますが、Unix アカウントで管理している場合に SMTP 認証を特定のユーザアカウントのみ許可するための設定です。それ以外のアカウントは受信専用になります。
なお実際に設定を行った環境は
です。
mech_list に plain、login を指定
/usr/lib/sasl2/smtpd.conf の内容を確認します。
[root@foo sasl2]# pwd /usr/lib/sasl2 [root@foo sasl2]# cat smtpd.conf pwcheck_method: saslauthd mech_list: plain login
ここで『mech_list: plain login』が無いと、以下のようなエラーが出ます。
Sep 1 21:36:26 foo postfix/smtpd[19906]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory Sep 1 21:36:26 foo postfix/smtpd[19906]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
エラーが出た場合は mech_list 行を記述した後、postfix および saslauthd それぞれを再起動します。
pam/smtpd(smtpd.postfix) に追記
/etc/pam/smtpd を変更し、認証を許可するユーザを列挙した外部ファイルを参照するようにします。ApacheのPAM認証連携(Red Hat Linux) を参考にして auth required pam_listfile.so item=user sense=allow file=/etc/pwauth.allow-user onerr=succeed という行を 2行目に挿入します。
[root@foo pam.d]# pwd /etc/pam.d [root@foo pam.d]# cat smtp #%PAM-1.0 auth required pam_listfile.so item=user sense=allow file=/etc/pwauth.allow-user onerr=succeed auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth
pwauth.allow-user を作成
SMTP 認証を許可するユーザアカウントを /etc/pwauth.allow-user に一行一アカウントで列挙します。
[root@foo etc]# cd /etc [root@foo etc]# pwd /etc [root@foo etc]# cat pwauth.allow-user foo bar baz ...
メールを送ってみる(検証)
設定が終わったらメールを送ってみます。pwauth.allow-user に記載されていないアカウント(例:hogehoge)で SMTP 認証を試みるとメールソフトにはエラーが表示され、サーバの maillog には以下のように認証エラーが記録されます。
Sep 1 21:54:02 foo saslauthd[20500]: PAM-listfile: Refused user hogehoge for service smtp Sep 1 21:54:05 foo saslauthd[20500]: do_auth : auth failure: [user=hogehoge] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]
これで望みどおりの設定ができました :)。
*1:どのパッケージだろ? 標準パッケージですけど...