CentOS7 : Apache 2.4 + PHP 5.4 + MariaDB(mysql) 5.5 + Postfix 2.10 Patched VDA + Dovecot 2.2.10 + amavisd-new 2.10.1 + spamassassin 3.4.0 + clamav 0.99.1 環境構築したとき、ClamAVはウイルススキャナーとして検出率が悪いので、実は使いたくなかったのですが、導入しようとすると何かとエラーが発生したので、とりあえずClamAVを使っていました。
最近、メールを利用したサイバー攻撃が横行していることから、セキュリティレベルを上げるために、Sophos Anti Virus を導入することにしたので、その構築メモです。
Step1 : Sophos Anti Virus のインストール
SOPHOS の公式サイトはこちら。公式マニュアルはこちら。
ライセンスの関係で問題があるので、公式サイトからダウンロードして、インストールしたいサーバーの適当なところに保存してください。
必要なファイル:sav-linux-free-9.tgz (ダウンロードページ)
https://www.sophos.com/ja-jp/products/free-tools/sophos-antivirus-for-linux.aspx
1 2 |
tar zxvf sav-linux-free-9.tgz sudo ./sophos-av/install.sh |
インストーラーが起動するので、適当にインストールします。利用規約は q で閉じることができます。
カーネルヘッダーが正しくインストールされていれば、インストール完了と同時にオンアクセス検索が有効になるはずです。
Step2 : Sophos Anti Virus の設定
ウイルス検出時のメール通知機能周りの設定
1 2 3 4 5 6 7 8 9 |
# ウイルス検出時の通知メール送信先を設定する場合に実行 # デフォルトは"root@localhost" /opt/sophos-av/bin/savconfig set Email root@fugafuga.net # ウイルス検出時の通知メール送信先を追加する場合に実行 /opt/sophos-av/bin/savconfig add Email hogehoge@fugafuga.net # ウイルス検出時の通知メール送信元の設定 /opt/sophos-av/bin/savconfig set EmailSender sophosav@fugafuga.net # メール通知を無効にする場合に実行 /opt/sophos-av/bin/savconfig set EmailDemandSummaryIfThreat disabled |
オンアクセススキャン周りの設定
1 2 3 4 5 6 7 8 9 10 11 |
# オンアクセス検索の除外ディレクトリの確認 /opt/sophos-av/bin/savconfig get ExcludeFilePaths # ウイルススキャンするときに、検索エンジン内の処理にも割り込むため、これを除外 /opt/sophos-av/bin/savconfig add ExcludeFilePaths /opt/sophos-av/ # amavisd-new が処理するときにも割り込んでくるので、(設定に応じて)これを除外 /opt/sophos-av/bin/savconfig add ExcludeFilePaths /var/spool/amavisd/ # ウイルスを検知したとき、添付ファイルを除去しないのであれば、(設定に応じて)メールボックスも除外 /opt/sophos-av/bin/savconfig add ExcludeFilePaths /home/vmail/ # spamassassin がメールを学習するときにも割り込んでくるので、(設定に応じて)これを除外 # 本当は、/tmp 丸々だとなにかとあれなので、・・・。 /opt/sophos-av/bin/savconfig add ExcludeFilePaths /tmp/ |
Step3 : amavisd の設定
amavisd の動きをいろいろ試してみたところ、プライマリーに登録されているスキャナーを適用するようです。
セカンダリーに登録されているスキャナーは、プライマリーがこけているときに適用されるようです。
プライマリーかセカンダリーかというのは、
1 |
less /etc/amavisd/amavisd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# (省略) @av_scanners = ( # (省略) # (プライマリースキャナ) ### http://www.clamav.net/ ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamd.amavisd/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 a socket under $MYHOME. # (省略) ); @av_scanners_backup = ( # (セカンダリースキャナ) # (省略) ### http://www.sophos.com/ ['Sophos Anti Virus (savscan)', # formerly known as 'sweep' ['/opt/sophos-av/bin/savscan', 'savscan'], # 'sweep' '-nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef '. '--no-reset-atime {}', [0,2], qr/Virus .*? found/m, qr/^>>> Virus(?: fragment)? '?(.*?)'? found/m, ], # other options to consider: -idedir=/usr/local/sav # A name 'sweep' clashes with a name of an audio editor (Debian and FreeBSD). # Make sure the correct 'sweep' is found in the path if using the old name. # (省略) ); # (省略) |
ということで、ClamAV はプライマリースキャナ、’Sophos Anti Virus はバックアップ(セカンダリースキャナ)になっています。
1 2 3 4 5 |
### http://www.clamav.net/ # ['ClamAV-clamd', # \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamd.amavisd/clamd.sock"], # qr/\bOK$/m, qr/\bFOUND$/m, # qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], |
とコメントアウトしてあげると、セカンダリースキャナが有効になりますが、プライマリースキャナがすべてこけてますよ、ログに警告が記録されるので、’Sophos Anti Virus (savscan) をプライマリースキャナのセクションにコピーします。
Step4 : 日本語環境に合わせた設定
Step3 までで、環境によっては、正常に動作しますが、ロケールを確認します。
1 |
localectl |
1 2 3 |
System Locale: LANG=ja_JP.utf8 VC Keymap: n/a X11 Layout: us |
私の環境では、”LANG=ja_JP.utf8″となっているため、amavisd が savscan を実行した返り値が、日本語で返ってきます。
1 2 3 4 5 6 7 |
['Sophos Anti Virus (savscan)', # formerly known as 'sweep' ['/opt/sophos-av/bin/savscan', 'savscan'], # 'sweep' '-nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef '. '--no-reset-atime {}', [0,2], qr/Virus .*? found/m, qr/^>>> Virus(?: fragment)? '?(.*?)'? found/m, ], |
これに対して、デフォルトの”/etc/amavisd/amavisd.conf”は、英語仕様になっているので、修正が必要です。
1 2 3 4 5 6 7 |
['Sophos Anti Virus (savscan)', # formerly known as 'sweep' ['/opt/sophos-av/bin/savscan', 'savscan'], # 'sweep' '-nb -f -all -rec -ss -sc -archive -cab -mime -oe -tnef '. '--no-reset-atime {}', [0,2], qr/ウイルス.*?に発見されました/m, qr/^>>> ウイルス(?:フラグメント)?'?(.*?)'?がファイル.*?に発見されました/m, ], |
このように日本語仕様で書きます。
Step5 : 動作確認
amavisd を再起動して、設定を適用します。
1 |
systemctl restart amavisd.service |
動作確認は、EICARテストコードを利用してテストファイルを作成して行います。
※ 作成方法は、ウィキペディアなどを参考にしてください。
プライマリースキャナとして、ClamAV と Sophos Anti Virus が設定されていますので、その特性に応じて、Sophos Anti Virus が機能しているか確認します。
ClamAV は、どうも RAR を展開できないようなので、EICARテストコードを含むファイルを TAR.GZ で圧縮して、更に RAR 圧縮したテストファイルを作成して、メール送信してみます。
正しく検知されれば、件名が修正されたメールが届くはずです。
Step6 : 追加設定
とりあえず、Step5 までで機能しますが、件名が英語であったり、添付ファイルが削除されてしまったり(するのは良いことかもしれないが)するので、このあたりの追加設定。
1 |
vi /etc/amavisd/amavisd.conf |
1 2 3 |
$subject_tag_maps_by_ccat{+CC_VIRUS} = [ '[警告:このメールにはウイルスが含まれています] ' ]; #$defang_virus = 1; # MIME-wrap passed infected mail $defang_virus = 0; # ウイルスを検知しても、添付ファイルを削除しない |