AMaViS

clamavと連携させる事で、メールのウイルス検査を実現するソフトウェア。
単体でリレーMTAとして動作させる事も可能だが、
sendmailやPostfixとかの他MTAで一度受けた後にAMaViSに転送する方が、
セキュリティ的に望ましい。

構築環境

今回検証した環境はこちら

構築(Debian環境)

1. インストール
amavisの一部コマンドがnon-freeリポジトリを使っている為、
リポジトリを追加する事でインストール出来るようにする必要がある。

# vi /etc/apt/sources.list.d/jessie.non-free.list
==================================================
deb http://ftp.jp.debian.org/debian/ jessie non-free
deb http://ftp.jp.debian.org/debian/ jessie-updates non-free
deb http://ftp.jp.debian.org/debian/ jessie-backports non-free

# apt-get install amavisd-new spamassassin clamav-daemon
# apt-get install pyzor razor libnet-dns-perl libmail-spf-perl
# apt-get install arj bzip2 cabextract cpio file gzip lha nomarch pax rar unrar unzip unzoo zip zoo


2. 設定
debian環境の場合は、amavisの設定ファイルが細切れになっている。
概ね、機能毎に纏まっているが一部の設定は全く違うファイルにあったりするので、
該当するコンフィグが見つからない場合は、

# grep -r "検索文字列" ./*

で探し出すのが良い。


そのまま使う設定ファイル

/etc/amavis/conf.d/01-debian
/etc/amavis/conf.d/30-template_localization
/etc/amavis/conf.d/50-user



/etc/amavis/conf.d/05-domain_id

< chomp($mydomain = `head -n 1 /etc/mailname`);
---
> chomp($mydomain = "hoge.org");



/etc/amavis/conf.d/05-node_id

< chomp($myhostname = `hostname --fqdn`);
---
> chomp($myhostname = "mail.hoge.org");



/etc/amavis/conf.d/15-av_scanners

! ['ClamAV-clamd',
!   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
!   qr/\bOK$/m, qr/\bFOUND$/m,
!   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
---
&ask_daemonの第2引数をclamavのソケットと合わせる



/etc/amavis/conf.d/15-content_filter_mode

< @bypass_spam_checks_maps = (
<   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
---
> @bypass_spam_checks_maps = (1);



/etc/amavis/conf.d/20-debian_defaults

< $QUARANTINEDIR = "$MYHOME/virusmails";
< $quarantine_subdir_levels = 1; # enable quarantine dir hashing
---
> ###$QUARANTINEDIR = "$MYHOME/virusmails";
> ###$quarantine_subdir_levels = 1; # enable quarantine dir hashing
==================================================
< @keep_decoded_original_maps = (new_RE(
<   qr'^MAIL$',
<   qr'^MAIL-UNDECIPHERABLE$',
<   qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
<   qr'^Zip archive data',
< ));
---
> @keep_decoded_original_maps = (new_RE(
>   qr'^MAIL$',
>   qr'^MAIL-UNDECIPHERABLE$',
>   qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
> ###qr'^Zip archive data',
> ));
==================================================
! [1] $inet_socket_bind = '127.0.0.1';
! [2] $inet_socket_port = 10026;
! [3] $forward_method = 'smtp:[127.0.0.1]:10025';
! [4] $X_HEADER_TAG = 'X-Virus-Scanned';
! [5] $X_HEADER_LINE = "$myproduct_name at $mydomain";
! [6] $virus_admin = 'admin@mail.hoge.org';
! [7] $spam_admin = 'admin@mail.hoge.org';
---
[1] amavisの待ち受けるIPアドレス
[2] amavisの待ち受けるTCPポート番号
[3] ウイルス検査完了メールの転送先。例だとIP:127.0.0.1-TCP/10025に投げる
[4] ウイルス検査完了メールに付与するヘッダ
[5] ウイルス検査完了メールに付与するヘッダパラメータ
[6] ウイルスメールの転送先アドレス。ドメイン部を$mydomainに置き換え可能
[7] スパムメールの転送先アドレス。ドメイン部を$mydomainに置き換え可能
==================================================
$banned_filename_re = new_RE(
  # [1] Block certain double extensions anywhere in the base name
  qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,

  # [2] Windows Class ID CLSID, strict
  qr'\{[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\}?$'i,

  # [3] Block these MIME types
  qr'^application/x-msdownload$'i,
  qr'^application/x-msdos-program$'i,
  qr'^application/hta$'i,

  # [4] Block these file extension
  qr'^(?!cid:).*\.[^./]*[A-Za-z][^./]*\.\s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.\s]*$'i,
  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)$'i,
  qr'^\.(exe-ms|dll)$',
);
---
[1] 二重拡張子の添付ファイルを遮断
[2] OSのCLSIDパラメータを遮断
[3] 添付ファイルのMIMEタイプで遮断
[4] 添付ファイルの拡張子で遮断



/etc/amavis/conf.d/25-amavis_helpers

< @mynetworks = qw( 127.0.0.1/32 );
---
> @mynetworks = qw( 127.0.0.1/32 10.0.0.1/32 );
---
@mynetworksはCIDR形式で記入する


3. 設定反映
書き換えた設定をAMaViSに反映させる為にプロセスの再起動を行う。

# systemctl restart amavis.service
# netstat -an | egrep -i "tcp.*10026.*LISTEN"


構築(OpenSUSE版)