Clam AntiVirusとSpamAssassinを使用してメールサーバでウィルスとスパムチェックを行います。ウィルスを検出したメールはメールサーバで削除を行います。SPAMと判定したメールはSPAMという専用のフォルダに振り分けます。
メールサーバー(Postfix)とClam AntiVirusとの連携はamavisd-newをspamAssassinとの連携はProcmailを利用して行ないます。この記事は、「Clam AntiVirus」を導入済みであることが前提となります。まだ導入していない場合はこちらの記事を参考に導入してください。対象のOSはCentos7となります。
目次
1.Clam AntiVirusのインストール
Clam AntiVirusと関連パッケージをEPELリポジトリからyumコマンドで導入します。
1 |
# yum --enablerepo=epel -y install amavisd-new clamav-server clamav-server-systemd |
2.環境設定と起動
設定ファイルをコピー後、修正し環境設定を行います。
1 2 3 4 |
# cp /usr/share/doc/clamav-server*/clamd.sysconfig /etc/sysconfig/clamd.amavisd # vi /etc/sysconfig/clamd.amavisd CLAMD_CONFIGFILE=/etc/clamd.d/amavisd.conf #←コメント解除 CLAMD_SOCKET=/var/run/clamd.amavisd/clamd.sock #←コメント解 |
CnetOS7では再起動時に消えてしまわないように、/var/run/以下のディレクトリを永続化させる設定を行います。
1 2 |
# vi /etc/tmpfiles.d/clamd.amavisd.conf d /var/run/clamd.amavisd 0755 amavis amavis - |
サービスを起動するRunLevelを設定します。CentOS7からはWantedByに設定します。
1 2 3 |
# vi /usr/lib/systemd/system/clamd@.service [Install] WantedBy=multi-user.target #最終行に追加します |
サービスの起動と自動起動設定をします。
1 2 |
# systemctl start clamd@amavisd # systemctl enable clamd@amavisd |
3.Amavisdの環境設定と起動
1 2 3 4 5 6 |
# vi /etc/amavisd/amavisd.conf @bypass_spam_checks_maps = (1); # controls running of anti-spam code ←コメント解除(スパムチェックを行わない) $mydomain = 'hogehoge.com'; ←自ドメイン名に変更 $myhostname = 'mail.hogehoge.com'; ←自ホスト名に変更 $notify_method = 'smtp:[127.0.0.1]:10025'; ←コメント解除 $forward_method = 'smtp:[127.0.0.1]:10025'; ←コメント解除 |
amavisdの起動と自動起動設定
1 2 |
# systemctl start amavisd # systemctl enable amavisd |
spamassassinの起動と自動起動設定
1 2 |
# systemctl start spamassassin # systemctl enable spamassassin |
4.Postfix の設定
main.cfの設定
1 2 |
# vi /etc/postfix/main.cf content_filter=smtp-amavis:[127.0.0.1]:10024 #最終行に追記する |
master.cfの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# vi /etc/postfix/master.cf #↓最終行に追記する 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 |
再起動して設定を反映させます。
#systemctl restart postfix
5.procmailの導入
(1)インストール
1 |
# yum -y install procmail |
(2)Postfix連携
procmail のパスを確認しmain.cfにprocmailとの連携を設定する。
1 2 3 4 |
# which procmail /usr/bin/procmail # vi /etc/postfix/main.cf mailbox_command = /usr/bin/procmail ← 追加(Procmailと連携するようにする) |
修正後、Postfixを再起動する。
# systemctl restart postfix
(3)Procmail設定ファイル作成
/etc/procmailrcにスパムチェックの設定をする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# vi /etc/procmailrc ← procmail設定ファイル作成 SHELL=/bin/bash PATH=/usr/bin:/bin DROPPRIVS=yes MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ SPAM=$MAILDIR/.spam/ LOGFILE=$HOME/.procmail.log # ログ出力先 #VERBOSE=ON # 詳細ログ出力 # SpamAssassinによるスパムチェック :0fw |/usr/bin/spamc # SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配送 :0 *^X-Spam-Flag: YES $SPAM |
(4)SPAM振分ディレクトリ作成
既存ユーザー用スパムメールボックス作成(IMAPの場合)
1 2 3 |
# mkdir -p /home/<user_name>/Maildir/.spam/{cur,new,tmp} # chmod -R 700 /home/<user_name>/Maildir/.spam # chown -R user_name:user_name /home/user_name/Maildir/.spam |
追加ユーザー用スパムメールボックス作成(IMAPの場合)
1 2 |
# mkdir -p /etc/skel/Maildir/.spam/{cur,new,tmp} # chmod -R 700 /etc/skel/Maildir/.spam |
(5)ログローテーション設定
1 2 3 4 5 6 |
# vi /etc/logrotate.d/procmail /home/*/.procmail.log { missingok nocreate notifempty } |
6.SpamAssassinの導入
(1)インストールと自動起動設定
1 |
# yum -y install spamassassin |
インストールしたら自動起動の設定をします。
1 2 |
# systemctl start spamassassin # systemctl enable spamassassin |
(2)設定ファイル等自動更新設定
・設定ファイル保存用ディレクトリ作成
# mkdir /etc/mail/spamassassin/site
・自動実行スクリプトの作成
# vi spamassassin-update
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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 site/users.cf # スパム判断したメールを添付形式にしないように設定 #echo "report_safe 0" >> local.cf # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ #echo "rewrite_header Subject ***SPAM***" >> local.cf # SpamAssassin再起動 if [ -f /etc/rc.d/init.d/spamassassin ]; then /etc/rc.d/init.d/spamassassin restart > /dev/null /etc/rc.d/init.d/amavisd restart > /dev/null else systemctl restart spamassassin > /dev/null systemctl restart amavisd > /dev/null fi fi cp user_prefs user_prefs.org |
設定ファイルを以下の3つに分離します。
/etc/mail/spamassassin/local.cf #設定オプションのみのファイル
/etc/mail/spamassassin/site.cf #includeオプションのみのファイル
/etc/mail/spamassassin/site/*.cf #site.cfにより読み込まれるファイル
local.cfは以下の設定だけに変更する。
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/mail/spamassassin/local.cf required_score 8.0 report_safe 0 rewrite_header Subject ***SPAM*** normalize_charset 1 meta FROM_EXCESS_BASE64 0 meta MIME_BASE64_TEXT 0 meta TVD_SPACE_RATIO 0 meta SUBJ_ILLEGAL_CHARS 0 meta SUBJECT_NEEDS_ENCODING 0 |
インクルード設定ファイルの新規作成
site.cfにはダウンロードした設定ファイルのパスを指定する
1 2 3 |
ダウンロードした設定ファイルのパスを指定する # vi /etc/mail/spamassassin/site.cf include site/users.cf |
・スクリプト実行と自動実行化
1 2 3 |
# chmod +x spamassassin-update ← SpamAssassin設定ファイル最新化スクリプトへ実行権限付加 # ./spamassassin-update ← SpamAssassin設定ファイル最新化スクリプト実行 # mv spamassassin-update /etc/cron.daily/ ← SpamAssassin設定ファイル最新化スクリプトを毎日自動実行されるディレクトリへ移動 |
(3)SPAM学習設定
tmpwatchインストール
1 |
# yum -y install tmpwatch |
学習スクリプト作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 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 |
自動実行の設定
1 2 |
# chmod 700 spamassassin-learn ← 実行権限付加 # mv spamassassin-learn /etc/cron.daily/ ← 日次実行ディレクトリへ移動 |
参考にさせて頂いたサイト
Server World(Centos7:Postfix + Clamav + Amavisd)
ありがとうございます。