こんにちは。
今回はインフラ学習の一環として、
Ubuntuサーバ上に ClamAV(アンチウイルスソフト) を導入し、
さらに Zabbixと連携してウイルス検知時にアラートを出す仕組み まで構築してみました。
「ウイルス対策ソフトを入れる」だけでなく、
- 定期スキャン
- ログ出力
- Zabbix監視
- アラート通知
まで含めて実装できたので、かなり実践的な学習になりました。
備忘録も兼ねて、今回やったことをまとめておきます。
構築した環境
今回の構成は以下です。
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04 |
| サーバ | さくらVPS |
| ウイルス対策 | ClamAV |
| 監視 | Zabbix |
| 用途 | 学習/検証環境 |
ClamAVをインストール
まずはClamAVをインストールしました。
※Ciscoが提供するオープンソースの無料アンチウイルスソフト
sudo apt update
sudo apt install clamav clamav-daemon -y
最初はAPTロックに引っかかって少しハマりましたが、
Ubuntuの自動アップデート処理と競合していただけでした。
こういう細かいトラブルも実務っぽくて勉強になりますね。
定義ファイル更新
続いてウイルス定義ファイルを更新。
sudo freshclam
ここで初めて知ったのですが、
ClamAVは初回更新時かなりメモリを使うみたいで、
OOM(メモリ不足) にも遭遇しました。
低スペックVPSだと普通に起こるようです。
疑似ウイルスで検知テスト
本当に検知できるか確認するため、
EICARというテスト用ファイルを使いました。
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.txt
スキャンすると…
clamscan eicar.txt
Eicar-Signature FOUND
しっかり検知!
こういう「ちゃんと動いた」瞬間はテンション上がります。
cronで定期スキャン設定
毎回手動実行では意味がないので、
cronで自動化しました。
スキャンスクリプトを作成。
sudo nano /usr/local/bin/clamav-scan.sh
#!/bin/bashclamscan -r /home --log=/var/log/clamav_scan.log
実行権限付与。
sudo chmod +x /usr/local/bin/clamav-scan.sh
cron登録。
0 3 * * * /usr/local/bin/clamav-scan.sh
これで毎日深夜3時に自動スキャンされます。
Zabbix連携
せっかくなので、
検知したら監視できるようにしたい と思い、
Zabbixと連携しました。
感染件数取得スクリプト作成
ログから感染件数だけ抜き出すスクリプトを作成。
#!/bin/bashLOGFILE="/var/log/clamav_scan.log"if [ ! -f "$LOGFILE" ]; then
echo 0
exit 0
figrep "Infected files:" "$LOGFILE" | tail -1 | awk '{print $3}'
UserParameter設定
echo 'UserParameter=clamav.infected.count,/usr/local/bin/clamav-infected-count.sh' | sudo tee /etc/zabbix/zabbix_agentd.d/clamav.conf
Zabbix側でアイテム/トリガー作成
以下条件で設定。
last(/Zabbix server/clamav.infected.count)>0
これで、
感染ファイルを検知するとZabbixでアラート発報
できるようになりました。
実際にアラート発火!
テストすると無事…

PROBLEM表示!!
ここまで来るとかなり嬉しいですね。
「ただインストールするだけ」ではなく、
監視まで組み込めた
ことでかなり理解が深まった気がします。
今回ハマったポイント
今回一番苦労したのはメモリ不足でした。(学習用に最低メモリのサーバーなので。)
ClamAVは思った以上に重く、
failed (oom-kill)
になることが何度もありました。
そのたびに
- Swap追加
- 権限調整
- スクリプト見直し
など試行錯誤しました。
正直、このトラブル対応込みでかなり勉強になったと思います。
まとめ
今回構築した内容を図にするとこんな感じです。
ClamAVスキャン
↓
ログ出力
↓
感染件数取得
↓
Zabbix取得
↓
トリガー判定
↓
アラート通知
かなり実践的な内容になり、
- Linux操作
- ミドルウェア構築
- cron設定
- Zabbix監視
- 障害対応
まで幅広く経験できました。
今後もこういった「実際に手を動かす学習」を増やしていきたいと思います。
ここまで読んでいただきありがとうございました!

