AMaViS

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

構築環境

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

  • debian 8.1 x86_64
  • CentOS 7.2 x86_64
  • openSUSE 42.2 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)

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コマンドで探し出す。

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


 設定内容


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

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


構築(CentOS)

1. インストール
コアとなるclamavと関連ライブラリはEPELリポジトリを使っている為、
事前にEPELリポジトリを追加しておく必要がある。

# yum install amavisd-new spamassassin
# yum install clamav clamav-data clamav-filesystem clamav-lib clamav-scanner-sysvinit clamav-scanner
# yum install clamav-server-systemd clamav-server-sysvinit clamav-server clamav-update


2. 設定
CentOSの場合amavisの設定ファイルは、/etc/amavisd/amavisd.confの一つに集約されている。
/etc/clamd.d/amavisd.confにも設定があるが、こちらは使わないので放置する。

 設定内容


3. スクリプト書き換え
デフォルト設定だと、amavisdclamdそれぞれamavisプロセスを起動してしまい、メモリを2倍消費する。
clamavと連携する時は、clamdからのみプロセスを実行出来れば良いので、起動スクリプトを修正して二重起動を防止する。
また、スクリプト修正に併せてtmpfiles内のユーザ・グループ設定を、amavisd・clamdの実行ユーザにそれぞれ変更する。

 設定内容


4. 設定反映
amavisdを一つだけにする為、関連するプログラムを再起動する
設定を間違えてamavisdが二重起動しようとしている場合や、systemdによるサービス自動再起動が動作し、
プログラムが上手く再起動出来ない(1つだけにならない)場合は下記ログがmessagesに出力される

systemd: Starting clamd scanner (amavisd) daemon...
clamd:   ERROR: Can't open/parse the config file /etc/clamd.d/amavisd.conf
systemd: clamd@amavisd.service: main process exited, code=exited, status=1/FAILURE
systemd: Unit clamd@amavisd.service entered failed state.
systemd: clamd@amavisd.service failed.
systemd: clamd@amavisd.service holdoff time over, scheduling restart.
systemd: start request repeated too quickly for clamd@amavisd.service
systemd: Started clamd scanner (amavisd) daemon.

 

※再起動順序
amavisdがforeground引数を付けた状態で起動していたら、clamd経由でamavisが起動している(二重起動状態)
---
# systemctl restart clamd
# systemctl restart amavisd
# netstat -an | egrep -i "tcp.*10026.*LISTEN"
# ps -ef | grep amavis


構築(openSUSE)

1. インストール
openSUSEでは標準リポジトリでamavisパッケージを導入する事が出来る筈だが、
エラーが出てしまった場合はソースRPMリポジトリとセキュリティリポジトリを追加する。

# zypper addrepo http://download.opensuse.org/distribution/leap/42.2/repo/oss/ opensuse-repo-oss
# zypper addrepo http://download.opensuse.org/repositories/security/openSUSE_Leap_42.2/security.repo opensuse-security
# zypper refresh
# zypper install clamav amavisd-new


2. 設定
openSUSEのamavisd.confは一つのファイルに固まった形になっている。
設定内容はCentOS版と殆ど同じだが、バイパス設定が少しだけ違うので注意する。

 設定内容


3. 設定反映
書き換えた設定をプロセスに反映させる為に再起動を行う。
また、デフォルトでは自動起動がOFFになっている為、自動起動をONに変更する。

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