目次
メールサーバーで、Clam AntiVirus(Clamd)がメモリー食いすぎなので、他製品(Dr.Web)をトライアルしてみる。
調査アプリ/バージョン
- postfix-3.5.8-4.el8.x86_64
- amavis-2.12.1-5.el8.noarch
- drweb-11.1.3-av-linux-amd64.run
インストール時に必要なパッケージ
RockyLinux8.5 Minimalインストール 直後状態で、インストーラ drweb-11.1.3-av-linux-amd64.run を実行したら、
Uncompressing Dr.Web for Linux Workstations.Extraction failed. Signal caught, cleaning up
で、コケる。
⇒ tar コマンド(RPM)が必須。
tarコマンドは初期の段階でインストールするコマンドの為、このエラーはあまりお目にかかれないと思う。
インストールにあたり
- インストールは簡単で、 ./drweb-11.1.3-av-linux-amd64.run 実行でインストール可能。
- インストーラも何気にローカライズ(日本語化)されていた。(使用許諾のところ)
- Dr.Webプログラムはレポジトリーで管理されている
- /etc/yum.repo.d/drweb-yum-x86_64.repo が登録される
- 複数(11.1では46個)のRPMとなっており、RPMインストールされる
- バージョンアップは、dnf updateで実施するみたい。~
インストール後に、dnf updateしたら、早速アップグレード対象としてリストされた。
インストール後の設定
- GUI(Xwindow)有りであれば、Dr.Web設定用のショットカットアイコンがあるので実行。
- GUIなしでは、コマンドベースで設定を入れる。(ファイルでの設定では無いみたい)~
→今回はGUIが無いサーバーにインストールするが、初期設定状態を読み解く為に、一時的にGUI有にもインストールした。
トライアルライセンス取得
インストール直後は、/opt/drweb.com/bin/drweb-configd.real のみ起動
トライアルライセンスを取得すると、パターンファイルのアップデートが可能となるようだ。
CUIでは、
# drweb-ctl license --GetDemo
数秒後に、ユーザー登録なしで、30日間試用可能となる
ライセンスを有効にすると、さらに、
/opt/drweb.com/bin/drweb-update.real が常駐する。
今回は、メールサーバーで扱うメールに対してウイルスチェック出来れば良い。
つまり、それ以外の機能はリソースが厳しいので機能OFF
したい。
設定内容の確認
設定を確認するには、
# drweb-ctl cfshow
設定を入れる際には、
# drweb-ctl cfset xxxxxxx
設定で気になった部分をピックアップすると、デフォルト状態では
- ウイルスパターンファイルは、30分毎にチェック
- スケジュールによる自動検索機能はOFF
- SPIDer Gurd (ファイル作成・変更時に悪意のあるプログラムをフロック) OFF
- SPIDer Gate (ネットワーク接続時に悪意のあるオブジェクトをフロック) OFF
- Dr.Web Cloud (Dr.Web Cloudに接続して、リアルタイムににウイルス情報をチェック) ON
おそらく、新しいウイルスが見つかったが、パターンファイルとして開発して配信され反映されまでの時間をこの機能で補完するものと予想。
(所謂、0Day攻撃対策?)
既に機能OFFになっている項目もあるが、以下の項目は確定。
[SPIDer Gurd OFF] drweb-ctl cfset LinuxSpider.Start off [SPIDer Gate OFF] drweb-ctl cfset LinuxFirewall.OutputDivertEnable off [Dr.Web Cloud OFF] drweb-ctl cfset Root.UseCloud off
コマンド単体実行結果
通常メール
[drweb-ctl scan]
/home/develop/Maildir/new/1659425076.V10303I3040c9eM713861.rocky8-mail.chovits.net (MAIL) - Ok Scanned objects: 1, scan errors: 0, threats found: 0, threats neutralized: 0. Scanned 0.46 KB in 0.08 s with speed 5.57 KB/s. ---> Exit Code: 0
[drweb-ctl mailcheck]
/home/develop/Maildir/new/1659425076.V10303I3040c9eM713861.rocky8-mail.chovits.net - Ok Scanned objects: 1, scan errors: 0, threats found: 0, threats neutralized: 0. Scanned 0.46 KB in 18.14 s with speed 0.03 KB/s. ---> Exit Code: 0
テストウイルスメール (EICAR)
[drweb-ctl scan]
/home/develop/Maildir/new/1659699700.V10303I30447dcM256465.rocky8-mail.chovits.net//2.inline - infected with EICAR Test File (NOT a Virus!) Scanned objects: 1, scan errors: 0, threats found: 1, threats neutralized: 0. Scanned 1.07 KB in 0.50 s with speed 2.12 KB/s. ---> Exit Code: 0
[drweb-ctl mailcheck]
/home/develop/Maildir/new/1659699700.V10303I30447dcM256465.rocky8-mail.chovits.net - Reject: infected with EICAR Test File (NOT a Virus!) Scanned objects: 1, scan errors: 0, threats found: 1, threats neutralized: 0. Scanned 1.07 KB in 0.16 s with speed 6.61 KB/s. ---> Exit Code: 0
調査内容
【確認方法】
# drweb-ctl [scan|mailcheck] メールファイル
考察
- ウイルス有/無は、Exitコードのみの判定不可
- scan/mailcheckで、結果表示に若干の差分あり
- メールサーバーなので、checkmailで実行予定
→ '- Reject: infected with ' が在った場合は、ウイルス有り
無ければ、ウイルス無
@av_scanners について
(1) メールがamavisd-newに渡った時にmaillogを確認(debug=5)すると、
- /var/spool/amavisd/tmp/amavis-20220805T225953-08150-mf3fxJwi/parts/p001
- /var/spool/amavisd/tmp/amavis-20220805T225953-08150-mf3fxJwi/parts/p002
とファイルが別れる。いくつ別れるかは不明。
今回のテストでは、p001の1つのみ、p001/p002の2つ、p001/p003の2つなど、ファイル名のナンバリングも一定ではない。
→ファイルが分かれるので、
- /var/spool/amavisd/tmp/amavis-20220805T225953-08150-mf3fxJwi/parts/p001 - Ok
- /var/spool/amavisd/tmp/amavis-20220805T225953-08150-mf3fxJwi/parts/p002 - Reject: infected with xxxx
と、それぞれ結果表示されている。
(2) @av_scannersのメイン定義(drweb)では、drwebd.sockがあるが、コンシューマー向けDr.webは確認するも見当たらない。
⇒ この定義は使えない。(おそらく、法人向け Dr.Web for UNIX mail servers製品用と推測)
(3) @av_scannersのバックアップ定義(drweb)では、/usr/local/drweb/drweb or /opt/drweb/drweb のdrwebコマンドがない。
現バージョン(11.3)では、「drweb-ctl」に置き換わったものと思われる。
ウイルス有/無をExitコードだけで判別できない(@av_scanners定義では、Dr.Web 4.33 and earlierとあるので、そもそも無理)
以上の事から、@av_scannersのバックアップ定義(drweb)を参考に修正しつつ、メイン定義に置き換える必要あり。
@av_scanners 定義
@av_scannersの定義方法についてgoogleったが、有用な情報を得られず。幸いamavisd-newはperlで書かれているので、直接ファイルを見てみる。
run_avルーチンにて、
my($bare_fnames, # a ref to a list of filenames to scan (basenames) $names_to_parts, # ref to a hash that maps base file names to parts object $tempdir, # temporary directory # n-tuple from an @av_scanners list entry starts here $av_name, $command, $args, $sts_clean, # a ref to a list of status values, or a regexp $sts_infected, # a ref to a list of status values, or a regexp $how_to_get_names, # ref to sub, or a regexp to get list of virus names $pre_code, $post_code, # routines to be invoked before and after av ) = @_;
とあり、@av_scannersのパラメータは、
$av_name, $command, $args, $sts_clean, $sts_clean, $how_to_get_names ・・・ となっている。
AntiVirus名称, コマンド名, コマンド引数, ウイルス無判定, ウイルス有判定, ウイルス有の場合のウイルス名取得
これに当てはめると、
'drweb - DrWeb Antivirus', '/usr/bin/drweb-ctl', 'mailcheck ディレクトリ/ファイル名', Exitコードが0, ' - Reject: infected with'の文字列がある, 'infected with xxxx'のxxx部分がウイルス名
よって定義は、
@av_scanners = ( ### DrWebD ['drweb - DrWeb Antivirus', ['/usr/bin/drweb-ctl', '/opt/drweb.com/bin/drweb-ctl', 'drweb-ctl'], 'checkmail {}', [0], qr' - Reject: infected with'm, qr' - Reject: infected with (.*)$'m,], ); @av_scanners_backup = ( ### DrWebD ['drweb - DrWeb Antivirus', # ['/usr/bin/drweb-ctl', '/opt/drweb.com/bin/drweb-ctl', 'drweb-ctl'], 'scan {}', [0], qr' - infected with 'm, qr' - infected with (.*)$'m,], );
実際にメールテストを実施したが、ウイルス無判定(ExitCode:0)だけで完結せず、ウイルス有判定までチェックした結果となる。
amavisd-newで、メールが複数ファイルに分かれて書き出される仕様により、ウイルス無時に「Ok」文字では判別出来ないと推測
未確認情報
実際にウイルス有(EICAR)/無で試したが、今回使用したamavisd-newのバージョン・Dr.webのバージョンでは検出した。
しかし、以下の点については加味されていない。
- ウイルスメールはEICARしか試せていない。
- 今回のキーワード「 - Reject: infected with」以外表示されても、amavisd-newとしてはウイルス無判定(スルー)される~
- バージョンアップがきっかけで、(開発者が)キーワードを変更した場合(大文字/小文字変更等でも)もスルーされる
- drweb-ctl で、scanを使うべきか、checkmailを使うべきが断定できていない。
- メールなので、checkmailだろう。ドキュメント読んでもメールに特化しているコマンドらしい。ぐらいの調査しかしていない。
- /var/log/maillogをtail -fで見ていたが、amavisd起動後のメールチェックにおいて、メールがdr.webのチェックとなった時に、10秒程度の時間がかかった。
- 続けて(30秒程度後に)、再チェックした際は2~3秒程度となったが、この時間のかかり方が、amavisd起動初回時のみかどうかは未確認
- 今回肝心の、Dr.webメモリー使用量も未確認。とりあえず、topコマンド(起動後、m押下)では上位に存在しない。
- インストール要件(メモリ)が、「RAMに500 MB以上の空き容量(1 GB以上を推奨)」だったので、トライアルを行っている段階。
まずは、連携可能かどうかから確認したので後回し。