CentOS 7.0 - メールサーバ Postfix でウィルス&スパムチェック!

Updated:


「CentOS 7.0 - メールサーバ Postfix でウィルス&スパムチェック」についての記録です。

(旧バージョンでの作業記録を更新しました。興味がなければスルーしてください)

送信メールサーバ Postfix と Clam AntiVirus, SpamAssassin を Procmail で連携して、メールのウィルス&スパムチェックを行う。

0. 前提条件

  • CentOS 7.0-1406(x86_64) を NetInstall で最小限インストールしている。
  • サーバ用途なので、作業は基本的に全て一般ユーザから root になって行う。
  • クライアント側は Linux Mint 17 を想定。
  • 送信メールサーバ Postfix 構築済みであること。
  • アンチウィルスソフト Clam AntiVirus 構築済みであること。
  • 主に「CentOSで自宅サーバー構築」を参照。

1. SpamAssassin インストール

# yum -y install spamassassin

2. SpamAssassin 起動

# systemctl start spamassassin

3. SpamAssassin 自動起動設定

# systemctl enable spamassassin
ln -s '/usr/lib/systemd/system/spamassassin.service' '/etc/systemd/system/multi-user.target.wants/spamassassin.service'
# systemctl list-unit-files -t service | grep spamassassin
spamassassin.service                        enabled  # <= enabled であることを確認

4. SpamAssassin 設定ファイル最新化スクリプト作成

File: spamassassin-update

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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再起動
    if [ -f /etc/rc.d/init.d/spamassassin ]; then
        /etc/rc.d/init.d/spamassassin restart > /dev/null
    else
        systemctl restart spamassassin > /dev/null
    fi
fi
cp user_prefs user_prefs.org

5. SpamAssassin 設定ファイル最新化スクリプト権限設定

# chmod +x spamassassin-update

6. SpamAssassin 設定ファイル最新化スクリプト実行

# ./spamassassin-update

7. SpamAssassin 設定ファイル最新化スクリプト定期起動設定

# mv spamassassin-update /etc/cron.daily/

8. SpamAssassin ルール自動更新設定

SpamAssassin ルールが自動で更新されるよう cron 設定を編集する。(今は、デフォルトでこうなっている)

File: /etc/cron.d/sa-update

1
10 4 * * * root /usr/share/spamassassin/sa-update.cron 2>&1 | tee -a /var/log/sa-update.log  # <= コメント解除

9. Postfix 設定ファイル編集

Postfix と連携させるために Postfix 設定ファイル “/etc/postfix/main.cf” を以下のように編集する。(該当箇所のみ抜粋)

File: /etc/postfix/main.cf

1
2
3
#mailbox_command = /some/where/procmail
#mailbox_command = /some/where/procmail -a "$EXTENSION"
mailbox_command = /usr/bin/procmail  # <= 追加(Procmailと連携)

10. procmail 設定ファイル作成

メール振り分けのために procmail 設定ファイルを作成する。

File: /etc/procmailrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$HOME/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

# Clam AntiVirusによるウィルスチェック
AV_REPORT=`/usr/bin/clamdscan  --no-summary - 2>&1| awk -F\n -v ORS=' ' '{print}'|awk '{print $NF}'`
VIRUS=`if [ "$AV_REPORT" != "OK" ]; then echo Yes; else echo No;fi`
:0fw
| formail -i "X-Virus: $VIRUS"

# Clam AntiVirusがウィルス判定したメールは削除
:0
* ^X-Virus: Yes
/dev/null

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

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

====[ 2014-09-05 追記 ]===>
clamscan コマンドは起動の都度ウィルス定義ファイルを読み込んで処理を行うため非力なマシンでは重くなる。よって、 clamdscan コマンドに変更している。(clamd 起動している場合限定)
<===[ 2014-09-05 追記 ]====

11. procmail ログローテーション設定ファイル作成

procmail のログが肥大化しないようログローテーションの設定ファイルを作成する。

File: /etc/logrotate.d/procmail

1
2
3
4
5
/home/*/Maildir/.procmail.log {
    missingok
    nocreate
    notifempty
}

12. メールクライアント設定

スパムメールの件名には “SPAM” の文字列が付与されるので、スパム用フォルダに振り分けるようにするなり適宜設定する。


以上。





 

Sponsored Link

 

Comments