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をインストールした直後を想定しています。
セキュリティアップデートも含めた、システムのアップデートを行います。
まずターミナルを起動し、下記コマンドを実行します。
$ sudo dnf check-update

セキュリティアップデートを適応します。
$ sudo dnf update
ダウンロードが終わると、インストールするか聞いてきますので、「y」を入力して「Enter」を押下します。

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

Almalinuxのバージョンをチェックします。
$ cat /etc/redhat-releace
9.5から9.6 にアップデートがしていました。。。
念のため、再起動をしておきます(念のためね)。
再起動しましたので、ClamAVをインストールします。
ClamAVはepelリポジトリにあるため、通常リポジトリを追加していないdnfではインストールできません。
epelリポジトリをインストールするとClamAVをインストールできるようになります。
チェックしてみましょう。
$ sudo dnf info clamav
$ sudo dnf --enablerepo=epel info clamav
やっぱりClamAVは、見つかりませんね。
epelリポジトリをインストールします。
$ sudo dnf install epel-release

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

出てきました。。。インストールします。
$ sudo dnf install clamav clamav-freshclam

インストールが完了しました。
Step3
ホストPCの設定-ウイルス定義ファイルの更新設定
ウイルス定義ファイルの定期更新設定を行います。
$ sudo vim /etc/freshclam.conf
#変更箇所のみ表示  
UpdateLogFile /var/log/clamav/freshclam.log  
LogTime yes  
DatabaseOwner clamupdate  
DatabaseMirror database.clamav.net  
Checks 1 ※ネットワークにプロキシサーバーがある場合は、下記も設定(Server, Portを適宜変更)。
HTTPProxyServer http://proxy.xx.yy.co.jp  
HTTPProxyPort 8080 vim は、「:wq」を入力すると変更を保存して終了します。
※vim の詳しい操作方法は調べてくださいね。
※freshclam設定について詳しく知りたい方は調べてくださいね。
予めログフォルダ、ログファイルを作成、Ownerを変更します。
$ sudo mkdir /var/log/clamav
$ sudo touch /var/log/clamav/freshclam.log  
$ sudo chown clamupdate.clamupdate /var/log/clamav/freshclam.log
初回ウイルス定義を取得します。
$ sudo freshclam
定義取得完了です。

取得場所とログの確認をします。
$ ls -laF /var/lib/clamav
$ ls -laF /var/log/clamav
ウイルス定義を取得できました!
Step4
では、VMにウイルス定義ファイルを配信できるようにWeb公開します。
Web公開とはいえ、インターネットに出しません、 あくまで!ホストPCのうえで動作するVMがアクセスするだけ です!
Webサーバーにはnginx を使用することとしました。
nginx をインストール。
$ sudo dnf install nginx


Webサーバーのファイアウォール設定します。
firewall-cmd を使います。
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=public※設定内容については調べてくださいね。
Webサーバー自動起動設定、起動します。
(Webサーバーの設定前に動作させます。)
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
Webサーバーの設定を行います。
$ sudo vim /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 の詳しい操作方法は調べてくださいね。
公開用フォルダ作成します。
$ sudo mkdir /www
$ sudo ln -s /var/lib/clamav /www/clamav
※「/」(ルート)の直下に「www」を作成し、clamav のリンクを作成します。
nginxの再起動です。
$ sudo systemctl restart nginx
クライアントPCからブラウザにて、ローカルミラーDBにアクセスできるか確認します。
http://ホストAlmalinux/clamav
※私の環境ではローカルのDNSサーバーがありませんので、直接IPを打ってアクセスしています。

すると、403 Forbidden エラーが発生しているでしょうか?
このエラーは、SELinuxにて発生しているため、SELinuxのアクセス許可を実施する必要があります。
まず、ログからSELinuxエラーをチェックします。
$ sudo vim -R /var/log/messagesログの最終行付近に、SELinuxエラーが記録されています。
アクセスが、SELinuxにより拒否されていますので、許可するように設定を行う必要があります。
SELinuxエラーログ付近に、詳細表示用のコマンドが記載されいてるので確認します。
下記フォーマットのコマンドを探してください。
> sealert -l xxxx

vim を閉じた後、探したコマンドを実行します。
SELinux関連コマンドを実行する前にフォルダを作成します。
$ mkdir SELinux
$ cd SELinux
$ sealert -l xxxx
※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
コマンドを実行するとエラーの詳細が表示されます。
興味があれば、内容を確認してください。

nginxからclamavへのアクセスが許可されるように設定を行います。
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp
これでclamavディレクトリはWeb表示できるようになりました。
ですが、clamavディレクトリ内のファイルは、SELinuxで許可していないのでアクセスできません。
下記コマンドを実行してアクセスできるように設定します。
$ 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」を探し実行します。
$ cd ~/SELinux
$ sealert -l xxxx
※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
エラーの詳細が表示されます。同じような内容が指摘されています。詳しいことが知りたい方は調べてくださいね。
SELinuxに許可設定する方法が記載されているので実施します。
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp
では確認です。
あれぇぇ、おかしいですね。。。403 Forbidden エラー は発生しなくなりましたが、ファイルが1つもありません。

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

ログを見る限り、各ファイルへの許可設定が必要みたいですね。
またまたまた、詳細を確認します。
$ sealert -l xxxx※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
各ファイルへのアクセス設定はしたつもりだったのですが、足りないようですね。
仕方ありませんので、1個づつ対処します。(やることは一緒です。)
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp
では確認です。。。やっと表示できました。

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

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

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

$ sealert -l xxxx
※ここではsudo をつけません。またxxxx はログに記載されている内容に置き換えてください。
では設定します。
$ 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」にて実施済みなので動作させるだけです。
$ sudo systemctl enable clamav-freshclam  
$ sudo systemctl start clamav-freshclam  
clamav-freshclamの状態をチェックします。
$ 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
への設定はしていませんでした。
$ sudo chown clamupdate.clamupdate /var/log/clamav2つ目はこれまで実施したSELinux設定の手順を繰り返します。
SELinuxのエラーがでなくなるまで 実施します。
$ sealert -l xxxx
$ sudo ausearch -c 'freshclam' --raw | audit2allow -M my-freshclam  
$ sudo semodule -X 300 -i my-freshclam.pp
自動更新を開始して動作確認。
$ sudo systemctl start clamav-freshclam
$ sudo systemctl status clamav-freshclam

起動しませんでしたので、またログを確認。。。
(長いですね)
SELinuxのエラーが出てますので再度手順を実施。
$ sudo ausearch -c 'freshclam' --raw | audit2allow -M my-freshclam  
$ sudo semodule -X 300 -i my-freshclam.pp
自動更新を開始して動作確認。
$ sudo systemctl start clamav-freshclam
$ sudo systemctl status clamav-freshclam
やっっっと自動更新が動作しました。

freshclam のログもチェック!


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

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

