
ntop ntopngユーザースクリプト ブラックリス国アラート
先日の記事「ntop ntopngユーザースクリプト アクティブ時間差分アラート」に続く第二弾です。
今回は通信しているIPアドレスが、ブラックリストに登録した国であった場合にアラートを発報するcountry_check.luaを検証したいと思います。
前回の記事で記載したユーザースクリプト開発に必要な知識は、本記事を読む前に一読しておいてください。
先ずはcountry_check.luaユーザースクリプトの設定を変更します。
前回と異なる点として、ホストアラートではなくフローアラートのユーザースクリプトを編集しているということです。
インターフェイスで検知したフローが、ブロックリスト登録した国の通信であった場合にアラートを発報します。

設定は、JP,US,UKといった2文字で設定します。
次に追記したソースコードを張っておきます。
--
-- (C) 2019-20 - ntop.org
--
local user_scripts = require("user_scripts")
local flow_consts = require("flow_consts")
local script = {
  -- Script category
  category = user_scripts.script_categories.security, 
  -- Priodity
  prio = 20, -- Higher priority (executed sooner) than default 0 priority
  -- This module is disabled by default
  default_enabled = false,
  -- The default configuration of this script
  default_value = {
    items = {},
  },
  -- See below
  hooks = {},
  -- Allow user script configuration from the GUI
  gui = {
    -- Localization strings, from the "locales" directory of the plugin
    i18n_title = "alerts_dashboard.blacklisted_country",
    i18n_description = "alerts_dashboard.blacklisted_country_descr",
    input_builder = "items_list",
    item_list_type = "country",
  }
}
-- #################################################################
-- A fast lookup table
local blacklisted_countries = nil
-- Defines an hook which is executed every time a procotol of a flow is detected
function script.hooks.protocolDetected(now, conf)
  if(blacklisted_countries == nil) then
    blacklisted_countries = {}
    for _, country in pairs(conf.items or {}) do
      blacklisted_countries[string.upper(country)] = true
    end
  end
  local cli_country = flow.getClientCountry()
  local srv_country = flow.getServerCountry()
  local is_blacklisted = false
  local flow_score = 60
  local cli_score, srv_score
  local info = {cli_blacklisted = false, srv_blacklisted = false}
  if(cli_country and blacklisted_countries[cli_country]) then
    io.write("cc:"..cli_country.."\n")
    info.cli_blacklisted = true
    is_blacklisted = true
    cli_score = 60
    srv_score = 10
  end
  if(srv_country and blacklisted_countries[srv_country]) then
    io.write("sc:"..srv_country.."\n")
    info.srv_blacklisted = true
    is_blacklisted = true
    cli_score = 10
    srv_score = 60
  end
  if(is_blacklisted) then
    -- Note: possibly nil
    info.cli_country = cli_country
    info.srv_country = srv_country
    flow.triggerStatus(
       flow_consts.status_types.status_blacklisted_country.create(
	  flow_consts.status_types.status_blacklisted_country.alert_severity,
	  cli_country,
	  srv_country,
	  info.cli_blacklisted,
	  info.srv_blacklisted
       ),
       flow_score,
       cli_score,
       srv_score
    )
  end
end
-- #################################################################
return script追加したコードは、以下の2行だけです。
io.write("cc:"..cli_country.."\n")
.
snip
.
io.write("sc:"..srv_country.."\n")ブラックリスト国であった場合、標準出力に国名を出力しています。
ntopngを手動で起動してください。
$sudo ntopng -i br0 -w 3000 --https-port 443 -m 192.168.1.0/24 --community標準出力には、以下のように出力されるはずです。
sc:JP
sc:JP
cc:JP
sc:JP
sc:JP
sc:JP
sc:JP
sc:JP
sc:JP
sc:JP
sc:JP
sc:JP
コードも短く非常にシンプルですね。
(Visited 206 times, 1 visits today)
The following two tabs change content below.
	
		 
		
		
		
			
			
	
	
		 
		
		
			
				
			
	
		
	
									【好きなもの】
インフラ技術が好き。古いものが好き。
【生きてきたフィールド】
システム運用、ソフトウェア開発、ミドルウェア検証、OSSサポート、プリセールスエンジニア、プロジェクトマネジメント
【このサイトでの役割】
サイト管理者。
		最新記事 by 伊集院 (全て見る)
- 【暗号化通信(TLS)を復元できる】WIRESHARK達人への道 第二十五歩 暗号化通信(TLS)を復号する方法 - 1月 1, 2023
- 【詳細版】NSM(ネットワークセキュリティモニタ)、Zeekとは? - 9月 1, 2022
- 【簡易版】OSSネットワークセキュリティモニタZeekとは? - 8月 26, 2022