ClamAVでウイルス対策!AlmaLinuxへの導入と自動更新設定手順【初心者向け】

記事内に広告を含みます

Almalinux:ClamAVインストールからウイルス定義自動更新までです。

Almalinux のKVMを利用してVMを作成します。
そのVM上で、プリザンターを動作させていきます。
構成については、記事プリザンターで作る!ローコード業務改善システムの構築方法:イントロを確認してくださいね。

Almalinuxには、KVMを簡単管理できるツール:Cockpitがあります。
ブラウザにてアクセスすることで、仮想ネットワークスイッチの作成、VMの追加・起動・停止など簡単に操作できます。

Cockpitの前にウイルス対策を行います。ホストPC、VMともにです。
事業や会社で使用するPCには、ウイルス対策は必須!っとしていることが多いと思います。
有料のサービスもたくさんありますが、今回は無料のClamAVをセットアップし、定期的に指定場所をスキャンすることにします。

今回は、まだVMは作成していませんので、ホストPCの設定のみ、VMは作成したら設定しますね。

この記事でわかること。

  • ホストPCへのClamAVインストール方法。
  • ClamAVのウイルス定義ファイル更新設定と、VMへのウイルス定義ファイル配布設定。
  • SELinuxの設定方法。
    特に、SELinuxの設定がメンドウですがここが重要

Step1

まずは設計、なにをどうするかを決めます。

ウイルス対策設計

定義ファイルの更新は、ホストPC/VMともに1日1回とします。
ダウンロード先は、ホストPCがClamAV公式サイト。VMはホストPCとします。

ウイルス検索周期

ホストPC/VMともに1週間に1回とします。

検出した時の対策

ホストPC/VMともに、指定した管理者のメールアドレスにメール通知、対象のファイルは駆除せずそのままとします。

なぜ駆除しないのか?

誤検出が怖いからです!

ウイルス対策ソフトの精度によりますが、誤検出が怖いからです。
サーバーアプリケーションに必要なファイルをウイルスと誤検出、駆除されてしまうとサーバーアプリケーションが動作しなくなってしまうと思うので

※VMはまだ作成していないので、VMへの設定はVM追加時ですね。

Step2

ホストPCの設定-ClamAVインストール
Almalinuxをインストールした直後を想定しています。
セキュリティアップデートも含めた、システムのアップデートを行います。
まずターミナルを起動し、下記コマンドを実行します。

sh
$ sudo dnf check-update

セキュリティアップデートを適応します。

sh
$ sudo dnf update

ダウンロードが終わると、インストールするか聞いてきますので、「y」を入力して「Enter」を押下します。

アップデートが完了しました。

Almalinuxのバージョンをチェックします。

sh
$ cat /etc/redhat-releace

9.5から9.6 にアップデートがしていました。。。
念のため、再起動をしておきます(念のためね)。

再起動しましたので、ClamAVをインストールします。
ClamAVはepelリポジトリにあるため、通常リポジトリを追加していないdnfではインストールできません。
epelリポジトリをインストールするとClamAVをインストールできるようになります。
チェックしてみましょう。

sh
$ sudo dnf info clamav
sh
$ sudo dnf --enablerepo=epel info clamav

やっぱりClamAVは、見つかりませんね。
epelリポジトリをインストールします。

sh
$ sudo dnf install epel-release

elelリポジトリのインストールが完了しました。ClamAVがあるかチェックします。

sh
$ sudo dnf info clamav

出てきました。。。インストールします。

sh
$ sudo dnf install clamav clamav-freshclam

インストールが完了しました。

Step3

ホストPCの設定-ウイルス定義ファイルの更新設定
ウイルス定義ファイルの定期更新設定を行います。

sh
$ sudo vim /etc/freshclam.conf
/etc/freshclam.conf
#変更箇所のみ表示  

UpdateLogFile /var/log/clamav/freshclam.log  
LogTime yes  
DatabaseOwner clamupdate  
DatabaseMirror database.clamav.net  
Checks 1 

※ネットワークにプロキシサーバーがある場合は、下記も設定(Server, Portを適宜変更)。

/etc/freshclam.conf
HTTPProxyServer http://proxy.xx.yy.co.jp  
HTTPProxyPort 8080 

vim は、「:wq」を入力すると変更を保存して終了します。
※vim の詳しい操作方法は調べてくださいね。
※freshclam設定について詳しく知りたい方は調べてくださいね。

予めログフォルダ、ログファイルを作成、Ownerを変更します。

sh
$ sudo mkdir /var/log/clamav
$ sudo touch /var/log/clamav/freshclam.log  
$ sudo chown clamupdate.clamupdate /var/log/clamav/freshclam.log

初回ウイルス定義を取得します。

sh
$ sudo freshclam

定義取得完了です。

取得場所とログの確認をします。

sh
$ ls -laF /var/lib/clamav
$ ls -laF /var/log/clamav

ウイルス定義を取得できました!

Step4

では、VMにウイルス定義ファイルを配信できるようにWeb公開します。
Web公開とはいえ、インターネットに出しません、 あくまで!ホストPCのうえで動作するVMがアクセスするだけ です!
Webサーバーにはnginx を使用することとしました。
nginx をインストール。

sh
$ sudo dnf install nginx

Webサーバーのファイアウォール設定します。
firewall-cmd を使います。

sh
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=public

※設定内容については調べてくださいね。
Webサーバー自動起動設定、起動します。
(Webサーバーの設定前に動作させます。)

sh
$ sudo systemctl enable nginx
$ sudo systemctl start nginx

Webサーバーの設定を行います。

sh
$ sudo vim /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
# 変更箇所のみ表示  
worker_processes 2;     #★ ←worker_processes auto;  を2に変更。
http {
# ...
 server {
# の中にある include /etc/nginx/default.d/*.conf;  の下に下記を追加する。
        # clamav local database
        location /clamav{
                root /www;
                autoindex on;
        }

vim は、「:wq」を入力すると変更を保存して終了します。
※ウィルス検索にパフォーマンスを取られないようにするため、worker_processes を2にしています。
※vim の詳しい操作方法は調べてくださいね。

公開用フォルダ作成します。

sh
$ sudo mkdir /www
$ sudo ln -s /var/lib/clamav /www/clamav

※「/」(ルート)の直下に「www」を作成し、clamav のリンクを作成します。

nginxの再起動です。

sh
$ sudo systemctl restart nginx

クライアントPCからブラウザにて、ローカルミラーDBにアクセスできるか確認します。
http://ホストAlmalinux/clamav
※私の環境ではローカルのDNSサーバーがありませんので、直接IPを打ってアクセスしています。

すると、403 Forbidden エラーが発生しているでしょうか?
このエラーは、SELinuxにて発生しているため、SELinuxのアクセス許可を実施する必要があります。
まず、ログからSELinuxエラーをチェックします。

sh
$ sudo vim -R /var/log/messages

ログの最終行付近に、SELinuxエラーが記録されています。
アクセスが、SELinuxにより拒否されていますので、許可するように設定を行う必要があります。
SELinuxエラーログ付近に、詳細表示用のコマンドが記載されいてるので確認します。
下記フォーマットのコマンドを探してください。
> sealert -l xxxx

vim を閉じた後、探したコマンドを実行します。
SELinux関連コマンドを実行する前にフォルダを作成します。

sh
$ mkdir SELinux
$ cd SELinux
$ sealert -l xxxx

※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
コマンドを実行するとエラーの詳細が表示されます。
興味があれば、内容を確認してください。

nginxからclamavへのアクセスが許可されるように設定を行います。

sh
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

これでclamavディレクトリはWeb表示できるようになりました。
ですが、clamavディレクトリ内のファイルは、SELinuxで許可していないのでアクセスできません。
下記コマンドを実行してアクセスできるように設定します。

sh
$ cd /www  
$ sudo semanage fcontext -a -t httpd_sys_content_t '/clamav(/.*)?'

クライアントPCからブラウザにて、ローカルミラーDBにアクセスできるか確認します。
http://ホストAlmalinux/clamav

また、403 Forbidden エラーが発生していますね。
/var/log/messages を確認します。

ログの最後付近に、SELinuxエラーが記録されているので、「sealert -l xxx」を探し実行します。

sh
$ cd ~/SELinux
$ sealert -l xxxx

※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
エラーの詳細が表示されます。同じような内容が指摘されています。詳しいことが知りたい方は調べてくださいね。
SELinuxに許可設定する方法が記載されているので実施します。

sh
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

では確認です。
あれぇぇ、おかしいですね。。。403 Forbidden エラー は発生しなくなりましたが、ファイルが1つもありません。

/var/log/messages を確認します。

ログを見る限り、各ファイルへの許可設定が必要みたいですね。
またまたまた、詳細を確認します。

sh
$ sealert -l xxxx

※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。

各ファイルへのアクセス設定はしたつもりだったのですが、足りないようですね。
仕方ありませんので、1個づつ対処します。(やることは一緒です。)

sh
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

では確認です。。。やっと表示できました。

ダウンロードできるでしょうか??
ダウンロードできませんでしたね。

っということでSELinuxの設定をしますが、その前に、残りつもクリックしてダウンロードできないことを確認します。

ハイ、すべてダウンロードできませんでしたね。
では、/var/log/messages を確認します。そして詳細を確認します。

sh
$ sealert -l xxxx

※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
では設定します。

sh
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

さてダウンロード確認です。
ダウンロードできればSELinuxの設定は終了です。がしかし、ファイルをダウンロードできませんね。

/var/log/messages を確認し、SELinux設定を行います。

ダウンロード確認!

これで、ローカルミラーDBが作成できました。
(長かったぁぁぁ)

Step5

ウイルス定義ファイルの自動更新設定を行います。
自動更新には、用意されている「clamav-freshclam」を利用します。
設定は「Step2」にて実施済みなので動作させるだけです。

sh
$ sudo systemctl enable clamav-freshclam  
$ sudo systemctl start clamav-freshclam  

clamav-freshclamの状態をチェックします。

sh
$ sudo systemctl status clamav-freshclam

正常動作してればOK。。。
動作していない(failed)ので、ログ(/var/log/messages)を見てエラーを修正します。

エラーとしては2つありそうです。

  • /var/log/clamav/freshclam.log にアクセスできない。
  • /var/log/clamav/freshclam.log へのSELinuxによる拒否。

まず1つ目ですが、
/var/log/clamav/freshclam.log へは、「clamupdate」のアクセス設定はしていますが、
/var/log/clamav
への設定はしていませんでした。

sh
$ sudo chown clamupdate.clamupdate /var/log/clamav

2つ目はこれまで実施したSELinux設定の手順を繰り返します。
SELinuxのエラーがでなくなるまで 実施します。

sh
$ sealert -l xxxx
sh
$ sudo ausearch -c 'freshclam' --raw | audit2allow -M my-freshclam  
$ sudo semodule -X 300 -i my-freshclam.pp

自動更新を開始して動作確認。

sh
$ sudo systemctl start clamav-freshclam
$ sudo systemctl status clamav-freshclam

起動しませんでしたので、またログを確認。。。
(長いですね)
SELinuxのエラーが出てますので再度手順を実施。

sh
$ sudo ausearch -c 'freshclam' --raw | audit2allow -M my-freshclam  
$ sudo semodule -X 300 -i my-freshclam.pp

自動更新を開始して動作確認。

sh
$ sudo systemctl start clamav-freshclam
$ sudo systemctl status clamav-freshclam

やっっっと自動更新が動作しました。

freshclam のログもチェック!

OKですね。
併せてローカルミラーDBもチェックします。

新しいファイルになっていますね!

SELinuxの設定は都度対処が必要なため煩雑です。
煩わしいので、SELinuxをOFFする方が楽ですが、セキュリティを下げてしまうのでお勧めできません。
めんどうでも、1つ1つ設定することが大切です。
(事業につかう場合は特に。。。ですよね)

コメントを残す

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

CAPTCHA