Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create module for NetFlow to add geoip #10877

Merged
merged 2 commits into from
Feb 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.next.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d
- Populate more ECS fields in the Suricata module. {pull}10006[10006]
- Add ISO8601 timestamp support in syslog metricset. {issue}8716[8716] {pull}10736[10736]
- Add more info to message logged when a duplicated symlink file is found {pull}10845[10845]
- Add Netflow module to enrich flow events with geoip data. {pull}10877[10877]

*Heartbeat*

Expand Down
7 changes: 7 additions & 0 deletions filebeat/docs/fields.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ grouped in the following categories:
* <<exported-fields-mysql>>
* <<exported-fields-nats>>
* <<exported-fields-netflow>>
* <<exported-fields-netflow-module>>
* <<exported-fields-nginx>>
* <<exported-fields-osquery>>
* <<exported-fields-postgresql>>
Expand Down Expand Up @@ -10621,6 +10622,12 @@ type: short

--

[[exported-fields-netflow-module]]
== NetFlow fields

Module for receiving NetFlow and IPFIX flow records over UDP. The module does not add fields beyond what the netflow input provides.


[[exported-fields-nginx]]
== Nginx fields

Expand Down
80 changes: 80 additions & 0 deletions filebeat/docs/modules/netflow.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
////
This file is generated! See scripts/docs_collector.py
////

[[filebeat-module-netflow]]
[role="xpack"]

:modulename: netflow
:has-dashboards: false

== NetFlow module

This is a module for receiving NetFlow and IPFIX flow records over UDP. This
input supports NetFlow versions 1, 5, 6, 7, 8 and 9, as well as IPFIX. For
NetFlow versions older than 9, fields are mapped automatically to NetFlow v9.

This module wraps the <<filebeat-input-netflow,netflow input>> to enrich the
flow records with geolocation information about the IP endpoints by using
Elasticsearch Ingest Node.

[float]
=== Compatibility

This module requires the {elasticsearch-plugins}/ingest-geoip.html[ingest-geoip]
Elasticsearch plugins.

include::../include/running-modules.asciidoc[]

include::../include/configuring-intro.asciidoc[]

:fileset_ex: log

include::../include/config-option-intro.asciidoc[]

[float]
==== `log` fileset settings

The fileset is by default configured to listen for UDP traffic on
`localhost:2055`. For most uses cases you will want to set the `netflow_host`
variable to allow the input bind to all interfaces so that it can receive
traffic from network devices.

["source","yaml",subs="attributes"]
-----
- module: netflow
log:
enabled: true
var:
netflow_host: 0.0.0.0
netflow_port: 2055
-----

`var.netflow_host`:: Address to find to. Defaults to `localhost`.

`var.netflow_port`:: Port to listen on. Defaults to `2055`.

`var.max_message_size`:: The maximum size of the message received over UDP.
The default is `10KiB`.

`var.expiration_timeout`:: The time before an idle session or unused template is
expired. Only applicable to v9 and IPFIX protocols. A value of zero disables
expiration.

`var.queue_size`:: The maximum number of packets that can be queued for
processing. Use this setting to avoid packet-loss when dealing with occasional
bursts of traffic.

:has-dashboards!:

:fileset_ex!:

:modulename!:


[float]
=== Fields

For a description of each field in the module, see the
<<exported-fields-netflow,exported fields>> section.

2 changes: 2 additions & 0 deletions filebeat/docs/modules_list.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ This file is generated! See scripts/docs_collector.py
* <<filebeat-module-mongodb>>
* <<filebeat-module-mysql>>
* <<filebeat-module-nats>>
* <<filebeat-module-netflow>>
* <<filebeat-module-nginx>>
* <<filebeat-module-osquery>>
* <<filebeat-module-postgresql>>
Expand Down Expand Up @@ -43,6 +44,7 @@ include::modules/logstash.asciidoc[]
include::modules/mongodb.asciidoc[]
include::modules/mysql.asciidoc[]
include::modules/nats.asciidoc[]
include::modules/netflow.asciidoc[]
include::modules/nginx.asciidoc[]
include::modules/osquery.asciidoc[]
include::modules/postgresql.asciidoc[]
Expand Down
8 changes: 8 additions & 0 deletions x-pack/filebeat/filebeat.reference.yml
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,14 @@ filebeat.modules:
# Filebeat will choose the paths depending on your OS.
#var.paths:

#------------------------------- NetFlow Module -------------------------------
- module: netflow
log:
enabled: true
var:
netflow_host: localhost
netflow_port: 2055

#-------------------------------- Nginx Module --------------------------------
#- module: nginx
# Access logs
Expand Down
1 change: 1 addition & 0 deletions x-pack/filebeat/include/list.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions x-pack/filebeat/module/netflow/_meta/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- module: netflow
log:
enabled: true
var:
netflow_host: localhost
netflow_port: 2055
67 changes: 67 additions & 0 deletions x-pack/filebeat/module/netflow/_meta/docs.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[role="xpack"]

:modulename: netflow
:has-dashboards: false

== NetFlow module

This is a module for receiving NetFlow and IPFIX flow records over UDP. This
input supports NetFlow versions 1, 5, 6, 7, 8 and 9, as well as IPFIX. For
NetFlow versions older than 9, fields are mapped automatically to NetFlow v9.

This module wraps the <<filebeat-input-netflow,netflow input>> to enrich the
flow records with geolocation information about the IP endpoints by using
Elasticsearch Ingest Node.

[float]
=== Compatibility

This module requires the {elasticsearch-plugins}/ingest-geoip.html[ingest-geoip]
Elasticsearch plugins.

include::../include/running-modules.asciidoc[]

include::../include/configuring-intro.asciidoc[]

:fileset_ex: log

include::../include/config-option-intro.asciidoc[]

[float]
==== `log` fileset settings

The fileset is by default configured to listen for UDP traffic on
`localhost:2055`. For most uses cases you will want to set the `netflow_host`
variable to allow the input bind to all interfaces so that it can receive
traffic from network devices.

["source","yaml",subs="attributes"]
-----
- module: netflow
log:
enabled: true
var:
netflow_host: 0.0.0.0
netflow_port: 2055
-----

`var.netflow_host`:: Address to find to. Defaults to `localhost`.

`var.netflow_port`:: Port to listen on. Defaults to `2055`.

`var.max_message_size`:: The maximum size of the message received over UDP.
The default is `10KiB`.

`var.expiration_timeout`:: The time before an idle session or unused template is
expired. Only applicable to v9 and IPFIX protocols. A value of zero disables
expiration.

`var.queue_size`:: The maximum number of packets that can be queued for
processing. Use this setting to avoid packet-loss when dealing with occasional
bursts of traffic.

:has-dashboards!:

:fileset_ex!:

:modulename!:
6 changes: 6 additions & 0 deletions x-pack/filebeat/module/netflow/_meta/fields.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- key: netflow-module
title: NetFlow
description: >
Module for receiving NetFlow and IPFIX flow records over UDP. The module
does not add fields beyond what the netflow input provides.
fields:
23 changes: 23 additions & 0 deletions x-pack/filebeat/module/netflow/fields.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions x-pack/filebeat/module/netflow/log/config/netflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type: netflow
protocols: [v1, v5, v6, v7, v8, v9, ipfix]
host: '{{.netflow_host}}:{{.netflow_port}}'
max_message_size: '{{.max_message_size}}'
expiration_timeout: '{{.expiration_timeout}}'
queue_size: {{.queue_size}}
29 changes: 29 additions & 0 deletions x-pack/filebeat/module/netflow/log/ingest/pipeline.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"description": "Pipeline for Filebeat NetFlow",
"processors": [
{
"geoip": {
"if": "ctx.source?.geo == null",
"field": "source.ip",
"target_field": "source.geo",
"ignore_missing": true
}
},
{
"geoip": {
"if": "ctx.destination?.geo == null",
"field": "destination.ip",
"target_field": "destination.geo",
"ignore_missing": true
}
}
],
"on_failure": [
{
"set": {
"field": "error.message",
"value": "{{ _ingest.on_failure_message }}"
}
}
]
}
20 changes: 20 additions & 0 deletions x-pack/filebeat/module/netflow/log/manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module_version: "1.0"

var:
- name: netflow_host
default: localhost
- name: netflow_port
default: 2055
- name: max_message_size
default: 10KiB
- name: expiration_timeout
default: 30m
- name: queue_size
default: 8192

ingest_pipeline: ingest/pipeline.json
input: config/netflow.yml

requires.processors:
- name: geoip
plugin: ingest-geoip
9 changes: 9 additions & 0 deletions x-pack/filebeat/modules.d/netflow.yml.disabled
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Module: netflow
# Docs: https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-module-netflow.html

- module: netflow
log:
enabled: true
var:
netflow_host: localhost
netflow_port: 2055