Raspberry Pi je připraveno, dalším krokem bude instalace Suricata. Tu jsem se rozhodl nechat běžet přímo na Ubuntu server, na rozdíl od dalších aplikací, které budou spouštěny přes Docker.
1. Instalace Suricata
# Přidání Suricata PPA repozitáře
sudo add-apt-repository ppa:oisf/suricata-stable -y
sudo apt update
# Instalace Suricata a pomocných nástrojů
sudo apt install -y suricata jq tcpdump
2. Zastavení služby před konfigurací
sudo systemctl stop suricata
3. Identifikace síťového rozhraní
ip a
Zapamatujte si název vašeho hlavního síťového rozhraní (pravděpodobně eth0).
4. Základní konfigurace
sudo nano /etc/suricata/suricata.yaml
V konfiguračním souboru proveďte následující úpravy:
Konfigurace síťového rozhraní
Najděte sekci af-packet (cca řádek 580) a upravte ji:
af-packet:
- interface: eth0 # Nahraď svým rozhraním
cluster-id: 99 # Unikátní ID pro klastrovací mechanismus
cluster-type: cluster_flow # Distribuce paketů mezi vlákny
defrag: yes # Povoluje defragmentaci IP paketů
use-mmap: yes # Používá memory mapping pro efektivnější přenos dat
tpacket-v3: yes # Používá novější verzi tpacket rozhraní
buffer-size: 64mb # Pro Raspberry je vhodná menší hodnota
disable-promisc: no # Povol promiskuitní režim
Konfigurace domácí sítě
Najděte sekci vars (na začátku souboru) a upravte definici domácí sítě:
vars:
address-groups:
HOME_NET: "[192.168.1.0/24]" # Upravte rozsah podle vlastní sítě
EXTERNAL_NET: "!$HOME_NET"
Nastavení režimu detekce
Najděte default-mode a nastavte režim detekce:
default-mode: ids # IDS = pouze detekce, IPS = detekce a prevence
Pro potvrzení aktuálního režimu můžete zkusit:
sudo suricata --dump-config | grep mode
Konfigurace výstupů
Najděte sekci outputs a upravte ji podle svých potřeb:
outputs:
- fast:
enabled: yes
filename: fast.log
append: yes
- eve-log:
enabled: yes
filetype: regular
filename: eve.json
types:
- alert:
metadata: yes
tagged-packets: yes
- http:
extended: yes
- dns:
query: yes
answer: yes
- tls:
extended: yes
- files:
force-magic: yes
- ssh
- flow
- netflow
- smtp
- stats:
totals: yes
threads: yes
- dhcp:
enabled: yes
- rdp
Pokud chcete zachytávat síťový provoz při detekci útoku, povolte také pcap-log:
- pcap-log:
enabled: yes
filename: log.pcap
limit: 100mb
max-files: 10
5. Konfigurace pravidel
5.1. Instalace nástroje suricata-update
sudo apt install -y python3-pip
sudo pip3 install --upgrade suricata-update
Pokud dostanete chybu o externě spravovaném prostředí, máme dvě alternativní řešení:
Varianta 1: Použití virtuálního prostředí a wrapper skriptu (doporučeno)
sudo apt install -y python3-venv python3-full
# Vytvořte virtuální prostředí
mkdir -p ~/suricata-env
mkdir -p ~/bin
python3 -m venv ~/suricata-env
# Aktivace prostředí
source ~/suricata-env/bin/activate
# Nainstalujte suricata-update
pip install suricata-update
# Vytvořte wrapper skript
echo '#!/bin/bash
source ~/suricata-env/bin/activate
~/suricata-env/bin/suricata-update "$@"' > ~/bin/suricata-update-wrapper
chmod +x ~/bin/suricata-update-wrapper
Pro opuštění virtuálního prostředí Python:
deactivate
Později tento wrapper skript můžete použít přes:
sudo ~/bin/suricata-update-wrapper
Varianta 2: Použití pipx (jednodušší)
sudo apt install -y pipx
pipx ensurepath
pipx install suricata-update
# Použití
# pipx run suricata-update
5.2. Konfigurace aktualizace pravidel
# Vytvoření konfiguračního adresáře
sudo mkdir -p /etc/suricata/update
# Konfigurace aktualizace
sudo nano /etc/suricata/update/enable.conf
Přidejte následující obsah:
et/open
tgreen/hunting
oisf/trafficid
sslbl/ssl-fp-blacklist
ptresearch/attackdetection
5.3. Stažení a aplikace pravidel
sudo suricata-update
5.4. Automatické aktualizace pravidel
sudo crontab -e
Přidejte řádek:
0 1 * * * /usr/bin/suricata-update
Pokud používáte wrapper skript, použijte místo toho:
0 1 * * * /home/tvoje_uživatelské_jméno/bin/suricata-update-wrapper
6. Konfigurace promiskuitního režimu
# Vytvořte nový soubor v systemd
sudo nano /etc/systemd/system/promiscuous-eth0.service
Obsah souboru (upravte podle vašeho rozhraní):
[Unit]
Description=Set Promiscuous Mode on eth0
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev eth0 promisc on
RemainAfterExit=yes
ExecStop=/usr/sbin/ip link set dev eth0 promisc off
[Install]
WantedBy=multi-user.target
Aktivace služby:
sudo systemctl daemon-reload
sudo systemctl enable promiscuous-eth0.service
sudo systemctl start promiscuous-eth0.service
7. Konfigurace systemd služby Suricata
sudo nano /etc/default/suricata
Upravte soubor:
# Konfigurace pro systemd službu
SURICATA_OPTIONS="-c /etc/suricata/suricata.yaml --af-packet"
8. Nastavení správných oprávnění pro logy
sudo chown -R suricata:suricata /var/log/suricata/
sudo chmod -R 750 /var/log/suricata/
9. Spuštění a povolení služby
sudo systemctl start suricata
sudo systemctl enable suricata
10. Ověření správné funkce
10.1. Kontrola stavu služby
sudo systemctl status suricata
10.2. Kontrola logů
sudo tail -f /var/log/suricata/suricata.log
10.3. Test detekce útoků
# Test detekce známých vzorků
curl http://testmynids.org/uid/index.html
10.4. Kontrola zachycených alertů
sudo tail -f /var/log/suricata/fast.log
10.5. Detailnější pohled na alerty v JSON formátu
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
10.6. Kontrola zachytávání síťového provozu
sudo tcpdump -i eth0 -n -c 100
Měli byste vidět pakety, které nepatří přímo vašemu Raspberry Pi, což potvrdí funkčnost port mirroringu.
11. Dodatečné nastavení (volitelné)
11.1. Konfigurace rotace logů
sudo nano /etc/logrotate.d/suricata
Obsah souboru:
/var/log/suricata/*.log /var/log/suricata/*.json {
rotate 7
daily
missingok
notifempty
compress
delaycompress
create 640 suricata suricata
sharedscripts
postrotate
systemctl restart suricata
endscript
}
11.2. Optimalizace výkonu pro Raspberry Pi
sudo nano /etc/suricata/suricata.yaml
Najděte sekci threading a upravte ji podle možností Raspberry Pi 5:
threading:
set-cpu-affinity: yes
detect-thread-ratio: 1.0
cpu-affinity:
- management-cpu-set:
cpu: [0]
- receive-cpu-set:
cpu: [0]
- decode-cpu-set:
cpu: [1]
- stream-cpu-set:
cpu: [2]
- detect-cpu-set:
cpu: ["3-"]
11.3. Restart a ověření po restartu
sudo reboot
Po restartu ověřte stav Suricata:
sudo systemctl status suricata
11.4. Sledování výkonu systému
Pro sledování zatížení systému můžete použít:
htop
nebo pro sledování I/O operací:
sudo apt install iotop
sudo iotop
12. Ověření automatického startu
Suricata by se měla po restartu Raspberry Pi automaticky spustit. Můžete si to ověřit pomocí následujícího příkazu:
sudo systemctl is-enabled suricata
Pokud vám příkaz vrátí “enabled”, znamená to, že Suricata je nastavena tak, aby se spouštěla automaticky při startu systému.
Poznámka k nastaveným pravidlům:
- et/open - Emerging Threats Open ruleset, volně dostupná sada pravidel pro detekci různých typů útoků a malwaru
- tgreen/hunting - Pravidla pro threat hunting zaměřená na identifikaci podezřelých aktivit
- oisf/trafficid - Pravidla pro identifikaci různých typů síťového provozu a protokolů
- sslbl/ssl-fp-blacklist - Pravidla identifikující podezřelá SSL/TLS spojení na základě známých otisků
- ptresearch/attackdetection - Sada pravidel pro detekci aktivních útoků a exploitů
Užitečné příkazy pro správu pravidel
Seznam všech dostupných zdrojů pravidel:
suricata-update-wrapper list-sources
Seznam aktuálně povolených zdrojů pravidel:
suricata-update-wrapper list-enabled-sources
Detailní informace o zdroji pravidel:
suricata-update-wrapper describe-source et/open
Seznam všech aktuálně stažených a povolených pravidel:
suricata-update-wrapper list-rules
Start the conversation