独自ドメインのメールサーバを自宅サーバで構築していたが、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では数日運用した段階ではそのような状態にはなっていない。