2020年5月14日木曜日

ntop Deep Packet Inspection(nDPI)未登録プロトコル設定

本ブログ記事では、ntop社が開発するDPIライブラリnDPIで独自プロトコルやライブラリに登録されていないプロトコルを認識させ、ntopng GUIで表示する方法をご紹介します。

文:ジュピターテクノロジー よしひろ

(2021/02/05 リリース予定~の記載を削除)


nDPI(ntop Deep Packet Inspection)がサポートするアプリケーション」に記載がないプロトコルをntopngに認識させたいといった一定の要望があります。

これを実現するには、nDPIプロトコルファイル(/etc/ntopng/ndpi.protos)を作成して独自のプロトコル定義(カスタムプロトコル定義)をします。

フォーマットは2種類あり、サブプロトコルとポートベースの設定方法があります。
それぞれ説明します。

サブプロトコル設定

#Subprotocols
#Format:
#host:"<value>",host:"<value>",.....@<subproto>

フォーマットは、「host:"文字列マッチ"@サブプロトコル名」となります。

例の通りhost定義は複数連ねて設定することができます。

実際の設定例は、以下の通りです。


host:"googlesyndacation.com"@Google

取得したパケットのhost値(IPアドレス)が"googlesyndacation.com"に名前解決できるパケットはプロトコルGoolgeとしてnDPIが処理します。

ポートベース設定

#Port-base
#Format:
#<tcp|udp>:<value>,<tcp|udp>:<value>,.....@<proto>

フォーマットは、「tcp|udp:"ポート番号"@プロトコル名」となります。

例の通り設定は複数連ねて設定することができます。

実際の設定例は、以下の通りです。

tcp:81,tcp:8181@HTTP
udp:5061-5062@SIP
tcp:860,udp:860,tcp:3260,udp:3260@iSCSI
tcp:3000@ntop

nDPIが取得したパケットのポート番号から、定義したプロトコルとして処理します。

ndpiReaderでの事前検証

弊社が販売する証跡管理ツールEkranの通信を実際にntopngで認識させてみましょう。

実際にntopngに設定する前に動作確認をします。

以下コマンドでパケットをキャプチャします。

$sudo tcpdump -ni enp5s0 -s0 -w enp5s0.pcap

ポートベースで設定します。以下のファイルを作成します。

$sudo vim /etc/ntopng/ndpi.protos

# Format:

# <tcp|udp>:,<tcp|udp>:,.....@

# tcp:81,tcp:8181@HTTP

# udp:5061-5062@SIP

# tcp:860,udp:860,tcp:3260,udp:3260@iSCSI

# tcp:3000@ntop

tcp:9447@EKRAN

:wq!

tcpかつポート9447の通信は、EKRANとして処理するといった設定となります。

最初にキャプチャしたパケットファイルをnDPIのコマンドndpiReaderに入力して、EKRANの通信を正しく認識するか確認します。

$ndpiReader -i enp5s0.pcap -p /etc/ntopng/ndpi.protos

図1 ndpiReader実行結果

図1の背景白色行の通り、EKRANの文字が出力されました。

図1の背景白色行の通り、設定前はunknownとしてカウントされていたパケットからEKRANのパケットを抽出できました。

ntopng設定

ntopngにnDPIの設定を反映するには、「-p」オプションでnDPIのプロトコルファイルを指定し、再起動する必要があります。

設定方法及び再起動は、以下の通りです。

$sudo vim /etc/ntopng/ntopng.conf

~snip~

-p=/etc/ntopng/ndpi.protos

:wq!

$sudo systemctl restart ntopng

ntopngのGUIでEKRANが表示されるか確認します。

図2 EKRANの認識

ntop社製品は、独自プロトコルの通信であっても定義を追加するだけで抽出できるという拡張性があります。

本ブログ記事で簡単にカスタムプロトコル定義を設定できることが分かっていただけたかと思いますので、是非nDPIによるカスタムプロトコル定義を活用してみてください。

本記事で扱っているntop社のnProbe, ntopngという製品ですが、ご興味のある方は以下のリンクから弊社までお問い合わせください!