SPAM メールを送る者は、送り手受け手の双方とも関係のない ホストを使ってメールをばらまきます。 これは、インターネットが「困ったメールは送って上げよう」 という性善説に支えられていた頃の仕様を利用しています。メールを送る一連の作業は、SMTP (Simple Mail Transfer Protocol) のデーモンである smtpd に SMTP 接続要求をして、 送り手と受け手とメッセージ内容を知らせて配送してもらう、 という手順になります。 smtpd はローカルホストでなくても、他のリモートホストでも 構いません。ここに、SPAM のつけいる隙があります。
foo@receive.org |----------| |----------| | SPAM 者 | | 受け手 | |----------| |----------| | | | SMTP 接続 |-----------| 転送 | |-------------| host |------------| |-----------| host.domin 第三者が中継している MAIL FROM: <適当にごまかしができます> RCPT TO: <foo@receive.org>踏台にされるのを避けるためには、特に TO を見て、 自分(host.domain )に関係ないメールは 受け取りを拒否してしまうのが一法です。
qmail の構造は、 qmail のページ内 をみて下さい。 この絵の右上にある qmail-smtpd が外部からのメールを受け付ける デーモンです。このデーモンは、宛先 (MAIL TO:) のドメインが、 ファイル /var/qmail/control/rcpthosts に記載してある 場合しか SMTP 接続を受け付けません。 デフォルトでインストールすると、このファイルには localhost と自ホスト名しか記載されていません (両方とも、ホスト自身です)。 したがって、基本的には外部ドメインに対するメールに対しては、 SMTP 接続を拒否し一切受け取りません。
rcpthosts を消すと、任意の宛先に対するメールを 受け取ってしまうので消してはいけません。
では、上の絵で SPAM 者と書いてあるところが、 正規な(許可を与えたい)ホストの場合はどうするのでしょう?
などの方法があります。ここでは tcpserver で制限する方法を 紹介しますが、これは上の絵で SPAM 者と書いたホストの IP アドレスを調べ、/etc/tcp.smtp から作られる データベースに照らし合わせて許可/不許可を決定する方法です。
- inetd + tcp wrapper で制限する
- tcpserver で制限する
rcpthosts 受け手アドレスでの制限 /etc/tcp.smtp 送り手ホスト IP での制限ということです。