はじめに
MTA として Postfix を採用しているが、これが色々絡んでいる関係上、とても面倒で憂鬱な作業になると分かっていた。
やっと重い腰を上げて手を付けることが出来たのでメモ残し。
Postfix
移行元のバージョンは 2.10.1、移行先は 3.5.9 となる。メジャーバージョンからして違うので慎重に作業した。
先ずは必要パッケージを一気にドーン
% sudo dnf install postfix postfix-mysql opendkim openarc opendmarc pypolicyd-spf-milter.noarch amavis perl-Razor-Agent
これだけ仕込んだ Postfix なので面倒…… と。
尚、今回 SPF Engine はパッケージがあったんでソースからちまちまアレコレする必要がない。これは良い事。
ここで移行元でとっておいた設定ファイルのバックアップを /etc にコピーして配置した。
SPF Engine である pypolicyd-spf-milter に関しては移行元だとソースからインストールしていたので、設定ファイルは /usr/local/etc/python-policyd-spf
から /etc/python-policyd-spf
に変更となった。
いい感じに行けたかなと思ったが pyspf-milter が言うことを聞いてくれない。UNIX ドメインソケットで通信させる設定だったが、どうしても .sock へのパーミッションが無いという。
手動で変更してもデーモン再起動で元に戻るし、設定ファイルにある Umask オプションも言うことを聞かない為、TCP で通信するように動作を変更させた。
# Socket = local:/var/run/pyspf-milter/pyspf-milter.sock
Socket = inet:8892
PidFile = /var/run/pyspf-milter/pyspf-milter.pid
InternalHosts = 127.0.0.1
Hide_Receiver = Yes
MacroList daemon_name|VERIFYING
1 行目の Socket = local
の下りをコメントアウトし、inet:8892
と書けば 8892/TCP で通信出来るようになるので Socket がどうのというエラーは出なくなる。
合わせて P`ostfix の main.cf も記述を変更。今まで書いていた所は一応コメントアウトで残しておいた。
milter_default_action = accept
non_smtpd_milters = $smtpd_milters
# smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893, inet:127.0.0.1:8894, unix:/var/run/pyspf-milter/pyspf-milter.sock
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8892, inet:127.0.0.1:8893, inet:127.0.0.1:8894
他、Amavis という ClamAV や Spamassassin を通してくれるコンテンツフィルターは移行元から設定ファイルを上書きしてあげるだけでそのまま動作した。freshclam は忘れずに実行しておく。
Dovecot
Postfix からは認証系を利用するし MDA として POP やらさせるんでこれもまた必須。
これまた必要パッケージをドーンとインストール。
cyrus-sasl も入れておかないと “SASL authentication failed; cannot authenticate to server hoge.example.com: no mechanism available” とか言われたりするんで注意。
% sudo dnf install dovecot dovecot-mysql dovecot-devel cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel
これまた移行元から設定ファイルを上書きしたが、それだけでは不足なので次のコマンドを打ち込んで DH パラメータを作成し直す。
% sudo openssl dhparam -out /etc/dovecot/dh.pem 4096
これだけで OK。
動作テスト
ひたすら telnet コマンドを叩いた
% telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.bp7.org ESMTP Postfix
MAIL FROM:<送信元メールアドレス>
250 2.1.0 Ok
RCPT TO:<ローカルのアドレスとか GMAIL のアドレスとか>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
hoge hoge hage 2222
.
250 2.0.0 Ok: queued as 24BA340F8D79
quit
221 2.0.0 Bye
Connection closed by foreign host.
Dovecot に関しても telnet で 110 番叩いて POP のコマンド手打ちで動作確認をとった。
上手く動作しないところは都度調整を繰り返し何時間格闘していたかわすれたけど、最終的には無事 MTA として動作出来た。
Gmail に向けて telnet でメールを打ち込んだら想定通り dkim, arc, spf, dmarc が全て pass となった。
おわりに
AlmaLinux 9 への移行を行う上で一番重い部分が無事に動作テストを完了出来た。
意外にメジャーバージョンが違うにしても互換性はかなり保っているんだなと思った。
これで作業も大きく前進してくれると良いな。次は Web 周りだろうかな。
もう少し今回の作業内容を精査しても良いな。
コメント