Suricata Bridge Firewall: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 90: Zeile 90:
 
#!/usr/sbin/nft -f
 
#!/usr/sbin/nft -f
 
define open    = enp0s8
 
define open    = enp0s8
define save = enp0s9
+
define filter = enp0s9
 
flush ruleset
 
flush ruleset
 
table bridge filter {
 
table bridge filter {
 
         chain forward {
 
         chain forward {
                 type filter hook forward priority 0; policy accept;
+
                 type filter hook forward priority 0; policy drop;
                 meta iifname $open queue num 0
+
                ct state established,related accept
                 meta iifname $save queue num 0
+
                 # Arp freischalten
                }
+
        iif $open ether type arp accept
            }
+
                iif $filter ether type arp accept
 
+
                ####icmp von filter nach open freischalten
</pre>
+
                #iif $filter oif $open ip protocol icmp ct state new accept
 
+
                ####dns von filter nach open freischalten
 +
                #iif $filter oif $open udp dport 53 ct state new accept
 +
                ####http von filter nach open freischalten
 +
                #iif $filter oif $open tcp dport 80 ct state new accept
 +
                ####https von filter nach open freischalten
 +
                 #iif $filter oif $open tcp dport 443 ct state new accept
 +
                ####alles von open nach filter freischalten
 +
                #iif $open oif $filter ct state new accept
 +
                #### Loggen von abgelehnten Paketen
 +
                log prefix " nft-drop"
 +
        }
 +
}
  
  
  
 +
</pre>
  
 
=Konfiguration Suricata=
 
=Konfiguration Suricata=

Version vom 2. Juli 2025, 17:44 Uhr

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

Cloned die Maschine aus der Vorlage

  • bridge-firewall

Vorgaben

Einstellung Wert
Name bridge-firewall.it2xx.int
IP-Adresse 172.17.2xx.21/24
Gateway 172.17.2xx.1
Nameserver 10.88.2xx.21
Search-Domain it2xx.int
Benutzername kit
Benutzerpasswort kit
Administrator root
Administratorpasswort radler
Netz LAN

Netzwerkadapter

  • Fügen zwei Adapter
  • 2. Adapter DMZ
  • 3. Adapter DMZ-SAFE

Weiteres

  • In den Nameserver eintragen
  • Firewall anpassen so das ihr von eurem Host mit ssh draufkommt.


Schaubild

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 static 
 address 172.17.2xx.21/24
 gateway 172.17.2xx.1 

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

Regeln zur Weiterleitung an Suricata

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f
define open    = enp0s8
define filter  = enp0s9
flush ruleset
table bridge filter {
        chain forward {
                type filter hook forward priority 0; policy drop;
                ct state established,related accept
                # Arp freischalten
	        iif $open ether type arp accept
                iif $filter ether type arp accept
                ####icmp von filter nach open freischalten 
                #iif $filter oif $open ip protocol icmp ct state new accept
                ####dns von filter nach open freischalten 
                #iif $filter oif $open udp dport 53 ct state new accept
                ####http von filter nach open freischalten 
                #iif $filter oif $open tcp dport 80 ct state new accept
                ####https von filter nach open freischalten 
                #iif $filter oif $open tcp dport 443 ct state new accept
                ####alles von open nach filter freischalten 
                #iif $open oif $filter ct state new accept
                #### Loggen von abgelehnten Paketen
                log prefix " nft-drop"
        }
}



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