前回の記事では、mail.exiv.netから外部へ直接メール送信した場合に、送信先メールサーバー側のFCrDNSチェックで拒否される事象と、その対策としてConoHa VPS上にSMTPリレーサーバーを構築する方針を整理しました。
前提として認証サーバーおよび送信元サーバーは構築済みです。今回は、現在運用中のmail.exiv.netを利用します。PostfixAdminの構築については、linuxbabe.comの以下の記事を参考にしました。

認証サーバーの準備
今回構築するリレーサーバーは、送信専用SMTPリレーとして利用します。リレーサーバーではSMTP認証を必須にしますが、認証情報そのものはリレーサーバー上に個別管理しません。
リレーサーバー上のDovecotが、既存の認証サーバーで稼働しているPostfixAdmin/MariaDBを参照してSMTP認証を判定する構成とします。連携に必要な準備として、最初に認証サーバー側で以下の設定を行います。
- リレーサーバーから認証サーバーのデータベースへ接続するためのデータベース参照用アカウント
- リレーサーバー上のDovecotが認証サーバーのMariaDBを参照するために使用 - SMTP認証で利用するリレー送信用SMTPアカウント
- 送信元サーバーからリレーサーバーへメールを中継するときの送信認証(SMTP AUTH)に使用 - 認証サーバー側ファイアウォール設定
- リレーサーバーから認証サーバーのデータベースへ問い合わせるために必要な通信のみ許可
「データベース参照用アカウント」と「SMTP認証用アカウント」は、役割も設定箇所も異なるため、設定時には注意が必要です。
データベース参照用アカウントを作成する
ここからは、認証サーバーのコンソールで設定を行います。
MariaDBに、リレーサーバーから参照するためのDBアカウントを作成します。
このアカウントは、リレーサーバー上のDovecotが、認証サーバー上のPostfixAdmin/MariaDBを参照するために使用します。
認証サーバー側で、MariaDBにログインします。
[root@exiv dovecot]# mysql -u root -p
Enter password:(パスワード入力)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 791
Server version: 10.5.29-MariaDB MariaDB Serverデータベースを確認します。
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| postfix |
+--------------------+
6 rows in set (0.001 sec)
今回の環境では、PostfixAdmin用のデータベース名はpostfixです。続いて、テーブル一覧を確認します。
MariaDB [(none)]> use postfix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [postfix]> show tables;
+-----------------------+
| Tables_in_postfix |
+-----------------------+
| admin |
| alias |
| alias_domain |
| ; |
| mailbox |
| ;
+-----------------------+
1x rows in set (0.007 sec)
MariaDB [postfix]>SMTP認証に使用するアカウント情報は、postfixデータベースのmailboxテーブルに格納されています。
リレーサーバー上のDovecotは、このmailboxテーブルを参照してSMTP認証を判定します。
DovecotからMariaDBへ接続するため、データベース参照用アカウントを作成し、mailboxテーブルの参照権限を付与します。
MariaDB [postfix]> create user 'dovecot_relay'@'[リレーサーバーのIPアドレス]'
identified by '任意のパスワード';
Query OK, 0 rows affected (0.037 sec)
MariaDB [postfix]> grant select on postfix.mailbox to 'dovecot_relay'@'[リレーサーバーのIPアドレス]';
作成したデータベース参照用アカウントの権限設定を確認します。
MariaDB [postfix]> show grants for 'dovecot_relay'@'[リレーサーバーのIPアドレス]';
+-----------------------------------------------------------------------------------------------------+
| Grants for dovecot_relay@[リレーサーバーのIPアドレス]
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `dovecot_relay`@`[リレーサーバーのIPアドレス]` IDENTIFIED BY PASSWORD '<masked>'
| GRANT SELECT ON `postfix`.`mailbox` TO `dovecot_relay`@`[リレーサーバーのIPアドレス]`
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)アカウント作成後の接続確認は、後ほどリレーサーバー側から行います。
リレー送信用SMTPアカウントを作成する
PostfixAdminで、リレー送信用SMTPアカウントを作成します。今回は、SMTPリレー管理用のサブドメインにメールアカウントを作成しました。このアカウントは、送信元サーバーからリレーサーバーへメールを中継するときの送信認証(SMTP AUTH)に使用します。

認証サーバー側ファイアウォール設定
リレーサーバーから認証サーバー上のデータベース(MariaDB)を参照できるように、認証サーバー側のファイアウォール設定を変更します。
まず、現在のfirewalldの状態を確認します。
[root@exiv ~]# firewall-cmd --state
running
[root@exiv ~]# firewall-cmd --get-default-zone
public
[root@exiv ~]# firewall-cmd --get-active-zones
drop
sources: ipset:cn.zone.ipv6 ipset:cn.zone.ipv4
public
interfaces: eth0外部向けインターフェースeth0は、publicゾーンに割り当てられています。
リレーサーバーから認証サーバーのデータベース(MariaDB)へ接続するためのアクセス許可ルール(TCP:3306を許可)は、publicゾーンに追加します。
[root@exiv ~]# firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family="ipv4" source address="[リレーサーバーのIPアドレス]/32" \
port port="3306" protocol="tcp" accept'
[root@exiv ~]# firewall-cmd --reload
[root@exiv ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="[リレーサーバーのIP]/32" port port="3306" protocol="tcp" accept
rule family="ipv4" source address="[管理用IP]/32" port port="9090" protocol="tcp" accept
rule family="ipv4" source address="[管理用IP]/32" port port="22" protocol="tcp" acceptクラウド側ファイアウォール設定(WebARENA Indigo)
クラウド側ファイアウォールにおいても同様の設定追加が必要です。リレーサーバーのIPアドレスから3306/tcpへの接続のみ許可するインバウンドルールを追加します。

同様にリレーサーバーからのみ3306/tcpを許可する構成になりました。
リレーサーバーから認証サーバーへの疎通を確認する
この確認は、リレーサーバーのコンソールから行います。
リレーサーバーから、認証サーバー上のデータベース(MariaDB)へ接続できることを確認します。
認証サーバーのMariaDBへ接続するため、リレーサーバー側にMariaDBクライアントをインストールします。
root@relay:~# apt update
root@relay:~# apt install -y mariadb-client認証サーバーのホスト名を名前解決できることを確認します。
(IPアドレスは公開情報ですが、自動収集等を防ぐため、伏字としています)
root@relay:~# getent hosts mail.exiv.net
xxx.xxx.xxx.xxx mail.exiv.net作成したデータベース参照用アカウントで、認証サーバーのデータベース(MariaDB)へ接続します。
root@relay:~# mysql -h mail.exiv.net -u dovecot_relay -p postfix
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1494
Server version: 10.5.29-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [postfix]>
MariaDBのプロンプトが表示されれば、リレーサーバーから認証サーバー上のMariaDBへ接続できています。
mailboxテーブルを参照できることを確認します。
MariaDB [postfix]> SELECT username, active FROM mailbox LIMIT 1;
+-----------------+--------+
| username | active |
+-----------------+--------+
| [email protected] | 1 |
+-----------------+--------+
1 row in set (0.018 sec)1件のレコードが表示され、データベース参照用アカウントでmailboxテーブルを参照できることを確認できました。
認証サーバー側の準備完了
リレーサーバーから認証サーバー上のPostfixAdmin/MariaDBを参照するための準備が整いました。
次回は、リレーサーバー側の設定について投稿予定です。
(つづく)



コメント