約 15 分で読めます。
6月頃に買ったOrange Pi 5 Plusにclamonaccを入れて運用開始しました。
ウィルス検出すると、このようにLINE通知するようにしました。
以前はメールで通知していた。
clamonaccについては、この記事で解説していますので、ご興味あればどぞ。
↑の記事当時は0.104が最新でしたが、この記事を書いているときは1.2.0が最新になっていました。
ビルド方法も少し変わっているので、そのあたり含めてまとめます。
ビルド環境準備
いつからか、rustを使うようになっているようです。
ここに詳しくまとまっていますので、従っていきます。
必要なパッケージを入れます。
$ sudo apt update && apt install -y \ `# install tools` \ gcc make pkg-config python3 python3-pip python3-pytest valgrind \ `# install clamav dependencies` \ check libbz2-dev libcurl4-openssl-dev libjson-c-dev libmilter-dev \ libncurses5-dev libpcre2-dev libssl-dev libxml2-dev zlib1g-dev \ cmake
先ほど示した公式ページではpython-pytestも入れる、と書いてあるのですが、
Orange Pi 5 Plusだからなのか、↓のようにaptで入れることができませんでした。
なくても問題なかった。
お次はrust環境を入れます。
こちらのページにあるように、
このコマンドラインを実行すればインストールされます。
現在実行中のユーザー環境(/home/<User>/以下)に入る。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
ソースコードダウンロード、ビルド、インストール
ソースコードはgithubで公開されていますので、cloneなりReleaseからダウンロードなりします。
git cloneならこう。
$ git clone -b clamav-1.2.0 https://github.com/Cisco-Talos/clamav.git $ cd clamav
あるいはアーカイブページからダウンロード。
$ wget https://www.clamav.net/downloads/production/clamav-1.2.0.tar.gz $ tar zxf clamav-1.2.0.tar.gz $ cd clamav-1.2.0
お次はビルド、テスト、インストールです。
合計で30分もかからなかった気がします。さすがOrange Pi 5 Plus。
$ mkdir build $ cd build $ cmake .. $ cmake --build . $ ctest $ sudo cmake --build . --target install
install_manifest.txtを見るとわかるとおり、以下のように配置されます。
$ cat install_manifest.txt /usr/local/bin/clamav-config /usr/local/lib/pkgconfig/libclamav.pc /usr/local/lib/libclamunrar.so.12.0.1 /usr/local/lib/libclamunrar.so.12 /usr/local/lib/libclamunrar.so /usr/local/lib/libclamunrar_iface.so.12.0.1 /usr/local/lib/libclamunrar_iface.so.12 /usr/local/lib/libclamunrar_iface.so /usr/local/lib/libclammspack.so.0.8.0 /usr/local/lib/libclammspack.so.0 /usr/local/lib/libclammspack.so /usr/local/lib/libclamav.so.12.0.1 /usr/local/lib/libclamav.so.12 /usr/local/lib/libclamav.so /usr/local/include/clamav.h /usr/local/include/clamav-types.h /usr/local/include/clamav-version.h /usr/local/lib/libfreshclam.so.3.0.1 /usr/local/lib/libfreshclam.so.3 /usr/local/lib/libfreshclam.so /usr/local/include/libfreshclam.h /usr/local/bin/clamconf /usr/local/sbin/clamd /usr/local/bin/clamdscan /usr/local/sbin/clamonacc /usr/local/sbin/clamav-milter /usr/local/bin/clamscan /usr/local/bin/sigtool /usr/local/bin/clambc /usr/local/bin/clamsubmit /usr/local/bin/freshclam /usr/local/bin/clamdtop /usr/local/etc/clamd.conf.sample /usr/local/etc/freshclam.conf.sample /usr/local/etc/clamav-milter.conf.sample /usr/local/share/man/man1/clamscan.1 /usr/local/share/man/man1/freshclam.1 /usr/local/share/man/man1/sigtool.1 /usr/local/share/man/man1/clamdscan.1 /usr/local/share/man/man1/clamconf.1 /usr/local/share/man/man1/clamdtop.1 /usr/local/share/man/man1/clamsubmit.1 /usr/local/share/man/man1/clambc.1 /usr/local/share/man/man5/clamd.conf.5 /usr/local/share/man/man5/clamav-milter.conf.5 /usr/local/share/man/man5/freshclam.conf.5 /usr/local/share/man/man8/clamd.8 /usr/local/share/man/man8/clamav-milter.8
アンインストールしたくなったら、以下のとおりコマンド実行します。
$ sudo xargs rm < install_manifest.txt
自動起動設定
systemctlに自動起動してもらうようにします。
まず起動スクリプト。
$ cat /usr/local/bin/start_clamonacc.sh #!/bin/bash CLAMONACC=/usr/local/sbin/clamonacc QUARANTINE_DIR=/opt/clamav/quarantine ${CLAMONACC} --config-file=/usr/local/etc/clamonacc.conf --ping 3 > /dev/null if [ 0 -ne $? ]; then echo "clamd doesn't exist. exiting..." exit 1; else echo "Good, clamd exists." fi if [ ! -d ${QUARANTINE_DIR} ]; then mkdir -p ${QUARANTINE_DIR} fi ${CLAMONACC} --fdpass --move=${QUARANTINE_DIR} --config-file=/usr/local/etc/clamonacc.conf
clamonacc.confは以下のとおりにしました。
$ cat /usr/local/etc/clamonacc.conf TCPSocket 1234 TCPAddr 192.168.1.123 OnAccessIncludePath /media/ OnAccessVirusEvent curl -X POST -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -F "message=${CLAM_VIRUSEVENT_VIRUSNAME} is found in ${CLAM_VIRUSEVENT_FILENAME} on $(cat /etc/hostname)." https://notify-api.line.me/api/notify
それぞれの設定項目は以下の通り。
項目 | 意味 |
TCPSocket | clamdが動いているコンピューターのポート番号 |
TCPAddr | clamdが動いているコンピューターのIPアドレス |
OnAccessIncludePath | clamonaccでスキャンしたいディレクトリ |
OnAccessVirusEvent | ウィルス検出時に実行させたいコマンドライン |
別コンピューターで動作しているclamdを使う方法は↓の記事を参照してください。
2024/03/28追記
ワタシの動作環境では起動時に以下のエラーが出ました。
多分監視対象ファイルが多すぎる
no space left on device
sysctlで1プロセスが開くことのできるファイルディスクリプタ数を増やすことで対処しました。
vim /etc/sysctl.conf # ↓を追記 s.inotify.max_user_watches=524288
ウィルス検出時動作設定
OnAccessVirusEventは本家clamavにはなく、自分で追加した設定項目です。
clamonaccがファイル変更を検出して、結果的にウィルス検出すると、clamonaccが動作しているコンピューター上で指定したコマンドを実行します。
↑の記事に詳しく載っていますので、ご興味ある方はどぞ。
githubにパッチを載せています。
このOnAccessVirusEventで、LINEに通知するようにしています。
LINE Notifyという機能を使っています。
通常のHTTPリクエストで自分のLINEに通知できる、とても便利なサービスです。
自分が設定したコマンドラインは以下の通りです。
通常のcurl利用で動作するのがとても良いです。
curl -X POST -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -F "message=${CLAM_VIRUSEVENT_VIRUSNAME} is found in ${CLAM_VIRUSEVENT_FILENAME} on $(cat /etc/hostname)." https://notify-api.line.me/api/notify
Bearerのあとにある”XXX…”はLINE NotifyのPersonal Access Tokenで、ご自身のアカウントでLINE Notifyにログインし、取得してもらう必要があります。
1分で終わります。
終わりに
いかがでしたか。
ラズパイでのノウハウを使えるのが嬉しい!
Comments