Postfixのぺーじ | ||
− Postfixでのspam対策 | ||
更新: 2003年11月26日 | [English Page] |
ホーム >オリジナルドキュメント >Postfixでのspam対策
このページでは、メールサーバの不正利用を防ぐための対策方法、 そして不正利用されたサーバからのメールを拒否する方法を紹介します。 spamメールの問題点などについては、あやむらさんの SPAMの現状と対策が 詳しいです。
Postfixはsendmailよりも安全なMTAとはいっても、設定によっては sendmailよりも簡単に危険なspam大量生産マシンにすることができます (なにしろ設定ファイルの書き方簡単ですから...)。そのため、メールサーバの 設定はやはり注意深くやる必要があります。
万が一Postfixがspamを大量に送信していたり、ホストのリソースを異常に 使用していることに気づいたら、通常の postfix stop ではなく、
# postfix abort
コマンドを実行し、Postfixを緊急停止させます。stopでは現在処理中のものは 処理を続けてしまいます。
Postfixはデフォルトで $mynetworks および $relay_domains から/宛以外の メールは中継しません。不正中継を防ぐには、まずはじめにこの2つの パラメータを適切に設定する必要があります。ここで指定されたホストは Postfixが全面的に信頼できるホストとみなしてしまうので、この中に不正な 中継を許す設定になっているホストがあると、せっかくの設定も無意味になって しまいます。
出先からメールを送信したい場合などには中継を許可する必要が出てきますが、 「外部からのSMTP接続に認証を求める」のような方法を 使って、特定のユーザのみが送信できるように設定しましょう。PostfixにIPや ホスト名を指定して許可することも可能ですが、不特定多数が使用するISPの ドメインを指定すると、同じISPのユーザがspamメールをリレーさせようと することを阻止できませんし、IPやホスト名が偽られる可能性も否定できません。 送信者アドレスによるリレーチェックは全く意味がありません。
Postfixには不正なクライアント対策のパラメータがたくさんありますが、 クライアント側の設定の不備などにより通常のメールも受け取れなくなる 可能性があるので、気をつけて設定する必要があります。特に、HELO コマンドの設定が間違ったホストが多いようですので、これを制限すると 必要なメールが受け取れなくなってしまうことがあります。イントラネット外では 指定しない方が無難なようです。関連するパラメータの多くは SMTPD_ACCESS_READMEの SMTPアクセス制限リストによる選択にあります。
設定の内容を理解するまでは、smtpd_*_restrictionsの設定は デフォルトから変更しない方が安全かもしれません。
外部からの不正リレーをきちんと防げているかをチェックするには、 メールサーバから
% telnet relay-test.mail-abuse.org
とします。自動的にtelnetを実行したホストへアクセスし、十数個の不正な メール中継のチェックがおこなわれます。自分の管理下外のホストに対する チェックは不正アクセスになるので、決してチェックしてはいけません。 また、管理者によってはユーザがこのようなチェックを行なうことを嫌う サイトもあります。実行は各自の責任において行なってください。
このテストを全てパスするためには19991229以降のバージョンのPostfixが 必要です。それ以前のものは、構造上一部でチェックしきれないものが あります。たいていの場合 (一度サーバがメールを受信し、その後エラーとして 処理される場合) は問題ありませんが、念のためバージョンアップして 完全にテストをパスすることを確認する方がよいでしょう。
同様のチェックは http://www.rbl.jp/svcheck.php や http://www.abuse.net/relay.html、 http://www.paladincorp.com.au/unix/spam/spamlart/ でもおこなうことができます。RBL.jpはrelay-test.mail-abuse.orgと ほぼ同様なチェックがおこなわれます。abuse.netではユーザ登録することで 実際にメールを送信してリレーをチェックするようです。paladincorp.com.auの テストでは70前後のテストをおこなうようです ([postfix-jp:02195] より)。
なお、これらのテストは最低限のチェックであり、テストをパスしたからと いって、全く問題がないとは限りません。個別のユーザに対する制限を 緩めていたりすると、それが問題になることもあり得るので、このテストだけで 慢心しないようにしてください。
なお、sendmailのオプション-btはPostfixではエラーになります。 Postfix の設定ファイルの文法チェックは
# postfix check
でおこなえますが、送信者やクライアントホストに関するルールのチェックは できません。
不正中継を防ぐ設定にすると、外から外へのメールが扱えなくなるので、 出先からメールを送信できないなどの問題が生じます。これを解決するには、 外からSMTPを使う際に、自ドメイン宛のメールでなければ認証が必要、 というようにします (通常は自ドメイン宛のメールは認証なしに受け取る 必要があります)。
現在のところ、主としてSMTP AUTHによる方法とPOP before SMTPによる方法の 2通りの方法があります。
POP before SMTPはユーザにメールの送信前にメールの確認を お願いするだけでよく、ユーザ側の使い勝手にほとんど変わりがないことと、 特にSMTP AUTHを実装していないメーラでも問題なく使えるため、以前からよく 使われている方法です。
SMTP AUTHはメールを送信する際に認証を求める方法で、SMTP AUTHを実装した クライアント(メールソフト) が必要です。 MicrosoftのOutlook Expressが SMTP AUTHに対応するなど (実は若干問題がありますが)、対応ソフトも 増えてきており、POP before SMTPと併用して使われている例が 増えているようです。
Postfixでは、SMTP AUTHはバージョン1.1.0以降で組み込まれています。 バージョン2.1.5での私のインストール記録を 載せておきます。 また、Taki Internet Mail Private Lab. にはSMTP-AUTHが使えるWindowsメイラーが紹介紹介されていました。
POP before SMTPは、基本的にはPOP/IMAPサーバが出力したlogを監視し、 認証が成功したホストからの中継を一定時間のみ許可するというものです。 実装方法は関連リンクの各実装例を参照してください。
インターネット上には非常に多くのホストが接続されており、メールの 第三者中継を許可してしまっているホストも相当数あります。これらのホストを 中継して送られるspamを防ぐために、オープンリレーのホストを ブラックリストに載せて公開しているサイトがあります。
Postfixでこの情報を公開しているホスト domain.tld を利用するには、$smtpd_client_restrictions パラメータに reject_rbl_client domain.tld を加えます。この指定により、ブラックリスト domain.tld に掲載されているホストからのメールの送信を拒否します。
ただし、取引先などよくメールを受け取る相手のサイトがリストに 載ってしまうと、メールを受け取れなくなって業務に支障をきたす場合も 考えられるので、設定する際にはログを監視するなど十分に気をつける べきでしょう。
また、近年突然のサービス停止やサービスホスト名の変更が相次いでいます。 reject_rbl_client で指定されたサービスが 停止すると、検索がタイムアウトするまで待たされたり、不正な応答により 問題ないメールまでブロックしてしまう可能性があります。 RBL を利用する場合、そのサービスに関する情報を継続的に入手するように してください。
[main.cf] smtpd_client_restrictions = permit_mynetworks, reject_rbl_client relays.ordb.org, reject_rbl_client sbl.spamhaus.org, permit
それぞれのデータベースサイトの特徴は、Tsukamotoさんの dnsを使って参照できる spam対策用ブラックリストや RBL-Type Services (英語です)をご覧下さい。
また、OBRS メモ (神戸大・玉岡さん) やspam情報 (ハートコンピュータ(株)) のページも大変参考になります。
また、万一自分のホストがブラックリストに掲載された場合には、 長崎ネットワーク サービスさんのサイトが役にたつでしょう。
自前でホスト・ドメインのブラックリストを持つには、
[/etc/postfix/reject_access_map] domain1.name REJECT domain2.name OK domain3.name REJECT
のように記述したマップファイルを用意し、
[main.cf] smtpd_client_restrictions = permit_mynetworks, check_client_access hash:/etc/postfix/reject_access_map, permit
のように $check_client_access パラメータで マップを指定します。マップは postmap /etc/postfix/reject_access_map コマンドを使ってデータベースを作成します。
特定の送信者アドレスをはじくには、上と同様に $smtpd_sender_restrictions パラメータにマップを指定することで可能です。
Postfixでは、特定クライアントからのSMTP接続そのものを拒否することは できないようです。完全に接続を拒否するためには、ipfwのような パケットフィルタを使う必要があります。
spam対策に役立つサイトのリンク集です。多くはsendmail用ですが一般論も 多いので、Postfix にも十分役に立ちます。