Mailserverの設定
- Mac OS X 10.3には Postfix が予めインストールされています。
Postfix Enabler を使用すれば簡単にメールサーバを立ち上げることができます。SMTP
は Securityタグ で
Use the OS X built-in user accounts
にチェックするとMac OS のユーザーのみに利用限定できるので不正利用から防御できます。
- Mac OS X 10.2には Sendmail が予めインストールされています。
参考サイト
不正中継のテスト
ここで、IPアドレスかドメイン名で不正中継のテストをします。前述のPostfix Enabler で Mac OS のユーザーのみに利用限定すれば
Relay test result All tests performed, no relays accepted.
の文字が確認できるでしょう。
携帯メールへの転送
メールサーバの設定が済みましたら、プラスアルファで携帯メール転送機能も追加してみましょう。フォワードさせたいユーザーのルートフォルダに.forwardファイルを作成します。その中にフォワード先のメールアドレスを書くだけです。転送後もメールを残す場合は、1行名に\マーク+ユーザー名を記述します。
\Username your@mail.com
上記設定の場合スパムも含めて携帯にメールが流れてしまいます。そこで送信元のホワイトリストで必要なドメインのみ携帯へ流す等の処理が必要になってきます。この様な時は fetchmail Procmail等を利用します。
また、 Perlで動くフリーウェア等も利用できます。Mac OS は最初からPerlが組み込まれています。
SPAM対策
etc/postfix/main.cf を編集します。Postfix Enablerを使用している場合は、Custom Postfix Settings へ登録します。OS X Server v10.4 のサーバ管理ではヘッダチェックの設定ができないので、この場合もテキストエディタで編集します。
smtpd_client_restrictions = #SMTPコネクション時の制限
permit_mynetworks, #自ネットワークへの無条件接続許可
reject_unknown_client, #IPからホストへの逆引きができない接続を拒否
reject_invalid_hostname #ホスト名が正しい書式でホスト名を通知して
きたホストのみ接続を許可
reject_unlisted_recipient #宛先不明なアドレスへの要求は拒否
reject_unauth_destination #自ネットワーク以外への要求は拒否
smtpd_sender_restrictions = #FROM句についてチェック
permit_mynetworks, #自ネットワークは常に許可
reject_unknown_sender_domain, #存在しないドメイン名は拒否~
reject_non_fqdn_sender, #アドレスがFQDN形式でない場合は拒否
reject_unverified_sender #アドレスがバウンスしたり配送先に到達できなければ拒否
smtpd_recipient_restrictions =
permit_mynetworks,
check_recipient_access hash:/etc/postfix/recipient_access #Toへのメール配送制御
permit
smtpd_helo_required = yes #HELO コマンドでホスト名を通知しないホストの接続拒否
header_checks=regexp:/etc/postfix/header_checks ←ヘッダをチェックします。 body_checks=regexp:/etc/postfix/body_checks ←添付ファイルをチェックします。
※)reject_rbl_clientの設定例
reject_rbl_client all.rbl.jp, ←日本独自のDNSBL
sbl.spamhaus.org, ←(世界的なDNSBL)
reject_unknown_client, ←逆引できないホスト接続を拒否
permit ←上記の条件にマッチしなければ許可
reject_rbl_client でDNSBLを使用すると場合によっては正常なメールも届かなくなる原因にもなります。また、ordb.org は2006年に活動を中止しましたがメンテナンスされないまま大量のIPが登録されていますのでMT管理者は即刻利用を中止すべきです。
header_checksはテキストエディタで新規に作成し、ヘッダ内容をチェックします。
/^X-Mailer:.*MimeOLE/ REJECT ←最近多い Produced By Microsoft MimeOLE の排除
/^From:.*<#.*@.*>/ REJECT ←Fromの書式チェック(これは意味無?)
/^Subject:.*\- [0-9]*$/i REJECT ←あまり見かけないがベーシックな要素として
/^Subject:.*delivery/i REJECT ←最近多い件名
/^Subject:.*jewelry/i REJECT ←最近多い件名
/^Subject:.*watches/i REJECT ←最近多い件名
/^Received:.*[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}/ REJECT # DDNSの排除
recipient_accessでは、Toへのメール配送を制御します。編集後は postmap でDBファイルを作成します。
webmaster@bluemooninc.biz REJECT ←配信専用アドレスへの受信排除
Return-Path へッダは local エージェントがつけるものなので、header_checks では弾けません。(Return-Path は Envelope From なので check_sender_access で制限?)
/^Return-Path:.*<#.*@.*>/ REJECT ←Return-Pathの書式チェック /^Return-Path:.*mail.bluemooninc.biz/ REJECT ←自サイト指定の拒否
body_checksはテキストエディタで新規に作成し、拒否すべき添付ファイルやスパム特有のメタタグ等を記載します。
/name=.*\.scr/ REJECT /name=.*\.pif/ REJECT /name=.*\.com/ REJECT /name=.*\.dll/ REJECT /name=.*\.reg/ REJECT /name=.*\.vbs/ REJECT /name=.*\.shs/ REJECT /http-equiv=3DContent-Type/ REJECT ←スパム特有のメタタグで拒否
この後、ターミナルからpostmapコマンドを実行してdb拡張子ファイルを作成します。
# cd /etc/postfix # postmap header_checks (もしくはbody_checks)
これらの設定を行った後Postfixを再起動します。
# postfix reload
参考サイト
- http://ya.maya.st/mail/accessctl.html#basic
スパムに対してMTAのアクセス制御をどうするか、その対応方法やメリット・デメリットが詳しく記載されています。 - http://www.gabacho-net.jp/anti-spam/anti-spam-system.html#3-3
拒絶記録抽出用シェルスクリプトを参考にしてそこからホワイトリストへ導くという流れが把握できます。
SPAM判定を受けてしまったら
スパムは相手からのみというばかりではありません。ちょっとした事で自サイトがスパムリストに登録されてしまうことがあります。このサーバでも利用していた spamhaus.org ですが、リストが http://cbl.abuseat.org と連携していてスパム判定されてしまうという経験をしました。
原因は、「postfixがheloコマンドでFQDNを返さなかった」という事でした。ポートフォワード等している場合はmain.cf(もしくは、Custom Postfix Settings)に以下の様にFQDNを正しく返す様設定します。FQDNはmyhostnameを変えるだけでOKですが、他のパラメータと絡んでいますので関連するパラメータをチェックして外部・内部の送受信をチェックします。
myhostname=mail.bluemooninc.biz myorigin=$mydomain mydestination=$myhostname,localhost.$mydomain,$mydomain relay_domains=$mydomain
設定の確認をtelnetで行います。
telnet mail.bluemooninc.biz 25 helo mail.bluemooninc.biz 250 mail.bluemooninc.biz quit
250が成功です。そしてこの後にFQDNで完全なホスト名を返してくる必要があります。ドメイン名ではRFC2821違反となりCBLのリスト対象になります。自サイトがリストアップされてしまった場合は、すべて準備が整ってからリスト削除の申請を行います。
申請しましたが、14日後にまた復活しました。ウェブでの申請はテンポラリで解除されるようでCBL側の修正が無いと自動で復活する様です。連絡受け付けはウェブの解除申請のみで他の連絡方法がありません。結局、先方の受信先にはホワイトリスト登録をお願いする事になり、その後数か月してようやく解除されました。現在は復活していないか時折チェックしています。
また、他のRBLにリストされていないかをrbl.jpで一括してチェックすることができます。
設定で詰まった時は、postfixの設定-基本を参照すると理解の助けになります。
DNSBL利用の注意点
Microsoft研究者らが正常なメールの0.71〜1.02%は「ただ消えて無くなる」という論文を発表し、その中で、主な要因はスパムフィルタにあると記述されています。
DNSBL(RBL)の利用を利用した事でスパムの受信は減りましたが、その後スパムとはまったく無関係の事で送信では取引先へ連絡できなくなり、受信では危うく仕事を取り損ねる経験をしました。具体的には送信の場合、自サーバがメールサーバのHELO返り値をFQDNではなくドメインに設定していた事でcbl.abuseat.orgにリストアップされ、spamhausがそのリストを参照していた為、取引先がspamhausを利用していて送信できなくなりました。また受信では、仕事の依頼をしたのだけれど送信できなかったと電話で知らされてから知りました。依頼主は著名なNGO団体で送信元もそのメールサーバからでした。
この様にDNSBLを利用する事でスパムとは無関係の大事なメールが届かないという可能性があり、安易に適用してDNSBLの運営に身を委ねるのは危険だという事を十分認識する必要があります。
IPアドレスでのブラック判定は、プロバイダのメールサーバやレンタルサーバで共有利用しているIPアドレスやDNSBL運営側の広範囲なネットワークブロックの指定で無関係なIPアドレスも対象となります。この事から、企業でDNSBLを利用するなら取引先や関連会社・一般の顧客からのメールが排除されない様ホワイトリストを独自に管理運営していく必要があります。
そもそもスパム業者はIPをコロコロ変えたり、ブラックリストをチェックしながら登録されてないIPを選んで送る(ブラックリストに登録された時点でスパム業者がスパム業務を行えない)事も多く、その場合DNSによる排除は無意味です。DNSBLがとても注意深く運営されている組織であれば固定IPでスパムを送り続ける業者のみ有効に排除できるでしょうが、spamhausについての様々なニュース記事を見るとスパム以外の正常な利用を相当数ストップさせています。この様な状況下ではホワイトリストを独自に運営していかなければなりません。
関連記事
http://neta.ywcafe.net/000678.html
http://internet.watch.impress.co.jp/cda/special/2006/11/09/13880.html
http://internet.watch.impress.co.jp/cda/news/2006/10/16/13618.html
http://internet.watch.impress.co.jp/cda/event/2006/11/30/14094.html
スパムフィルタ
Mac OS X Serverのメールサービスでは、サーバ管理画面より spamassassin を有効にする事が出来ます。迷惑メールフィルタを自動的にトレーニングするを参照すると、junkmail / notjunkmail というメール受信可能な2 つのローカルアカウントを作成してそこにスパムとハムのメールメッセージを送るとあります。サーバ側では毎日午前 1 時に学習し、学習済みメッセージは毎日(翌日)削除する必要があるとなっています。更に、ウィルスフィルタ(ClamAV)やGUIも装備されていて簡易に設置できます。
以下は、Mac OS X に自力でセットアップする際の利用概要です。より理解を深めるためにはSpamAssassinをお尋ね下さい。
- インストール
http://developer.apple.com/server/fighting_spam.html
http://www.xnote.com/howto/postfix-spamassassin.html
http://www.akadia.com/services/postfix_spamassassin.html
http://www.geocities.jp/bashou1000/spamassassin.txt
http://memo.blogdns.net/spam.html - スパムとハムの学習
Thunderbirdのメールはmbox形式で保存されていますので、ファイルを直接spamassassinに学習させる事が可能です。データはユーザー別のアプリケーションフォルダに格納されています。WindowsXPの場合は C:/Documents and Settings/[ユーザ名]/Application Data/Thunderbird/Profiles/xxxxxxxx.default/Mailフォルダに格納され、 WindowsVISTAの場合は C:/Users/[ユーザー名]/AppData/Roaming/Thunderbird/Profiles/xxxxxxxx.default/Mailに格納されています。このフォルダにある拡張子の無いものがmboxファイルです。1000件程度の学習が適度で、サンプルを取り出した後は以下コマンドでスパムとハムをそれぞれ学習させます。
sa-learn --spam --mbox junk sa-learn --ham --mbox inbox
Procmail
DNSBLを止めてベイジアンフィルタだけを利用して数ヶ月経ち、ベイジアンフィルタを通り抜ける対策を施したスパムメールが多々流れてくる事が解りました。この対策としてProcmailによるホワイトリストを施して、仕事に関係あるドメインだけを外部秘のアドレスへ転送する仕組みにしました。携帯への転送はパケット代節約の為、容量をみて行っています。
LOGFILE=$HOME/procmail.log
:0
* ^From .*@転送対象のドメイン
{
:0 c
* < 1048576
! 携帯アドレス
:0
! 仕事関係専用の転送先アドレス
}
:0
! 一般のメールの転送先アドレス
OP25Bに関連して
OP25Bを採用するプロバイダが最近増えつつありますが、これを踏まえた様でIPの逆引きと正引き(FQDN?)を比較判定している様な送信エラーを受けました。逆引き登録は通常プロバイダ設定ですので、独自ドメイン+固定IP1つで運営しているメールサーバからの送信が弾かれる事になります。
送信側がこの状況を避けるにはプロバイダの中継サーバを利用します。postfix においては main.cf の設定でプロバイダの中継サーバを設定します。
relayhost=[プロバイダ中継サーバ]
参考サイト
Postfix の設定 - UCE 制御
postfix の SPAM 対策
自サイトのサービス用アドレスの詐称を拒否 / システムユーザ宛のバウンスの拒否
排除率99.97%のスパムメール対策