SolitonNKがいよいよSolitonNK version 4.0.2にバージョンアップされ、アプライアンス版に加えてコンテナ版の提供がはじまりました。SolitonNKコンテナ版では、アプライアンス版のような管理画面はなく、NetFlowインジェスターはユーザ自身でデプロイ・設定しなければなりません。
本記事では、SolitonNKコンテナ版でNetFlowインジェスター導入してみた内容を紹介します。なお、NetFlowやIPFIXのデータ解析については、SolitonNK 「IPFIXキット」とはどんなものか?を参照してください。
NetFlow, IPFIXのインジェスト設定
SolitonNKでNetFlowやIPFIXのデータを解析するためには、これらデータが蓄積されるようにしておかねばなりません。そのためには、SolitonNKに、NetFlowインジェスターを導入、設定する必要があります。NetFlowインジェスターは、SolitonNKが動作しているサーバにdocker版NetFlowインジェスターをインストールすることもできますし、SolitonNKとは別の外部サーバーにリモートインジェスターとしてインストールすることもできます。外部サーバーがdocker環境の場合と、非docker環境(Linux)では導入の仕方が異なりますので、いずれの場合についても説明しておきます。
NetFlowインジェスターのdocker環境への導入
docker版SolitonNKがデプロイされているサーバにdocker版NetFlowインジェスターを設定するには、dockerへのデプロイのマニュアルの「インジェスターを設定する」の説明を参照しつつ、やってみます。
sudo
しないでdocker
コマンドを使うには、ユーザがdocker
という名称のグループに登録されてる必要があります。もしも、ユーザを dockerグループに登録作業するなら、ここあたりを参考にしてください。
docker版SolitonNKでは、デフォルトでは(解説されているように)、
$ docker run --net gravnet -p 8080:80 -p 4023:4023 -p 4024:4024 -d -e GRAVWELL_INGEST_SECRET=MyIngestSecret -e GRAVWELL_INGEST_AUTH=MyIngestSecret -e GRAVWELL_CONTROL_AUTH=MyControlSecret -e GRAVWELL_SEARCHAGENT_AUTH=MySearchAgentAuth --name gravwell gravwell/gravwell:latest
として起動されているので、dockerネットワークはgravnet
、Ingest Secretの値はMyIngestSecrets
になっています。
gravnet
というdockerネットワークが使われてるかどうかは次のようにして確認できます。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f3de7dc90d74 bridge bridge local
907d5ae257a9 gravnet bridge local
d471b1300e9f host host local
c83712ce3d98 none null local
このdocker環境にNetFlowインジェスターをデプロイするには次のようにします。
$ docker run -d --net gravnet -p 2055:2055/udp -p 6343:6343/udp --name netflow -e GRAVWELL_CLEARTEXT_TARGETS=gravwell -e GRAVWELL_INGEST_SECRET=MyIngestSecrets gravwell/netflow_capture
b501b4c34725036e773e3cffdbff633a9d11f8684cf1e7018b250a801467ba2d
$
NewFlowインジェスターがデプロイされたCONTAINER IDが表示されてプロンプトが返ってくれば成功です。念のため、NetFlowインジェスターが動作してるか確認してみましょう。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef3b6227bc62 soliton/solitonnk:latest "/opt/gravwell/bin/m…" 5 hours ago Up 5 hours 0.0.0.0:4023-4024->4023-4024/tcp, 0.0.0.0:8080->80/tcp gravwell
b501b4c34725 gravwell/netflow_capture "/opt/gravwell/bin/m…" 5 hours ago Up 5 hours 0.0.0.0:2055->2055/udp, 0.0.0.0:6343->6343/udp netflow
確かに、NetFlowインジェスターが動作していることが分かります。
SolitonNKサーバーとは別の、docker環境のサーバーにNetFlowインジェスターを導入する場合は、予めdockerネットワークを作っておいた方が良いことと、NetFlowインジェスターを導入時にインジェスト先のSolitonNKサーバーを指定する必要があることに注意してください。gravnet
というdockerネットワークを作るには、
$ docker network create gravnet
とします。このgravnet
のネットワークを用い、インジェスト先(インデクサー)を192.168.20.97に指定してNetFlowインジェスターをデプロイするには次のようにします。
$ docker run --rm -d --net gravnet -p 2055:2055/udp -p 6343:6343/udp --name netflow -e GRAVWELL_CLEARTEXT_TARGETS=192.168.20.97 -e GRAVWELL_INGEST_SECRET=MyIngestSecret gravwell/netflow_capture
NetFlowインジェスターを非docker環境の外部サーバーにインストール
SolitonNKのダウンロードページからgravwell_netflow_capture_installer_4.*.*.sh
(本記事公開時点で最新版はv.4.1.3でした)をダウンロードしてきて、root権限で次の要領でインストールします。インストール中に、Ingest Secretと、インジェスト先のIPアドレスを問われますので入力します。
[root@localhost kakawai]# bash gravwell_netflow_capture_installer_4.0.2.sh
******* We could not extract an Ingest Secret from this device *******
If you do not want to enter your Ingest-Auth value, just press enter
Otherwise, input your Ingest-Auth secret and press enter: MyIngestSecrets
******* We could not find a indexer resident on this device *******
If you do not want to enter an indexer target, just press enter
Otherwise, input the IP of an indexer and press enter: 192.168.20.97
Installing services... Created symlink from /etc/systemd/system/multi-user.target.wants/gravwell_netflow_capture.service to /etc/systemd/system/gravwell_netflow_capture.service.
DONE
Installation complete. Thank you for using GravWell!
念のため、NetFlowインジェスターが動作してるか確認してみましょう。
$ systemctl status gravwell_netflow_caputure
...
Active: active (running) since Thu 2021-02-11 23:35:10 JST; 10h ago
間違いなくNetFlowインジェスターが動作してますね。
NetFlowインジェスターのマニュアルに従って、netflow_capture.conf の内容も確認してみましょう。
[root@localhost /]# cat /opt/gravwell/etc/netflow_capture.conf
[Global]
Ingester-UUID="e5fd9489-0147-422e-a4a2-b54b85285c71"
Ingest-Secret = MyIngestSecrets
Connection-Timeout = 0
Insecure-Skip-TLS-Verify=false
Cleartext-Backend-Target=192.168.20.97 #example of adding a cleartext connection
#Cleartext-Backend-Target=127.1.0.1:4023 #example of adding another cleartext connection
#Encrypted-Backend-Target=127.1.1.1:4024 #example of adding an encrypted connection
#Pipe-Backend-Target=/opt/gravwell/comms/pipe #a named pipe connection, this should be used when ingester is on the same machine as a backend
Ingest-Cache-Path=/opt/gravwell/cache/netflow.cache
#Max-Ingest-Cache=1024 #Number of MB to store, localcache will only store 1GB before stopping. This is a safety net
Log-Level=INFO
[Collector "netflow v5"]
Bind-String="0.0.0.0:2055" #we are binding to all interfaces
Tag-Name=netflow
#Lack of a Flow-Type implies Flow-Type=netflowv5
[Collector "ipfix"]
Tag-Name=ipfix
Bind-String="0.0.0.0:6343"
Flow-Type=ipfix
IPFIXデータのインジェスト
NetFlowインジェスター3.2.3では、NetFlow v5
のみがサポートされていましたが、NetFlowインジェスター3.3.3以降では、Netflow v5
、v9
とIPFIX
がサポートされており、これらのプロトコルでのデータをインジェストして蓄積・解析することができます。
IPFIXデータをインジェストできるかどうか、手軽に確認できないものかと、Windows用のNetFlowシミュレータである、FlowAlizer NetFlow、Solar Winds NetFlow generator、Paessler NetFlow generator(v5のみ送出可能)などの利用を試みましたが、これらの疑似データは、うまくインジェストされるようにはできませんでした。
ここでは、ローレンス・バークレー国立研究所から公開されている anonymous ftp の pcap ファイルのデータを用い、softflowdによってlocalhost で動いているインジェスターに対してIPFIXデータを送る方法を使ってサンプルIPFIXデータをインジェストしています。
$ wget ftp://ita.ee.lbl.gov/new/lbnl.anon-ftp.03-01-10.tcpdump.gz
$ zcat lbnl.anon-ftp.03-01-10.tcpdump.gz | softflowd -v 9 -r - -n localhost:6343 -D
<<中略>>
EXPIRED: seq:2168 [73.6.91.115]:2244 <> [131.243.2.12]:21 proto:6 octets>:14187 packets>:269 octets<:11610 packets<:138 start:2003-01-11T09:25:54.043 finish:200 3-01-11T09:30:11.158 tcp>:1a tcp<:1a flowlabel>:00000000 flowlabel<:00000000 vla n>:0 vlan<:0 ether:00:00:00:00:00:00 <> 00:00:00:00:00:00 (0x7fa6c9e94d90)
Number of active flows: 0
Packets processed: 319973
Fragments: 0
Ignored packets: 0 (0 non-IP, 0 too short)
Flows expired: 2171 (0 forced)
Flows exported: 2171 (4342 records) in 130 packets (0 failures)
Expired flow statistics: minimum average maximum
Flow bytes: 300 9635 972303
Flow packets: 5 147 13272
Duration: 0.27s 329.04s 39892.80s
Expired flow reasons:
tcp = 0 tcp.rst = 0 tcp.fin = 0
udp = 0 icmp = 0 general = 0
maxlife = 0
over 2 GiB = 0
maxflows = 0
flushed = 2171
Per-protocol statistics: Octets Packets Avg Life Max Life
tcp (6): 20917557 319973 329.04s 39892.80s
IPFIXデータがインデックスされていることを
tag=ipfix table
として、確認したのが次の図です。
これで、IPFIXデータがSolitonNKに蓄積されるようになったことは確認できました。
が、このままではこれらデータが何を表しているのかはさっぱりわかりません。というわけで、ここらから先のIPFIXのデータ解析については、SolitonNK 「IPFIXキット」とはどんなものか?の記事をご覧ください。
レファレンス
Soliton NKを試したい人はの下の Soliton NK カスタマーコミュニティに登録の上、コミュニティページから申し込み下さい。
Soliton NK について、今後記事を追加していく予定です。