はじめに

迷惑メールに対するOutbound Port 25 Blocking(OP25B)対策が広がり、ISPのネットワーク内から、ISPのネットワーク外のSMTPサーバの25番ポートに接続できなくなって久しいです。
我が家では、朝日ネットの固定IPサービスを使っていて、このサービス利用中はOP25Bの対象外となるため、長い間OP25B対策をしないで済ませてきました。
しかし、この固定IPサービスが2024月2月より大幅に値上げ(月額税抜800円→1,800円)され、これに伴いこのサービスを解約することにしたため、にわかに自宅のメールサーバにOP25B対策が必要になってきました。

幸いにして朝日ネットでは、私のように自宅でメールサーバを立てている人向けに、op25b.asahi-net.or.jpというリレーサーバを用意してくれています。
こちらはプロバイダーのネットワーク内にあり、TLSなしで25番ポートでアクセスできるのですが、SMTP-AUTHを要求を必要とします。

現在利用しているqmailは、SMTP-AUTHに対応していないため、qmailにパッチを当て、このリレーサーバにリレーできるようにしてみます。

qmailの構造とパッチ対象箇所

qmailは、以下のモジュールに分かれていて、それぞれが別のユーザーで実行される構造になっています。

qmailを構成するモジュールと実行ユーザ
qmail-inject
qmail-smtpd	qmaild
qmail-queue	qmailq
qmail-clean	qmailq
qmail-send	qmails
qmail-lspawn	root
qmail-local
qmail-rspawn	qmails
qmail-remote	qmails

ローカルからローカル宛の送信は、

ローカルからローカル宛のメール送信の処理の流れ
qmail-inject → qmail-queue → qmail-send → qmail-lspawn → qmail-local

クライアントからのローカル宛の送信は、

クライアントからローカル宛のメール送信の処理の流れ
qmail-smtpd → qmail-queue → qmail-send → qmail-lspawn → qmail-local

そして、最もユースケースが多い、クライアントから外部宛のメール送信は、

クライアントから外部宛のメール送信の処理の流れ
qmail-smtpd → qmail-queue → qmail-send → qmail-rspawn → qmail-remote

のような流れでモジュールが連携し、メールが受け渡されていきます。

このうち、qmail-smtpdは、ローカルネットワーク内にあるPCのメールクライアント(Thunderbirdなど)からSMTPでメールを受け取るモジュールで、qmail-remoteは、qmailから外部のSMTPサーバにSMTPでメールを送信するモジュールです。
つまり、qmail-smtpdは、SMTPでメールを受け取る動作をする、クライアントに対するSMTPサーバとして動作し、qmail-remoteは、SMTPでメールを渡す動作をする、SMTPサーバに対するクライアントとして動作します。

私のケースの場合、SMTP-AUTHに対応すべきモジュールはqmail-remoteだけです。

インターネットで、qmailのSMTP-AUTH対応について説明しているページは、大部分がqmail-smtpdのSMTP-AUTH対応について記載されています。
qmail-smtpdに対してSMTP-AUTH対応させたい場合には、そちらをご覧になると良いと思います。

参考にしたサイト

以下のページは、qmail-smtpdとqmail-remoteの双方でSMTP-AUTHが有効になる設定が記載されており、非常に参考になるのですが、このパッチを適用すると、qmail-smtpdのSMTP-AUTHを無効にすることができなくなるため、元のパッチからqmail-remoteに関する箇所だけ抜き出して、新たにパッチを作成することにしました。

【ご参考】Amazon SESへqmailからSMTPリレーする

netqmail-1.06に対するパッチ

次に、「qmail」を動作させるための設定ファイルを作成します。
自宅サーバでは、FreeBSDを利用しているので、FreeBSDのportsに対するパッチを用意しました。

下記のサイトから、qmail-remote-authのパッチと、qmail-remote-authが必要とするbase64の機能を、qmail-remote-authのパッチから抜き出して作成しています。

【ご参考】qmail patches

このパッチは、qmail-smtpd-authのパッチと競合するため、portsをmakeする際に、qmail-smtpd-authのフラグを指定しないでください。

起動スクリプトの削除
$ cd /usr/ports/mail/qmail
$ make clean
$ make patch
$ cd ./work/netqmail-1.06/
$ fetch https://www.kishiro.com/FreeBSD/patch/qmail-remote-auth_netqmail-1.06_6.patch
$ patch < qmail-remote-auth_netqmail-1.06_6.patch
$ cd ../../
$ make install clean

あとは、通常のqmailの設定と同じですが、このパッチによりsmtproutesの記法が若干変わります。
リレーするサーバに接続する際に必要なID、PASSWORDをタブ区切りで下記の通り追記します。

「/var/qmail/control/smtproutes」の編集
:op25b.asahi-net.or.jp:25 [ID] [PASSWORD]

朝日ネットのop25b.asahi-net.or.jpでは、ここまでの設定でメールをリレーしてくれるようになります。(2023/10/01時点)

注意事項とSMTPSへの対応

上記のような対応により、私の環境ではISPのリレーサーバにメールを配送できるようになりましたが、皆様がご利用のすべての環境で動作を保証するものではありません。
リレーサーバ側で、独自ドメインのメール送信を許容していなかったり(From:を独自ドメインにしているとエラーで弾かれる)、そもそもリレーサーバが25番ポートの平文でのアクセスを許容していなかったりします。

前者はこちら側では如何ともしがたいですが、後者はstunnelを別途導入してSSL/TLSでトンネリングすると接続できる可能性があります。

stunnelのインストール
$ pkg install stunnel

インストールが済んだら、システム起動時にstunnelが有効になるよう、rc.confに追記します。

「/etc/rc.conf」の編集
stunnel_enable="YES"

stunnelの設定は、以下の通りです。
この設定では、このサーバの465番ポートにアクセスした場合、op25b.asahi-net.or.jpの465番ポートにSSL/TLSでトンネリングします。

「/usr/local/etc/stunnel/stunnel.conf」の編集
pid = /var/run/stunnel/stunnel.pid
output = /var/log/stunnel.log
CApath = /etc/ssl/certs

[smtps]
accept = 465
client = yes
connect = op25b.asahi-net.or.jp:465

最後に、qmailsmtproutesを変更し、リレーサーバをstunnelの入口に設定し直します。

「/var/qmail/control/smtproutes」の編集
:192.168.0.16:465 [ID] [PASSWORD]

192.168.0.16は、stunnelが動作しているサーバのIPアドレスです。
ID、PWなどの間は、半角スペースで区切ってください、タブで区切ると、これらの値が正しく読み込めず、認証に失敗します。

ちなみに、朝日ネットのop25b.asahi-net.or.jpは、465番ポートでのSMTP over SSL/TLS(SMTPS)にも対応しているようで、上記の通り設定を変更してもメールをリレーしてくれることを確認しました。(2023/10/01時点)
セキュリティ向上のため、今後25番ポートが予告なく閉じられる可能性があるので、こちらの設定を常用することにします。

おまけ

SMTPはスパムメール対策と共に、進化し続けてきたプロトコルです。(RFC821→RFC2821→RFC5321)
qmailは堅牢な作りではあるものの、スパムメールなどがなかった牧歌的な時代に作られたソフトウェアであり、その後作者であるDJBがこれらに追随しなかったため、野良パッチがあふれるソフトウェアになってしまいました。(かくいうこのページも、その野良パッチを配布しているわけですが…)

2007年にqmailがパブリックドメインに移行した後、ネット上にあったこれらのパッチをマージしたnetqmailプロジェクトが発足しましたが、こちらは更新が停止しています。
また、2018年にnotqmailというプロジェクトが立ち上がったのですが、こちらも活動は低調のようです。

同じMTAとしては、Postfixがqmailに似た設計を取り入れていて、しっかりとメンテナンスされているため、今後新規にメールサーバーを立てるときには、qmailではなくPostfixをおすすめします。

変更履歴

2023/10/26

・smtproutesの記法についての注意事項を追記。

2023/10/09

・stunnel.confのパスが間違っていたのを修正。
・朝日ネットのサーバ名にTYPOがあったのを修正。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。