Suricata Bridge Firewall

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Suricata als IPS auf einer Bridge

Ziel
  • Pakete, die durch eine Linux-Bridge laufen, werden aktiv durch Suricata geprüft
  • Suricata läuft im IPS-Modus über NFQUEUE und kann Pakete verwerfen

Schaubild

Suri-bridge.png

Schaubild

suricata-bridge
empty app.diagrams.net chart

Vorbereitung

Suricata muss im NFQUEUE-Modus laufen
  • af-packet Abschnitt in der YAML entfernen oder auskommentieren
  • nfq-Modus konfigurieren

Vorab

Bei Virtualisierungen Bridge Ports auf Promisc setzen

Vm-promisc-1.png

Installation der Bridgeutils

  • apt install bridge-utils suricata

/etc/network/interfaces

auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet dhcp

auto enp0s8
iface enp0s8 inet manual

auto enp0s9
iface enp0s9 inet manual

auto vmbr0
iface vmbr0 inet manual
    bridge_ports enp0s8 enp0s9
    bridge_fd 5
    bridge_stp no
  • ifup vmbr0

Suricata Bridge Firewall

Konfiguration Suricata

  • vim /etc/suricata/suricata.yaml
%YAML 1.1
---
vars:
  address-groups:
    LAN: "[172.17.113.0/24]"
    DMZ: "[10.88.113.0/24]"
    SERVER: "[172.16.113.0/24]"
    INT: "[$LAN,$DMZ,$SERVER]"
    HOME_NET: "$INT"
    EXTERNAL_NET: "!$INT"

default-log-dir: /var/log/suricata/

unix-command:
  enabled: yes
  filename: /var/run/suricata-command.socket

nfq:
  mode: repeat
  repeat-mark: 1
  repeat-mask: 1

outputs:
  - fast:
      enabled: yes
      filename: fast.log
      append: yes
  - alert-debug:
      enabled: yes
      filename: alert-debug.log
      append: yes
  - eve-log:
      enabled: yes
      filetype: regular
      filename: eve.json
      types:
        - alert
        - http
        - dns
        - tls
        - flow
        - ssh
        - stats


pid-file: /var/run/suricata.pid

default-rule-path: /etc/suricata/rules
rule-files:
  - local.rules

classification-file: /etc/suricata/classification.config
reference-config-file: /etc/suricata/reference.config
app-layer:
  protocols:
    http:
      enabled: yes
    tls:
      enabled: yes
    dcerpc:
      enabled: yes
    smb:
      enabled: yes
    ftp:
      enabled: yes
    ssh:
      enabled: yes
    smtp:
      enabled: yes
    dns:
      enabled: yes
    modbus:
      enabled: yes
    enip:
      enabled: yes
    dnp3:
      enabled: yes
    nfs:
      enabled: yes
    ntp:
      enabled: yes
    tftp:
      enabled: yes
    ikev2:
      enabled: yes
    krb5:
      enabled: yes
    dhcp:
      enabled: yes
    snmp:
      enabled: yes
    sip:
      enabled: yes
    rfb:
      enabled: yes
    mqtt:
      enabled: yes
    rdp:
      enabled: yes
    http2:
      enabled: yes
    imap:
      enabled: yes

Regeln zur Weiterleitung an Suricata

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f

define open    = enp0s8
define safe  = enp0s9
flush ruleset
table bridge filter {
        chain forward {
                type filter hook forward priority 0; policy accept;
                meta iifname $open queue num 0
                meta iifname $safe queue num 0
                 }
             }

Beispielregeln

  • vim /etc/suricata/rules/local.rules
drop icmp $HOME_NET any -> 1.1.1.1 any (msg:"ICMP von intern nach 1.1.1.1  geblockt"; sid:10001;)
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP von extern geblockt"; sid:10001;)
alert tcp any any -> any 80 (msg:"HTTP Traffic erkannt"; sid:10002;)
alert tcp any any -> any 80 (msg:"HTTP Traffic erkannt"; sid:10002;)

Starten im IPS-Modus

Log-Analyse

  • tail -f /var/log/suricata/fast.log

Hinweise

  • Pakete werden wirklich blockiert – nicht nur geloggt
  • Testen mit Ping oder einfachem Curl
  • Performance beachten – NFQUEUE braucht CPU

eve