Network Abuse Clearinghouse のオープンリレーチェックを回避する

REPORT


オープンリレーサーバ

オープンリレーサーバとは、誰もが自由に利用してメールを送信できる状態にある SMTP メールサーバのことです。

電子メールは SMTP サーバを利用して送信を行うことになるのですけど、通常はパスワードなどによって送信できる利用者が限られるのが一般的になっています。というのも、電子メールというものは届けたいアドレスをいくらでも書いて SMTP サーバへいったん送信要求を出してしまえば、あとはその SMTP サーバが自動的に指定された全てのアドレスへと送信を行ってくれてしまうためです。

これを悪用されてしまうと SPAM などの迷惑メールの発信源となってしまうばかりか、宛先が大量すぎればそれに処理がかかりっきりになってしまって肝心の本来取り扱うべきメールが待たされてしまうなどの害があるため、今となっては SMTP サーバを構築する際に気をつける重要なポイントとなっている感じです。

 

Network Abuse Clearinghouse の Mail relay testing ページ

個人的にも基本的にはこのあたりを配慮して qmail による SMTP サーバを設定していたつもりだったのですけど、あるときにとある SMTP サーバ経由で送信されたメールが YAHOO メールの迷惑メールフィルタに引っかかってしまうとの話しを聞いたのでした。

しかもその原因が、送信に利用している SMTP サーバが Network Abuse Clearinghouse の "Mail relay testing" によってオープンリレーサーバである疑いがあるとのこと。送信にも受理にも標準の 25 番ポートを利用していたとはいえ、第三者宛ての送信の場合にはパスワードによる認証のみに制限してあったはずなんですけどね…。

おかしいと思いながらそのチェックページを実行してみたところ、クリアすべき 17 項目のうちの 9 番目で "疑いあり" と診断されてしまいました。具体的には、テストページの "Address to test:" の項目にチェックしたい SMTP サーバの IP アドレスを指定して [Test for relay] ボタンを押すことで、次のような感じの検査結果が得られました。

Connecting to 192.168.0.1 for anonymous test ...

 

<<< 220 smtp.dummy.domain ESMTP

>>> HELO www.abuse.net

<<< 250 smtp.dummy.domain

 

Relay test 1

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@abuse.net>

<<< 250 ok

>>> RCPT TO:<securitytest@abuse.net>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 2

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest>

<<< 250 ok

>>> RCPT TO:<securitytest@abuse.net>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 3

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<>

<<< 250 ok

>>> RCPT TO:<securitytest@abuse.net>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 4

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@[192.168.0.1]>

<<< 250 ok

>>> RCPT TO:<securitytest@abuse.net>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 5

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@>

<<< 250 ok

>>> RCPT TO:<securitytest@abuse.net>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 6

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@[192.168.0.1]>

<<< 250 ok

>>> RCPT TO:<securitytest%abuse.net@[192.168.0.1]>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 7

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@[192.168.0.1]>

<<< 250 ok

>>> RCPT TO:<securitytest%abuse.net@>

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 8

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@[192.168.0.1]>

<<< 250 ok

>>> RCPT TO:<"securitytest@abuse.net">

<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

 

Relay test 9

 

>>> RSET

<<< 250 flushed

>>> MAIL FROM:<spamtest@[192.168.0.1]>

<<< 250 ok

>>> RCPT TO:<securitytest%abuse.net>

<<< 250 ok

 

Relay test result

 

Humm, at first glance, host appeared to accept a message for relay.

 

THIS MAY OR MAY NOT MEAN THAT IT'S AN OPEN RELAY.

 

Some systems appear to accept relay mail, but then reject messages internally rather than delivering them, but you cannot tell at this point whether the message will be relayed or not.

You cannot tell if it is really an open relay without sending a test message; this anonymous user test DID NOT send a test message.

調べてみると、今回の問題となった "Relay test 9" というのは、宛先として入力されたメールアドレス <securitytest%abuse.net> が <security@abuse.net> に変換されてリレーされるかどうかのテストのようです。

具体的には、たとえば "address%domain@smtpserver" とすることで SMTP "smtpserver" 経由で "address@domain" 宛てのメールを中継してもらう感じのことが期待されているようなのですけど、qmail の場合は通常は "%" 記号をなんら考慮せずに @ 以下のドメイン名が指定されていないものとして扱われるので、これによって不特定の第三者が SMTP サーバを不正利用することは出来ないはずです。

 

エラーメッセージにもシステムによってはオープンリレーサーバとして利用されるかもしれないが実際にやってみないと判らないようなと書いてあるし、実際に不正利用も出来ない状態になっているので、これを迷惑メールフィルタに入れるメールの判断基準にされてしまうのは、いささか納得できないように思えます。

ともあれこれを回避する手段がないかと少し調べてみたところ "qmail-smtpd-relay-reject" というパッチが提供されていることを知りました。これを充てることによって Network abuse clearinghouse の Mail relay test をパスすることが出来るようになるとのことなので、届けたいメールが迷惑メールに振るわれるのは嫌なので、これを充てておくことにしました。

 

qmail-smtpd-relay-reject パッチを充てる

ここでは "/usr/local/src" ディレクトリに "qmail-1.03" という名前のディレクトリが存在し、そこに qmail のソースファイルが格納されているものとします。

http://www.qmail.org/qmail-smtpd-relay-reject からパッチデータを取得して、それを "/usr/local/src/qmail-smtpd-relay-reject.txt" として保存したら、次のようにして qmail のソースファイルに "qmail-smtpd-relay-reject" パッチを充てて、qmail の再インストールを行います。

このときに "qmail-send" や "qmail-smtp", "qmail-pop3d" などのプロセスが起動中だったりすると "make setup check" の段階でエラーになるかもしれないので、あらかじめそれらを停止してから行いましょう。

cd /usr/local/src/qmail

 

patch -p1 < ../qmail-smtpd-relay-reject.txt

make setup check

これで "qmail-smtpd-relay-reject" パッチの適用は完了です。

パッチの適用が上手くいったかどうかを確かめるために、改めて Network Abuse Clearinghouse の "Mail relay testing" を実行してみたところ、17 通りの全てのテストをクリアして、次のような検出結果となりました。

All tests performed, no relays accepted.

これなら、オープンリレーサーバとして認識されてしまうことはなくなりそうですね。

ともあれ知らない間に迷惑メールと間違えられて捨てられてしまうことのないように、自前のメールサーバを立てるような場合には、このパッチは絶対に充てておいた方が良さそうです。