Studio ilia

Wordpress、ゲームコンテンツ開発ブログ

CentOS 8にて構築したメールサーバー「CourierMTA」にClamAVを導入してウィルス対策

ClamAVについて

Clam AntiVirus (クラム・アンチウイルス)は、オープンソース (GPL) で提供されているクロスプラットフォームのアンチウイルスソフトウェアです。
外部向けにサーバーを運営しているとウィルス対策等が気になると思います。
特にメールサーバーを運営していると、ウィルス感染のリスクも高まるので、「ClamAV」を導入しようと思います。

 

これはボックスのタイトルです。
  • メールスキャンソフトとしてはスタンダード!
  • ウィルス定義ファイルの更新が可能!
  • コマンドラインでのスキャンが可能!
  • 多くのフォーマットやファイルをサポートしている!

 

▼公式WEB


▼公式解説

 

構築環境
  • CentOS Linux release 8.2.2004 (Core)
  • courier-1.0.14
  • courier-authlib-0.71.0
  • courier-unicode-2.1
  • pyClamd-0.4.0
  • courier-pythonfilter-3.0.2

 

▼必要なパッケージ

ClamAV メールサーバーと連動させることが出来るアンチウィルスソフト。
Courier-pythonfilter CourierMailServerとClamAVを連動させるプラグイン。
Pythonという言語で書かれています。
http://phantom.dragonsdawn.net/~gordon/courier-pythonfilter/
pyClamd ClamAVデーモと連動するPythonインターフェイス。
pyClamdを使用すると、簡単にPythonソフトウェアにウイルス検出機能を追加できます。
ClamAVの公式WEBからも下記にリンクがあります。
http://xael.org/norman/python/pyclamd/

 

 

clamavと関連ファイルのインストール

EPELいうリポジトリをからClapAVをDLして使用します。
EPELの追加方法は こちら で解説しています。

 

▼ClamAVのインストール

 

▼ウィルス定義を更新するfreshclamをインストール

 

▼インストールされたパッケージの確認

 

 

ClamAVのコンフィグ設定

 

備考

/var/run/clamd/clamd.sock のようにフォルダを作成してソケットのPATHを設定する方法が多いかと思いますが、OS再起動等でフォルダが自動で作られパーミッションがゼロになり、メールの送信が出来ない問題が発生したため、run の直下にソケットファイルを設置しています。

 

 

ClamAVの起動設定

▼clamdユーザーで自動起動

「@」が入っていて解り辛いですが、「clamd@scan」が起動サービス名です。

 

▼自動起動確認

 

▼clamdの起動
何十秒か時間がかかる場合があります。

 

▼clamdの起動確認

 

▼ソケットファイル確認
起動後は「scan.conf」の設定に則りソケットファイルが作成されます。

 

 

ウィルス定義ファイル更新するfreshclamの設定

 

 

 

手動でウィルス定義ファイルの更新

▼定義ウィルス更新

 

 

ウィルススキャンテスト

コマンド実行に滞在しているディレクトリ配下のファイルをスキャンします。

▼スキャンオプション

–recursive サブディレクトリ、圧縮ファイルも検索
–remove 観戦ファイルを削除する
–infected ウィルスに感染したファイルのみを出力

 

▼スキャン実行例

 

▼テストウィルスDL

 

▼再度スキャンを実行

 

 

ウィルス定義の更新をcronにて自動化

Shell Script と呼ばれるプログラムファイルとして作成して、Scriptファイルを cron にて毎日時限発動させることで、定義ファイルの更新チェックを毎日自動で実行されるようにします。

 

▼定義ファイル更新のShell Scriptを作成
下記の例では、「/usr/local/bin/」配下にスクリプトを作成した場合の例です。

 

 

▼作成したShell Scriptに実行権限を付与

 

▼試しに問題が無いかスクリプトを実行

 

▼cronに登録

構築環境
  • 毎日夜中の「3:15」にウィルス定義ファイルの更新を実行。
  • 実行時の標準出力結果をメールで送信。
 

 

 

Courier-pythonfilterのインストール

Courier-pythonfilterは、CourierMailServerとClamAVを連動させるプラグインです。
Pythonというプログラム言語で書かれています。

 

▼ファイルのDL

 

▼python3-develのインストール
Courier-pythonfilterは「python3」で作成されたプログラムです。
「python2」では動作しないので注意。

 

▼RPM化前にファイルの修正
Ver3.0.2はファイルの記述が間違えておりrpmbuildの際にエラーになるバグがあるのです >_<

エラー内容

# rpmbuild -ta courier-pythonfilter-3.0.2.tar.gz

/var/tmp/rpm-tmp.jucZQO: line 40: cd: courier-pythonfilter-3.0: No such file or directory

 

▼一度tarファイルを解凍

 

▼該当ファイルの確認

上から2番目「spec」のバージョン表記が間違えているので修正します。

 

▼該当ファイルの修正

 

 

▼古いファイルを削除して修正したファイルを再圧縮

 

▼Courier-pythonfilterのRPM化実行
tar.gzのファイルをRPM化するにはオプションは「-ta」になります。

 

▼RPM化したCourier-pythonfilterのインストール
pythonfilterをrootでrpmbuild実行時は「/root/rpmbuild/RPMS/noarch/」にファイルが作成されます。

 

 

pyClamdのインストール

pyClamdは、ClamAVデーモと連動するPythonインターフェイスです。
pyClamdを使用すると、簡単にPythonソフトウェアにウイルス検出機能を追加できます。

 

▼ファイルのDL
先ほどpythonfilterをダウンロードしたディレクトリに移動してファイルをDLします。

 

▼ソースコードのファイルのビルド
pyClamdはrpmbuildを行うためのレシピファイル「spec」が無いためRPM化ができません。
ソースコードを直接ビルドしてインストールします。

 

▼DLした圧縮ファイルを解凍

 

▼解凍したディレクトリに移動してビルドを実行

 

▼生成されたファイルの確認

「build」ディレクトリが作成されます。
「build」と「pyclamd」ディレクトリ内にパッケージが展開されています。

 

▼ビルドされたファイルをインストール

エラー発生時

error: can’t create or remove files in install directory
/usr/local/lib/python3.6/site-packages/

このようにエラーになった場合はPython3のsite-packagesのPATHが違うと思われます。
この場合は「/usr/local/lib/python3.6/」配下に「site-packages」は存在しないかと思われます。

 

▼Pythone3の「site-packages」のPATHを確認

上記例のpython3 コマンドにてPATHの確認を行った際は4つのPATHが表示されました。

4つのPATH
  • /usr/local/lib64/python3.6/site-packages
  • /usr/local/lib/python3.6/site-packages
  • /usr/lib64/python3.6/site-packages
  • /usr/lib/python3.6/site-packages

ビルドされたファイルをインストールした際に発生したエラー内容のPATHは「/usr/local/lib/python3.6/site-packages/」と表示されています。
エラー発生時時は「/usr/local」と表示されていましたが、正しくは「/usr」です。
エラーで表示されたPATHでは「/usr/lib64」ではなく「/usr/lib」と表示されていました。

このことから、本来の正しいPATHは「/usr/lib/python3.6/site-packages/」になります。

 

▼prefixオプションを指定して再度インストールを実行
prefixオプション指定時は、site-packagesのフルパスではなくこの場合は「/usr」を指定します。

「/usr」から先の「/lib/python3.6/site-packages/」は自動で作成されます。

 

▼インストール確認

 

 

pythonfilterのコンフィグ変更

▼どの機能を利用するかの設定

 

 

 

clamavを有効化

 

 

▼ソケットファイルのディレクトリのパーミッション確認

EPELで入れた場合、clamavのパーミッションがゼロになっています。

 

▼パーミッション変更

 

▼パーミッション変更確認

 

▼ウィルス検知後隔離ディレクトリのオーナー権限を確認

 

▼オーナー権限を「daemon」に変更

 

▼オーナー権限変更後の確認

 

▼pythone3へのパスに変更
デフォルトではpythone3.6を利用するようになっていますが、ユーザープログラムでは推奨されておらず、また動作もしない事からpythone3を使用するように変更します。

 

 

 

PythonFilterの起動と停止

▼起動

 

▼起動確認
下記のようにフィルターパスのシンボリックリンクが張られていればOKです。

 

▼停止する場合

 

 

ウィルススキャンをcronにて自動化

Shell Script と呼ばれるプログラムファイルとして作成して、Scriptファイルを cron にて毎日時限発動させることで、「Maildir」のウィルススキャンを毎日自動で実行されるようにします。

 

cronの設定要件
  • ウィルススキャンを実行するディレクトリは特定のディレクトリ
  • 毎日夜中の「4:00」に実行される
  • ウィルススキャンの実行結果をメールで送信

▼ウィルススキャンのShell Scriptを作成
下記の例では、「/usr/local/bin/」配下にスクリプトを作成した場合の例です。

 

 

▼作成したShell Scriptに実行権限を付与

 

▼試しに問題が無いかスクリプトを実行

 

▼cronに登録

 

 

Home
Profile
Menu
Search