Suricata IDS/IPS Content Pack

The following content pack is available for use with a Graylog Illuminate license and Graylog Enterprise or Graylog Security. Contact sales to learn more about obtaining Illuminate.

Suricata is a free and open-source network threat detection engine capable of real-time intrusion detection (IDS), intrusion prevention (IPS), network security monitoring (NSM), and offline pcap processing. This technology pack processes Suricata EVE JSON log output, providing normalization and enrichment of alert, anomaly, ARP, BitTorrent DHT, DCERPC, DHCP, DNS, FTP, HTTP, HTTP/2, IKE, IPS drop, Kerberos (KRB5), Modbus, MQTT, NetFlow, network flow, NFS, PgSQL, POP3, QUIC, RDP, RFB/VNC, SMB, SMTP, SNMP, SSH, TFTP, TLS, and file info events.

Supported Versions

  • Suricata 6.x and later (EVE JSON output)

  • Suricata 7.x and later (EVE JSON output)

  • Suricata 8.x (tested; EVE JSON output)

  • Suricata <= 7 legacy plain-text http.log and tls.log formats (deprecated)

Requirements

  • Suricata configured with EVE JSON output enabled

  • Graylog version 7.1.0+

Stream Configuration

This technology pack includes 1 stream:

  • "Illuminate:Suricata Messages"

Hint: If this stream does not exist prior to the activation of this pack then it will be created and configured to route messages to this stream and the associated index set. There should not be any stream rules configured for this stream.

Index Set Configuration

This technology pack includes 1 index set definition:

  • "Suricata IDS/IPS Logs"

Hint: If this index set is already defined, then nothing will be changed. If this index set does not exist, then it will be created with retention settings of a daily rotation and 90 days of retention. These settings can be adjusted as required after installation.

Log Format Example

Suricata EVE JSON

{"timestamp":"2023-03-24T12:00:00.000000+0000","flow_id":123456789,"in_iface":"eth0","event_type":"alert","src_ip":"192.168.1.10","src_port":54321,"dest_ip":"203.0.113.1","dest_port":443,"proto":"TCP","alert.action":"blocked","alert.gid":1,"alert.signature_id":2100498,"alert.rev":7,"alert.signature":"GPL ATTACK_RESPONSE id check returned root","alert.category":"Potentially Bad Traffic","alert.severity":2} {"timestamp":"2023-03-24T12:01:00.000000+0000","flow_id":987654321,"in_iface":"eth0","event_type":"dns","src_ip":"192.168.1.20","src_port":52100,"dest_ip":"8.8.8.8","dest_port":53,"proto":"UDP","dns.type":"query","dns.id":12345,"dns.rrname":"example.com","dns.rrtype":"A","dns.tx_id":0} {"timestamp":"2023-03-24T12:02:00.000000+0000","flow_id":111222333,"in_iface":"eth0","event_type":"http","src_ip":"192.168.1.30","src_port":55000,"dest_ip":"93.184.216.34","dest_port":80,"proto":"TCP","app_proto":"http","http.hostname":"example.com","http.url":"/index.html","http.http_user_agent":"Mozilla/5.0","http.http_method":"GET","http.protocol":"HTTP/1.1","http.status":200,"http.length":1256} {"timestamp":"2023-03-24T12:03:00.000000+0000","flow_id":444555666,"in_iface":"eth0","event_type":"tls","src_ip":"192.168.1.40","src_port":56789,"dest_ip":"93.184.216.34","dest_port":443,"proto":"TCP","app_proto":"tls","tls.subject":"CN=example.com","tls.issuerdn":"CN=DigiCert TLS RSA SHA256 2020 CA1","tls.sni":"example.com","tls.version":"TLS 1.3","tls.notbefore":"2022-01-01T00:00:00","tls.notafter":"2023-01-01T00:00:00"} {"timestamp":"2023-03-24T12:04:00.000000+0000","flow_id":777888999,"in_iface":"eth0","event_type":"flow","src_ip":"10.0.0.5","src_port":60001,"dest_ip":"10.0.0.1","dest_port":22,"proto":"TCP","app_proto":"ssh","flow.pkts_toserver":12,"flow.pkts_toclient":10,"flow.bytes_toserver":1024,"flow.bytes_toclient":2048,"flow.start":"2023-03-24T12:04:00.000000+0000","flow.end":"2023-03-24T12:04:45.000000+0000","flow.state":"closed","flow.reason":"timeout","flow.alerted":false} {"timestamp":"2023-03-24T12:05:00.000000+0000","flow_id":112233445,"in_iface":"eth0","event_type":"ssh","src_ip":"10.0.0.5","src_port":60001,"dest_ip":"10.0.0.1","dest_port":22,"proto":"TCP","ssh.client.proto_version":"2.0","ssh.client.software_version":"OpenSSH_8.9","ssh.server.proto_version":"2.0","ssh.server.software_version":"OpenSSH_9.0"} {"timestamp":"2023-03-24T12:06:00.000000+0000","flow_id":556677889,"in_iface":"eth0","event_type":"fileinfo","src_ip":"192.168.1.50","src_port":57000,"dest_ip":"93.184.216.34","dest_port":80,"proto":"TCP","app_proto":"http","fileinfo.filename":"/downloads/update.exe","fileinfo.magic":"PE32 executable (GUI) Intel 80386","fileinfo.md5":"d41d8cd98f00b204e9800998ecf8427e","fileinfo.size":102400,"fileinfo.stored":false} {"timestamp":"2023-03-24T12:07:00.000000+0000","flow_id":998877665,"in_iface":"eth0","event_type":"krb5","src_ip":"10.0.0.50","src_port":49200,"dest_ip":"10.0.0.1","dest_port":88,"proto":"UDP","krb5.msg_type":"KRB_TGS_REP","krb5.cname":"robin","krb5.realm":"EXAMPLE.LAB","krb5.sname":"ldap/dc01","krb5.encryption":"aes256-cts-hmac-sha1-96","krb5.weak_encryption":false,"krb5.ticket_encryption":"aes256-cts-hmac-sha1-96","krb5.ticket_weak_encryption":false} {"timestamp":"2023-03-24T12:08:00.000000+0000","flow_id":334455667,"in_iface":"eth0","event_type":"rfb","src_ip":"192.168.1.10","src_port":54321,"dest_ip":"10.0.0.100","dest_port":5900,"proto":"TCP","rfb.server_protocol_version.major":"003","rfb.server_protocol_version.minor":"007","rfb.client_protocol_version.major":"003","rfb.client_protocol_version.minor":"007","rfb.authentication.security_type":2,"rfb.authentication.security_result":"OK","rfb.screen_shared":false,"rfb.framebuffer.width":1920,"rfb.framebuffer.height":1080,"rfb.framebuffer.name":"desktop@workstation.example.com"} {"timestamp":"2023-03-24T12:09:00.000000+0000","flow_id":778899001,"in_iface":"eth0","event_type":"bittorrent_dht","src_ip":"10.0.0.20","src_port":6881,"dest_ip":"185.21.216.44","dest_port":6881,"proto":"UDP","bittorrent_dht.transaction_id":"0c17","bittorrent_dht.client_version":"4c540126","bittorrent_dht.request_type":"ping"} {"timestamp":"2023-03-24T12:10:00.000000+0000","flow_id":223344556,"in_iface":"eth0","event_type":"anomaly","src_ip":"192.168.1.99","src_port":0,"dest_ip":"192.168.1.1","dest_port":0,"proto":"TCP","anomaly.type":"stream","anomaly.event":"SURICATA STREAM 3way handshake right seq wrong ack evasion","anomaly.layer":"stream"}

What is Provided

  • Parsing rules to extract Suricata EVE JSON fields into the Graylog Information Model (GIM)

  • GIM categorization of Suricata events and severity normalization (alert + log severity)

  • Input support for Filebeat/GELF, syslog TCP/UDP, and raw TCP/UDP, plus legacy Suricata http.log and tls.log plain-text formats

Log Collection and Delivery

This pack supports multiple log delivery methods:

Filebeat (recommended): Use the Elastic Filebeat agent with the ndjson input type via a Graylog Sidecar. Nested JSON fields are delivered using dot notation (e.g. alert.severity, dns.rrname).

Syslog: Suricata can be configured to send EVE JSON via syslog to a Graylog Syslog TCP or UDP input. The application_name field must be set to suricata. The EVE JSON payload is embedded in the syslog message field and parsed by the pack's syslog processing rule.

Legacy plain-text formats (Suricata <= 7): The pack also parses the legacy http.log and tls.log plain-text output formats that were deprecated in Suricata 8.0 and removed in Suricata 9.0. These are detected automatically alongside EVE JSON on syslog or raw inputs.

Configuring Suricata

Suricata must be configured to output logs in EVE JSON format. In suricata.yaml, ensure the eve-log output is enabled and includes the desired event types:

Configuring Sidecar

  1. Please refer to the official documentation to set up Graylog Sidecar for Filebeat.

  2. Create a matching Beats input in Graylog.

  3. Ensure that the option Do not add Beats type as prefix is disabled.

  4. Add the following example configuration snippet to your Filebeat configuration:

    Copy
    - type: filestream
    id: suricata-eve-filestream
    enabled: true
    paths:
    - /var/log/suricata/eve.json
    parsers:
    - ndjson:
    target: ""
    add_error_key: true
    expand_keys: false
    fields_under_root: true
    fields:
    filebeat_event_source_product: suricata

Hint: The configuration snippet provided is not a fully functional Filebeat configuration; it is only the section that adds Suricata EVE JSON log ingestion to an existing Filebeat configuration. Adjust the path to match your Suricata installation if it differs from the default.

Suricata Log Message Processing

Suricata EVE JSON events are identified by the event_type field. For DNS events, the pack further distinguishes between queries (dns.type = "query") and answers (dns.type = "answer"), and detects RFC 2136 DDNS UPDATE messages (dns.opcode = 5) to assign the appropriate GIM code (140000 query, 140200 answer, 140500 ddns update). For flow events, closed flows (flow.state = "closed") receive a distinct GIM code from established flows. For DHCP events, vendor_dhcp_type further refines the GIM code (e.g. discover -> 290200, request -> 290000, offer -> 290100, ack -> 290300); unrecognized types default to 299999.

Events Processed by This Technology Pack

The content pack supports the following Suricata EVE JSON event types:

GIM Categorization

Field extraction, normalization, and message enrichment for Suricata EVE JSON log messages, plus GIM categorization of the following messages:

Message Fields Included in This Pack

General Parsing

Suricata IDS/IPS Content Pack

This spotlight offers a dashboard with 1 tab:

Overview