3.15 セキュリティツールの活用 #
対象機種: AX30 / AX11 / AX21 / AG10 / AG20 / AR10 / AR20
アムニモのデバイス上でセキュリティ強化のために複数のOSS(オープンソースソフトウェア)ツールを導入可能です。本節では、代表的な3つのツール「ClamAV」「Tripwire」「Snort」について、それぞれの目的や動作方式、対応筐体、リソース使用量などを比較し、ユーザーが用途に応じて適切なツールを選定できるように整理しています。
これらのツールは、セキュリティ対策のカテゴリーに応じて以下のように分類されます:
- ClamAV:ウイルス対策(アンチウイルス)ツールとして、ファイル感染の検出と除去を目的とします。
- Tripwire:ホスト型IDS(HIDS)として、システムファイルや設定ファイルの改ざんを検知します。
- Snort:ネットワーク型IDS(NIDS)として、ネットワーク上の不正アクセスや攻撃をリアルタイムで検出します。
また、各ツールの導入にあたっては、筐体ごとの対応状況や、ルートファイルシステムの空き容量、RAM使用量などのリソース要件も考慮する必要があります。事前の確認が重要です。
以下の比較表では、これらの観点を踏まえ、各ツールの特徴を一覧で整理しています。導入判断や運用設計の参考としてご活用ください。
セキュリティツール比較表
| 項目 | ClamAV | Tripwire | Snort |
|---|---|---|---|
| カテゴリー | アンチウイルス | ホスト型IDS | ネットワーク型IDS |
| 主な目的 | マルウェア検出・除去 | ファイル改ざんの検出 | ネットワーク攻撃の検出 |
| 対象 | ファイルシステム | システムファイル・設定 | ネットワークトラフィック |
| 動作方式 | 定義ファイルによるスキャン | ポリシーと整合性チェック | パケット解析とルール照合 |
| リアルタイム対応 | 一部対応(clamd) | 非対応(定期実行) | 対応(常駐型) |
| 対応可能デバイス | 全機種 | 全機種 | |
| 制限事項 | メモリ消費が大きいため、スワップファイルが必要になる。 スキャン中はCPU負荷が100%近くになる。 定義ファイルによるディスク消費が大きい。 定義ファイル更新のためインターネット接続が前提となる。 | 確認対象を変更した場合は、ベースラインの再作成が必要。 ポリシーの量に比例して、整合性チェックの時間がかかる。 | 読み込むルールが多くなるとメモリ消費が大きくなり、比較的実装メモリ量が小さいIoTルーターやセンサー接続ゲートウェイでは共存するアプリケーションを踏まえメモリの消費量を確認する必要がある。 |
本節の説明では、バージョン3.2.0(Ubuntu24.04)の屋内タイプエッジゲートウェイに導入する例を
記載しています。
3.15.1 アンチウイルス(ClamAV)の導入方法 #
ClamAVは、Cisco Systems, Incによって提供されているオープンソースのアンチウイルスソフトです。ウイルス、マルウェア、スパイウェアなどの脅威を検出する機能をもっています。
インストール方法
clamavをパッケージからインストールします。
$ sudo apt update
$ sudo apt install clamav
スワップファイルの作成
ClamAV実行時、メモリを多量に消費し実メモリが不足するため、スワップファイルを作成し使用する事で対処します。(スワップファイルは、SSDが搭載されているモデルの場合、SSD上に作成する事を推奨します。)
$ sudo dd if=/dev/zero of=/media/ssd/swapfile bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 28.6393 s, 150 MB/s
$ sudo chmod 600 /media/ssd/swapfile
$ sudo mkswap /media/ssd/swapfile
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=a0608928-88fc-4f50-b5d2-80b6b09d4cb5
$ sudo swapon /media/ssd/swapfile
ウイルス定義ファイルの更新
Ubuntuで提供されるパッケージでは、clamav.netで提供されるバージョンより低いため、WARNINGが表示されますが、ウイルス定義ファイルのダウンロードは正常に行われています。また、/etc/clamav/clamd.confが見つからないため、ERRORが表示されますが、clamav-daemonを使用する場合の設定ファイルでありclamav-daemonを導入していない場合問題ありません。
$ sudo systemctl stop clamav-freshclam
$ sudo freshclam
ClamAV update process started at Mon Sep 1 09:42:09 2025
WARNING: Mon Sep 1 09:42:09 2025 -> Your ClamAV installation is OUTDATED!
WARNING: Mon Sep 1 09:42:09 2025 -> Local version: 1.0.7 Recommended version: 1.0.9
Mon Sep 1 09:42:09 2025 -> DON'T PANIC! Read https://docs.clamav.net/manual/Installing.html
Mon Sep 1 09:42:09 2025 -> daily database available for update (local version: 27739, remote version: 27749)
Current database is 10 versions behind.
Downloading database patch # 27740...
~
Testing database: '/var/lib/clamav/tmp.1b31c62276/clamav-66961b331c6c4192c905a8896503b1ba.tmp-daily.cld' ...
Database test passed.
Mon Sep 1 09:43:09 2025 -> daily.cld updated (version: 27749, sigs: 2076432, f-level: 90, builder: raynman)
Mon Sep 1 09:43:09 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Mon Sep 1 09:43:09 2025 -> bytecode.cvd database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)
ERROR: NotifyClamd: Can't find or parse configuration file /etc/clamav/clamd.conf
$ sudo systemctl start clamav-freshclam
手動実行
メモリの消費が大きい為、スワップを有効化してから実行を行います。スワップを有効化していない場合、メモリ不足によりLinuxが再起動される場合があります。
$ sudo swapon /media/ssd/swapfile
$ sudo clamscan -r /
Loading: 1m 37s, ETA: 0s [========================>] 8.71M/8.71M sigs
Compiling: 28s, ETA: 0s [========================>] 41/41 tasks ks
/mnt/config/area1/startup-config.dat: OK
~
----------- SCAN SUMMARY -----------
Known viruses: 8708210
Engine version: 1.0.7
Scanned directories: 21693
Scanned files: 49497 ←全スキャンファイル数
Infected files: 1 ←ウイルス感染判定ファイル数
Total errors: 976
Data scanned: 4045.45 MB ←ウイルススキャンしたサイズ
Data read: 8880.71 MB (ratio 0.46:1)
Time: 4997.564 sec (83 m 17 s) ←ウイルススキャンにかかった時間
Start Date: 2025:08:28 11:40:03
End Date: 2025:08:28 13:03:21
$ sudo swapoff /media/ssd/swapfile
スケジュール実行
ウイルススキャンを定期実行する設定を追加します。
スクリプト例:scan_clamav.sh
#!/bin/sh
SWAP_FILE=/media/ssd/swapfile # インストール時に作成したスワップファイルのパスを指定
SCAN_DIR=/ # スキャンを実施するディレクトリを指定
LOG_FILE=/home/admin/clamav_`date +%Y%m%d%H%M%S`.log # レポートファイル名を指定
/usr/sbin/swapon ${SWAP_FILE}
FREE_SWAP=`free | grep Swap | awk '{print $2}'`
if [ ${FREE_SWAP} -eq 0 ]; then
echo "Swap is not recognized"
exit 1
fi
/usr/bin/clamscan -r ${SCAN_DIR} --follow-dir-symlinks=0 --follow-file-symlinks=0 --infected --log=${LOG_FILE}
sleep 3
/usr/sbin/swapoff ${SWAP_FILE}
exit 0
amshの設定モードでスケジュールを作成します。0:15に日次で実行するスケジュールを例に記載します。
amnimo(cfg)# schedule user-define clamscan
amnimo(cfg-sch-ud-clamscan)# command /home/admin/scan_clamav.sh ←スクリプトを指定
amnimo(cfg-sch-ud-clamscan)# datetime 15 0 * * *
amnimo(cfg-sch-ud-clamscan)# enable
amnimo(cfg-sch-ud-clamscan)# exit
amnimo(cfg)# config file save startup-config
3.15.2 ホスト型IDS(Tripwire)の導入方法 #
対象機種: AX30 / AX11 / AX21 / AG10 / AG20 / AR10 / AR20
Tripwireは、コンピュータの状態や保存されたデータを監視し、システムの変更や改竄の検知に利用されるアプリケーションです。
インストール方法
tripwireをパッケージからインストールします。
$ sudo apt update
$ sudo apt install tripwire
メールサーバが導入されていない場合、PostfixがインストールされPackage configuration画面で設定を求められますが、メール通知を使用しない場合”No configuration”を選択します。
続いて、tripwireのPackage configuration画面が開始され、site key、local keyの設定を行います。
補足: site keyとは、サイト全体で共通の設定ファイルやポリシーファイルなどの暗号化に使用されます。
local keyとは、マシンローカルのTripwireデータベースなどの暗号化に使用されます。
設定ファイル暗号署名、ベースライン作成を行います。ベースライン作成には、対象ファイル数に依存しますが時間を要します。
$ cd /etc/tripwire/
$ sudo twadmin --create-cfgfile -c tw.cfg -S site.key twcfg.txt
Please enter your site passphrase: ←site keyを入力
Wrote configuration file: /etc/tripwire/tw.cfg
$ sudo tripwire --init
補足: ベースラインとは、正しい状態(承認された状態)のスナップショットを指します。
ポリシーの変更
ポリシーの変更(例として/var/www/htmlを検査対象に追加)を行います。ポリシーを変更した際は、ベースラインを再作成する必要があります。ベースラインの再作成をしなかった場合、コマンド実行時にエラーが表示されます。
$ sudo vi /etc/tripwire/twpol.txt ←ポリシーを追記
(
rulename = "Web Public Directory",
severity = $(SIG_HI),
)
{
/var/www/html -> $(SEC_CRIT);
}
$ sudo twadmin --create-polfile /etc/tripwire/twpol.txt
$ sudo tripwire --init ←ベースラインの再作成
手動実行
$ sudo tripwire --check
~
-------------------------------------------------------------------------------
*** End of report ***
Open Source Tripwire 2.4 Portions copyright 2000-2018 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.
Integrity check complete.
スケジュール実行
改ざんの検査を定期実行する設定を追加します。
スクリプト例:tripwire_report.sh
LOG_FILE にはレポートファイル名を指定します。
#!/bin/sh
LOG_FILE=/home/admin/tripwire_report_`date +%Y%m%d%H%M%S`.txt
/usr/sbin/tripwire --check > ${LOG_FILE}
exit 0
amshの設定モードでスケジュールを作成します。0:10に日次で実行するスケジュールを例に記載します。
amnimo(cfg)# schedule user-define tripwire
amnimo(cfg-sch-ud-tripwire)# command /home/admin/tripwire_report.sh ←スクリプトを指定
amnimo(cfg-sch-ud-tripwire)# datetime 10 0 * * *
amnimo(cfg-sch-ud-tripwire)# enable
amnimo(cfg-sch-ud-tripwire)# exit
amnimo(cfg)# config file save startup-config
3.15.3 ネットワーク型IDS (Snort)の導入方法 #
対象機種: AX30 / AX11 / AX21 / AG10 / AG20 / AR10 / AR20
Snortは、オープンソースのネットワーク侵入検知システム(IDS)、侵入防止システム(IPS)です。ネットワーク上のパケットを監視し、悪意のあるパケットを検出、防御を行います。
インストール方法
Snortをパッケージからインストールします。
$ sudo apt update
$ sudo apt install snort
SnortのPackage configuration画面で監視インターフェイス※、HOME_NETアドレス(ローカルネットワークアドレス)の設定を行います。
補足: ※自動で全インターフェイスが入力されますが、以下インターフェイスは監視できない為、設定から外す必要があります。
AG10/AG20: eth1、lan0@eth1、lan1@eth1、lan2@eth1、lan3@eth1
AX11: eth0、lan0@eth0、lan1@eth0、lan2@eth0、lan3@eth0
AX30: eth0、lan0@eth0、lan1@eth0
サービス起動のユニットファイルを修正
systemd-sysv-generatorにより自動生成されたサービスのユニットを無効化し、作成し直します。
$ sudo systemctl stop snort.service
$ sudo systemctl disable snort.service
snortのユニットファイル(snort.service)を、/lib/systemd/system配下に作成します。
snort.service
[Unit]
Description=snort
After=time-sync.target network-online.target amnimo-amsrv.service
Wants=network-online.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/snort start
ExecStop=/etc/init.d/snort stop
ExecReload=/etc/init.d/snort reload
[Install]
WantedBy=multi-user.target
ユニットを有効化します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable snort.service
サンプルルールの追加
icmpパケットに対しアラートを出力するルールを追加しています。
補足: Ruleの記述方法については、Snortの以下ドキュメントに記載されています。
https://www.snort.org/documents/snort-3-rule-writing-guideapt でインストールされる Snort は 2.9 系です(AG10 の FW 3.8.1 では
apt-cache policy snortの候補が2.9.20-0+deb11u1ubuntu1)。上記のガイドは Snort 3 のものです。Snort 2.9 で使えない記述がないか確認してください。
/etc/snort/rules/local.rulesに以下を追記し、サービスを再起動します。
alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;)
$ sudo systemctl restart snort.service
デフォルト設定では、アラートは/var/log/snort/snort.alert.fastに出力されます。
$ sudo tail -f /var/log/snort/snort.alert.fast
08/06-08:20:31.865540 [**] [1:1000001:1] ICMP Testing Rule [**] [Priority: 0] {ICMP} 192.168.7.100 -> 192.168.7.1
08/06-08:20:31.865688 [**] [1:1000001:1] ICMP Testing Rule [**] [Priority: 0] {ICMP} 192.168.7.1 -> 192.168.7.100
IPSモード設定
SnortをIPSモードで動作させる場合、Snort設定変更とサービス起動のユニットファイルの修正が必要になります。
Snortの初期化が完了するまでは通信ができない状態が発生します。リモートで設定変更等行う場合、操作が継続できなくなる可能性もあるため注意が必要になります。
snort.conf設定
/etc/snort/snort.confを編集します。
設定例:snort.conf
config daq: nfq
config daq_mode: inline
config daq_var: queue=0
サービス起動のユニットファイルを修正
Snortのユニットファイル(前の手順で /lib/systemd/system 配下に作成した snort.service)を、以下の内容に書き換え、再起動します。HOME_NET の値には、ローカルネットワークアドレスを指定します。
snort.service
[Unit]
Description=snort
After=network.target network-online.target amnimo-amsrv.service
Requires=network-online.target
[Service]
Type=simple
ExecStart=/usr/sbin/snort -m 027 -Q -d -l /var/log/snort -u snort -g snort --pid-path /run/snort/ -c /etc/snort/snort.conf -S "HOME_NET=[192.168.0.0/24]"
ExecStartPost=/usr/sbin/iptables -I FORWARD -j NFQUEUE --queue-num 0
ExecStopPost=/usr/sbin/iptables -D FORWARD -j NFQUEUE --queue-num 0
[Install]
WantedBy=multi-user.target
注意: 以前の版の本書のユニットファイルには、次の誤りがありました。以前の版のユニットファイルを使っている場合は、上記の内容に書き換えてください。
ExecStopPre=は systemd に存在しない設定項目です。systemd-analyze verifyでUnknown key name 'ExecStopPre'と警告され、無視されます。そのため、snort を停止しても iptables の NFQUEUE のルールが残ります。NFQUEUE は、受け取るプログラムがない場合パケットを破棄するため、転送が止まります。停止後に実行する処理はExecStopPost=に書きます(snort が異常終了した場合も実行されます)。Type=simpleでは、プログラムがデーモン化しない(-Dを付けない)ようにします。-Dを付けるとプロセスが親から切り離され、systemd がサービスの状態を正しく管理できません。停止は systemd の既定の動作(SIGTERM の送信)で行うため、ExecStop=/bin/kill -9 $MAINPIDは削除しました。
ユニットを有効化します。
$ sudo systemctl daemon-reload
$ sudo systemctl restart snort.service

補足: site keyとは、サイト全体で共通の設定ファイルやポリシーファイルなどの暗号化に使用されます。
注意: 以前の版の本書のユニットファイルには、次の誤りがありました。以前の版のユニットファイルを使っている場合は、上記の内容に書き換えてください。