aikawa

milterでウィルスチェック、おまけでPostgrey

前回SpamAssasssinのmilterを使ったので、引き続きmilterでウィルスチェックと、greylist対応にPostgreyを使ってみます(PostgreSQLではない)。

ClamAV

CentOSでリポジトリから入れられるClamAVを使ってみます。

dnf install clamav clamav-update clamav-data clamd
  • /etc/clamd.d/scan.conf
#Example<br>LogFile /var/log/clamd.scan<br>PidFile /run/clamd.scan/clamd.pid<br>LocalSocket /run/clamd.scan/clamd.sock<br>#User clamscan

Exampleはデフォルトで無効なのを確認し、PidとLocalSocketを指定して、Userをコメント化します。ついでにログも取ってみます。

そして起動。

systemctl enable clamd@scan --now

次に更新用設定。

  • /etc/freshclam.conf
#Example
NotifyClamd /etc/clamd.d/scan.conf

Exampleをコメント化し、上で設定したscan.confをNotifyClamdに指定します。そしたら起動。

systemctl enable clamav-freshclam --now

ClamAV-milter

続いてmilterをインストール。

dnf install clamav-milter
  • /etc/mail/clamav-milter.conf
#Example<br>MilterSocket /run/clamav-milter/clamav-milter.socket<br>MilterSocketMode 660<br>ClamdSocket unix:/run/clamd.scan/clamd.sock<br>OnInfected Blackhole<br>AddHeader Replace

Exampleをコメント化、Socket(とMode)を指定して上のscan.confで指定したsocketをこちらに指定。

OnInfectedでウィルス判定なら破棄し、チェックしたらヘッダーをメールに追加します。

これで起動します。

systemctl enable clamav-milter --now

Postfix

milterの設定と、milterが動作していない時は素通しする設定を入れます。SpamAssassinのmilterの後ろにカンマを付けてClamAVのmilterを指定します。

# for milter
smtpd_milters = unix:/run/spamass-milter/postfix/sock,
 unix:/run/clamav-milter/clamav-milter.socket
milter_default_action = accept

clamiltグループにpostfixを追加します。

usermod -G clamilt -a postfix

リロード

systemctl reload postfix

メールを送ると、X-Virus-* ヘッダーが追加されます。

弾くテストの場合は、EICARテストを本文に書いて送ると、破棄されて届きません。チェックに掛かりそうなのでカスペルスキーのページを参考に。
弾かれると、/var/log/maillogに以下のようなログが追加されます。

milter-discard: END-OF-MESSAGE from localhost[::1]: milter triggers DISCARD action;

Postgrey

milter-greylistはちょっと面倒なので、postgreyを使います。

dnf install postgrey
  • /etc/postfix/main.cf

Dovecot クォータの設定に続けて、postgreyのSocketを追加。

smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:12340
 ,check_policy_service unix:/var/spool/postfix/postgrey/socket

postgreyを起動してpostfixをリロード

systemctl enable postgrey --now
systemctl reload postfix

メールを送ろうとすると、greylist制限で最初の試行から60秒間は以下のようなエラーが出て送れません。60秒後に送ると今度は送れて、二通目以降は待たずに送れるようになります。

※60秒以内に再度送ろうとすると、60 secondsが徐々にカウントダウンしている事が分かります。

では、今度はWhitelistに登録して待たずに通すようにしてみます。

  • /etc/postfix/postgrey_whitelist_clients.local
virtual.localdomain

自ドメインを追加したら、postgreyを(リロードは無いので)リスタートします。

systemctl restart postgrey

メールを送ると、特に待たずに送れて、/var/log/maillogに以下のようにtripletに見つかったからパスしたよ、と記録されます。

postgrey[11813]: action=pass, reason=triplet found, client_name=localhost, client_address=::1, sender=yamada@virtual.localdomain, recipient=yamada@virtual.localdomain

待ち時間の60秒を変更したい時は、/etc/sysconfig/postgreyの–delay=60を変更します。