*

CentOS7にウイルスソフト(Clamd)を導入

公開日: : 投稿者:raru CentOS7, Linux, サーバ

今回はLinuxのウイルス対策ツールのClamdの導入を行いたいと思います。
Windowsマシンであればウイルスバスターやらノートンとウイルス対策ツールを導入することは当然になっていますが、Linuxのウイルスソフトって案外知らないものですよね。

今回は以下のような流れで導入を行います。
・yumリポジトリの追加
・インストール
・動作検証
・シェルの定期実行設定

リポジトリの追加

CentOS7ではClamdをyumからインストールするためにリポジトリを追加する必要があります。
過去CentOS6などでは、epelリポジトリにもあったのですが現在はrpmforgeに存在するようです。

では、まず複数リポジトリ管理を楽にするパッケージを導入します。

[root@hoge ~]# yum install yum-plugin-priorities
[root@hoge ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.org
[root@hoge ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[root@hoge ~]# diff /etc/yum.repos.d/CentOS-Base.repo.org /etc/yum.repos.d/CentOS-Base.repo
18a19
> priority=1
26a28
> priority=1
34a37
> priority=1
43a47
> priority=1

このパッケージを導入すると複数のリポジトリに同じパッケージが存在するときに利用するリポジトリに優先度をつけることができます。
なので、Baseのpriority(優先度)を最優先とすることで、基本をベースリポジトリにして不足分を他のリポジトリから取得するようになります。

では、設定が完了したのでrpmforgeリポジトリを追加しましょう。

[root@hoge ~]# cd /usr/local/src
[root@hoge src]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
[root@hoge src]# rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm 
warning: rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:rpmforge-release-0.5.3-1.el7.rf  ################################# [100%]
[root@hoge src]# rm rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm 
rm: remove regular file ‘rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm’? y
[root@hoge src]# yum -y update rpmforge-release
[root@hoge src]# cp /etc/yum.repos.d/rpmforge.repo /etc/yum.repos.d/rpmforge.repo.org
[root@hoge src]# vi /etc/yum.repos.d/rpmforge.repo
[root@hoge src]# diff /etc/yum.repos.d/rpmforge.repo.org /etc/yum.repos.d/rpmforge.repo
11a12
> priority=10

よくあるリポジトリの追加を行っています。
上記のパッケージを利用しているので、repoファイルのenableは1のままとしています。
ここで優先度を10として設定しています。
慣習的にベース以外は10以上を設定したりするようです。

またここでpriorityを設定しなかった場合に、clamdをインストール後にyum updateで優先付けが上手くできないのかエラーとなってしまうので注意です。

Clamdインストール

リポジトリを追加したので、Clamdをインストールします。

[root@hoge ~]# yum install clamd
[root@hoge ~]# cp /etc/clamd.conf /etc/clamd.conf.org
[root@hoge ~]# vi /etc/clamd.conf
[root@hoge ~]# diff /etc/clamd.conf.org /etc/clamd.conf
195c195
< User clamav
---
> #User clamav

[root@hoge ~]# cp /etc/freshclam.conf /etc/freshclam.conf.org
[root@hoge ~]# vi /etc/freshclam.conf
[root@hoge ~]# diff /etc/freshclam.conf.org /etc/freshclam.conf
38c38
< LogSyslog yes
---
> #LogSyslog yes

ここまでがファイルの設定です。
Userをコメントアウトしているのは、root権限でcronに設定して定期実行することを想定してるため、root権限で動くように合わせているためです。
あとはすべてのファイルを確認して欲しいという理由ですね。

またLogSysLogをコメントアウトしているは、yesのままだと定期的にログが出力されてしまいログが見づらくなるのと,
容量増えるのを防止するためです。

続いてサービスの起動設定。

[root@hoge ~]# systemctl start clamd
[root@hoge ~]# systemctl is-enabled clamd
clamd.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig clamd --level=5
enabled

// どうやらclamdはネイティブなサービスじゃないのでchkconfigを使えとのこと
// ただし結局似たようなエラーが出る
[root@hoge ~]# chkconfig clamd on
[root@hoge ~]# chkconfig --list clamd

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

clamd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

// versionが古いと出るがyumリポジトリにあるものが最新でないので無視
[root@hoge ~]# freshclam
ClamAV update process started at Sun Oct 18 00:58:29 2015
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.98.4 Recommended version: 0.98.7
......
Clamd successfully notified about the update.

コメントにもありますが、clamdはネイティブなサービスではないのでsystemctlコマンドではなくchkconfigを使えと出ます。
ただそちらを使っても結局似たようなことを言われます。
設定自体は有効になっているようなので、ここでは無視しています。

また、最後にウイルスのデータベースを更新しています。
これが完了するまでにある程度時間がかかりますので待ちましょう。

その際に警告が表示されますがyumで導入したclamdは最新ではないためこのような警告が表示されています。
特に気にする必要はありません。

動作検証

設定が完了したので今度は動作検証を行います。
公開されているテスト用のウイルスファイルをwgetで取得し、スキャンを行います。

// infectedでウイルスファイルのみ出力
// recursiveで再帰的にスキャンと圧縮ファイルも解凍してスキャン
[root@hoge ~]# wget http://www.eicar.org/download/eicar.com \
http://www.eicar.org/download/eicar.com.txt \
http://www.eicar.org/download/eicar_com.zip \
http://www.eicar.org/download/eicarcom2.zip

[root@hoge ~]# clamscan --infected --remove --recursive
----------- SCAN SUMMARY -----------
Known viruses: 4031016
Engine version: 0.98.4
Scanned directories: 3
Scanned files: 14
Infected files: 4
Data scanned: 0.05 MB
Data read: 0.02 MB (ratio 2.00:1)
Time: 8.887 sec (0 m 8 s)

infected filesにダウンロードされた4つ分が表示されていますので検証は完了です。

定期実行設定

最後にウイルススキャンの定期実行設定を行います。
シェルを作ってcronに設定するだけです。

またログ出力用にフォルダを作成しています。
ログ出力はclamavの権限で実行されるので権限を与えます。

[root@hoge ~]# mkdir /var/log/clamd/
[root@hoge ~]# chown clamav:clamav /var/log/clamd/
[root@hoge ~]# vi /etc/clamscan.exclude

// proc, sysは仮想ファイルのためエラーを招く。除外
// sysはシステムじゃなくてプロセスやドライバなど。procみたいなものが入っているらしい
// bootは誤検出で削除されるとやばいから除外
[root@hoge ~]# cat /etc/clamscan.exclude
/boot
/sys
/proc
[root@hoge ~]# chown clamav:clamav /etc/clamscan.exclude
[root@hoge ~]# chmod 644 /etc/clamscan.exclude

// https://gist.github.com/matchy2/4334403 参照
[root@hoge ~]# vi virusscan
[root@hoge ~]# cat virusscan
#!/bin/bash

MAILTO="hogehoge@fugafuga.com"
PATH=/usr/bin:/bin
 
# excludeopt setup
excludelist=/etc/clamscan.exclude
if [ -s $excludelist ]; then
  for i in `cat $excludelist`
  do
    if [ $(echo "$i"|grep \/$) ]; then
      i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
      excludeopt="${excludeopt} --exclude-dir=^$i"
    else
      excludeopt="${excludeopt} --exclude=^$i"
    fi
  done
fi

# clamd update
yum -y update clamd > /dev/null 2>&1
freshclam > /var/log/clamd/clamav.log
 
# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \
 
# when detect virus, send mail
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" $MAILTO
rm -f $CLAMSCANTMP

[root@hoge ~]# yum install -y mailx
[root@hoge ~]# chmod +x virusscan
[root@hoge ~]# mv virusscan /etc/cron.daily/

シェルのコードはコメントにも書いてありますが、こちらを参考にさせていただきつつ、ちょっと変えてあります。

シェルの中でfreshclamを実行していますが、実はyumでclamdをインストールするとcron.dailyにfreshclamを行うシェルが登録されているので不要です。
ただcron.dailyは実行タイミングや順番があまり明確に担保されていた気がしないので、明示的に指定しています。

最後mailxをインストールしていますが、これは私の環境ではmailxが入っていなかったためです。
minimalインストールを行っている方はmailコマンドがないと思うので、インストールしましょう。

ファイルの権限を調整して、cronに突っ込んだら終わりです。
これで毎日朝の4時くらいに毎日ウイルススキャンが実行されます。
ウイルスを検知するとメールで教えてくれます。

cron.dailyなどは時間が非常に適当なので明示的に指定したい場合にはcrontab -eで直接指定してください。

あとがき

今まで数年サーバを稼働させていますが、一度もエラーメールが送られてきたことがありません。
サーバの場合には、検知してメールが送られてきたらサーバクリーンしたほうがいいんじゃないかと思わなくもないですが現実そうもいかなかったりしますよね。

関連記事

no image

Raspberry Pi 2(Raspbian) 初期設定

性懲りもせずにRaspberry pi2を購入しました。 初代に比べて相当スペックが向上しており、

記事を読む

no image

rsyncでsshの鍵を指定してデータ転送

今回は旧サーバから新サーバへいろいろ移設するために便利なrsyncの設定です。 設定というほどのも

記事を読む

no image

ZabbixでSSL証明書期限チェック

zabbixは初期状態でhttps系の監視が微妙なため、証明書期限の監視設定などを行ってみたいと思い

記事を読む

no image

DDNS(No-IP)をcronで更新

DDNSを利用してzabbix agentを導入できないかと思い、ひとまずDDNSの設定を行いました

記事を読む

no image

SSL脆弱性/セキュリティ設定

昨今POODLEやらFREAKやらと大きめなOpenSSLの脆弱性が多発していました。 最近では安

記事を読む

no image

CentOS 7 で ruby on rails 環境構築

気づいたらCentOS7が出てから時間が立っていました。 そろそろ新しく建てるサーバはCentOS

記事を読む

no image

Raspbian(jessie)にssh鍵認証で接続

Debianがjessieになって、sshd_configのデフォルトの設定が変わりました。 それ

記事を読む

no image

RaspberryPI3にCentOS7をインストール (mac利用)

いつの間にやらRaspberryPI 3が発売し、さらにはCentOSまでもがraspberry p

記事を読む

no image

SPFの送受信設定

今回はSPFの設定を行います。 SPFとは何かということについてはここでは割愛しますが、メールの送

記事を読む

no image

CentOS6 初期設定

自宅に置いてある安鯖にCentOS6を入れて初期設定を行ないました。 前提条件/設定項目

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑