Linuxをより安全に利用するならウィルス対策も必要になりますが、Linux向けのウィルス対策ソフトの選択肢は少なく、無料版ともなるとオープンソースのアンチウィルスソフト「ClamAV」ほぼ一択というのが現状です。
そこでここでは、RedHat系Linux(AlmaLinux9)を例に、ClamAVのインストール方法や基本的な設定方法、使用方法を解説します。
目次
ClamAVとは
Introduction - ClamAV Documentation
ClamAVは、オープンソースで開発されている無料のウイルス対策ソフトで20年以上の歴史があり、現在ではUNIXやLinuxだけでなく、WindowsやMacにも対応しています。
ClamAVは、Linux環境で無料利用できるウイルス対策ソフトとして最も有名と言っても過言ではないソフトで、オンアクセススキャン(リアルタイムスキャン、リアルタイム保護)や手動スキャン(オンデマンドスキャン)といったウイルス対策ソフトに必要な基本機能を備え、追加モジュールをインストールすれば、メールサーバーと連携して、電子メールのスキャンを行うこともできます。
ClamAVのインストール
ClamAVは、EPEL(Extra Packages for Enterprise Linux)リポジトリで提供されているため、まずは、EPELリポジトリを登録してからClamAVをインストールします。
# dnf -y install epel-release
# dnf -y install clamav clamd clamav-update
ClamAVの設定
ClamAVをインストールしたら、スキャン設定とウイルスデータベースの更新設定を行います。
スキャン設定
スキャン設定は、テキストエディターで設定ファイル「/etc/clamd.d/scan.conf」を編集して行います。設定は、デフォルトのままでも動作しますが、以下に挙げる項目を設定するのがおすすめです。
# vi /etc/clamd.d/scan.conf
LogFile /var/log/clamd.scan ←ログファイル
LogFileMaxSize 2M ←ログファイル最大サイズ
LogTime yes ←ログに時刻を記録する
LogRotate yes ←古いログファイルの自動削除
ExtendedDetectionInfo yes ←感染ファイル詳細情報出力
LocalSocket /run/clamd.scan/clamd.sock ←ローカルソケット使用
LocalSocketMode 660 ←ソケットモードの指定
FixStaleSocket yes ←異常終了時のソケット削除
#スキャンの除外ディレクトリの指定
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
ExcludePath ^/.*/selinux/
ExcludePath ^/.*/audit/
ExcludePath ^/run/systemd/inaccessible/
ExcludePath ^/run/user/.*/gvfs
ExcludePath ^/etc/.*shadow.*
ExcludePath ^/etc/security/.*passwd.*
ExcludePath ^/root/virus
User root ←実行ユーザーの指定
#オンアクセススキャンの設定
OnAccessIncludePath /home ←オンアクセススキャンの対象ディレクトリ
OnAccessExtraScanning yes
OnAccessExcludeRootUID yes
OnAccessExcludeUname root←オンアクセススキャン対象外ユーザー
オンアクセススキャンの留意事項
システム全体をオンアクセススキャンの対象ディレクトリに指定したいときは「OnAccessMountPath」にルートディレクトリ(/)を指定しますが、正しくウイルスを検知できなくなるなどの報告があるので、面倒でも上位ディレクトリそれぞれを「OnAccessIncludePath」に指定するのがおすすめです。なお、オンアクセススキャンの対象ディレクトリが多くなると、それだけシステムへの負荷も大きくなるのでご注意ください。
また、オンアクセススキャンは、Linuxのinotifyというファイルシステムイベントを監視する機能を使って監視していますが、inotifyで監視できるオブジェクト数には上限があります。(AlmaLinux9のデフォルト値は、27247)そのため、スキャン対象ディレクトリに大量のファイルが保存されている場合は、事前にカーネルパラメータで上限を増やしておく必要があります。
# vi /etc/sysctl.conf
fs.inotify.max_user_watches=65536
# sysctl -p
メール通知用スクリプトの作成
ウイルス検出時にメール通知させたいときは、設定ファイル「/etc/clamd.d/scan.conf」に以下の行を追加して、メール通知用のシェルスクリプトを作成します。
# vi /etc/clamd.d/scan.conf
VirusEvent /root/foundvirus.sh ←ウイルス検出時に実行させるシェルスクリプトのパス
# vi /root/foundvirus.sh
#!/bin/bash
MAILTO=<通知先メールアドレス>
export LANG=C
message="Virus Found: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"
echo "$message"| mail -s "Virus Found in `hostname`" $MAILTO
シェルスクリプトを作成したら、実行権限を与えておきます。
# chmod 700 /root/foundvirus.sh
なお、AlmaLinux9でメール送信するには、postfixのインストールと設定、mailコマンド(s-nail)のインストールが必要になります。(Posfixの設定については、ここでは割愛します。)
ウイルスデータベースの更新設定
ClamAVでは、ウイルスデータベースの更新をfreshclamというプログラムが行っており、freshclamの動作は、設定ファイル「/etc/freshclam.conf」で指定します。
# vi /etc/freshclam.conf
UpdateLogFile /var/log/freshclam.log ←ログファイル
LogFileMaxSize 2M ←ログファイル最大サイズ
LogTime yes ←ログに時刻を記録
LogRotate yes ←古いログファイルの自動削除
DatabaseOwner root ←データベースの所有者
NotifyClamd /etc/clamd.d/scan.conf
設定が済んだら、freshclamコマンドを実行して、最新バージョンのウイルスデータベースを取得できることを確認します。
# freshclam
ClamAVサービスの起動
設定ファイルを作成したら、ClamAVサービスとオンアクセススキャンサービス、ウィルスデータベースの更新サービスを起動して、システム起動時に自動的に起動するよう設定します。
# systemctl enable --now clamd@scan
# systemctl enable --now clamonacc
# systemctl enable --now clamav-freshclam
なお、SELinuxが有効な環境では、事前に以下の設定が必要になります。
# setsebool -P antivirus_can_scan_system 1
# setsebool -P clamd_use_jit 1
# reboot
動作確認
オンアクセススキャンの動作確認
オンアクセススキャンの対象ディレクトリにテストウイルスをダウンロードして、検知されるかを確認します。
以下では、例として一般ユーザーのホームディレクトリにテストウイルス(eicar)をダウンロードしています。
$ wget https://secure.eicar.org/eicar_com.zip -O eicar_com.zip
テストウイルスをダウンロードすると、ClamAVのログファイル「/var/log/clamd.scan」に検出ログが記録されます。
# tail /var/log/clamd.scan
Sat Jan 11 19:30:02 2025 -> /home/tarou/eicar_com.zip: Win.Test.EICAR_HDB-1(6ce6f415d8475545be5ba114f208b0ff:184) FOUND
手動スキャンによる動作確認
手動でファイルやディレクトリをスキャンするときは、clamdscanコマンドを使用し、基本的な書式は、次のとおりです。
# clamdscan <オプション> <スキャンするディレクトリやファイルのパス>
たとえば「/home」ディレクトリをスキャンしたいときは、以下のように実行し、実行結果には、検出されたウイルスやスキャンの所要時間などが表示されます。
# clamdscan /home
/home/tarou/eicar_com.zip: Win.Test.EICAR_HDB-1 FOUND
/home/tarou/eicar.com.txt: Win.Test.EICAR_HDB-1 FOUND
----------- SCAN SUMMARY -----------
Infected files: 2
Time: 0.172 sec (0 m 0 s)
Start Date: 2025:01:11 20:05:44
End Date: 2025:01:11 20:05:45
なお、通常は検出されたウイルスは削除されませんが「--remove」を付けて実行することで、検出されたファイルを自動的に削除することもできます。
# clamdscan --remove /home
また「--move」オプションで退避先のディレクトリを指定して実行することで、検出されたウイルスを指定のディレクトリに移動させることもできます。
# clamdscan --move /tmp/clamdscan-quarantine /home
なお、メール通知するよう設定していれば、オンアクセススキャンや手動スキャンでウイルスが検出されたときに、以下のようなメールで通知されます。
件名:Virus Found in localhost.localdomain
本文:Virus Found: Win.Test.EICAR_HDB-1 in /home/tarou/eicar_com.zip
定期スキャン
定期的にスキャン(スケジュールスキャン)したいときは、手動スキャンで使用するclamdscanコマンドをcronで定期実行するよう設定します。
たとえば、システム全体を毎日午前3時にスキャンして、検出されたウイルスファイルを削除したいときは、以下のように設定します。
# vi /etc/crontab
0 3 * * * root clamdscan --remove /
あとがき
もちろん、Linuxマシンでしっかりとセキュリティ対策したいとお思いなら、有償のウイルス対策ソフトを利用することをおすすめしますが、何とか無償で対応したいなら、ClamAVを試してみてはいかがでしょうか。
なお、ここではClamAVの基本的な使い方のみを紹介しましたが、設定次第ではより検出率を上げたり、リソースの使用量を最適化することもできます。