逆引きできないホストからのメールを遮断

プロバイダのhi-hoが大手としては初めて 逆引きできないホストからのメールを遮断する措置を開始しました。(2005-11現在、苦情が出たようで措置は一時停止されているようです)

最終的に以下についてspam対策をするということですが今回は (2)についの措置に対するアナウンスです。

(1) 架空ドメイン名アドレスの拒絶
(2) 逆引きできないホストの拒絶
(3) 学習型迷惑メールフィルターによる選別

これは画期的といってもいいすばらしい決断です。

(1) と (3) はspammerと推定されるサーバーの拒絶およびspamと推定されるメールの拒絶(選別)であるのに対して (2) はspammerだけとは限らず管理の悪いサーバーも含まれてしまうところがポイントです。

某OC*などは通信の秘密(検閲の禁止)を盾にメールの拒絶については何も行っていませんね。 (余談ですがこのISPは何もしないばかりでなくspam業者に有利な対応をしており今やspammerの巣窟と成り果てています)  そのようなISPとは完全に反対側の立場を取るISPが現れたわけです。 [顧客の了解を得られれば] spammerと認定されていないサーバーからのメールでも拒絶するという事例ができたことになります。

hi-hoの英断に対して当社は全面的に支持をしエールをおくります。

実はspammerに限らずいくつかのメールサーバーのアドレスは逆引きできない状態のまま放置されていて、それを拒絶すると何でお前のところに送れないんだという苦情が予想されるためやりたかったのですがとても当社単独では実施できなかったものです。

しかしながらhi-hoの動きがこの流れを加速してくれるだろうという期待と、「大手プロバイダでもやってますけど」という口実を与えてくれたため当社でもさっそく設定しました。 hi-hoさんありがとう。 多少の苦情が来てもサーバーの設定が悪いんだぞと説得してくださいね。 ちなみに筆者の自宅はhi-ho使ってます。入ってて良かった。(^_^)

現在当社が使っている最新のsendmailでは (1) はデフォルトで有効になっており、 (3) についてはSpamAssassinで対応しているため、行っていないのは今回設定した (2) だけでした。

この設定をすると、韓国や中国から来るspamのほとんどは逆引きできないサーバーからなので非常に強力に拒絶してくれます。 でも伝統なのかなんだかわからないのですが韓国や中国の真面目な会社のサーバーでも逆引きが設定されていないことがありますのでご注意(たとえば韓国の大手ゲーム会社nexon.comのメールサーバーmailrcv.nexon.comのアドレス220.90.205.69は2004年10月25日時点で逆引きが登録されていないのでこのサーバーから来たメールは拒絶されます)。 そういう場合にはやりとりしているところの逆引きを調べ、 設定されていなかったら設定しろとアドバイスを出すといいです。 数社だったらそうすればいいんですがこれらの国の不特定多数のアドレスからメールが来る状況だったらやらないほうがいいと思います。

日本でもいくつかのところでこのような逆引きできないサーバーが立ち上がっていることを確認しています。 こういうところはシステムをしっかり管理できる人がいないためのことが多いようです。

実際に某一流企業で「逆引きを設定するとセキュリティ上問題があるからやらない」 という独自の解釈でわざと設定していないところがあって、 それは絶対まずいと説得して設定してもらったことがありました。 最初に誰が言い出したかの記録は無いが管理者に代々伝承されているとのこと。 たぶんルーターのIPアドレスか何かの話なんでしょうが伝言ゲームのように話が変わっていったんでしょう。

設定方法:

拒絶はいろいろ方法があると思うのですが当社は http://networking.ringofsaturn.com/Unix/sendmailtips.php に掲載されている方式をとりました。

これがそこから抜き出した設定ファイルです。

この設定を追加すると (1) 逆引きが登録されていないIPアドレスである場合と (2) 逆引きできても出てきたホスト名を更に正引きして異なるアドレスであったり、 それがDNSに登録されていなかった場合(誤った逆引きの場合)にそこから来るメールを拒絶してくれます。 後者はホスト名が偽わられているという解釈です。

具体的設定はsendmail.cfを生成する .mc ファイルの尻にこの設定を追加します(スペースだけでなくTABもあるので注意してください)。

あなたの.mcファイルにすでに LOCAL_RULESETSという記述があるのでしたら新たに追加するファイル先頭の同じ記述の行は削除します。

某一流企業の例で書いたようにいくつかの組織では誤った逆引き設定のところがありますので、 そこからの拒絶はしたくないという場合には設定ファイルのうちRFORGEDで始まる行は消去したほうがよろしいと思います (これを消しても拒絶する事例がありますのでご注意)。 当社の場合プライマリMXでは消去し、セカンダリMXでは使っています。
セカンダリMXに送ってくるspam

最近気がついたのがプライマリMXのサーバーがちゃんと動いているにもかかわらずなぜかセカンダリの方にspamを 送ってくる事例をたくさん目撃しています。 メインのサーバーはガチガチにspam対策していることを予見して何もやっていないかもしれないセカンダリMXに送ってくるのでしょうか。 普通のメール配送ソフトであればたとえセカンダリで拒絶してもプライマリには送ってくるのにこのような spammerのソフトはつなぎにきません。このような事態を想定して上記設定をしました。
このあと通常の方法でsendmail.cfを生成して/etc/mail/sendmail.cfとして配置したあとsendmailを再起動します。

確認:

設定が終わったら必ずチェックしましょう。重要なメールが消えては大変ですからしばらくは tail -f /var/log/maillog として動きを観察します。

ちゃんと送受できていて、たまに450 4.7.1 Access denied. IP name lookup failedのようなメッセージが出てくれば拒絶できているという証拠です。

以下がこの設定をしてあるメールサーバーのログ/var/log/maillogから抽出した実際の拒絶例です。

Oct 22 17:49:14 mail sm-mta[14758]: ruleset=check_relay, arg1=[210.219.133.212], arg2=210.219.133.212, relay=[210.219.133.212], reject=450 4.7.1 Access denied. IP name lookup failed [210.219.133.212]

Oct 22 17:57:01 mail sm-mta[14819]: ruleset=check_relay, arg1=[210.122.61.163], arg2=210.122.61.163, relay=[210.122.61.163], reject=450 4.7.1 Access denied. Cannot resolve PTR record for 210.122.61.163
この二件は逆引きが無いので拒絶。DNSはあるが逆引きが無い場合とDNSすら無い場合とでメッセージが異なります。
Oct 22 17:11:36 mail sm-mta[14449]: ruleset=check_relay, arg1=206-81-84-105.spokane.acetechusa.com, arg2=206.81.84.105, relay=206-81-84-105.spokane.acetechusa.com [206.81.84.105] (may be forged), reject=450 4.7.1 Access denied. IP name possibly forged [206.81.84.105]
これは206.81.84.105の逆引きが206-81-84-105.spokane.acetechusa.comと出てくるのですがそれを正引きしてもアドレスを引けないので拒絶。
以下のコマンドを使うとこの設定で拒絶した記録を全部見ることができます。 シェルスクリプトにしておくといいでしょう。
パイプで | wc と行末に追加すれば数がわかりますね。
grep -e '450 4.7.1 Access denied. IP name lookup failed' -e '450 4.7.1 Access denied. Cannot resolve PTR record for' -e '450 4.7.1 Access denied. IP name possibly forged' /var/log/maillog
当社の場合かなりspamが多いのですが一時間で65件拒絶していました。拒絶したアドレスを調べてみると中国、韓国がほとんどです。

例外を定義

中国、韓国からのspamは拒絶したいのだけれど特定のアドレスだけは許可したい場合には /etc/hosts
にアドレスを登録すればこの規制から外すことができます。たとえば 12.22.1.33 と12.22.1.34という逆引きが無いアドレス2つを許可したい場合には /etc/hostsに以下を追加します。追加するだけですぐに有効になりますのでサーバーを再起動する必要はありません。

12.22.1.33 friend
12.22.1.34 friend2

このfriendは何でもかまいません。そのサーバー名を書くのが一般的ではありますが。
さらにおまけですがDNSの設定がおかしくてsendmailが特定のメールサーバーを蹴る場合にもこの方法を使うことができます。過日某有名企業のメールサーバーを拒絶していたのを発見しこの方法で処置したことを思い出しました。
ご注意:この設定をして大事なメールが消えることがないよう細心の注意を払ってください。何がおこっても当社は関知しません。At your own riskで。

補足説明があります

ぼそ

NiftyさんはFrom:のメールアドレスのID部分に8ビット文字があっても通すんですけどあれってなんとかなんないでしょうかね。

Nikki Top