出来るだけコピペでウィルスチェックをしたい<CentOS7 minimal>

# 出来るだけコピペでウィルスチェックをしたい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を設置してみる。

https://qiita.com/mm_sys/items/4e94050fe85a3c6b54f0