Redhat9.0 : PostfixでVerisign問題とスパム対策

2003.09.23


上へ
qmailって良いの?
Postfixのインストール
SMTP AUTHの設定
PostfixでMaildir
SPAM対策
SMTP AUTH(PAM)
Postfix2.0
Postfix2.x SMTP AUTHの設定
Postfix2.x  SASL2の設定
Verisign問題
 

Verisign Site Finder問題とは

まずは,以下の記事を参照のこと。

bullet VeriSign、エラーページを自社サイトへリダイレクト (ZDNN:ニュース速報)
bullet [WSJ] VeriSign、苦情に応えてSite Finder修正へ (ZDNN:ニュース)
bullet VeriSignのSite Finder問題、ついに訴訟へ (ZDNN:ニュース)

Site Finderという機能によって,存在しないドメインをDNSで探した場合,自動的にVerisignのサイトにリダイレクトするという問題である。

たとえば,インターネットエクスプローラで,「http://www.sonzaisinaidomain.com/」(このホストは存在しないはず(?)である)を指定すると,「http://sitefinder.verisign.com/index.jsp」にリダイレクトされる。
(1回では失敗するかもしれない。2,3回くらい繰り返すと,Site Finderのサイトに飛ぶことができる)

これは,考えようによっては便利な機能なのは,認めよう。間違ったURLを入力した次に行うことは,サーチエンジンで正しいサイトを探すことだからだ。しかし,私が好むサーチエンジンは,VerisignのSite Finderではない。自分の意の沿わないさいとに誘導されることは非常に不愉快である。

.com/.netドメインを管理するVerisignが,他のサーチエンジンサイトよりも非常に有利になるのは,競合他社からすると不当な独占であるだろうし,利用者が望まぬサイトに誘導することも問題である。

しかし,それだけではなく,メールシステムでも問題を引き起こしている。

Postfixでの問題

スパムの送信者やウイルスメールはよくアドレスを偽装されていることが分かっている。送信者のアドレスをチェックすることで,スパムやウイルス・ワームのメールを拒絶することが可能である。

ここで言う送信者のアドレスとは,Outlook等で送信者として指定するメールアドレスの意味ではなく,プロトコルでの送信者のアドレスを指している。

少し,SMTP(メールのプロトコル)について説明する。上から順に,メーラ(Outlook Express等)から,メールサーバに渡すデータを示す。

メールのプロトコル

説明
HELO {自分の身元を表すサーバ}
または
EHLO {自分の身元を表すサーバ}
HELOやEHLOは,自分の身元を表すサーバ名を指定する。

HELOとEHLOの違いは,メールサーバから返される情報が異なっている点である。EHLOは,拡張された情報が返却される。

この「自分の身元を表すサーバ」は,メーラで設定されるもので,メーラの仕様に依存する。

MAIL FROM: {送信者のメールアドレス} プロトコルとして渡される送信者のアドレスである。このアドレスが,メールサーバで使用される。

通常はメーラの「送信者のアドレス」に指定されたものが設定されるが,スパムやウイルスでは,偽装されたアドレスが設定される

RCPT TO: {受信者のメールアドレス} プロトコルとして渡される送信先のアドレスである。このアドレスが,メールサーバで使用される。

メーラで,TO/CC/BCCで設定されるアドレスである。
BCC等で,指定したアドレスは,受信者のメーラでは見えないようになっているが,ここで,指定されている。

DATA
{
From: 本文でのメールの送信者
To: 本文でのメールの受信者
Cc: 本文でのメールの受信者(カーボンコピー)

(空行)

メールの本文

}
.

DATAから,"<CR><LF>.<CR><LF>"までが,メールのデータである。

データの先頭から,空行までが「メールヘッダ」と呼ばれるもので,メーラではそこに書いてあるものが,メーラで送信者と受信者として表示される。

この「メールヘッダ」に記述されている送信者と受信者は,メーラ-メールサーバ間,メールサーバ-メールサーバ間では使用されず,偽装されていても問題ない。

メールヘッダ」にはその他にもメールの情報が記述されている。

メールヘッダ」から1行空いて,メールの本文が始まる。

SMTPは,全て文字で記述できるので,メーラやmailコマンドでなくても,telnetコマンドで,試すことができる。その実行例は,後の説明で記す。

さて,上の「HELO」と「EHLO」,「MAIL FROM:」,「RCPT TO:」で指定されているアドレスが,「存在しないサーバアドレス」であれば,明らかにスパムやウイルスメールだと分かる。実際に,スパムは本当の送信元を隠そうとするので,存在しないサーバかどうかのチェックは有効であるし,ウイルスは同じアドレス設定を行うので,特定の文字列チェックで,不要なメールを拒絶することは可能である。

VerisignのSite Finderの問題は,折角,存在しないアドレスの場合,メールを拒絶する設定をしても,存在しないアドレスも,Site Finderのアドレスを返していることである。つまり,.com/.netでは,必ず,アドレスが存在すると言うことである。

コマンドで確認してみる。

コマンドの実行例

説明
# host sonzaisinaidomain.com
sonzaisinaidomain.com has address 64.94.110.11
sonzaisinaidomain.com というそんざいしないアドレスを指定しても,「64.94.110.11」というアドレスが返る。
# host 64.94.110.11
11.110.94.64.in-addr.arpa domain name pointer sitefinder-idn.verisign.com.
 
64.94.110.11 というアドレスは,Site Finderのアドレスである。
 

 

PostfixでのVerisign問題対策

bindなどDNSサーバで,対策する方法もあるが,DNSサーバを外部に依存している場合やDNSサーバともなると影響範囲が大きく,そうそう簡単に対策できないケースがある。

Postfixでは,パッチがでているので,メールサーバのスパム/ウイルス・ワームメール対策は,そちらで行った方が,影響範囲も分かりやすいであろう。

Postfixのパッチは,以下のものである。

bullet ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-2.0-ns-mx-acl-patch.gz

当て方とリコンパイルは省略。私のサイトで,当てたものを公開しています。

bulletftp://ftp.aritia.org/pub/hizumi/RedHat9.0/RPMS/i386/postfix-2.0.15-2j.i386.rpm
bulletftp://ftp.aritia.org/pub/hizumi/RedHat9.0/SRPMS/postfix-2.0.15-2j.src.rpm

 

コマンド

説明
# rpm -Fvh postfix-2.0.15-2j.i386.rpm RPMのファイルの入れ替え。

Postfixのスパム対策設定

Postfixでのアドレスチェックのパラメータを整理します。

パラメータ

説明
smtpd_helo_restrictions =
...
   reject_unknown_hostname
...
   check_helo_mx_access maptype:mapname
   check_helo_ns_access maptype:mapname
 
HELO/EHLOでの指定されるアドレスをチェックする。

メーラによってはここは非常に適当に設定されるので,ここでチェックしない方がよいだろう。

基本的な使い方は,smtpd_sender_restrictionsのパラメータと同じなので,そちらを参照。

smtpd_sender_restrictions =
...
  reject_unknown_sender_domain
...
   check_sender_mx_access maptype:mapname
  
check_sender_ns_access maptype:mapname
 
MAIL FROM: で指定されるアドレスをチェックする。

外から送られてくるメールをチェックするのであれば,これを指定すればよいだろう。

reject_unknown_sender_domain

送信者のメールアドレス(MAIL FROM:のアドレス)がDNSで,AかMXで引け無い,要するに存在しないアドレスであれば,拒絶する。
しかし,Verisignのために,このパラメータの有効性の範囲が狭まった。

check_sender_mx_access maptype:mapname
check_sender_ns_access maptype:mapname

Verisign対策のために追加されたパラメータ。mapnameで指定されたファイルで受け入れるか拒絶するかの判断を行う。説明は下のところで記す。

 

smtpd_recipient_restrictions =
 ...
 reject_unknown_recipient_domain
...
 check_recipient_mx_access maptype:mapname
 check_recipient_ns_access maptype:mapname

 
RCPT TO: で指定されるアドレスをチェックする。

エラーメールやウイルスチェックで自動返信する場合,偽のアドレスに返信を送らないようにするために,指定しても良いかもしれない。

基本的な使い方は,smtpd_sender_restrictionsを参照のこと。

mapname で指定したファイルの内容とその設定は以下の通りです。

mapnameファイルの内容

説明
形式

パターン アクション

パターンは,メールアドレスやIPアドレス。
チェックする対象は,smtpd_helo_restrictions,smtpd_sender_restrictions,smtpd_recipient_restrictions のどのパラメータで指定されたファイルかで,それぞれそれに対応するアドレスである。

アクションは,REJECT(拒絶)やOK(受け入れ)など。大文字小文字の違いは無い。

64.94.110.11 REJECT mail server in verisign wild-card domain チェック対象のサーバのアドレスが64.94.110.11であった場合,拒絶する。この場合は,Verisignのアドレスなので,存在しないものと一緒なので拒絶。

"mail server in verisign wild-card domain"は,メーラ側に送信するメッセージである。

マップファイルの例 http://archives.neohapsis.com/archives/postfix/2003-09/1694.html から。

Privateアドレス(192.168.0.0/16 等)は,自分の環境に応じて設定した方が良いでしょう。ここでは,コメントアウトしています。

64.94.110.11   reject mail server in verisign wild-card domain .net and .com
0.0.0.0/8      reject bogus address
#127.0.0.0/8    reject loopback address
224.0.0.0/12   reject multicast address
255.0.0.0/8    reject bogus address
#10.0.0.0/8     reject RFC1918 address
#172.16.0.0/12  reject RFC1918 address
#192.168.0.0/16 reject RFC1918 address
#169.254.0.0/16 reject RFC1918 address
#192.0.2.0/24   reject RFC1918 address
194.205.62.122 reject wild-card .ac
206.253.214.102 reject wild-card .cc
219.88.106.80  reject wild-card .cx
195.7.77.20    reject wild-card .museum
64.55.105.9    reject wild-card .nu
212.181.91.6   reject wild-card .nu
194.205.62.62  reject wild-card .sh
216.35.187.246 reject wild-card .ws

 

実行例

 

コマンドの実行例

説明
# vi /etc/postfix/mx_access /etc/postfix/mx_access というファイルを作成する。内容は,と同じ。
# postmap  hash:/etc/postfix/mx_access テキストをDB形式に変換する。
# vi /etc/postfix/main.cf
 
以下のパラメータを設定する
main.cfの一部
(略)
smtpd_sender_restrictions = reject_unknown_sender_domain,
                                      check_sender_mx_access hash:/etc/postfix/mx_access
 
# postfix reload
 
パラメータをロードする

 

テスト

 

コマンドの実行例

説明
# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
EHLO localhost.localdomain
220 mail.aritia.org ESMTP Postfix (2.0.15)
250-mail.aritia.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
MAIL FROM: test@sonzaisinaidomain.com
250 Ok
RCPT TO: root@localhost
554 : Sender address rejected: mail server in verisi
gn wild-card domain .net and .com
QUIT
221 Bye
Connection closed by foreign host.
#
    
check_sender_mx_access hash:/etc/postfix/mx_access
でチェックされる例。

sonzaisinaidomain.com は,VerisignでSite Finderのアドレスを返されるので,reject_unknown_sender_domain では引っかからない。その代わり,mx_accessでチェックされる。

メッセージは,のファイルで記述されているものが出される。

# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.aritia.org ESMTP Postfix (2.0.15)
EHLO localhost.localdomain
250-mail.aritia.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
MAIL FROM: test@sonzaisinaidomain.jp
250 Ok
RCPT TO: root@localhost
450 : Sender address rejected: Domain not found
QUIT
221 Bye
Connection closed by foreign host.
#
    
reject_unknown_sender_domain で拒絶される例。

sonzaisinaidomain.jp は,存在しないJPドメインなので,このパラメータでチェックされる。

horizontal rule

改正歴

2003.09.23 初版
   

 

horizontal rule