Suricata Bridge Firewall: Unterschied zwischen den Versionen
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 | ||
| − | = | + | =Suricata Bridge Firewall= |
| − | * | + | {{#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 | ||
| − | + | * '''nft add rule bridge filter forward meta iifname "enp0s8" queue num 0''' | |
| − | *nft add rule bridge filter forward | + | * '''nft add rule bridge filter forward meta iifname "enp0s9" queue num 0''' |
| − | |||
| − | * | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | =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 | ||
| − | |||
| − | |||
| − | |||
| − | |||
=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
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
- 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
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"

