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はDockerイメージも提供しており、それを使った導入手順は以下のようなサイトがありますので、そこを参考にすればよいのではないかと思います。
意外と適用手順はめんどくさいです。
若干厳しい所
とにかく起動が遅いです。フローデータのスキーマを適用していく処理が劇的に遅い印象を受けます。なので、起動それ自体は5分以上待機する形になってます。また、フローデータ量が多すぎてLogstashのメモリ消費量がいまだかつて無いぐらいにでかくなってます。16GBメモリをここまでガッツリ消費するのはハジメテかも。
とはいえ、面白いんで引き続きデータは取得していこうかなと思うであります。
Comments are closed