サーバー用途の多いCentOS7でも、その蓄積させたデータにはウィルスが混入する危険があります。
このウィルスを放置することで、利用者に被害が出る可能性がありますので、サーバー運用のCentOS7にもウィルススキャン環境を構築する方法をご紹介いたします。
Linuxシステム悩み解決(資料)
ウィルススキャンとしては、オープンソースの ClamAV を使用します。
ClamAVは「ファイルスキャン」「メールスキャン」など、様々な状況で利用できるウィルススキャンエンジンです。
ClamAV のインストール
ClamAVは様々な配布方式がありますが、今回は epelリポジトリで提供されているClamAVをインストールしていきます。
epelリポジトリを有効にし、ClamAVをインストールするには以下のコマンドを実行します。
# yum install epel-release # yum install clamav clamav-data clamav-devel clamav-filesystem clamav-update clamd
- clamav
- ClamAV本体。各種ツール類
- clam-data
- ウィルススキャンデータベース
- clamav-devel
- ClamAVの関連ライブラリやヘッダーファイル
- clamav-filesystem
- ClamAV動作に必要なユーザー設定やファイル構成のパッケージ
- clamav-update
- ウィルスデータベースを更新するためのパッケージ
- clamd
- ClamAVをデーモンとして動作させるパッケージ
インストール後の初期のウィルススキャン
インストールが終わったら、各種設定の前に既存のシステムのウィルススキャンを実施します。
実行前にウィルスデータベースのアップデートを実施します。
※)以前は、freshclamの実行の前に設定ファイルの変更が必要でしたが、CentOS7 epelパッケージでは、すぐにfreshclamが実行できるように設定ファイルが変わっています。
# freshclam ClamAV update process started at Sat Oct 5 11:12:56 2019 main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr) daily.cld is up to date (version: 25592, sigs: 1796292, f-level: 63, builder: raynman) bytecode.cld is up to date (version: 331, sigs: 94, f-level: 63, builder: anvilleg)
ウィルスデータベースの更新が終わったら、以下のコマンドを実行して /var,/home などユーザーデータが入り込む危険のあるディレクトリを検査します。
# clamscan --infected --recursive /var # clamscan --infected --recursive /home # clamscan --infected --recursive /opt
実行パラメータに –remove をつけることで、ウィルスを発見したときに自動的に削除することもできますが、重要なファイルだった場合などを考え、 –remove はつけないで結果を確認します。
実行結果の例は次のようになります。
----------- SCAN SUMMARY ----------- Known viruses: 6352093 Engine version: 0.101.4 Scanned directories: 2610 Scanned files: 27190 Infected files: 0 Data scanned: 417.12 MB Data read: 1378.61 MB (ratio 0.30:1) Time: 158.312 sec (2 m 38 s)
- Known viruses
- ウィルスデータベースの定義数
- Engine version
- ClamAVのバージョン
- Scanned directories
- 検査したディレクトリの数
- Scanned files
- 検査したファイルの数
- Infected files
- 重要: 検出したウィルスの数
- Data scanned
- スキャンしたファイルの合計
- Data read
- スキャンしたデータサイズ(圧縮データの展開も含む)
- Time
- スキャンにかかった時間
重要なのは「Infected files」になります。ここの値が 0 でない場合、ウィルスに感染したファイルがシステム上に存在することになるので、対策が必要です。
検出したファイルを削除するか、バックアップから元のファイルを書き戻して、再度フィルススキャンしてシステムがクリーンな状態であることを確認します。
ウィルスデータベース更新
基本的なウィルススキャンの実行が確認できたので、ウィルスデータベースの更新ができるように設定していきます。
ウィルスデータベース更新の設定 freshclam
ウィルスデータベース更新ツール freshclam の動作を設定します。
設定ファイルは /etc/freshclam.conf になります。
# cp /etc/freshclam.conf /etc/freshclam.conf-org # vi /etc/freshclam.conf
主に設定していく項目は、以下の内容になります。
- Example
- Exsampleをコメントアウトします。Exampleがると動作しません。
- UpdateLogFile
- ログファイルの場所を指定します。例 /var/log/freshclam.log
- LogFileMaxSize
- ログファイルの最大サイズを指定します。例 2M
- LogTime
- ログにタイムスタンプを追加します。例 Yes
- LogRotae
- ログローテーションの指定。例 Yes
- DatabaseOwner
- データベース所有者の指定。例 root
- NotifyClamd
- clamdへの更新通知のための設定ファイル指定。例 /etc/clamd.d/scan.con
ウィルスデータベースの更新
設定が完了したら、以下のコマンドで ウィルスデータベースを更新します。
]# freshclam -u root ClamAV update process started at Sat Oct 5 15:13:58 2019 main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr) daily.cld is up to date (version: 25592, sigs: 1796292, f-level: 63, builder: raynman) bytecode.cld is up to date (version: 331, sigs: 94, f-level: 63, builder: anvilleg)
ウィルスデータベースの自動更新:cron
CentOSでは、パッケージ導入時点で freshclam を定期的に実行するスケジュールが登録されます。
# cat /etc/cron.d/clamav-update ## Adjust this line... MAILTO=root ## It is ok to execute it as root; freshclam drops privileges and becomes ## user 'clamupdate' as soon as possible 0 */3 * * * root /usr/share/clamav/freshclam-sleep
もし、なんからの理由で clamav-update が登録されていない場合には、上記内容を追加することで、3時間毎にウィルスデータベースの更新が実行されます。
ウィルススキャンの動作確認
ウィルスデータベースの更新設定が終わり、最新のウィルスデータベースになったので、ウィルスの検出ができるかを確認します。
テスト用ファイルのダウンロード
ウィルス検出のテストに使用するのは、EICARが開発した「eicar.com」ファイルになります。
# cd /root # wget http://www.eicar.org/download/eicar.com
ウィルススキャンの実行
# clamscan /root /root/.mysql_history: OK /root/.bash_history: OK /root/org-info.txt: OK /root/.cshrc: OK /root/.tcshrc: OK /root/eicar.com: Eicar-Test-Signature FOUND /root/.bashrc: OK /root/mount-kamakura.sh: OK /root/.bash_profile: OK /root/.bash_logout: OK ----------- SCAN SUMMARY ----------- Known viruses: 6352093 Engine version: 0.101.4 Scanned directories: 1 Scanned files: 10 Infected files: 1 Data scanned: 0.02 MB Data read: 0.01 MB (ratio 2.00:1) Time: 57.204 sec (0 m 57 s)
先ほどダウンロードしたテストファイルが検出されたことを確認できました。
確認が完了したら、忘れずに eicar.com ファイルを削除します。
# rm /root/eicar.com rm: remove regular file '/root/eicar.com'? y
ウィルススキャンの実行
ここまでの設定で、コマンドラインによるウィルススキャンの実行環境が整いました。
ClamAVのデーモン実行
ここまでの ClamAVは、コマンドラインで実行する方法でした。
コマンドラインで実行する clamscan は、手軽に実行できますが、実行のたびにウィルスデータベースを読み込むため、実行のたびに多くのディスクI/Oとメモリーを必要とします。
また、その作り上、手軽ですがウィルススキャンに多くの時間を必要とします。
常に常駐して必要なときに、素早くウィルススキャンを実行する方法としてClamAVをデーモンとして実行しておく方法があります。
ClamAVをデーモンとして実行しておくことで、Postfixや、そのほかのアプリケーションと連携することもできるようになります。
scan.confの準備
ClamAVをデーモンとして常駐させるためには、clamd@scan の設定を行います。
clamd@scan の設定ファイルは /etc/clamd.d/scan.conf になります。
# cd /etc/clamd.d # cp scan.conf scan.conf-org # vi scan.conf
scan.confの設定内容
- Example
- Exampleがあるとclamdは動作しません。削除するかコメントアウトします。
- LocalSocket
- /var/run/clamd.scan/clamd.sock を指定します。
- FixStaleSocket yes
- 異常終了時にソケットを削除するかの指定です。yesにします。
- User root
- 実行するユーザーの指定。rootを指定します。
ExcludePathの指定
scan.confでは、スキャンしないディレクトリを指定できます。システムが管理しているディレクトリなどはスキャンする必要がないため、以下のディレクトリを除外するディレクトリとして指定します。
- ExcludePath ^/proc/
- ExcludePath ^/sys/
- ExcludePath ^/dev/
clamd@scanの起動
設定ファイルの準備ができたら、clamd@scan を起動します。
ウィルスデータベースを読み込みますので、起動に時間がかかる場合があります。
# systemctl restart clamd@scan
起動の確認
clamd@scan が起動したら、systemctl コマンドで起動を確認します。
# systemctl status clamd@scan * [email protected] - Generic clamav scanner daemon Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled) Active: active (running) since Sat 2019-10-05 15:29:54 JST; 25s ago Docs: man:clamd(8) man:clamd.conf(5) https://www.clamav.net/documents/ Process: 31301 ExecStart=/usr/sbin/clamd -c /etc/clamd.d/%i.conf (code=exited, status=0/SUCCESS) Main PID: 31330 (clamd) CGroup: /system.slice/system-clamd.slice/[email protected] `-31330 /usr/sbin/clamd -c /etc/clamd.d/scan.conf Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: ELF support enabled. Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: Mail files suppor... Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: OLE2 support enab... Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: PDF support enabled. Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: SWF support enabled. Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: HTML support enab... Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: XMLDOCS support e... Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: HWP3 support enab... Oct 05 15:29:51 ik1-405-34989.vs.sakura.ne.jp clamd[31330]: Self checking eve... Oct 05 15:29:54 ik1-405-34989.vs.sakura.ne.jp systemd[1]: Started Generic cla... Hint: Some lines were ellipsized, use -l to show in full.
自動起動の設定
システムが起動したときに自動的に clamd@scanが起動するように設定します。
# systemctl enable clamd@scan Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].
clamd@scanを使用したウィルススキャン
clamd@scan をデーモンで起動した後に、ウィルススキャンを実行するには、「clamdscan」を使用します。
テストファイルの準備
先ほどと同様に、テスト用のファイルを用意します。
# cd /root # wget http://www.eicar.org/download/eicar.com
clamdscanを使用したウィルススキャン
clamd@scan を使用してウィルススキャンを行います。
# clamdscan /root /root/eicar.com: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Infected files: 1 Time: 2.309 sec (0 m 2 s)
先ほどと同じように eicar.com が検出されましたが、実行時間が 2秒になり、前回より早く処理が完了していることが確認できました。
デーモン化した環境では、clamdscan (dがついていることに注意) を使用してスキャンを行います。
# which clamdscan /bin/clamdscan