[Network] 思ったより色々取れたnetflow

ElastiFlowで取得したデータ

過日、先輩からnetflowのことについて教わりました。
で、OSSベースで遊べるツールを探してみた所、最近はElasticsearchをベースに作られたElastiFlowが人気とのこと、試しに自宅環境で構築を行い、Netflowでどんなものが読み取れるものなのかを集めてみました。

Netflowってなんだろか

Netflowとは、フローログをスイッチあるいはルーター、セキュリティ製品から直に出力させ、それを回収するサーバ側でデータ蓄積・分析を行う際に使用するプロトコル群で、パケットヘッダ情報に含まれたものが使われるようです。

どこかFirewallログにも見てる感じがするのですが、実際取ってみたら結構面白いものが取れました。

情報送信をするネットワーク装置側がExporter、情報を受信するサーバをCollectorと呼ぶそうで、Collectorにはサーバが使用されます。そして、機能実現のために分析ツールをあわせて導入する形となるようです。

本記事ではOSSで一番色々機能豊富でかっこいいと言われるElastiFlowの利用を考えまして、我が家のネットワークにどんなトラフィックが流れたかをもう少し楽にキャッチすることが目的です。

ElastiFlowのアーキテクチャ

ベースはご存知、ELKと呼ばれる製品スタックで、ElasticSearch/Logstash/Kibanaを使います。
これに対して、Logstash及びKibanaに対して追加実装を行うアドオンがElastiFlowです。Netflow/sFlow/IPFIXなどに対応しているようで、OSSとしてはびっくりするぐらい色々可視化が出来るよ・・・とのことです。とはいえ、商用製品を見たことがないため、正直な所その違いがよく分かっていません・・。

要注意ポイントとしては、執筆時点での最新版である3.5.1と言うバージョンだと、ELKのバージョンに制約があり、必ずv7系である必要があります。今回私はELKのバージョンは7.3.1-1だったと思うのですが、これを使って構築しています。

バージョンがずれる、例えば6.xを使ってたりするともう少し古いバージョンが必要だったりして、今回の3.5.1では、起動が遅延したり、データは読み込めるがグラフが出せなかったりしました。

データの生成を行うExporterには、以下の機種を対象に含めています。

  • VyOS→O365経路用ルートリフレクター
  • Rotuerboard→外部接続1
  • Sophos UTM9→外部接続2
  • Untangle Firewall→クライアント専用外部接続3

VyOS/Routerboard/Untangleの3つはNetflowで、Sophos UTM9はIPFIXで吐き出す仕様となっていました。

ElastiFlowでDiscoveryした際のデータを眺めてみる。

で、そのうちの1レコードがこんな感じ。

 @timestamp			Sep 6, 2019 @ 22:42:01.015
 @version			3.5.1
 _id				iMzPBm0BAE730ETgcFS5
 _index				elastiflow-3.5.1-2019.09.06
 _score	 			- 
 _type				_doc
 event.host			192.168.***.*
 event.type			netflow
 flow.autonomous_system		Google LLC (15169)
 flow.bytes			1.801KB
 flow.city			Mountain View
 flow.client_addr		10.***.***.115
 flow.client_autonomous_system	private
 flow.client_hostname		10.***.***.115
 flow.country			United States
 flow.country_code		US
 flow.direction			ingress
 flow.dst_addr			216.**.***.131
 flow.dst_asn			15169
 flow.dst_autonomous_system	Google LLC (15169)
 flow.dst_city			Mountain View
 flow.dst_country		United States
 flow.dst_country_code		US
 flow.dst_geo_location		{
				-122.0748,
				37.4043
 				}
 flow.dst_hostname		216.**.***.131
 flow.dst_mask_len		0
 flow.dst_port			443
 flow.dst_port_name		https (TCP/443)
 flow.input_ifname		index: 0
 flow.input_snmp		0
 flow.ip_protocol		TCP
 flow.ip_version		IPv4
 flow.next_hop			0.0.0.0
 flow.output_ifname		index: 0
 flow.output_snmp		0
 flow.packets			25
 flow.sampling_interval		0
 flow.server_addr		216.**.***.131
 flow.server_asn		15169
 flow.server_autonomous_system	Google LLC (15169)
 flow.server_city		Mountain View
 flow.server_country		United States
 flow.server_country_code	US
 flow.server_geo_location	37.4043,-122.0748
 flow.server_hostname		216.**.***.131
 flow.service_name		https (TCP/443)
 flow.service_port		443
 flow.src_addr			10.***.***.115
 flow.src_autonomous_system	private
 flow.src_hostname		10.***.***.115
 flow.src_mask_len		0
 flow.src_port			43173
 flow.src_port_name		TCP/43173
 flow.tcp_flags			FIN, SYN, RST, PSH, ACK
 flow.tos			0
 flow.traffic_locality		public
 netflow.dst_as			0
 netflow.engine_id		0
 netflow.engine_type		0
 netflow.first_switched		Sep 6, 2019 @ 22:39:09.264
 netflow.flow_records		17
 netflow.flow_seq_num		0
 netflow.last_switched		Sep 6, 2019 @ 22:39:09.729
 netflow.sampling_algorithm	0
 netflow.src_as			0
 netflow.version		5
 node.hostname			192.168.***.*
 node.ipaddr			192.168.***.*

予想以上に多いす。特に発信元ASとかGeoipと関連付けて国ぐらいの区別がちゃんとついてくれたり、思った以上に色んな情報が取れるんだなぁと感心しました。結構おもしろいかも。

Visualize/Dashboardはこんな感じ

ElastiFlowのDashboard画面

個人的には、ワードクラウドでどのようなパケットが大部分を占めるのかが直感的に分かるのが面白いなぁとか思いました。

導入手順

導入手順はまた今度記載します。ただ、ElastiFlowはDockerイメージも提供しており、それを使った導入手順は以下のようなサイトがありますので、そこを参考にすればよいのではないかと思います。
意外と適用手順はめんどくさいです。

若干厳しい所

とにかく起動が遅いです。フローデータのスキーマを適用していく処理が劇的に遅い印象を受けます。なので、起動それ自体は5分以上待機する形になってます。また、フローデータ量が多すぎてLogstashのメモリ消費量がいまだかつて無いぐらいにでかくなってます。16GBメモリをここまでガッツリ消費するのはハジメテかも。

とはいえ、面白いんで引き続きデータは取得していこうかなと思うであります。

タイトルとURLをコピーしました