迷惑メールに対する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-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リレーする
次に、「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をタブ区切りで下記の通り追記します。
:op25b.asahi-net.or.jp:25 [ID] [PASSWORD]
朝日ネットのop25b.asahi-net.or.jpでは、ここまでの設定でメールをリレーしてくれるようになります。(2023/10/01時点)
上記のような対応により、私の環境ではISPのリレーサーバにメールを配送できるようになりましたが、皆様がご利用のすべての環境で動作を保証するものではありません。
リレーサーバ側で、独自ドメインのメール送信を許容していなかったり(From:を独自ドメインにしているとエラーで弾かれる)、そもそもリレーサーバが25番ポートの平文でのアクセスを許容していなかったりします。
前者はこちら側では如何ともしがたいですが、後者はstunnelを別途導入してSSL/TLSでトンネリングすると接続できる可能性があります。
$ pkg install stunnel
インストールが済んだら、システム起動時にstunnelが有効になるよう、rc.confに追記します。
stunnel_enable="YES"
stunnelの設定は、以下の通りです。
この設定では、このサーバの465番ポートにアクセスした場合、op25b.asahi-net.or.jpの465番ポートにSSL/TLSでトンネリングします。
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の入口に設定し直します。
: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をおすすめします。
・smtproutesの記法についての注意事項を追記。
・stunnel.confのパスが間違っていたのを修正。
・朝日ネットのサーバ名にTYPOがあったのを修正。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。