メールサーバーでウィルス&スパムチェック(Postfix+amavisd-new+Clam AntiVirus+SpamAssassin) 編 合計:
昨日:
今日:
更新日:2011/11/15
<<ホームへ戻る


Clam AntiVirusSpamAssassinを使用してメールサーバー側でメールに対するウィルスチェックとスパムチェックを行う。
なお、メールサーバー(Postfix)とClam AntiVirus、SpamAssassinとの連携はamavisd-newを利用して行なう。

【前提条件】メールサーバー(postfix)、ウィルスソフト(clamav)が構築済みであること。

 
◆clamdの設定 <<TOP

clamdとPostfixが連携できるようにするため、clamdをソケット通信型で起動するようにする

[root@server ~]# vi /etc/clamd.conf ← clamd設定ファイル編集
   ・
   ・
# Path to a local socket file the daemon will listen on.
# Default: disabled (must be specified by a user)
LocalSocket /var/run/clamav/clamd.sock ← clamdソケット名確認
   ・
   ・
# TCP port address.
# Default: no
#TCPSocket 3310 ← TCP通信を無効化するためコメントアウト

[root@server ~]# /etc/rc.d/init.d/clamd restart ← 再起動
Stopping Clam AntiVirus Daemon:                            [  OK  ]
Starting Clam AntiVirus Daemon: Bytecode: Security mode set to "TrustSigned".
                                                           [  OK  ]
[root@server ~]# 
 
◆amavisd-newのインストール <<TOP

yumの標準では、パッケージがありませんのでEPELリポジトリ( Fedoraプロジェクト提供のRHEL用パッケージ)を追加してamavisd-newをインストールする

[root@server ~]# yum -y --enablerepo=epel install amavisd-new ← epelを有効にしてamavisd-newインストール
   ・
   ・
Running Transaction
  Installing     : amavisd-new-2.6.4-2.el6.noarch                                           1/1 

Installed:
  amavisd-new.noarch 0:2.6.4-2.el6                                                              

Complete!
[root@server ~]#

 
◆amavisd-new設定 <<TOP

 

[root@server ~]# vi /etc/amavisd/amavisd.conf ← 設定ファイル編集(場所が変わっている)
# COMMONLY ADJUSTED SETTINGS:
$undecipherable_subject_tag = '';
   ・
   ・
# @bypass_virus_checks_maps = (1);  # controls running of anti-virus code
@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code
   ↑ スパムチェックは行わないprocmail経由で行うため
# $bypass_decode_parts = 1;         # controls running of decoders&dearchivers

#$mydomain = 'example.com';   # a convenient default for other settings
   ↓ 自サーバのドメイン名
$mydomain = 'arisonsvr.org';

#$virus_admin               = undef;                    # notifications recip. ← コメントアウト
   ↑ ウィルス検知メールを管理者に通知しない

# ### http://www.clamav.net/
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], ← ソケット場所変更
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
      
 
◆amavisd-new起動 <<TOP

 

[root@server ~]# [root@server ~]# /etc/rc.d/init.d/amavisd start  ← amavisd-new起動
amavisd を起動中:                                          [  OK  ]

[root@server ~]# chkconfig amavisd on ← 起動時on
[root@server ~]# chkconfig --list amavisd ← 起動時on確認
amavisd         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@server ~]# 
      
 
◆SpamAssassin起動 <<TOP

 

[root@server ~]# /etc/rc.d/init.d/spamassassin start
spamd を起動中:                                            [  OK  ]

[root@server ~]# chkconfig spamassassin on ← 自動起動on
[root@server ~]# chkconfig --list spamassassin ← 確認
spamassassin 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← ランレベル2〜5のon確認
[root@server ~]#
 
◆SpamAssassin設定 <<TOP
 

 

[root@server ~]# vi /etc/mail/spamassassin/v310.pre ← v310.preの編集
   ・
   ・
   ・
# TextCat - language guesser
#
loadplugin Mail::SpamAssassin::Plugin::TextCat ← 行頭の#を削除TextCatプラグインの有効化

[root@server ~]# vi spamassassin-update ← 更新用のスクリプト作成
#!/bin/bash

# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs

# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
    cp user_prefs local.cf

    # スパム判断したメールを添付形式にしないように設定
    echo "report_safe 0" >> local.cf

    # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
    echo "rewrite_header Subject ***SPAM***" >> local.cf

    # SpamAssassin再起動
    /etc/rc.d/init.d/spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org


[root@server ~]# chmod +x spamassassin-update ← 実行権限付与

[root@server ~]# ./spamassassin-update ← 更新を実行してみる

[root@server ~]# ll /etc/mail/spamassassin/local.cf ← 確認
-rw-r--r-- 1 root root 423123 11月 15 12:59 2011 /etc/mail/spamassassin/local.cf
[root@server ~]# 

[root@server ~]# mv spamassassin-update /etc/cron.daily/ ← 毎日実行するように移動

[root@server ~]# vi /etc/cron.d/sa-update ← spamassassinルール自動更新cron設定
# 設定ファイル更新時のみSpamAssassin再起動
# *** DO NOT MODIFY THIS FILE ***
### Spamassassin Rules Updates ###
#
# http://wiki.apache.org/spamassassin/RuleUpdates
#
# sa-update automatically updates your rules once per day if a spam daemon like
# spamd or amavisd are running.  You can force sa-update to run in
# /etc/sysconfig/sa-update
#
# /var/log/sa-update.log contains a history log of sa-update runs

10 4 * * * root /usr/share/spamassassin/sa-update.cron 2>&1 | tee -a /var/log/sa-update.log
↑ 行頭の#を削除 sa-update.cronの有効化

[root@server ~]# vi /etc/postfix/main.cf ← postfix設定ファイル確認
   ・
   ・
# IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN
# ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER.
#
#mailbox_command = /some/where/procmail
#mailbox_command = /some/where/procmail -a "$EXTENSION"
mailbox_command = /usr/bin/procmail ← 確認

[root@server ~]# vi /etc/procmailrc ← procmail設定ファイル編集
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

# 未承諾広告メール削除
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null

# SpamAssassinによるスパムチェック
:0fw
|/usr/bin/spamc

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
/dev/null

      
 
◆Postfix設定 <<TOP

 

[root@server ~]# vi /etc/postfix/master.cf ← masterファイル編集
↓ 以下を最終行に追加
smtp-amavis unix -    -    n    -    2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes

127.0.0.1:10025 inet n    -    n    -    -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000

[root@server ~]# vi /etc/postfix/main.cf ← mainファイルの編集
↓ 以下を最終行に追加
content_filter=smtp-amavis:[127.0.0.1]:10024
      
 
◆postfixの再起動 <<TOP

 

[root@server ~]# /etc/rc.d/init.d/postfix restart
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

[root@server ~]# 
      
 
◆スパムメール振分け設定(受信メールサーバーがIMAPの場合のみ) <<TOP

 

[root@server ~]# mkdir -p /etc/skel/Maildir/.Spam/new ← 新規ユーザ作成時に自動的にスパム用ディレクトリを作成

[root@server ~]# mkdir -p /etc/skel/Maildir/.Spam/cur

[root@server ~]# mkdir -p /etc/skel/Maildir/.Spam/tmp

[root@server ~]# chmod -R 700 /etc/skel/Maildir/.Spam

[root@server ~]# 
      

スパム振り分け設定

[root@server ~]# vi /etc/procmailrc ← procmailrc設定ファイルの編集
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$HOME/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力


# 未承諾広告メール削除
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null


# SpamAssassinによるスパムチェック
# ※fetchmail取り込みメールのスパム検査
:0fw
*!^X-Spam-
|/usr/bin/spamc

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
/dev/null

# SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送
:0
*^X-Spam-Flag: YES
$SPAM

[root@server ~]# 
      
 
◆amavisd-new確認 <<TOP
 
受信したメールヘッダーに、X-Virus-Scanned: amavisd-new at arisonsvr.orgと表示されていることを確認する。
 
◆ウィルスチェック <<TOP
 
自分自身にテストウィルスを添付したメールを送ってみて、メールが届かないことを確認する。
 
◆スパムチェック <<TOP
 
 
◆スパムメール学習(受信メールサーバーがIMAPの場合のみ) <<TOP
 
[root@server ~]# vi spamassassin-learn ← スパム学習スクリプトの作成

#!/bin/bash

PATH=/usr/bin:/bin

for user in `ls /home/`
do
    # 正常メール
    hammail=/home/$user/Maildir/cur

    # 正常メール学習
    if [ -d "$hammail" ]; then
        # 正常メールをSpamAssassinに学習させる
        su $user -s "/bin/bash" -c "sa-learn --ham $hammail | \
        logger -p mail.info -t 'sa-learn for $user'"
    fi

    # スパムメール
    spammail=/home/$user/Maildir/.Spam/cur

    # スパムメール学習
    if [ -d "$spammail" ]; then
        # スパムメールをSpamAssassinに学習させる
        su $user -s "/bin/bash" -c "sa-learn --spam $spammail | \
        logger -p mail.info -t 'sa-learn for $user'"

        # 受信後一ヶ月経過したスパムメールを削除
        tmpwatch -m 720 $spammail
    fi
done

[root@server ~]# chmod 700 spamassassin-learn ← 実行権限付与

[root@server ~]# mv spamassassin-learn /etc/cron.daily/ ← 毎日実行するように移動

[root@server ~]#
      
 
◆広告等 <<TOP
 

 
   
 
TOPへ

Copyright(C) 2005-2011 arisonserver. All rights reserved.