1 views
■概要
Clam AntiVirusとSpamAssassinを使用してメールサーバー側でメールに対するウィルスチェックとスパムチェックを行う。
なお、メールサーバー(Postfix)とClam AntiVirus、SpamAssassinとの連携はamavisd-newを利用して行なう。
ここでは、自宅サーバーに構築したメールサーバーに外部から送られてきたメール及び、内部から送り出すメールのウィルスチェックを行い、ウィルスを検出したらメールを破棄するようにする。
また、外部から送られてきたメールについてはスパムチェックも行ない、スパムメールであると判断した場合、受信メールサーバーがIMAPの場合はProcmailを使用してスパムメール専用のメールボックスへ配送するようにし、受信メールサーバーがPOPの場合はメールソフトで振分けられるようにメール件名に「***SPAM***」という文字列を付加するようにする。
※メールサーバー、アンチウィルス(Clam AntiVirus)、epelのリポジトリが導入済であること
■clamd設定
Clam AntiVirusとPostfixが連携できるようにするため、clamdをソケット通信型で起動するようにする。
[root@ufuso ~]# vi /etc/clamd.conf ← clamd設定ファイル編集 # Path to a local socket file the daemon will listen on. |
■amavisd-newインストール
[root@ufuso ~]# yum -y --enablerepo=epel install amavisd-new ← amavisd-newインストール Installed: amavisd-new.noarch 0:2.6.4-2.el6 Dependency Installed: altermime.x86_64 0:0.3.10-3.el6 arj.x86_64 0:3.10.22-12.el6 cabextract.x86_64 0:1.3-3.el6 freeze.x86_64 0:2.5.0-11.el6 libmspack.x86_64 0:0.2-0.1.20100723alpha.el6 lzo.x86_64 0:2.03-3.1.el6 lzop.x86_64 0:1.02-0.9.rc1.el6 nomarch.x86_64 0:1.4-6.el6 p7zip.x86_64 0:9.20.1-2.el6 perl-Archive-Tar.x86_64 0:1.58-127.el6 perl-Archive-Zip.noarch 0:1.30-2.el6 perl-Authen-SASL.noarch 0:2.13-2.el6 perl-BerkeleyDB.x86_64 0:0.43-3.el6 perl-Compress-Raw-Zlib.x86_64 1:2.020-127.el6 perl-Compress-Zlib.x86_64 0:2.020-127.el6 perl-Convert-ASN1.noarch 0:0.22-1.el6 perl-Convert-BinHex.noarch 0:1.119-10.1.el6 perl-Convert-TNEF.noarch 0:0.17-10.el6 perl-Convert-UUlib.x86_64 2:1.4-1.el6 perl-Crypt-OpenSSL-Bignum.x86_64 0:0.04-8.1.el6 perl-Crypt-OpenSSL-RSA.x86_64 0:0.25-10.1.el6 perl-Crypt-OpenSSL-Random.x86_64 0:0.04-9.1.el6 perl-DBD-SQLite.x86_64 0:1.27-3.el6 perl-DBI.x86_64 0:1.609-4.el6 perl-Digest-HMAC.noarch 0:1.01-22.el6 perl-Digest-SHA.x86_64 1:5.47-127.el6 perl-Digest-SHA1.x86_64 0:2.12-2.el6 perl-Encode-Detect.x86_64 0:1.01-2.el6 perl-Error.noarch 1:0.17015-4.el6 perl-ExtUtils-MakeMaker.x86_64 0:6.55-127.el6 perl-ExtUtils-ParseXS.x86_64 1:2.2003.0-127.el6 perl-GSSAPI.x86_64 0:0.26-5.el6 perl-HTML-Parser.x86_64 0:3.64-2.el6 perl-HTML-Tagset.noarch 0:3.20-4.el6 perl-IO-Compress-Base.x86_64 0:2.020-127.el6 perl-IO-Compress-Zlib.x86_64 0:2.020-127.el6 perl-IO-Multiplex.noarch 0:1.13-1.el6 perl-IO-Socket-INET6.noarch 0:2.56-4.el6 perl-IO-Socket-SSL.noarch 0:1.31-2.el6 perl-IO-Zlib.x86_64 1:1.09-127.el6 perl-IO-stringy.noarch 0:2.110-10.1.el6 perl-LDAP.noarch 1:0.40-1.el6 perl-MIME-tools.noarch 0:5.427-4.el6 perl-Mail-DKIM.noarch 0:0.37-2.el6 perl-Mail-SPF.noarch 0:2.007-1.el6 perl-MailTools.noarch 0:2.04-4.el6 perl-Net-DNS.x86_64 0:0.65-4.el6 perl-Net-LibIDN.x86_64 0:0.12-3.el6 perl-Net-SSLeay.x86_64 0:1.35-9.el6 perl-Net-Server.noarch 0:0.97-7.el6 perl-NetAddr-IP.x86_64 0:4.027-7.el6 perl-Package-Constants.x86_64 1:0.02-127.el6 perl-Razor-Agent.x86_64 0:2.85-6.el6 perl-Socket6.x86_64 0:0.23-3.el6 perl-Test-Harness.x86_64 0:3.17-127.el6 perl-Text-Iconv.x86_64 0:1.7-6.el6 perl-Time-HiRes.x86_64 4:1.9721-127.el6 perl-TimeDate.noarch 1:1.16-11.1.el6 perl-URI.noarch 0:1.40-2.el6 perl-Unix-Syslog.x86_64 0:1.1-3.el6 perl-XML-Filter-BufferText.noarch 0:1.01-8.el6 perl-XML-LibXML.x86_64 1:1.70-5.el6 perl-XML-NamespaceSupport.noarch 0:1.10-3.el6 perl-XML-SAX.noarch 0:0.96-7.el6 perl-XML-SAX-Writer.noarch 0:0.50-8.el6 perl-devel.x86_64 4:5.10.1-127.el6 perl-libwww-perl.noarch 0:5.833-2.el6 procmail.x86_64 0:3.22-25.1.el6 spamassassin.x86_64 0:3.3.1-2.el6 Complete! |
■amavisd-new設定
|
■amavisd-new起動
[root@ufuso ~]# /etc/rc.d/init.d/amavisd start ← amavisd-new起動 Mail Virus Scanner (amavisd) を起動中: [ OK ] [root@ufuso ~]# chkconfig amavisd on ← amavisd-new自動起動設定 |
■SpamAssassin起動
※SpamAssassinはamavisd-newと一緒にインストールされている
[root@ufuso ~]# /etc/rc.d/init.d/spamassassin start ← SpamAssassin起動 spamd を起動中: [ OK ] [root@ufuso ~]# chkconfig spamassassin on ← SpamAssassin自動起動設定 |
■SpamAssassin設定
SpamAssassinの初期設定では日本語のスパムメールに対応していないため、TLECで公開されている日本語のスパムメールに対応したSpamAssassin設定ファイルをセットアップする。
[root@ufuso ~]# vi /etc/mail/spamassassin/v310.pre ← v310.pre編集※CentOS5の場合 # TextCat – language guesser # loadplugin Mail::SpamAssassin::Plugin::TextCat ← 行頭の#を削除してコメント解除(TextCatプラ グイン有効化) ※SpamAssassin設定ファイルok_languagesオプションを有効にするため [root@ufuso ~]# vi spamassassin-update ← SpamAssassin設定ファイル最新化スクリプト作成 #!/bin/bash # TLEC(http://tlec.linux.or.jp/)よりSpamAssassin設定ファイル最新版ダウンロード cd /etc/mail/spamassassin wget -qN http://tlec.linux.or.jp/docs/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@ufuso ~]# chmod +x spamassassin-update ← SpamAssassin設定ファイル最新化スクリプトへ 実行権限付加 [root@ufuso ~]# ./spamassassin-update ← SpamAssassin設定ファイル最新化スクリプト実行 [root@centos ~]# ll /etc/mail/spamassassin ← SpamAssassin設定ファイル確認 合計 916 -rw-r–r– 1 root root 1299 1月 21 2009 init.pre -rw-r–r– 1 root root 297404 1月 26 23:25 local.cf ← SpamAssassin設定ファイル -rw-r–r– 1 root root 62 1月 21 2009 spamassassin-default.rc -rwxr-xr-x 1 root root 35 1月 21 2009 spamassassin-helper.sh -rw-r–r– 1 root root 55 1月 21 2009 spamassassin-spamc.rc -rw-r–r– 1 root root 297356 1月 24 16:00 user_prefs -rw-r–r– 1 root root 297356 1月 26 23:25 user_prefs.org -rw-r–r– 1 root root 2602 1月 26 23:24 v310.pre -rw-r–r– 1 root root 1195 1月 21 2009 v312.pre -rw-r–r– 1 root root 2416 1月 21 2009 v320.pre [root@ufuso ~]# mv spamassassin-update /etc/cron.daily/ ← SpamAssassin設定ファイル最新化 スクリプトを毎日自動実行されるディレクトリへ移動 [root@ufuso ~]# vi /etc/cron.d/sa-update ← SpamAssassinルール自動更新cron設定 |
■Postfix設定
[root@ufuso ~]# vi /etc/postfix/master.cf ← Postfix設定ファイル(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@ufuso ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル(main)編集 content_filter=smtp-amavis:[127.0.0.1]:10024 ← 最終行へ追加(amavisd-newと連携するようにする) |
■Postfix再起動
[root@ufuso ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動 Shutting down postfix: [ OK ] Starting postfix: [ OK ] |
■スパムメール振分け設定(受信メールサーバーがIMAPの場合のみ)
SpamAssassinによりメールヘッダにスパムメールの印を付けられたメールはスパム専用メールボックスへ、その他のメールは通常どおりのメールボックスへ配送するようにする。
(1)スパム専用メールボックス作成
既存ユーザについては、メールボックスにスパム専用メールボックスを追加する。
また、新規ユーザについては、ユーザ追加時に自動でスパム専用メールボックスが作成されるようにする 。
【既存ユーザ対処】 [root@ufuso ~]# vi spamfolder-create ← スパム専用メールボックス作成スクリプト作成 #!/bin/bash for user in `ls /home` do id -u $user > /dev/null 2>&1 if [ $? -eq 0 ] && [ ! -d /home/$user/Maildir/.Spam ]; then mkdir -p /home/$user/Maildir/.Spam/new mkdir -p /home/$user/Maildir/.Spam/cur mkdir -p /home/$user/Maildir/.Spam/tmp chmod -R 700 /home/$user/Maildir/.Spam chown -R $user. /home/$user/Maildir/.Spam echo $user fi done [root@ufuso ~]# sh spamfolder-create ← スパム専用メールボックス作成スクリプト実行 user ・ ・ ・ user [root@ufuso ~]# rm -f spamfolder-create ← スパム専用メールボックス作成スクリプト削除 【新規ユーザ対処】 [root@ufuso ~]# mkdir -p /etc/skel/Maildir/.Spam/{new,cur,tmp} ← 新規ユーザ追加時に自動で スパム専用メールボックス作成(1/2) [root@ufuso ~]# chmod -R 700 /etc/skel/Maildir/.Spam ← 新規ユーザ追加時に自動でスパム専用 メールボックス作成(2/2) |
(2)スパムメール振分け設定
SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送するようにする。
また、未承諾広告メール(件名に「未承諾広告※」が含まれているメール)は自動的に削除するようにする。
[root@ufuso ~]# vi /etc/procmailrc ← procmail設定ファイル編集 最終行に以下を追記 # SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送 :0 *^X-Spam-Flag: YES $SPAM |
■amavisd-new確認
自分自身に空メールを送ってみて、受信したメールのヘッダに以下のメッセージが付加されていること
X-Virus-Scanned: amavisd-new at ufuso.jp
■ウィルスチェック確認
自分自身にテストウィルスを添付したメールを送ってみて、メールが届かないこと
■スパムチェック確認
自分自身にテストスパムメール(メール本文が「XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X」のメール)を送ってみて、受信メールサーバー別に以下のようになること
※テストスパムメールはスパムスコアが高く、/etc/procmailrcの「SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除」のルールを有効にしているとサーバー側で削除されてしまうので、Spamフォルダへの配送を確認する際は当該ルールを一時的にコメントアウトしてから確認すること
【受信メールサーバーがPOPの場合】
メール件名に「***SPAM***」が付加されてSpamフォルダへ配送されていること
【受信メールサーバーがIMAPの場合】
Spamフォルダへ配送されていること
■スパムメール学習(受信メールサーバーがIMAPの場合のみ)
SpamAssassinが誤って正常メールをスパムメールと判断したり、逆にスパムメールを正常メールと判断してしまった場合、以後の誤認識を防止するためにSpamAssassinに学習をさせ、チェック精度を上げる。
ここでは、受信トレイの既読メールを正常メールとして、Spamフォルダの既読メールをスパムメールとして、定期的にSpamAssassinに学習させるようにする。
※SpamAssassinが誤って配送したメールは、ユーザ自身の操作により正常メールなら受信トレイへ、スパムメールならSpamフォルダへ移動しておくこと
(放置しておくと正常メールをスパムメールとして学習したり、逆にスパムメールを正常メールとして学習してしまう)
[root@ufuso ~]# vi spamassassin-learn ← SpamAssassin学習スクリプト作成 #!/bin/bash PATH=/usr/sbin:/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@ufuso ~]# chmod 700 spamassassin-learn ← SpamAssassin学習スクリプトに実行権限付加 [root@ufuso ~]# mv spamassassin-learn /etc/cron.daily/ ← SpamAssassin学習スクリプトを毎日 自動実行されるディレクトリへ移動 |
※スパムメール学習結果のログは/var/log/maillogに記録される
コメントを残す