前回は、認証サーバー側でデータベース参照用アカウント、リレー送信用SMTPアカウント、ファイアウォール設定を準備しました。
SMTPリレーサーバー側では、PostfixがSMTP AUTHを受け付け、認証判定にはDovecot SASLを利用します。PostfixはSMTP接続と送信認証の受付を担当し、ユーザー名とパスワードの照合はDovecot側で行います。
リレーサーバーのセットアップ
今回は、リレーサーバー側のDovecotから、認証サーバー上のPostfixAdmin/MariaDBを参照できるように設定します。既存のPostfixAdmin環境ではBLF-CRYPT形式のパスワードハッシュを使用しているため、Dovecot側でも同じ方式を指定します。
PostfixとDovecotのインストール
PostfixとDovecotをインストールします。MariaDBを認証情報の参照先として利用するため、Dovecot本体に加えてMySQL/MariaDB連携用のパッケージもインストールします。
root@relay:~# apt install -y postfix dovecot-core dovecot-mysql
root@relay:~# systemctl status dovecot --no-pager
● dovecot.service - Dovecot IMAP/POP3 email server
Active: active (running)
Status: "v2.3.19.1 (9b53102964) running"リレーサーバーへの接続制限を確認
意図しない第三者中継を防ぐため、リレーサーバー側では送信元サーバーから587番ポートへの接続のみを許可しています。firewalldの設定でも、送信元サーバーのIPアドレスを指定、接続元を制限しました。
root@relay:~# firewall-cmd --state
running
root@relay:~# firewall-cmd --get-active-zones
public
interfaces: eth0
root@relay:~# firewall-cmd --permanent --zone=public --list-rich-rules
rule family="ipv4" source address="[送信元サーバーIPアドレス]/32" port port="587" protocol="tcp" accept
rule family="ipv4" source address="[管理用IP]/32" service name="ssh" accept下記の記事にて、firewalld設定については詳細な解説をしています。

Dovecotから認証サーバーを参照する設定
Dovecotが認証サーバー上のPostfixAdmin/MariaDBを参照できるように設定します。
ここでは、前回作成したデータベース参照用アカウントを使用します。
dovecot-sql.conf.extファイルには、Dovecotが認証サーバー上のPostfixAdmin/MariaDBを参照するための接続情報と、SMTP認証用アカウントを検索するSQLを追記します。
root@relay:~# vi /etc/dovecot/dovecot-sql.conf.extファイルの末尾に下記を追加します。
driver = mysql
# 認証サーバー上のMariaDBへ接続するための情報を指定します。
connect = host=[認証サーバIPアドレス] dbname=postfix user=dovecot_relay password=[パスワード]
# PostfixAdminで利用しているパスワードハッシュ方式と同じ方式を設定します。
default_pass_scheme = BLF-CRYPT
password_query = \
SELECT username AS user, password \
FROM mailbox \
WHERE username = '%u' AND active = '1'
■ 接続情報の詳細
| 項目 | 設定内容 |
|---|---|
host= |
認証サーバーのホスト名またはIPアドレス |
dbname= |
PostfixAdminのデータベース名 |
user= |
前回作成したデータベース参照用アカウント名 |
password= |
データベース参照用アカウントのパスワード |
Dovecotの認証設定を変更し、SQL認証を有効化します。
今回、DovecotはPostfixのSMTP AUTHで使用するユーザー名とパスワードの照合に利用します。
まず、10-auth.confを変更し、先ほど作成したdovecot-sql.conf.extを読み込むようにします。
root@relay:~# vi /etc/dovecot/conf.d/10-auth.confPAM認証を使わず、SQL認証を有効にします。
#!include auth-system.conf.ext
!include auth-sql.conf.extSQL認証設定ファイルを確認します。
root@relay:~# vi /etc/dovecot/conf.d/auth-sql.conf.extpassdbで、先ほど作成したSQL設定ファイルを参照します。
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}DovecotのSQL認証設定を変更したら、設定内容に問題がないか確認します。
root@relay:~# doveconf -n
# 2.3.19.1 (9b53102964): /etc/dovecot/dovecot.conf
:(省略)
:設定内容が表示されれば、Dovecotの設定ファイルを読み込めています。
サービスを再起動して状態を確認します。
root@relay:~# systemctl restart dovecot
root@relay:~# systemctl status dovecot --no-pager
● dovecot.service - Dovecot IMAP/POP3 email server
Active: active (running)
Status: "v2.3.19.1 (9b53102964) running"Dovecotが起動していることを確認できました。この時点では、SQL認証によるパスワード照合までは確認できていないため、次の手順で認証テストを行います。
Dovecot 認証サーバー連携の動作確認
Dovecotの設定を読み込めることを確認したら、認証サーバー連携の動作確認を行います。
この確認では、前回PostfixAdminで作成したリレー送信用SMTPアカウントを使用します。
root@relay:~# doveadm auth test [リレー送信用SMTPアカウント]
Password:
passdb: [リレー送信用SMTPアカウント] auth succeeded
extra fields:
user=[リレー送信用SMTPアカウント]認証に成功すると、auth succeededが表示されます。
この結果から、Dovecotが認証サーバー上のPostfixAdmin/MariaDBを参照し、リレー送信用SMTPアカウントのパスワードを照合できていることを確認できます。
Dovecot SASL : Postfix連携準備
Dovecot単体で認証できることを確認したら、PostfixがDovecot SASLを利用できるように準備します。
PostfixはDovecotの認証ソケットへ問い合わせることで、SMTP AUTHの認証判定を行います。
root@relay:~# vi /etc/dovecot/conf.d/10-master.confservice authに、Postfix用のUnixソケット設定を追加します。
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}/var/spool/postfix/private/authは、PostfixからDovecotへ認証問い合わせを行うためのUnixソケットです。
Postfix側では、このソケットを利用してDovecot SASLによるSMTP AUTHを行います。
設定後、Dovecotを再起動します。
root@relay:~# systemctl restart dovecot
root@relay:~# ls -l /var/spool/postfix/private/auth
srw-rw---- 1 postfix postfix 0 May 5 12:00 /var/spool/postfix/private/authPostfixから参照するためのDovecot認証ソケットが作成されていることが確認できます。
Postfix :Dovecot SASL利用設定
PostfixからDovecot SASLを利用するため、Postfix側のSASL設定を追加します。
smtpd_sasl_typeにdovecotを指定し、smtpd_sasl_pathにはDovecot側で作成した認証ソケットのパスを指定します。これにより、PostfixはDovecotの認証ソケットへ問い合わせ、SMTP AUTHの認証判定を行います。
root@relay:~# postconf -e 'smtpd_sasl_type = dovecot'
root@relay:~# postconf -e 'smtpd_sasl_path = private/auth'
root@relay:~# postconf -e 'smtpd_sasl_auth_enable = yes'変更したSASL設定が反映されていることを確認します。
root@relay:~# postconf -n | grep smtpd_sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecotリレーサーバーへの接続制限を設定する
リレーサーバーでは、意図しない第三者中継を防ぐため、予め定めた送信元サーバーからの接続だけを受け付けるように制限します。
今回の環境では、送信元サーバーをIPv4アドレスで指定して制限します。そのため、PostfixもIPv4のみを使用する設定にします。
また、mynetworksにはローカルホストと送信元サーバーのIPアドレスのみを指定します。あわせて、Postfix全体のリレー制御として、mynetworksまたはSMTP AUTH済みの接続のみを許可し、それ以外の第三者中継を拒否する設定にします。
root@relay:~# postconf -e 'inet_protocols = ipv4'
root@relay:~# postconf -e 'mynetworks = 127.0.0.0/8, [送信元サーバーIPアドレス]/32'
root@relay:~# postconf -e \
'smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination'確認します。
root@relay:~# postconf inet_protocols mynetworks smtpd_relay_restrictions
inet_protocols = ipv4
mynetworks = 127.0.0.0/8, [送信元サーバーIPアドレス]/32
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destinationここまででPostfix全体のリレー制御を設定しました。次に、587番ポートで待ち受けるsubmissionサービス固有の設定を行います。
Postfixでsubmissionを有効化する
送信元サーバーからリレーサーバーへ送信認証付きで接続できるように、Postfixのsubmissionを有効化します。submissionは587番ポートで待ち受ける送信受付用のサービスです。今回の構成では、この587番ポートでSMTP AUTHを受け付け、認証済みの送信だけを中継します。
root@relay:~# vi /etc/postfix/master.cf該当箇所を探します。
#submission inet n - y - - smtpdsubmissionのコメントアウトを外し有効化します。以下の設定に変更します。
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=permit_mynetworks,rejectmaster.cfを編集したら、submissionサービスの設定内容を確認します。
root@relay:~# postconf -M submission/inet
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=permit_mynetworks,reject設定内容を確認したら、Postfixの設定確認を行い、設定を反映します。
root@relay:~# postfix check
root@relay:~# systemctl reload postfix最後に、587番ポートで待ち受けていることを確認します。
root@relay:~# ss -ltnp | grep ':587'
LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=33018,fd=17))submissionではTLSを必須にするため、リレーサーバー側のPostfixにもサーバー証明書が必要です。
現時点では、Debian標準の自己署名証明書であるsnakeoil証明書を使って動作確認しています。
最終的な運用では、relay.exiv.net用の正式なサーバー証明書へ差し替えます。
送信認証の動作確認
リレーサーバー側の設定が完了したら、送信元サーバーからリレーサーバーの587番ポートへ接続、送信認証が正常に動作することを確認します。この確認は、送信元サーバー側のコンソールからSMTPの動作確認ツールであるswaksを利用して行います。
送信テスト前のSPF設定
外部宛に送信テストを行う前に、送信元ドメインのSPF設定を確認します。
今回の構成では、外部宛メールはリレーサーバーから送信先MTAへ配送されます。そのため、送信先MTAによるFCrDNSチェックやSPFチェックでは、リレーサーバーが評価対象になります。
あらかじめ送信元ドメインのSPFレコードに、リレーサーバーのIPアドレスを追加しておきます。

swaksのインストール
送信元サーバーでswaksをインストールします。
AlmaLinux/RHEL系では、環境によってEPELが必要です。
[root@exiv ~]# dnf config-manager --set-enabled crb
[root@exiv ~]# dnf install -y epel-release
[root@exiv ~]# dnf install -y swaks送信元サーバーから送信認証を確認する
swaksでリレーサーバーの587番ポートへ接続し、STARTTLS、送信認証、メール受付まで確認します。
[root@exiv ~]# swaks \
--to [テスト送信先メールアドレス] \
--from [送信元メールアドレス] \
--server relay.exiv.net \
--port 587 \
--tls \
--auth PLAIN \
--auth-user [リレー送信用SMTPアカウント] \
--auth-password '[パスワード]'実行結果
=== Connected to relay.exiv.net.
<- 250-STARTTLS
-> STARTTLS
<- 220 2.0.0 Ready to start TLS
=== TLS started with cipher TLSv1.3:TLS_AES_256_GCM_SHA384:256
<~ 250-AUTH PLAIN
~> AUTH PLAIN <masked>
<~ 235 2.7.0 Authentication successful // 送信認証成功
~> MAIL FROM:<[送信元メールアドレス]>
<~ 250 2.1.0 Ok
~> RCPT TO:<[テスト送信先メールアドレス]>
<~ 250 2.1.5 Ok
<~ 250 2.0.0 Ok: queued as [キューID] // リレーサーバー受付完了実行結果に「235 2.7.0 Authentication successful」が表示されれば、送信認証に成功しています。
最後に「250 2.0.0 Ok: queued as …」が表示されれば、リレーサーバーのPostfixがメールをキューに受け付けています。
今回はここまで
今回は、リレーサーバー側で送信認証付きのSMTPリレーを受け付けるための設定を行い、swaksコマンドで送信認証とメール受け付けまで確認しました。
次回は、送信元サーバー側で、リレーサーバー経由のメール送信設定を行います。
(つづく)



コメント