Suricata Bridge Firewall: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
 +
=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
 +
 +
=Vorbereitung=
 +
;Suricata muss im NFQUEUE-Modus laufen
 +
*af-packet Abschnitt in der YAML entfernen oder auskommentieren
 +
*nfq-Modus konfigurieren
 +
 
=Vorab=
 
=Vorab=
 
;Bei Virtualisierungen Bridge Ports auf Promisc setzen
 
;Bei Virtualisierungen Bridge Ports auf Promisc setzen
 
[[Datei:Vm-promisc-1.png]]
 
[[Datei:Vm-promisc-1.png]]
 
  
 
=Installation der Bridgeutils=
 
=Installation der Bridgeutils=
 
*apt install bridge-utils
 
*apt install bridge-utils
 
 
=/etc/network/interfaces=
 
=/etc/network/interfaces=
 
<pre>
 
<pre>
Zeile 32: Zeile 41:
 
*ifup vmbr0
 
*ifup vmbr0
  
=Arp=
+
=Suricata Bridge Firewall=
*arp ist im Gegensatz zur Layer 3 Firewall nicht automatisch freigeschaltet
+
{{#drawio:bridge-fw}}
 +
 
 +
=Konfiguration Suricata=
 +
* '''vim /etc/suricata/suricata.yaml'''
 +
<pre>
 +
%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/
 +
 
 +
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
 +
 
 +
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
 +
</pre>
 +
 
 +
=Regeln zur Weiterleitung an Suricata=
 +
*nftables kann in der Bridge-Familie auf die Forward-Kette Pakete in die Queue schicken
  
=Ein weiteres Beispiel zum Akzeptieren von ARP-Paketen=
+
* '''nft add rule bridge filter forward meta iifname "enp0s8" queue num 0'''
*nft add rule bridge filter forward ether type arp accept
+
* '''nft add rule bridge filter forward meta iifname "enp0s9" queue num 0'''
=Zustandsabhängige Filterung=
 
*Die Bridge-Familie unterstützt die Verbindungsverfolgung.
 
*Sie müssen nur auf den Verbindungsstatusinformationen aus Ihrer Regelmenge übereinstimmen, um dies zu aktivieren.
 
=Beispiel: Zustandsabhängige Bridge-Firewall=
 
*Wir erstellen einen bridgefilter
 
*Wir erstellen die Policy drop
 
*Connection Tracking wie üblich
 
*arp ist generell erlaubt
 
  
 +
=Starten im IPS-Modus=
 +
* '''suricata -D -q 0 -c /etc/suricata/suricata.yaml'''
 +
* oder dauerhaft mit eigener systemd-Datei:
 +
* siehe [[Suricata als IPS mit systemd starten]]
 +
 +
=Beispielregeln=
 +
* '''vim /etc/suricata/rules/local.rules'''
 +
<pre>
 +
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;)
 +
</pre>
 +
 +
=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
  
=nftables schnellstart=
 
*[[nftables schnellstart]]
 
=Bridge Firewall=
 
{{#drawio:bridge-fw}}
 
  
 
=Regeln=
 
=Regeln=

Version vom 24. April 2025, 15:59 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

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

/etc/network/interfaces

auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet static
 address 10.88.113.69/24
 gateway 10.88.113.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

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/

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

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

Regeln zur Weiterleitung an Suricata

  • nftables kann in der Bridge-Familie auf die Forward-Kette Pakete in die Queue schicken
  • nft add rule bridge filter forward meta iifname "enp0s8" queue num 0
  • nft add rule bridge filter forward meta iifname "enp0s9" queue num 0

Starten im IPS-Modus

Beispielregeln

  • vim /etc/suricata/rules/local.rules
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;)

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


Regeln

  • 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"
        }
}

Regel Handling

Laden der Regeln
  • nft -f /etc/nftables.conf
Kontrolle der Regeln
  • nft list ruleset
Löschender Regeln
  • nft flush ruleset

Live Log der Regel Verstösse

  • journalctl -f -t kernel -g "nft-drop"