メールがPostfixを通過する際にウィルスチェックを行うようにしたい。
7.0Rや7.1Rでも同じだと思うが、当方が8.0Rに移行しているため、以後はこれで試した記録とする。
下記は、参考にさせて頂いたサイト様で、全て見れば設定できる。
これらのサイトさまから情報を集め、インストールしてみたので忘備録とする。
なお、上記サイト様では、Spamassassinによるスパム対策に触れている所もあるが、このページではSpamassassinを使用しない方向ですすめる。
%su Password: # cd /usr/ports/security/clamav # make install clean # rehash
インストールが完了すると、clamav というユーザが作成される。また、/usr/local/etc/rc.d/ に 次の2つの起動/終了シェルスクリプトが作られるので、確認しておく。
amavisd-newは、Postfix と ClamAV の橋渡しをするプログラムとのこと。
# cd /usr/ports/security/amavisd-new # make install clean # rehash
インストールが完了すると、次の2つのユーザが作成される。
また、/usr/local/etc/rc.d/ に 次の起動/終了シェルスクリプトが作られるので、確認しておく。
/usr/local/etc/clamd.conf を編集する。ファイルのパーミッションが444になっている場合は、書き込み可にしてからviで開く。
# cd /usr/local/etc/ # chmod 644 clamd.conf # vi clamd.conf : ここで編集して保存 # chmod 444 clamd.conf
↓下のような具合に、LogTime行のコメントアウトを解除し、さらに、後にインストールする amavisd-new と連動させるため、実行ユーザ を vscan で動かすようにする。
# Log time with each message. # Default: no LogTime yes (途中省略) # Run as another user (clamd must be started by root for this option to work) # Default: don't drop privileges #User clamav User vscan
続けて、/usr/local/etc/freshclam.conf を編集する。ファイルのパーミッションが444になっている場合は、書き込み可にしてからviで開く。
# cd /usr/local/etc/ # chmod 644 freshclam.conf # vi freshclam.conf : ここで編集して保存 # chmod 444 freshclam.conf
↓下のような具合に、LogTime行のコメントアウトを解除し、さらに、後にインストールする amavisd-new と連動させるため、データベース・オーナー名を vscan で動かすように変更する。
# Log time with each message. # Default: no LogTime yes (途中省略) # By default when started freshclam drops privileges and switches to the # "clamav" user. This directive allows you to change the database owner. # Default: clamav (may depend on installation options) #DatabaseOwner clamav DatabaseOwner vscan
先に、ClamAV の実行ユーザを vscan に変更したので、これに合わせて関連するディレクトリのオーナー(とグループ)情報を変更する。
# chown -R vscan:vscan /var/run/clamav # chown -R vscan:vscan /var/log/clamav # chown -R vscan:vscan /var/db/clamav
# vi /usr/local/etc/amavisd.conf
下記の部分を編集(コメントを解除したり、値を変更)する。
@bypass_spam_checks_maps = (1); # controls running of anti-spam code
$mydomain = 'vdobv-sample.com'; # a convenient default for other settings
$myhostname = 'sample.vdobv.com'; # must be a fully-qualified domain name!
$final_virus_destiny = D_DISCARD;
# ### 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 ],
# # NOTE: run clamd under the same user as amavisd, or run it under its own
# # uid such as clamav, add user clamav to the amavis group, and then add
# # AllowSupplementaryGroups to clamd.conf;
# # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in
# # this entry; when running chrooted one may prefer socket "$MYHOME/clamd".
この設定ファイルの中に virusalert\@$mydomain という記述がある。このメールアドレスを作成しておく(または使用中のメールアドレスに変更する)と、ウィルス発見時にお知らせメールが届く。
# vi /etc/rc.conf
FreeBSD起動時にclamd、freshclam、amavidがデーモン起動するように、/etc/rc.conf の中に次の3行を加える。ファイル末尾でよい。
clamav_clamd_enable="YES" clamav_freshclam_enable="YES" amavisd_enable="YES"
# vi /usr/local/etc/postfix/main.cf
下記を追加。ファイル末尾にでよい。
content_filter = smtp-amavis:[127.0.0.1]:10024
さらに
# vi /usr/loca/etc/postfix/master.cf
下記を追加。ファイル末尾でよい。
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -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
FreeBSDを再起動する。
# reboot
以上、インストールと設定はここまで。
eicar に存在するテスト用のウィルスファイルを用いて挙動を確認する(利用は自己責任で!)。
ウィルス添付メールを、FromPerson ⇒ ToPerson として送る。
$final_virus_destiny の値による通知先
| D_DISCARD | virusalertへ通知 |
|---|---|
| D_BOUNCE | virusalertへ通知 |
| D_REJECT | FromPersonとvirusalertへ通知 |
| D_PASS | Subjectに「INFECTED」を付けてToPersonへ送信し、virusalertへ通知 |
送信者に対してDSNを返したい場合は、
$final_virus_destiny = D_BOUNCE;
もしくは、
$final_virus_destiny = D_PSSS; $warnvirussender = 1;
と設定するようだが、実際には未確認。
ウィルスメールと判断されたデータは下記ディレクトリに保管されるようだ(しばらく様子をみることにする)。
# cd /var/virusmails/ # ls -al