[Postfix+MySQL][CentOS] yumでSpamAssassinを導入
SpamAssasinのみをインストールしたくなったのでメールサーバ再構築のついでに試してみる。メールサーバ構築のまとめ でPostfix+MySQL+postfixadminは構築済みとして想定しています。そちらではウィルスチェックも導入しているため今回はスパムチェックのみの導入。
また、学習機能があるようなので試してみる。スパム判定の精度が高まるみたい。
- .Spam ディレクトリの作成
- スパムメールの学習
- 通常のメールの学習
コレに合わせて postfixadmin +procmailな環境でメールディレクトリの自動作成・削除 のメールディレクトリ作成スクリプトに .Spam を作るコマンドを追加。
目次
SpamAssassinのインストール
yum install spamassassin
procmailの設定
- バーチャルドメインでのメールアカウントを使用。
- 保存ディレクトリは /mail/domain.tld/user@domain.tld とする。
- $DOMAINと$USERは Postfixのmaster.cfで取得している。
/etc/procmailrc を新規作成する。SpamAssassinの起動条件は参考ブログより引用。
# vi /etc/procmailrc SHELL=/bin/bash PATH=/usr/bin:/bin DEFAULT=/mail/$DOMAIN/$USER\@$DOMAIN/ LOCKFILE=/mail/procmail.lock LOGFILE=/mail/procmail.log # ログ出力先 #VERBOSE=ON # 詳細ログ出力 # メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します :0fw *!^X-Spam.* |spamassassin # メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します :0 * ^X-Spam-Status: Yes $DEFAULT/.Spam/
ログの肥大化を防ぐため、ログローテーション設定ファイル新規作成する。
# vi /etc/logrotate.d/procmail /mail/procmail.log { missingok nocreate notifempty }
Postfixとprocmailを連携させる
main.cf の設定
# vi /etc/postfix/main.cf ....最終行付近 # virtual_transport = virtual ←コメントアウト virtual_transport = procmail ←追記 procmail_destination_recipient_limit = 1 ←追記
master.cf の設定
# vi /etc/postfix/master.cf 最終行に追記 procmail unix - n n - - pipe flags=R user=vuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
SpamAssassin起動
# service spamassassin start
SpamAssassin自動起動設定
# chkconfig spamassassin on
Postfixを再起動して設定を有効化
# /etc/rc.d/init.d/postfix restart
スパムメールの学習
スパムメールの判定制度を上げるために学習する事が出来る。また、迷惑メールではないメールの学習も可能。
スパムメールを学習するコマンド(全てのユーザのSpamフォルダを対象)
# /usr/bin/sa-learn --spam /mail/*/*/.Spam/cur
通常のメールを学習するコマンド(全てのユーザの受信フォルダを対象)
# /usr/bin/sa-learn --ham /mail/*/*/cur
参考ブログではcronに設定していたけど、Spamメールを確認してから手動でコマンドを実行するようにする。~/binにコマンドスクリプトを作成してsudoで実行できるようにしておく。
$ mkdir ~/bin $ vi ~/bin/spam-learn #!/bin/sh /usr/bin/sa-learn --spam /mail/*/*/.Spam/cur # スパムメール保存ディレクトリの中身を強制的に消去してよいのなら以下の記述を追加 /bin/rm -f /mail/*/*/.Spam/cur/* echo 'All Spam Mail Deleted.' $ chmod 700 ~/bin/spam-learn $ sudo chown root:root ~/bin/spam-learn
スパムメール学習コマンドを使う時
メーラーでSpamフォルダに迷惑メールしか無いと確認してから以下のコマンドで学習&スパムメール削除
$ sudo spam-learn
入れなおしたらかなりの確率でスパムメールを排除してくれる!
参考:
-
前の記事
Perl Beginners #7へ行ってきた 2013.04.03
-
次の記事
Mojoliciousでhttps(SSL)専用ページとhttp専用ページの振り分けをroutesのbridgeを使って行う 2013.04.29