LoginSignup
0
0

More than 3 years have passed since last update.

SolitonNK: NetFlowインジェスターの導入

Last updated at Posted at 2021-02-15

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 v5v9IPFIXがサポートされており、これらのプロトコルでのデータをインジェストして蓄積・解析することができます。

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

として、確認したのが次の図です。

SolitonNK_indexed-ipfix.png

これで、IPFIXデータがSolitonNKに蓄積されるようになったことは確認できました。

が、このままではこれらデータが何を表しているのかはさっぱりわかりません。というわけで、ここらから先のIPFIXのデータ解析については、SolitonNK 「IPFIXキット」とはどんなものか?の記事をご覧ください。

レファレンス

Soliton NKを試したい人はの下の Soliton NK カスタマーコミュニティに登録の上、コミュニティページから申し込み下さい。

Soliton NK について、今後記事を追加していく予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0