SMTPリレーサーバー導入:メールサーバー 554 FCrDNS check failed 対策 (3)

Internet

 前回は、認証サーバー側でデータベース参照用アカウント、リレー送信用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設定については詳細な解説をしています。

SMTPリレーサーバー導入:メールサーバー 554 FCrDNS check failed 対策 (2)
前回の記事では、mail.exiv.netから外部へ直接メール送信した場合に、送信先メールサーバー側のFCrDNSチェックで拒否される事象と、その対策としてConoHa VPS上にSMTPリレーサーバーを構築する方針を整理しました。 前提と…
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.conf

PAM認証を使わず、SQL認証を有効にします。

#!include auth-system.conf.ext
!include auth-sql.conf.ext

SQL認証設定ファイルを確認します。

root@relay:~# vi /etc/dovecot/conf.d/auth-sql.conf.ext

passdbで、先ほど作成した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.conf

service 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/auth

Postfixから参照するための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       -       -       smtpd

submissionのコメントアウトを外し有効化します。以下の設定に変更します。

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

master.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コマンドで送信認証とメール受け付けまで確認しました。
次回は、送信元サーバー側で、リレーサーバー経由のメール送信設定を行います。

(つづく)

SMTPリレーサーバー導入:メールサーバー 554 FCrDNS check failed 対策 (4)
前回は、リレーサーバー側でDovecot SASLとPostfix submissionを設定し、送信元サーバーからの送信認証を受け付ける構成を準備しました。 今回は、送信元サーバー側のPostfixを設定し、リレーサーバー経由でメールを送…

コメント

タイトルとURLをコピーしました