カテゴリー

アクセスカウンター


since 1996/06/14

Count per Day

  • 9今日の訪問者数:
  • 46昨日の訪問者数:
  • 1130月別訪問者数:
  • 2現在オンライン中の人数:

postfixでメールサーバ

 ここのページはpostfixについて詳しく書こうと思ったけど、面倒になって来たので、他のネタは他のブログを見てください。

postfixとは Amazon:4756140513

 ここはpostfixというMTAの設定の備忘録です。MTAとはつまりメールサーバで、インターネット上でメールの受送信の役割を担います(この辺の詳しい説明は省略)。

紹介している本は私が参考にした本です(既にVerが古いかも・・・汗)。 なぜpostfixか

 メールサーバの代名詞から、セキュリティ問題の代名詞のような扱いにされて早数年のsendmailですが、それだけではなく設定の困難さから、今の世の中でも敬遠されている存在には代わりありません。  過去にqmailの調査と利用もしましたが、qmailは最新バージョン(1.03)が出てからかれこれ8年経過しており、ユーザグループのサポートで何とか生きながらえていると言う状態になっています。「シンプル且つ安全」と言われたqmailですが、既に1.03から追加機能とセキュリティ問題でパッチだらけになってしまい、もやは素人の手出しができない代物になりつつあります。

 そんな中で注目されているメールサーバの一つとして、postfixがあります。性能・設定の容易さなどが特徴でしょう。注目されていること=セキュリティの問題も発見されやすいというのもありますが、公式サイトを見てもわかるとおり、頻繁にバージョンアップされていることから、信頼できるものに見えます。

ソースコードとrpm

 このサイトは、以前からソースコートからコンパイルしでデーモンの構築を推奨してきました。これは、なるべく最新版を入手し運用すべきと考えたからです。 しかし、昨今はバイナリコードによる提供も良くなってきましたので、ここではソースコードからのコンパイルは解説しません(私ももう実際にコンパイルしてないし)。  FedoraCoreであれば(っていうかそれ以外は知らない)、「yum update postfix」などのコマンドで気軽にアップデートできるので、管理上それでよいと思います。

 そんな訳で、ここではFedoraCore5のバイナリベースで解説しています。それ以外の方はパスなどを読み替えてください。

postfixとDNS

 postfixに関わらず、インターネット上で稼働するメールサーバは通常DNSを参照しています。何を参照しているかというと、相手先ドメインのメールサーバがどこにあるかというのを参照しています。  たとえば、yahoo.co.jpドメインであれば、以下のコマンドで調べられます。

# dig yahoo.co.jp mx | grep MX | grep -v '^;' yahoo.co.jp.            384     IN      MX      10 mx2.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx3.mail.yahoo.co.jp. yahoo.co.jp.            384     IN      MX      10 mx4.mail.yahoo.co.jp. yahoo.co.jp.            […]

S25RでSPAM対策

 今まで主にブラックリストでSPAM対策をしていた訳ですが、いろいろ試行錯誤してもフィルタ率が80%くらいでした。  届く宛先の傾向を見ると、やはり過去にWebにメアドを載せていたのが原因ですね。ここのサイトも10年以上公開しているので歴史の重みの一つですね。

 で、結構悩んだんですが、S25R(Selective SMTP Rejection)という仕組みを導入してみることにしました。詳しくは以下のサイトを見てください(始めのページに要点も書いてあります)。 http://www.gabacho-net.jp/anti-spam/

 結果から言うと、ほぼ100%SPAMを駆逐出来てます。かなりすごいですね。ただし、誤フィルタの危険性も捨てきれないので、しばらく監視が必要です。

 とりあえず設定方法については上記アドレスの「阻止率99%のスパム対策方式の研究報告」ってところに、postfix向けの設定サンプルが書かれているのでそれで行けますが、ちょっと注意点などを以下に記載してみたいと思います。

 まず、main.cfの設定ですが、元々ブラックリストによる制限をしてますが、S25Rも同じようなところに定義してます。ですので、ブラックリストとS25Rを両立する設定が必要な訳ですが、私は以下のような感じに設定しました。

main.cfの設定サンプル(ブラックリストとS25Rの両立)

〜以下、抜粋です  「reject_rbl_client 云々」がブラックリストの設定。「permit_mynetworks」以下が、S25Rのサイトにあったサンプルと同様の設定です。

smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org, permit_mynetworks, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜, check_client_access regexp:〜云々〜

 また、S25Rは誤フィルタを防ぐ為にホワイトリスト(許可リスト)を設定する必要があります。ホワイトリストも上記S25Rのサイトの「ホワイトリスト情報」ってところにあります。  で、この情報は頻繁に更新がなされるので、更新されたらメールで知らせてくれるようにcronに以下のソースを設定しています。

更新お知らせシェル

 頻繁にチェックすると相手のサイトに迷惑なので、一日一回だけのチェックにしてます。ちなみに以下の設定だと、サーバのroot宛にメールを送るので、その辺は環境に応じて旨く設定してください。  なお、あくまでお知らせするだけで、更新はしてくれません。

#!/bin/csh wget –no-cache -q -O /etc/postfix/white-list.txt.check -T 10 http://www.gabacho-net.jp/anti-spam/white-list.txt if ( $status != 0 ) […]

body_checks

 前にpostfixでヘッダーチェックをしてSPAMメールをフィルタする話を書きましたが、今回はbody_checks、つまりメール本文を見て不要ならフィルタするというもの。  まぁ、設定とか書いてもいいんですが、結論から言うと使えません。  軽く調べたら、どうもメール本文がBASE64とかでエンコードされてると、body_checksはデコードしてくれないので、フィルタできないとのこと。 BASE64でエンコードした情報をフィルタ設定として書けばいいのかもしれないけど、面倒だからやめ。  ってことで、この方法は他の手段を考えよう…

postfixでSPAM対策その2

 うちのメールサーバのSPAM対策は、設定で遮断できるところ遮断し、できないところはRBL(Realtime Blackhole List:ブラックリスト)で遮断しています。ブラックリストはspamcopの効果が圧倒的に大きいですね。誤登録も多いらしいけど。  サーバ側ではグレイリストは使ってません。誤遮断が怖いのもあるけど、正か誤りかの確認がしづらいのが理由。だから、クライアント側で振り分けて1つ1つ確認しています(Beckyの深海魚フィルタ)。  で、今回はpostfixの機能の一つを追加してみました。header_checksとbody_checksというのがあるのですが、今回はheader_checksです。メールヘッダーに任意の文字列がある場合に、エラーを返します。やり方は以下のような感じ。 /etc/postfix/main.cfに追加(元々コメントアウトされてる)。 header_checks = regexp:/etc/postfix/header_checks /etc/postfix/header_checksに追加(ファイルは元々ある)。 /^Message-ID:.*xxxxx.jp>/ REJECT  /etc/postfix/header_checksには元々コメントがいっぱい書いてありますが、すべてコメントで無視されるので、一番下にでも追加すればいいでしょう。 上記の定義の意味は、「^Message-ID:」はヘッダーの中の「Message-ID:」のことです。「^」が文頭を意味しています。「.*」は任意の文字。Message-IDにはいろいろな文字が入りますので、そこを省略しています。「xxxxx.jp」のことろは、そのSPAM特有の文字列を示していています。「Message-Id」はSPAMじゃなくてもヘッダーに入っていますが、SPAMメールのヘッダーをよく調べて、明らかにSPAMにはコレが書かれているという単語がわかればそれを正確に入れましょう。最後のREJECTは、「遮断」の意味ですね。  他にもX-Mailerとか指定できるので、ググルといろいろ調べてみるといいかもしれません。ちなみに「/~From:.*xxxx.net>/ REJECT」がうまくいきませんでした…何でだろう?  この機能は、「マッチした場合にエラーメール(バウンスメール)を返す」ではなく、「マッチした場合に相手サーバにエラーを返す」です。  バウンスメールってSPAM業者には全く効果が無いので、このすぐにエラーを返すという動作もいいですね。

SPAMメールフィルタ

 メールソフトはBecky!(http://www.rimarts.co.jp/)を使ってます。 軽快で高機能で、プラグインとかで拡張できるので、気に入っています。  で、長くWebを公開してたりとか、技術者なのでMLとかに入ったりとかで、SPAMメールがよく届きます。無差別メールとかも多いッスね。  SPAMメールはメールサーバでかなり厚くブロックしています。 昨日ブロックしたメールの件数が、ブラックリスト別だとこんな感じ。 – Using Black lists – 102 bl.spamcop.net; 12 all.rbl.jp; 6 list.dsbl.org; 4 sbl.spamhaus.org;  メールサーバをqmailからpostfixにしたことで、User Unknownはメール受信中に送信者に返せるようになったし(qmailは返信メールになっちゃうので、ほとんど届かない)、ブロックも送信者に通知されますが、まぁ一向に減りません。  結局、10通くらいはこういうフィルタを通過して受信しちゃいますが、最近はシーラカンスソフト(http://coelacanth.on.coocan.jp/)のメールフィルタ(Becky!のプラグイン)を使って分別しています。なかなか賢くて、これで漏れるメールは数日に1通くらいになりました。  初期は、英語メールを無差別にフィルタしたりとか微妙な動きをするけど、学習させていけば、かなり制度が高くなりますね。  学習ってどういう仕組みなんだろうとか思いますが、ワンクリックで出来るので、楽です。  ってな感じでかなりお勧めですよ。

postfixでSPAM対策

 うちではブラックリストの設定をこんな感じにしてます(比較的に固め?)。 ・main.cfの一部抜粋 smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org ※ブラックリストの指定は変化することがあるので、これを丸写しとかしないように注意。  smtpd_client_restrictionsは、

SMTPサーバがクライアントからSMTP接続の要求を受けた際に適用する、オプションのアクセス制限。

だそうです。  fedoraとかだと、LogWatchを仕掛ければどのブラックリストでどの位ブロックしたかをサマリーしてくれるけど、家はちょっと独自にシェルを組んでます。 $ cat blocked_mail.csh #!/bin/csh # 前日のブロックされたメールをサマリしてくれる setenv TZ JST+15 setenv LANG C # blockedを集計(rlytestはテストっぽいので除外) grep "^`date ‘+%b %e’`" /var/log/maillog* | \ grep ‘blocked’ | grep -v ‘rlytest’ \ > /tmp/blockedmail.tmp echo ” > /tmp/blockedmail2.tmp echo "- Using Black […]

postfixでSPAMブロックの状況

昨日のSPAMブロックの結果。 RBL.JP 25 SPAMCOP 28 SPAMHAUS 3  SPAMCOPは昨日追加したばっかりなんだけど、やっぱり効果は高いな〜。 それでもすり抜けてくるのがちょうど10通くらい。もう少し様子を見てみるか。 あ、ちなみに情報サイトはいくらでもあるから、これから参考にする人がいるかわかんないけど、うちのサーバは、main.cfに以下の通り追加しただけです。 smtpd_client_restrictions = reject_rbl_client all.rbl.jp, reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net

postfixでSPAM対策へ

 qmailの時からSPAMに悩まされていたので、postfixにしたことを機にSPAM対策を強化してみました。  SPAMが多い理由は過去に海外のMLに入っていたのと、ホームページにメアドを載せてたからかな(メールサーバの解説でもダミーのメアドが載ってるけど、それも全て拾ってるようで、そのアドレスにもよく届きます)。今もメアドを載せてるけど、ここの対策は微妙。  とりあえず、今までの経過は以下の通り。 qmailからpostfixに変えた。  qmailはサーバに居ないユーザでも一度受け取っちゃいますが、postfix(っていうか普通のメールサーバは)受け取らずにUserUnknownを返します。qmailは仕組み上しょうがないけど、エラーを送信者(詐称されてる)へ返信し、それがバウンスメールとして管理者に返ってくるので、偉い面倒。  postfixにしてから統計を取ったけど、一日160通くらいUserUnknownになってるので、もう少し根本的に対策とらないとダメかな。 ブラックリスト機能を有効にした。  qmailでもできたことだけど…。  まずは、RBL.jpを設定。現状平均で20通くらいのメールをブロックしてくれています。まぁ、それでも一日10通くらいSPAMが届きます。  次にSpamCopというブラックリストも追加。ここはちょっと遮断しちゃうところが多すぎるらしいので微妙ですが…。まぁ、ブロックしたメアドを毎日サマリーしてくれるシェルを作ったので、しばらく様子見ですかね。  まずはこんなところかな。