出来るだけコピペでウィルスチェックをしたいCentOS7
参考
http://www.a21-hp.com/wp/?p=8964
https://www.server-world.info/query?os=CentOS_7&p=clamav
http://www.server-memo.net/server-setting/clamav/epel-clamav-install.html
https://orebibou.com/2016/12/centos-7%E3%81%A7clamav%E3%81%AE%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%AA%E3%83%B3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%B9%E3%82%AD/
https://askubuntu.com/questions/591325/how-to-scan-on-access-with-clamav-in-14-04
https://orebibou.com/2017/01/linuxのアンチウィルスソフト『linux-malware-detectlmd』をcentos-7にインス/
別途記載した「出来るだけコピペでCentOS7minimalの環境を作りたい」がベース。
出来るだけコピペでCentOS7minimalの環境を作りたい
https://qiita.com/mm_sys/items/c4f7ae2872d59c464557
テスト用に以下の内容を用意した。
- 仮想OS(VMware)か直接インストール。
- OS : CentOS7 minimal
- 使用ユーザ名 : user
- Firewallは使う(ゾーンはpublic)
- SELinuxはpermissive(設定終わってから戻しておいても良いかも)
- SSH接続で各種設定可能な状態。
- SUDOの設定済み(rootから直接行うならsudoと記載している所を消す)。
以下の作業はSSH接続とかでコピペしていって設定します。
インストール
sudo yum -y install epel-release
sudo yum -y install --enablerepo=epel clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd
通常スキャンの設定
任意の変更箇所
この変更箇所はClamのリアルタイムスキャンの設定場所だが、今回使わないので必要だと思う人だけがコメントアウトしたり変更する場所。
行 | 記載内容 | 変更例 | 補足 |
---|---|---|---|
13 | # sudo sed -e '/^#ScanOnAccess... | sudo sed -e '/^ScanOnAccess... | もし使うのであれば、コメントアウト指定 |
18 | # OnAccessIncludePath /home/user/ | OnAccessIncludePath /スキャンするパス/ | もし使うのであれば、コメントアウトしてパスを指定 |
sudo cp -p /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf_`date "+%Y%m%d_%H%M%S"`
sudo sed -e 's/^Example/#Example/g' \
-e '/^#LogFile /s/^#//g' \
-e '/^#LogFileMaxSize /s/^#//g' \
-e '/^#LogTime /s/^#//g' \
-e '/^#LogRotate /s/^#//g' \
-e '/^#LocalSocket /s/^#//g' \
-e '/^#PidFile /s/^#//g' \
-e '/^#FixStaleSocket /s/^#//g' \
-e 's/^User clamscan/User root/g' \
-i /etc/clamd.d/scan.conf
# Clamのリアルタムスキャンを使うなら下記をコメントアウト(今回は使わない)
# sudo sed -e '/^#ScanOnAccess yes /s/^#//g' -i /etc/clamd.d/scan.conf
# ディレクトリ指定
sudo cat << '_EOT_' | sudo tee -a /etc/clamd.d/scan.conf
ExcludePath ^/dev/
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/backup/
ExcludePath ^/home/share/
# リアルタイムスキャンする場所の指定(今回はClamのリアルタムスキャンは使用しないので、コメントアウト)
# OnAccessIncludePath /home/user/
_EOT_
リアルタイムスキャンにはファイルを除外する機能はない
http://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html
Then on-access scanning will be constrained to notify-only mode and will be unable to prevent access to malicious files, since fanotify lacks the ability to block events on the system.
オンアクセス検索は通知のみのモードに制限され、悪意のあるファイルへのアクセスを防ぐことができません。なぜなら、fanotifyはシステム上のイベントをブロックする能力がないからです。
だそうです。
ちなみに、VirusEvent
という引数があるが、これはセキュリティ的に問題があるようなので、使わないようにします。
定義ファイルの更新
sudo cp -p /etc/freshclam.conf /etc/freshclam.conf_`date "+%Y%m%d_%H%M%S"`
sudo sed -e 's/^Example/#Example/g' \
-e '/^#UpdateLogFile /s/^#//g' \
-e '/^#LogFileMaxSize /s/^#//g' \
-e '/^#LogTime /s/^#//g' \
-e '/^#LogRotate /s/^#//g' \
-e '/^#NotifyClamd /cNotifyClamd /etc/clamd.d/scan.conf' \
-i /etc/freshclam.conf
sudo cat << '_EOT_' | sudo tee -a /etc/freshclam.conf
DatabaseMirror db.jp.clamav.net
_EOT_
sudo ln -s /etc/clamd.d/scan.conf /etc/clamd.conf
# 動かない場合は下記の内容も必要?(自分の環境ではすでにコメントアウトされていました)
# sudo cp -p /etc/sysconfig/freshclam /etc/sysconfig/freshclam_`date "+%Y%m%d_%H%M%S"`
# sudo sed -i -e "s/^FRESHCLAM_DELAY=disabled-warn/#FRESHCLAM_DELAY=disabled-warn/" /etc/sysconfig/freshclam
設定の永続化
sudo setsebool -P antivirus_can_scan_system 1
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan
sudo systemctl enable clamd@scan.service
sudo useradd -s /sbin/nologin clamav -m -d /usr/local/share/clamav -k /dev/null
定期スキャンの方法
リアルタイムスキャンをするなら、ここは必要ないと思われる。
要変更箇所
行 | 記載内容 | 変更例 | 補足 |
---|---|---|---|
4 | SCANDIR=/home/user/ | SCANDIR=/スキャンしたいところ/ | 定期実行の場所変更 |
sudo cat << '_EOT_' | sudo tee /root/virus_scan.sh
#!/bin/bash
SCANDIR=/home/user/
# 未検証
ls $SCANDIR >/dev/null 2>&1
if [ $? -ne 0 ]; then
exit
fi
VIRUS_MVDIR=/root/virus
CLAMDSCAN=/bin/clamdscan
HOSTNAME=`hostname`
RUNDATE=`date +%Y%m%d-%H%M%S`
SCANTMP=/tmp/clamdscan_$RUNDATE
clamscan $SCANDIR --remove > $SCANTMP 2>&1
rm -f $SCANTMP
_EOT_
sudo chmod 744 /root/virus_scan.sh
# 動作させる前に、定義ファイルがないとエラーになるからアップデート
sudo freshclam
# 動作確認
sudo sh -x /root/virus_scan.sh
# 動作確認が出来たらcronに登録
sudo cat << '_EOT_' | sudo tee /etc/cron.d/virus-scan
MAILTO=root
15 3 * * * root /root/virus_scan.sh
_EOT_
リアルタイムスキャンで駆除
inotify-toolsと組み合わせてリアルタイムスキャンする方法。
https://hackurx.wordpress.com/2012/06/30/mon-script-clamav-temps-reel/
http://forum.pisilinux.org/english/clamav-and-clamav-automated-tasks/
https://doc.ubuntu-fr.org/clamav
sudo cat << '_EOT_' | sudo tee /root/clamavTR.sh
#!/bin/bash
# Script "ClamAV Real Time", by HacKurx modified by mancora
# http://hackurx.wordpress.com
# Licence: GPL v3
# Dépendance: clamav-daemon inotify-tools
# Recommandé : libnotify
#Définition des repertoires de travailles qui doivent exister
DOSSIER=/home/user/
QUARANTAINE=/tmp
LOG=$HOME/.clamavd-tr.log
while :
do
inotifywait -q -r -e create,modify,move,delete,open,close,access "$DOSSIER" --format '%w%f|%e' | sed --unbuffered 's/|.*//g' |
while read FICHIER; do
clamdscan -m -v --fdpass "$FICHIER" --move=$QUARANTAINE
if [ "$?" == "1" ]; then
echo "`date` - Malware found in the file '$FICHIER'. The file has been moved $QUARANTAINE." >> $LOG
echo -e "\033[31mMalware found!!!\033[00m" "The file '$FICHIER' has been moved to quarantaine."
if [ -f /usr/bin/notify-send ]; then
notify-send -u critical "ClamAV Real Time" "Malware found!!! The file '$FICHIER' has been moved to quarantaine."
fi
fi
done
done
_EOT_
sudo chmod 0755 /root/clamavTR.sh
serviceを登録
sudo cat << '_EOT_' | sudo tee /etc/systemd/system/clamd@realtime.service
[Unit]
Description=RealTImeVirusScan
After=network.target clamd@scan.service
[Service]
Type=simple
ExecStart=/root/clamavTR.sh
_EOT_
探査ディレクトリを浅くして処理を軽くする。
sudo sed -i -e "s/^#MaxDirectoryRecursion 20/MaxDirectoryRecursion 1/" /etc/clamd.d/scan.conf
実行
sudo systemctl start clamd@realtime.service
sudo systemctl enable clamd@realtime.service
無害Virusのダウンロード
テストで無害なVirusをダウンロードしてみる。
うまく実行できていれば、ls
で検索してもダウンロードしてきたファイルが消えているはず。
curl -O http://www.eicar.org/download/eicar.com
ログ表示
上手く出来ているか、inotify_logの中身を見て確認。
# inotify
sudo vi /usr/local/maldetect/logs/inotify_log
次はCrowiを設置してみる。