一般的にメールサーバのウィルス対策といえばメールゲートウェイの位置でアプライアンスなどを導入しそこでウィルスやスパムなどのチェックをしてスプールサーバに流すのが主なやり方だと思いますがスプールサーバ側でも実施することで2重のチェックを行うのも悪くないと思います。
但し、ここで紹介するのはウィルス対策のみでスパム対策は行いません。スパム対策はメールゲートウェイのみで行うのが望ましいと考えておりなおかつアンチスパムソフトを導入するとメールサーバの動作がかなり重くなるからです。
OSはRHEL6.0(32bit)です。必要なソフトをyumからインストールしますが、そのままだと依存関係でエラーが発生し蹴られてしまいましたので、これを回避するため以下の設定を行いました。
# vi /etc/yum.repos.d/rpmforge.repo [rpmforge-extras] name = RHEL $releasever - RPMforge.net - extras baseurl = http://apt.sw.be/redhat/el6/en/$basearch/extras mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-extras #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras enabled = 1 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1 # yum check-update |
yumで必要なソフトをインストールします。
# yum install amavisd-new clamav clamd # rpm -qa | grep amavisd-new amavisd-new-2.6.6-3.el6.rf.i686 # rpm -qa | grep clamav clamav-0.97.6-1.el6.rf.i686 clamav-db-0.97.6-1.el6.rf.i686 # rpm -qa | grep clamd clamd-0.97.6-1.el6.rf.i686 |
私の場合、上記のコマンドで関連パッケージが50個程度、合わせてインストールされました。
■AMaViSの設定
ア ンチウィルスソフトとMTAを連携させるためにAMaViSを利用します。AMaViSはMTA上で動作し外からメールサーバに到達したメールをメールボックスに配信する前に添付ファイルを抽出し、もし圧縮されていれば解凍し、アンチウィルスプログラムに渡しその結果を使って配送を行います。/etc/amavisd.confが設定ファイルとなりますが、以下は必要な部分のみ抜粋して記載しています。
# vi /etc/amavisd.conf @bypass_spam_checks_maps = (1); # controls running of anti-spam code $mydomain = 'unix-power.net'; # a convenient default for other settings $virus_admin = "virusalert\@$mydomain"; # notifications recip. $mailfrom_notify_admin = "virusalert\@$mydomain"; # notifications sender $mailfrom_notify_recip = "virusalert\@$mydomain"; # notifications sender $mailfrom_notify_spamadmin = "spam.police\@$mydomain"; # notifications sender # ### http://www.clamav.net/ ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"], qr/\bOK$/m, qr/\bFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], |
上記の他にも細かいオプションは定義可能ですので上記以外の設定を行いたい場合は頑張って英語を解読して下さい。
■ClamAVの設定
設定ファイルは/etc/clamd.confです。これはウィルス検査時の動作を設定するファイルです。これの主な設定項目を以下に記載しますが、これ以外にも多数のオプションが設定可能です。
# vi /etc/clamd.conf LogFacility LOG_MAIL LogVerbose yes # Default: 100M MaxScanSize 10M # Default: 25M MaxFileSize 10M # Default: 16 MaxRecursion 10 # Default: 10000 MaxFiles 15000 |
以下のコマンドでウィルス定義ファイルの更新を行うことができます。cronに登録しておくと便利です。
# freshclam ClamAV update process started at Wed Dec 12 16:37:09 2012 main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven) WARNING: getfile: daily-15077.cdiff not found on remote server (IP: 27.96.54.66) WARNING: getpatch: Can't download daily-15077.cdiff from db.jp.clamav.net WARNING: getfile: daily-15077.cdiff not found on remote server (IP: 218.44.253.75) WARNING: getpatch: Can't download daily-15077.cdiff from db.jp.clamav.net WARNING: getfile: daily-15077.cdiff not found on remote server (IP: 203.212.42.128) WARNING: getpatch: Can't download daily-15077.cdiff from db.jp.clamav.net WARNING: Incremental update failed, trying to download daily.cvd connect_error: getsockopt(SO_ERROR): fd=5 error=110: Connection timed out Can't connect to port 80 of host db.jp.clamav.net (IP: 219.106.242.51) Trying host db.jp.clamav.net (203.212.42.128)... Downloading daily.cvd [100%] daily.cvd updated (version: 15737, sigs: 302602, f-level: 63, builder: neo) Downloading bytecode.cvd [100%] bytecode.cvd updated (version: 204, sigs: 41, f-level: 63, builder: neo) Database updated (1347030 signatures) from db.jp.clamav.net (IP: 203.212.42.128) WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock connect(): No such file or directory # freshclam ClamAV update process started at Wed Dec 12 16:42:29 2012 main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven) daily.cvd is up to date (version: 15737, sigs: 302602, f-level: 63, builder: neo) bytecode.cvd is up to date (version: 204, sigs: 41, f-level: 63, builder: neo) |
ちなみにメールのみに使えるウィルスエンジンというわけではなく手動でファイルをスキャンすることも可能です。例えば/etc以下にあるファイル全てをウィルスチェックしてみたいという場合、以下のコマンドで実施可能です。
# clamscan /etc /etc/rndc.key: OK <省略> ----------- SCAN SUMMARY ----------- Known viruses: 1341636 Engine version: 0.97.6 Scanned directories: 1 Scanned files: 125 Infected files: 0 Data scanned: 1.89 MB Data read: 1.22 MB (ratio 1.55:1) Time: 6.112 sec (0 m 6 s) |
■Postfixの設定
Postfixの設定を修正します。メールはPostfix→AMaViS→ClamAV (ウィルス感染していれば隔離 )→AMaViS→Postfixという流れでウィルスチェックが行われます。
# vi /etc/postfix/main.cf content_filter = smtp-amavis:[127.0.0.1]:10024 # vi /etc/postfix/master.cf smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -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 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 |
■各種デーモンの起動
ここ まで設定できれば各種デーモンを起動します。
# /etc/rc.d/init.d/clamd restart Stopping Clam AntiVirus Daemon: [ OK ] Starting Clam AntiVirus Daemon: [ OK ] # /etc/rc.d/init.d/amavisd start Mail Virus Scanner (amavisd) を起動中: fetch_modules: error loading optional module \ MIME/Decoder/BinHex.pm: Can't locate Convert/BinHex.pm in @INC <省略> [ OK ] |
上記のようにAMaViS起動の際に何やらエラーらしきものが発生しました。ないと言っているパッケージをyumでインストール。
# yum install perl-Convert-BinHex # /etc/rc.d/init.d/amavisd restart Mail Virus Scanner (amavisd) を停止中: [ OK ] Mail Virus Scanner (amavisd) を起動中: [ OK ] |
無事 起動しました。Postfixもリロードしておきます。
# /etc/rc.d/init.d/postfix reload postfix を再読み込み中: [ OK ] |
これでウィルスチェックがかかり、パスしたもののみ送受信するよう設定が完了しました。本当にウィルスチェックがかかっているかテストファイルを添付して送ってみてください。