ntop ntopngユーザースクリプト アクティブ時間差分アラート
イタリアntop社のntopngが面白い。
2020年4月正式にv4系にメジャーバージョンアップを遂げたntop社のntopngですが、エンドユーザーが開発に関われる要素があります。
それがユーザースクリプトと呼ばれるプラグイン開発になります。
筆者の家ではコミュニティ版を利用していますが、ユーザースクリプトはluaのソースコードも読めますし、C++部分はAPIリファレンスもあるので開発が可能となっています。
今回は、監視ネットワーク上で長時間アクティブなホストを検知するユーザースクリプトactive.lua にデバックコードを追記して動作を確認してみました。
設定メニューをみても明確な動作が不明だったので、デバックコードを追記して確認しよう!といったノリです。
active.luaの修正に必要な知識を表にまとめてみました。
NO | 開発に必要な知識 |
1 | luaスクリプトのパス /usr/share/ntopng/scripts/plugins/threshold_cross/user_scripts/host |
2 | vi, emacsの使い方 |
3 | APIリファレンスマニュアルのURL |
4 | ntopngの起動・停止方法 $sudo systemctl start/stop ntopng |
5 | ntopngの手動起動方法 $sudo ntopng -i br0 -w 3000 –https-port 443 -m 192.168.1.0/24 |
6 | githubのURL |
項番5だけ説明が必要かと思います。
- -i br0 インターフェイス名指定
- -w 3000 HTTPのポート番号指定
- –https-port 443 HTTPSのポート番号指定
- -m 192.168.1.0/24 筆者宅のサブネット
環境に合わせて項番5は修正してください。
次にactive.luaの追記したソースコードを張っておきます。
--
-- (C) 2019-20 - ntop.org
--
local alerts_api = require("alerts_api")
local alert_consts = require("alert_consts")
local user_scripts = require("user_scripts")
local script = {
-- Script category
category = user_scripts.script_categories.network,
local_only = true,
default_enabled = false,
-- This script is only for alerts generation
is_alert = true,
-- See below
hooks = {},
gui = {
i18n_title = "alerts_thresholds_config.activity_time",
i18n_description = "alerts_thresholds_config.alert_active_description",
i18n_field_unit = user_scripts.field_units.seconds,
input_builder = "threshold_cross",
}
}
-- #################################################################
function script.hooks.all(params)
local value = alerts_api.host_delta_val(script.key, params.granularity, host.getTime()["total_activity_time"])
local valueip = host.getIp()
io.write("valueip :"..valueip.ip.."value :"..value.."\n")
-- Check if the configured threshold is crossed by the value and possibly trigger an alert
alerts_api.checkThresholdAlert(params, alert_consts.alert_types.alert_threshold_cross, value)
end
-- #################################################################
return script
追記したコードは、以下の2行だけです。
local valueip = host.getIp()
io.write("valueip :"..valueip.ip.."value :"..value.."\n")
このユーザースクリプトの動作を調べるために、ホストのIPアドレスとユーザースクリプトの値(value)を標準出力に出しているだけです。
ちなみに、luaで値はドットx2で挟まないとattempt to call a number valueエラーが出力されますので気おつけてください。
実行すると、以下のような標準出力が表示されます。
[1回目の標準出力]
valueip :192.168.1.2value :1930
.
.
[2回目の標準出力]
valueip :192.168.1.2value :3515
2行目のvalue: 1930がホストが最後にオンラインだった時刻と1回目にチェックした時刻との差分時間(秒)です。
約32分間オンラインのままということになります。
2回目の標準出力となりますと、3515秒。
約58分となり1時間前のチェック時間からオンラインのままであることが分かります。
このホストは常にオンラインなので、3回目、4回目も約60分の標準出力となります。
ここで、ntopngのGUI側の設定を見ていましょう。
図1の設定は、1時間ごとにオンラインのホストをチェックして、前回チェックした時間との差分が1800秒以上のホストが存在すればアラートを投げます。
ユーザースクリプトactive.luaは以下のようなパターンで利用できるのではないでしょうか。
NO | active.lua活用法 |
1 | 長時間利用されると困る拠点での監視アラート 例)ゲストWifiの不正利用発見 |
2 | 学内ネットワークの調査 例) アセット管理のツールとして |
3 | #2に類似してますが、野良デバイスの発見 |
4 | 電力消費の為の長時間起動デバイスの特定 |
ユーザースクリプト、まだまだ面白そうなものがあるのでこの動作確認シリーズ、連載化出来たらいいですね。
最新記事 by 伊集院 (全て見る)
- 【暗号化通信(TLS)を復元できる】WIRESHARK達人への道 第二十五歩 暗号化通信(TLS)を復号する方法 - 1月 1, 2023
- 【詳細版】NSM(ネットワークセキュリティモニタ)、Zeekとは? - 9月 1, 2022
- 【簡易版】OSSネットワークセキュリティモニタZeekとは? - 8月 26, 2022