Postfix + CyrusSASL で Submissionポート + SMTP-AUTHを使えるようにする

レンタルサーバ上にPostfixによる電子メールサーバを構築し,自宅からInternetへ電子メールを送信できるようにしたい.ただし,自宅ネットワークはISPによるOP25Bが設定されているので Submission ポートによるサーバ接続ができるようにすれば良い.

とすると,利用者認証(SMTP-AUTH) + Transport Layer Security(TLS)が必要になるな.と言うことでセットアップに挑戦した…

設定環境:

  • Debian Linux 11.1 (Bullseye)
  • Postfix +
  • CyrusSASL ( sasl2-bin, libsasl2-modules )
    (IMAP server (Dovecot)はinstallしていない)

電子メールサーバで利用者認証を行う設定の多くは IMAP server(Dovecot)をインストールし,Dovecotで提供されている利用者認証の仕組みをPostfixでも使わせてもらう,という設定が多い.ま,多分電子メールサーバを構築するなら,IMAP serverもインストールするからであろう.実際,Postfixで利用可能なSASLのプラグインを以下のコマンドで確認すると.見ての通りcyrus と dovecotがSMTP-AUTHの仕組みとして利用できるようになっている.

1
2
3
$ /usr/sbin/postconf -a
cyrus
dovecot

だが,メール送信のためにメール受信の仕組みを利用するという考え方がどうも好きになれなかったので,今回はDovecotなしでもSMTP-AUTHの運用できるCyrus SASLを利用して submission ポートによる SMTP-AUTH (+ TLS)を構築することにした.
(ただし,ここではTLS設定の話はしない)

で,その設定方法を解説するのだが,内容は基本的に参考Webページ[1]の “Using auxprop with sasldb” section そのものである.

1) 必要となるソフトウェアをインストール

以下のパッケージをインストールする.

  • sasl2-bin
  • libsasl2-modules

2) saslの設定ファイルを作成

“/etc/postfix/sasl” ディレクトリに “smtpd.conf” というファイルを作成する
(空のdirectoryで,template fileも何もなかった)

1
2
3
4
$ cat /etc/postfix/sasl/smtpd.conf 
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: digest-md5 cram-md5

認証方法を mech_list で指定する.サーバ-クライアント間通信をTLSで行うならば “plain login” でも問題はないのだろうが,気持ちとしてmore Betterをと思い,MD5による検証方法を選択した.
(ここで “login plain” による認証方法を用いなかったので,Postfixの “smtpd_sasl_security_options” に “noplaintext” を追加しPostfixとしてもlogin plainによる利用者認証を禁止した (下記参照))

3) ユーザ/パスワード情報のデータベースを作成

CyrusSASL で提供される以下のコマンドを利用してユーザデータベースを作成する

1
# /usr/sbin/saslpasswd2 -c -u (domain_name) (username)

=> /etc/sasldb2 というファイルが作成される.

そうしたら作成したデータベースの内容を以下のコマンドで確認する.

1
2
# /usr/sbin/sasldblistusers2 
(username)@(domain_name): userPassword

ここで指定する(domain_name)は,下記のPostfixの設定(master.cf)における “smtpd_sasl_local_domain” の値と同じ値にしておくべき,と理解した
(なんでだったかは忘れた,違う値でも運用できるか?は検証していない).

4) chroot環境のための設定 (?)

何やらPostfix + SASLはchroot環境で動作するようで,上記で作成した利用者認証のためのユーザデータベースをその環境にコピーする必要がある.そのための設定ファイルが “/usr/lib/postfix/configure-instance.sh” というファイルである.このファイル内の FILE という変数がコピーするファイルをリストしているので,そこに “etc/sasldb2” の記述を追加する.

1
2
FILES="etc/localtime etc/services etc/resolv.conf etc/hosts \
etc/host.conf etc/nsswitch.conf etc/nss_mdns.config etc/sasldb2"

なおこのファイルコピーは,サーバ計算機を再起動しないと実行されないようにdefaultではなっている.なのでデータベースファイルを変更したらその度に再起動をする必要がある.
(いや,まぁ,結論から言えばこのshellファイルを実行すれば良いだけ.だけれどさ,このファイルを修正し,Postfixを再起動すればその設定が有効になる,と思い込んでいたわけよ.だが実際にはその思いこみ通りにはなってなかった.このファイルの設定を修正することと,ユーザデータベースのコピーが計算機の再起動時にしか行われないことに気づくまで,かなりの時間を溶かしたよ….まったく)

5) Postfixの設定

/etc/postfix/master.cf の設定を変更し,submission ポートでの待ち受けを有効化する.また,SASLによる SMTP-AUTH と TLS通信も有効化する.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...(途中略)...
#tlsproxy unix - - y - 0 tlsproxy
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_tls_auth_only=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - y - - smtpd
# -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
...(途中略)...

6) Postfixの再起動

postfixサーバを再起動し,設定を有効化する

1
# systemctl restart postfix 

というか,運用上の支障がないのであれば,4)の対応もかねてサーバ計算機自体を再起動してもよいかも.

参考Webページ
[1] PostfixAndSASL
https://wiki.debian.org/PostfixAndSASL

Maybe update in near future.
— ends here

Postfix + CyrusSASL で Submissionポート + SMTP-AUTHを使えるようにする

http://the.netaro.info/2021/11/28/2021-1128_postfix-cyrus-smtpauth/

Author

T.T

Posted on

2021-11-28

Updated on

2021-12-01

Licensed under