#author("2016-09-19T23:27:44+09:00","default:nowsky","nowsky")
*AMaViS [#o146649b]
clamavと連携させる事で、メールのウイルス検査を実現するソフトウェア。
単体でリレーMTAとして動作させる事も可能だが、
sendmailやPostfixとかの他MTAで一度受けた後にAMaViSに転送する方が、
セキュリティ的に望ましい。
~
*構築環境 [#lf44aa5d]
今回検証した環境はこちら
-debian 8.1 x86_64
-openSUSE 13.1 x86_64
 ※CentOS 6.x等の非Systemd環境で構築する場合には、各スクリプトをinit用に書き換える必要がある。
~
他には下の内容で構築メモを作成
-amavisは"127.0.0.1:TCP/10026"で待ち受ける
-検査完了したメールには"X-Virus-Scanned:"のヘッダーを付与する
-ウイルスメール以外(スパムとか)は、とりあえず次のMTAへ転送する
-Clamavは事前にインストールしておく
-コンフィグディレクトリ構成は、apt-getやzypperした結果のデフォルトをそのまま使う
~
ドメイン構成などは
-メール鯖のドメイン:hoge.org
-メール鯖のFQDN:mail.hoge.org
-メール鯖のIPアドレス:10.0.0.1
-メール鯖管理者のメールアドレス:admin☆mail.hoge.org
~
*構築(Debian環境) [#v6c5c48f]
&size(16){&font(b){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
~

&size(16){&font(b){2. 設定};};
debian環境の場合は、amavisの設定ファイルが細切れになっている。
概ね、機能毎に纏まっているが一部の設定は全く違うファイルにあったりするので、
該当するコンフィグが見つからない場合は、
 # grep -r "検索文字列" ./*
で探し出すのが良い。
~
&size(14){&font(b){そのまま使う設定ファイル};};
 /etc/amavis/conf.d/01-debian
 /etc/amavis/conf.d/30-template_localization
 /etc/amavis/conf.d/50-user
~
&size(14){&font(b){/etc/amavis/conf.d/05-domain_id};};
 < chomp($mydomain = `head -n 1 /etc/mailname`);
 ---
 > chomp($mydomain = "hoge.org");
~
&size(14){&font(b){/etc/amavis/conf.d/05-node_id};};
 < chomp($myhostname = `hostname --fqdn`);
 ---
 > chomp($myhostname = "mail.hoge.org");
~
&size(14){&font(b){/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のソケットと合わせる
~
&size(14){&font(b){/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);
~
&size(14){&font(b){/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] 添付ファイルの拡張子で遮断
~
&size(14){&font(b){/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形式で記入する
~

&size(16){&font(b){3. 設定反映};};
書き換えた設定をAMaViSに反映させる為にプロセスの再起動を行う。
 # systemctl restart amavis.service
 # netstat -an | egrep -i "tcp.*10026.*LISTEN"
~
*構築(OpenSUSE版) [#fa11b2ab]