3: 2010-10-04 (月) 02:14:11 maruo[6] [7] | 4: 2010-10-05 (火) 03:08:41 maruo[6] [8] | ||
---|---|---|---|
Line 140: | Line 140: | ||
*SpamAssassinの設定 [#c7e7143e] | *SpamAssassinの設定 [#c7e7143e] | ||
+ | 以下は、設定変更行ったら、amavisd_newを再起動するのを忘れないでね! | ||
+ | |||
**ベイズフィルタの学習 [#q052a4f1] | **ベイズフィルタの学習 [#q052a4f1] | ||
先ほど、SpamAssassinには自動学習機能があるといいました。ですので、収集されたメールから、Spam学習ルールを作る自動化シェルスクリプトを作りました。 | 先ほど、SpamAssassinには自動学習機能があるといいました。ですので、収集されたメールから、Spam学習ルールを作る自動化シェルスクリプトを作りました。 | ||
Line 151: | Line 153: | ||
これで受信時の自動学習及びベイズフィルタの使用を定義。ア~ンド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認識率が相当向上しました。これでしばらくは安心でしょう♪ |
(This host) = https://femt.ddo.jp