3: 2010-10-04 (月) 02:14:11 maruo |
4: 2010-10-05 (火) 03:08:41 maruo |
| | | |
| *SpamAssassinの設定 [#c7e7143e] | | *SpamAssassinの設定 [#c7e7143e] |
| + | 以下は、設定変更行ったら、amavisd_newを再起動するのを忘れないでね! |
| + | |
| **ベイズフィルタの学習 [#q052a4f1] | | **ベイズフィルタの学習 [#q052a4f1] |
| 先ほど、SpamAssassinには自動学習機能があるといいました。ですので、収集されたメールから、Spam学習ルールを作る自動化シェルスクリプトを作りました。 | | 先ほど、SpamAssassinには自動学習機能があるといいました。ですので、収集されたメールから、Spam学習ルールを作る自動化シェルスクリプトを作りました。 |
| | | |
| これで受信時の自動学習及びベイズフィルタの使用を定義。ア~ンドamavisが溜め込むベイズフィルタをデフォルトルールとする事にしたです。そりで、 | | これで受信時の自動学習及びベイズフィルタの使用を定義。ア~ンドamavisが溜め込むベイズフィルタをデフォルトルールとする事にしたです。そりで、 |
- | HOME=/var/amavis | + | HOME=/var/amavis |
- | find /var/spool/imap -type d -name SPAM -exec /usr/bin/sa-learn --spam {} \; | + | find /var/spool/imap -type d -name SPAM -exec /usr/bin/sa-learn --spam {} \; |
| | | |
| というわけで、imapフォルダ下にあるSPAMって名前のフォルダ下にあるSPAMメールを毎日自動学習するようにCRONシェルを設定して、おしまいでっす。 | | というわけで、imapフォルダ下にあるSPAMって名前のフォルダ下にあるSPAMメールを毎日自動学習するようにCRONシェルを設定して、おしまいでっす。 |
| + | |
| + | さらに、 |
| + | sa-learn --ham <SPAMでないメールがあるディレクトリ> |
| + | と指定すると、SPAMでないメールも学習してくださいます。 |
| | | |
| **sa-updateの設定 [#d2bc7662] | | **sa-updateの設定 [#d2bc7662] |
| + | もともとspamassassinは、バージョンアップ毎に更新したルールをパッケージに付与していまいたが、これだとイタチごっこに対する対応が遅い、ということで、spamassassin 3以上になると、NWから定期的に更新したルールを取ってこれるようになりました。これにはsa-updateというツールを使用します。 |
| + | まず、sa-updateを使用するのに、GPGのキーファイルを作成してやります。例えば/foo/var.keysという名前で、 |
| + | 26C900A46DD40CD5AD24F6D7DEE01987265FA05B |
| + | 5244EC45 |
| + | こんな中身のファイルを作ってやります。テキストでそのまんまね。で、以下のコマンドをcronなどで定期的に実行してやって。 |
| + | /usr/bin/sa-update --gpgkeyfile /foo/var.keys |
| + | これで、/var/lib/spamassassin配下に、定期的にアップデートファイルが作られますのねで。 |
| + | |
| + | **DCCの設定 [#bb0aedb2] |
| + | 手元にあるSPAMだけだと、パターン数が少なすぎて、すべてをマッチさせるのは難しいもの。このために、NWのサーバに貯められているSPAMパターンと照合するという手があります。そのいくつかに、DCC,Pyzor,Razor等があります。今回私はDCCを選択いたしました。どうもDCCが一番精度がいいらしい?という評判だったので。で、DCCを導入いたします。 |
| + | ***DCCDのインストール [#p25ea2b2] |
| + | まず/etc/portage/package.keywordsに mail-filter/dcc を追加いたします。んで |
| + | # emerge dcc |
| + | /etc/dcc/dcc_confを編集いたします。以下に特に注意して。 |
| + | DCCD_ENABLE=off |
| + | DCCIFD_ENABLE=on |
| + | さらに、/etc/init.d/dccにバグがあるので、以下を編集してやります。 |
| + | if [[ "${DCCIFD}" != "on" ]] |
| + | ↓ |
| + | if [[ "${DCCIFD_ENABLE}" != "on" ]] |
| + | で、DCCを起動してやってください。 |
| + | # rc-update add dcc default |
| + | # /etc/init.d/dcc start |
| + | 次に、/etc/spamassassin/v310.preを編集します。 |
| + | # loadplugin Mail::SpamAssassin::Plugin::DCC |
| + | ↓ |
| + | loadplugin Mail::SpamAssassin::Plugin::DCC |
| + | コメントを外してやる |
| + | そして、/etc/spamassassin/local.cfに、以下を追加してやってください。 |
| + | # DCC Configuration |
| + | use_dcc 1 |
| + | dcc_home /var/dcc |
| + | dcc_path /usr/bin/dccproc |
| + | add_header all DCC _DCCB_: _DCCR_ |
| + | 以上でっす |
| + | |
| **SPFの設定 [#ve425015] | | **SPFの設定 [#ve425015] |
| + | spamassassinにSPFを設定するのは楽ちんです。/etc/spamassassin/init.preを以下のように編集します。 |
| + | # SPF - perform SPF verification. |
| + | # |
| + | #loadplugin Mail::SpamAssassin::Plugin::SPF |
| + | ↓ |
| + | loadplugin Mail::SpamAssassin::Plugin::SPF |
| + | コメントを外す |
| + | 以上でっす。 |
| + | |
| * Postfix側の設定[#p8bce71c] | | * Postfix側の設定[#p8bce71c] |
| + | spamassassinだけでは、受信したメールをSPAMと分類するだけ。入り口であるPostfixにて怪しいものを拒否する手があります。先程述べたgreylistingですが、これをPosftix上で実現してくれるツールが、Postgreyです。 |
| + | |
| **Postgrey [#vba5c072] | | **Postgrey [#vba5c072] |
| + | ***インストール [#xbcc195d] |
| + | # emerge postgrey |
| + | ***設定 [#f25ff92b] |
| + | /etc/conf.d/postgreyに、設定を追加いたします。重要なのは以下ですかね |
| + | # 初受信のサーバを、何秒受信拒否するか。デフォルトは5分 |
| + | POSTGREY_DELAY=300 |
| + | # postgreyへのオプション指定。--max-ageは、受信許容したサーバのキャッシュを何日で消去するか。デフォルトは30日 |
| + | POSTGREY_OPTS="--max-age=30" |
| + | そしてpostgreyを起動してやります。 |
| + | # rc-update add postgrey default |
| + | # /etc/init.d/postgrey start |
| + | で、最後にpostfixの設定。/etc/postfix/main.cfに以下の設定を追記します。 |
| + | smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated, |
| + | reject_unauth_destination,check_policy_service inet:127.0.0.1:10030 |
| + | 後ろにある、check_policy_service inet:127.0.0.1:10030が重要です。smtpd_recipient_restrictionsは項目の順序も重要ですので、気をつけてね!で、最後に |
| + | # /etc/init.d/postfix reload |
| + | |
| **バックアップサーバ側の設定 [#ra8dcbd0] | | **バックアップサーバ側の設定 [#ra8dcbd0] |
| + | 今までは、メインサーバのpostfixがダウンしてしまった場合、上位のDDNS側で、エラーではじかれたメールをプロバイダに転送してくれるよう設定してました。でも、これがSPAM大量増産の大本!せっかくこちらのPostfixでエラーで弾かれても、全部プロバイダに転送されちゃう。そのため、このプロバイダへの転送を止めちゃえば、SPAMも減るってもの。 |
| + | しかし、もしもメインサーバがダウンした場合、外部から送信されてきたメールが着信せず、消えてしまいかねないので、それも困る。このためバックアップサーバが受信して、キューイングしておいてくれるように設定しておきます。 |
| + | メインサーバのpostfixとの設定の違いは |
| + | -受信したら、自分のドメインに該当するメールアドレスのみ、メインサーバのpostfixへ転送する |
| + | -上記の設定なので、amavisに転送する設定は行わない |
| + | |
| + | その他の設定(SMTP-AUTH/postgrey)は有効としておきます。このため、メインサーバとの差分として、amavis設定を削除し、転送用設定を付け加えときます。/etc/postfix/main.cfに以下を追加します。 |
| + | transport_maps = hash:/etc/postfix/transport |
| + | さらに、/etc/postfix/transportというファイルを作り、ドメインと転送先をそれぞれ指定。 |
| + | example.net smtp:[XXX.XXX.XXX.XXX] |
| + | .example.net smtp:mail.server |
| + | example.netは、MXレコードを引かずに([]を付けるとMXレコードを参照しない)IPアドレスXXX.XXX.XXX.XXXに転送する。.example.net(XXX.example.net等)はmail.serverに転送する、という設定。で、 |
| + | # postmap transport |
| + | を実行して、ハッシュマップを作ります。最後に |
| + | # /etc/init.d/postfix reload |
| + | で完成。 |
| + | |
| + | ちなみに、このバックアップサーバは、メールを受信したらキューイングしてとっておいてくれます。マスタサーバが生き返ったら、再送してくれるありがたいサーバとなります。マスタサーバが死んでる間は、こいつに貯めておいてもらえば、わざわざプロバイダに転送してもらわなくて済むという寸法。 |
| + | |
| *結果 [#kfe32905] | | *結果 [#kfe32905] |
| + | 劇的にSPAMメールが減りました!それまでは1日に300~400通近いSPAMが、1/6以下に減りました。なぜSPAMが0近くにならないかというと、プロバイダのメールに着信するSPAMは、無条件で受信しちゃうから…しかし、そのメールはspamassassinにてSPAMに分類されます。bayesフィルタ、ルール、DCC、SPFを噛ますことで、SPAM認識率が相当向上しました。これでしばらくは安心でしょう♪ |