SMTP 認証を特定のユーザアカウントに限定する

 最近は LDAPRDBMS でアカウント管理をするのが一般的なのであまり役に立たないと思いますが、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:どのパッケージだろ? 標準パッケージですけど...