Suricata IPS
Zur Navigation springen
Zur Suche springen
Grundlagen und Installation
Versuchsaufbau
IPS
- Wir können mit iptables Pakete abfangen und einer QUEUE übergeben
- Diese QUEUE wird von suricata gelesen und ihrem REGELWERK übergeben.
- Wenn das Paket mit einer Regel übereinstimmt, wird eine Aktion ausgelöst.
- Alert führt zu einer Meldung
- Bei Drop wird das Paket verworfen.
Konfiguration Suricata
- vim /etc/suricata/suricata.yaml
%YAML 1.1 --- # Variablen für die Adressgruppen festlegen vars: address-groups: LAN: "[192.168.10.0/24]" DMZ: "[172.18.10.0/24]" INT: "[$LAN,$DMZ]" EXTERNAL_NET: "!$INT" # Standard-Log-Verzeichnis default-log-dir: /var/log/suricata/ # Statistiken aktivieren stats: enabled: yes interval: 8 # Ausgaben konfigurieren outputs: - fast: enabled: yes filename: fast.log append: yes - alert-debug: enabled: yes filename: alert-debug.log append: yes - stats: enabled: yes filename: stats.log append: yes totals: yes threads: no # Logging-Einstellungen logging: default-log-level: notice outputs: - console: enabled: yes - file: enabled: yes level: info filename: suricata.log # Netzwerkschnittstellen konfigurieren af-packet: - interface: enp0s3 threads: auto cluster-id: 97 cluster-type: cluster_flow defrag: yes - interface: enp0s8 threads: auto cluster-id: 98 cluster-type: cluster_flow defrag: yes - interface: enp0s9 threads: auto cluster-id: 99 cluster-type: cluster_flow defrag: yes # PID-Datei pid-file: /var/run/suricata.pid # Coredump-Einstellungen coredump: max-dump: unlimited # Host-Modus host-mode: auto # Unix-Befehlseingabe konfigurieren unix-command: enabled: yes filename: /var/run/suricata-command.socket # Engine-Analyse-Einstellungen engine-analysis: rules-fast-pattern: yes rules: yes # Defragmentierungseinstellungen defrag: memcap: 32mb hash-size: 65536 trackers: 65535 max-frags: 65535 prealloc: yes timeout: 60 # Standardregelverzeichnis default-rule-path: /etc/suricata/rules # Regel-Dateien rule-files: - local.rules # Klassifikationsdatei classification-file: /etc/suricata/classification.config # Referenzkonfigurationsdatei reference-config-file: /etc/suricata/reference.config
Local Rules
- cat /etc/suricata/rules/local.rules
drop http any any -> any any (msg: "SQL Injection Attempt!"; flow:establised,to_server; http.request_body; content: "OR 1=1"; sid:2;) drop dns any any -> any any (msg:"Kein Googlen"; dns.query; content:"google"; nocase; sid:3;) drop http any any -> any any (msg: "Possible SQL Injection attack (Contains singlequote POST DATA)"; flow:established,to_server; content:"%27"; nocase; http_client_body; sid:4;) drop http any any -> any any (msg: "Possible Command Injection attack (Contains semicolon POST DATA)"; flow:established,to_server; content:"%3B"; nocase; http_client_body; sid:5;)
Firewallanpassung
- Ohne Return von der IPS, Hierzu müsste die IPS der Firewall nachgeschaltet sein.
- vim /usr/local/sbin/firewall
iptables -P FORWARD DROP iptables -A FORWARD -j NFQUEUE ...
Start suricata
- suricata -D -q 0
Problematik
- Dadurch, dass Suricata alle Pakete vom LAN zur DMZ behandelt, werden alle Pakete, die nicht ausdrücklich verworfen werden akzeptiert
- Wir müssen Suricata also so einstellen, dass es diese Pakete wieder iptables übergibt
NFQUEUE Repeat
- Damit Suricata die nicht gedroppten Pakete automatisch akzeptiert, sondern dies der Firewall überlässt, kann es diese Pakete markieren und zurück zu iptables schicken
- Markierungen folgen der Syntax $MARK/$MASK
- vim /usr/local/sbin/firewall
iptables -P FORWARD DROP iptables -A FORWARD -m mark ! --mark 1/1 -j NFQUEUE iptables -A FORWARD -j LOG --log-prefix "iptables return from Suricata: " ...
- vim /etc/suricata/suricata.yml
... nfq: mode: repeat repeat-mark: 1 repeat-mask: 1 ...
Start suricata
- suricata -D -q 0
- Den Unterschied zwischen repeat und accept kann man mit Ping und SSH testen (falls SSH in der FORWARD Kette blockiert ist)