2026年9月22日
2026年9月22日
ClamAVでサーバーのマルウェアスキャンを行う方法
はじめに
WordPressサイトがマルウェアに感染した疑いがある・サーバー上のファイルを定期的にウイルススキャンしたい・ClamAVのインストール方法と使い方がわからない・スキャン結果をメールで通知する方法を知りたいといった問題の解決方法を解説します。
症状・原因
- WordPressの管理画面やサイトに見知らぬコードが追加されている(PHP/JSのインジェクション)
- 検索エンジンのセーフブラウジング警告が表示される(マルウェア検出)
- サーバーのCPU・ネットワーク使用率が異常に高い(暗号通貨マイニングスクリプト)
- ウイルス定義ファイルが更新されておらず古いマルウェアしか検出できない
解決手順
ステップ1:ClamAV をインストールする
# ✅ Ubuntu/Debian にインストール
sudo apt update
sudo apt install clamav clamav-daemon -y
# ✅ CentOS/RHEL にインストール
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamd -y
# ✅ インストール確認
clamscan --version
# → ClamAV 1.x.x
# ✅ ウイルス定義ファイルを更新(初回は時間がかかる)
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
# → main.cvd: 最新(〜200MB)
# → daily.cvd: 最新
# ✅ 定義ファイルの更新状態を確認
ls -la /var/lib/clamav/
# → -rw-r--r-- ... main.cvd daily.cvd
ステップ2:基本的なスキャンを実行する
# ✅ 特定ディレクトリをスキャン
sudo clamscan -r /var/www/html/
# -r: 再帰的にスキャン
# ✅ 感染ファイルのみ表示(推奨)
sudo clamscan -r --infected /var/www/html/
# → 感染ファイルがある場合のみ表示
# ✅ スキャン結果をログファイルに保存
sudo clamscan -r --infected --log=/var/log/clamav/scan.log /var/www/html/
# ✅ 感染ファイルを隔離(削除でなく移動)
sudo clamscan -r --infected \
--move=/var/quarantine/ /var/www/html/
# ✅ 圧縮ファイルの中身もスキャン
sudo clamscan -r --infected \
--scan-archive=yes /var/www/html/wp-content/uploads/
# ✅ スキャン結果の確認
sudo tail -30 /var/log/clamav/scan.log
# → /var/www/html/wp-content/uploads/2024/01/evil.php: PHP.Webshell.Agent FOUND
# → ----------- SCAN SUMMARY -----------
# → Known viruses: 8635123
# → Infected files: 1
ステップ3:WordPress 特有のマルウェアを検出する
# ✅ アップロードディレクトリの PHP ファイルを検索(危険な兆候)
find /var/www/html/wp-content/uploads/ -name "*.php" -type f
# → PHP ファイルが存在する場合は要調査
# ✅ 最近変更されたファイルを確認(感染チェック)
find /var/www/html/ -name "*.php" -newer /var/www/html/wp-login.php \
-not -path "*/uploads/*" | head -30
# ✅ eval・base64_decode の不審な使用を検索
grep -r --include="*.php" -l "eval(base64_decode" /var/www/html/
grep -r --include="*.php" -l "eval(gzinflate" /var/www/html/
grep -r --include="*.php" -l "preg_replace.*\/e" /var/www/html/
# ✅ 不審な iframe・外部スクリプトを検索
grep -r --include="*.php" --include="*.js" \
-l "document.write\|iframe" /var/www/html/wp-content/
# ✅ WordPress コアファイルの整合性確認
wp core verify-checksums --path=/var/www/html/
# → Error: File should not exist: wp-content/evil.php
# → Warning: File doesn't verify against checksum: wp-login.php
ステップ4:定期スキャンを自動化する
# ✅ cron で毎日午前3時にスキャン
sudo tee /etc/cron.d/clamav-scan << 'EOF'
0 3 * * * root /usr/bin/clamscan -r --infected \
--log=/var/log/clamav/daily-scan.log \
/var/www/html/ && \
grep "FOUND" /var/log/clamav/daily-scan.log | \
mail -s "ClamAV: Malware Found on $(hostname)" admin@example.com
EOF
# ✅ スキャンスクリプトを作成
sudo tee /usr/local/bin/wp-malware-scan.sh << 'EOF'
#!/bin/bash
LOGFILE="/var/log/clamav/scan-$(date +%Y%m%d).log"
SCANDIR="/var/www/html"
QUARANTINE="/var/quarantine"
mkdir -p "$QUARANTINE"
# ClamAV でスキャン
clamscan -r --infected --log="$LOGFILE" \
--move="$QUARANTINE" "$SCANDIR"
# 感染ファイルが見つかった場合は通知
if grep -q "FOUND" "$LOGFILE"; then
mail -s "警告: マルウェア検出 - $(hostname)" \
admin@example.com < "$LOGFILE"
fi
# 30日以上古いログを削除
find /var/log/clamav/ -name "scan-*.log" -mtime +30 -delete
EOF
sudo chmod +x /usr/local/bin/wp-malware-scan.sh
ステップ5:感染ファイルの修復とセキュリティ強化
# ✅ 感染を確認したら WordPress コアを再インストール
wp core download --force --path=/var/www/html/
# ✅ プラグイン・テーマを再インストール
wp plugin install --force $(wp plugin list --field=name --path=/var/www/html/)
wp theme install --force $(wp theme list --field=name --path=/var/www/html/)
# ✅ 不審なアドミンユーザーを確認・削除
wp user list --role=administrator --path=/var/www/html/
wp user delete <suspicious-id> --path=/var/www/html/
# ✅ パスワードとシークレットキーを変更
wp user update 1 --user_pass="$(openssl rand -base64 32)" --path=/var/www/html/
# wp-config.php のシークレットキーを更新
curl -s https://api.wordpress.org/secret-key/1.1/salt/ >> /tmp/new-keys.txt
# → wp-config.php の define('AUTH_KEY', ...) などを手動で更新
# ✅ ファイルパーミッションを修正
find /var/www/html/ -type f -exec chmod 644 {} \;
find /var/www/html/ -type d -exec chmod 755 {} \;
chmod 600 /var/www/html/wp-config.php
注意事項
- ClamAVは既知のマルウェアシグネチャに基づいて検出します。ゼロデイ脅威や難読化された新しいマルウェアは検出できない場合があります。
wp core verify-checksumsや手動でのファイル確認も組み合わせてください - 感染ファイルを
--removeで即座に削除すると、Webサイトが壊れる可能性があります。まず--moveで隔離してからバックアップと比較して判断してください
まとめ
ClamAVでのマルウェアスキャンは①apt install clamavでインストール・freshclamで定義ファイル更新・定期自動更新の設定、②clamscan -r --infectedでスキャン・--logでログ保存・--moveで感染ファイルを隔離(削除より安全)、③findで不審なPHPファイルを検索・grepでeval(base64_decodeなどを特定・wp core verify-checksumsでコアファイル整合性確認、④cronで毎日自動スキャン・感染検出時にメール通知・30日以上古いログを自動削除、⑤wp core download --forceでコア再インストール・プラグイン再インストール・パスワード変更・ファイルパーミッション修正の手順で対応します。