2024-11-04

PostfixにSMTP Authの設定を追加

はじめに

SMTP認証を行う方法は色々ある。
  • Dovecot の SASL を使用 (たぶん、 PAM を使う。)
  • Cyrus SASL を使用し、 PAM の認証情報を使う。
  • Cyrus SASL を使用し、 Cyrus SASL 用のパスワードデータベースを用意する。
今回は、最後の方法を使用する。 総当たり攻撃を受けてもしパスワードが発覚したとしても、ユーザー名やパスワードを別のものにしておけば、他のサービスへの被害を抑えられるメリットがあるだろうという考え。

環境

OS: AlmaLinux release 9 (Rocky Linux release 8 での設定も付記する)

インストールとセットアップ

Cyrus SASLのライブラリをインストールする。 (`cyrus-sasl` は不要)
sudo dnf install cyrus-sasl-{lib,md5,plain}
予め、 Letsencrypt の証明書を取得しておき、 /etc/postfix/main.cf に以下を設定する。
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_sasl_local_domain=$mydomain
smtpd_sasl_security_options=noanonymous
/etc/postfix/master.cf に以下を設定する。
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
/etc/sasl2/smtpd.conf に以下を設定する。 (mech_list の設定は削除する。または、 cram-md5 digest-md5 plain login を設定する。)
pwcheck_method: auxprop
ユーザーを追加し、パスワードを設定する。 (ユーザー名は適宜置き換えること。ドメイン名は smtpd_sasl_local_domain と同じものにする。) なお、パスワードを変更するだけの場合、オプション -c を付けない。
sudo saslpasswd2 -c -u example.com user1
パスワードデータベースにグループ sasl を設定し、ユーザー postfix を所属させる。
sudo groupadd sasl
sudo groupmems -a postfix -g sasl
sudo chgrp sasl /etc/sasl2/sasldb2
sudo chmog g+r /etc/sasl2/sasldb2
Note: EL8 では、 /etc/sasldb2 にパスワードファイルが存在する。

設定をチェックし、問題なければ Postfix を再起動する。

sudo postfix check
sudo systemctl restart postfix
OpenSSL で確認する。 (接続時に Verify return code: 0 (ok) が表示され、 EHLO に対して 250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN が帰ってきたらOK。)
openssl s_client -connect localhost:smtps
EHLO localhost
ファイアウォールを設定する。
sudo firewall-cmd --add-service smtps
sudo firewall-cmd --permanent --add-service smtps