独自ドメイン用メールサーバをqmail+postfixで構築

独自ドメインのメールサーバを自宅サーバで構築していたが、Mini-ITXサーバのCPUファンが突然回らなくなり引退し、とりあえず余っていた古いPentium MのNotePCで代替運用していたものの、また本体のファンが異音を発するようになったので、いよいよクラウド化を決心。以下忘れないうちに覚書として記載する。

学生の頃からqmailを使ってきて、これまでFreeBSD上のqmailで運用していたので、受信設定はそれを受け継ぎたい。送信側は、ISPのメールサーバを経由するために SMTP-AUTH 対応や TLS 対応が必要で、またVPSによってはOSが限定的だったりする。そのため、

  • メール受信部はqmail系を使って、拡張アドレスやバーチャルドメインの設定をそのまま引き継ぐ
  • 今回は色々パッチを当てて調整している時間が無いので、パッチを当てない、極力素のパッケージをインストールする方法にする
  • 送信側はSMTP-AUTH, TLS設定が楽になるように、postfixを活用する
  • 運用コスト低減のため、安価なVPSを選択する

という方針にした。

VPS選択

安価なVPSとして、WebARENA IndigoのLinux版を採用。スペックは最低限の1GB 1vCPU 20GBとし、OSとしてはubuntuを選択。

メールサーバ選択・設計

qmailは開発が止まっているらしく、FreeBSDのportsではコミュニティベースのnetqmailが使われていたが、こちらも最近止まっているらしい。2019年から新たなコミュニティベースのqmail後継プロジェクトnotqmailが動き出したらしいので、今回はこちらを使う事にする。
送信用postfixはパッケージ版を使う事にする。
port 25でqmailがlistenし、送信時はlocalhost:10025に全て送る。postfixはloopback interface : 10025 をlistenし、ISPのメールサーバのsubmission portにSMTP over TLSで送信する。

インストールのざっくり手順

OSインストール

Indigoの初期インストールにお任せ。以下覚書。indigoのコントロールパネルへのサインインはこちら。インスタンス操作画面はこちら
以降SSHログインして作業するために、SSH鍵を作成してダウンロードしておく。

Postfix設定

# sudo apt update
# sudo vi /etc/hostname
# sudo vi /etc/hosts
# sudo hostname `hostname`.mydomain.net
# sudo apt install postfix

ここで、postfixインストール時に選択できるところがある。ここではISPのメールサーバに転送する前提なので、satelite を選択。
次に、設定ファイルを変更。

master.cf の変更差分は以下の通り

--- master.cf.orig 2020-10-18 01:18:45.580978884 +0900
+++ master.cf 2020-10-18 01:19:04.717287501 +0900
@@ -9,7 +9,8 @@
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
-smtp inet n - y - - smtpd
+10025 inet n - y - - smtpd
#smtp inet n - y - 1 postscreen
#smtpd pass - - y - - smtpd
#dnsblog unix - - y - 0 dnsblog

main.cfの変更差分は以下の通り

--- main.cf.orig 2020-10-18 01:18:50.989070055 +0900
+++ main.cf 2020-10-18 01:20:01.114035997 +0900
@@ -43,3 +43,12 @@
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
+smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
+smtp_tls_security_level = may
+smtp_tls_loglevel = 1
+smtp_sasl_auth_enable = yes
+smtp_sasl_password_maps = hash:/etc/postfix/smtp-auth
+smtp_sasl_security_options = noanonymous
+smtp_sasl_mechanism_filter = cram-md5,plain,login
+smtp_destination_concurrency_limit = 1

本当はpostconfを使いたかったが、安直にviで編集してしまった。

SMTP AUTHパスワードファイルの設定

# sudo sh -c "echo '[isp.mailserver.net]:587    username:password' > /etc/postfix/smtp-auth"
# sudo chmod 0600 /etc/postfix/smtp-auth
# sudo postmap /etc/postfix/smtp-auth

念のために、明示的にpostfix再起動

# sudo systemctl stop postfix
# sudo systemctl start postfix

あとは、localhost:10025を叩いて、メールがISPに送信されることを確認。

QMAIL設定

notqmailのインストール

まずはcurlをインストール。それから、パッケージをインストールするための設定。公式サイトのインストールページの、OpenBuildPackageのリンクを参照。Indigoではubuntu-18.04なので、ubuntuのリンクをクリックし、手作業でリポジトリを追加してインストールを選択すると、手順が示されたのでその通り実施。

# sudo apt install curl
# echo 'deb http://download.opensuse.org/repositories/home:/notqmail/xUbuntu_18.04/ /' | sudo tee /etc/apt/sources.list.d/home:notqmail.list
# curl -fsSL https://download.opensuse.org/repositories/home:notqmail/xUbuntu_18.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home:notqmail.gpg > /dev/null
# sudo apt update
# sudo apt install notqmail

notqmail設定

/var/qmail/control 以下の設定ファイル、/var/qmail/alias 以下に設定を追加。qmail用のuser, group設定が適切になっているか、特に alias ユーザの home dir が/var/qmail/alias かを確認すること。特にパッケージのqmailを一度インストールすると、aliasのhome dirが違うディレクトリになっていることがある。今回特に重要なのはpostfixに渡すための smtproutes。

smtproutes

:localhost:10025

qmail起動設定

今回はqmail-send を起動するファイルを /var/qmail/rc 、tcpserver経由でqmail-smtpdを起動するファイルを /var/qmail/boot/boot-qmail-smtpd とした。(試行錯誤の結果 /var/qmail/rcにそろえる気力が尽きたので、中途半端なのはご愛敬。)
これらのファイル作成にはkobe-uのこちらのページを参考にさせて頂きました。

/var/qmail/rc

!/bin/sh

#Using splogger to send the log through syslog.
#Using qmail-local to deliver messages to ~/Maildir/ by default.

exec env - PATH="/var/qmail/bin:$PATH" \
/var/qmail/bin/qmail-start ./Maildir/ /var/qmail/bin/splogger qmail

/var/qmail/boot/boot-qmail-smtpd

!/bin/bash
# For SMTP 
/sbin/start-stop-daemon --start --quiet --user qmaild \
 --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
 --exec /usr/bin/tcpserver -- -HRv -u ` id -u qmaild ` \
 -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb 0 smtp \
 /usr/bin/rblsmtpd -r bl.spamcop.net \
 /var/qmail/bin/qmail-smtpd 2>&1 \
 | /var/qmail/bin/splogger smtpd 2 > /dev/null 2>&1

次に、これらをサービスとして起動するようにするための設定ファイルを作成。notqmail.serviceを見よう見まねで作成。このあたりは初めてなので、もっと適切ななやり方がありそう。(2020/11/7更新 splogger の第2パラメータを3 →2 に変更。2だとmail.log、3だとsyslogに出力される)

qmail.service

[Unit]
Description=Qmail mail delivery daemons
After=local-fs.target network.target

[Service]
ExecStart=/var/qmail/rc
Restart=always

[Install]
Alias=qmail.service
WantedBy=multi-user.target

qmail-smtpd.service

[Unit]
Description=Qmail SMTPD daemons
After=local-fs.target network.target

[Service]
ExecStart=/var/qmail/boot/boot-qmail-smtpd
Restart=always

[Install]
Alias=qmail-smtpd.service
WantedBy=multi-user.target

次に、これらのサービス登録をする。合わせて、notqmailのサービスを削除。あとはサービスを起動。

# sudo cp qmail.service qmail-smtpd.service /lib/systemd/system/
# sudo systemctl enable qmail
# sudo systemctl enable qmail-smtpd
# sudo systemctl disable notqmail
# sudo systemctl start qmail
# sudo systemctl status qmail
# sudo systemctl start qmail-smtpd
# sudo systemctl status qmail-smtpd

以前、さくらインターネットでqmail+postfix で構築した際は、postfixからISP向けの送信時にhost lookup error や、TLSコネクション生成timoeoutが頻発(ISPを複数変更しても改善せず)だったが、indigoでは数日運用した段階ではそのような状態にはなっていない。

カテゴリー: インフォメーション タグ: , , , , , , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です