Jak jsem si vyrobil vlastní XDR/SIEM z Raspberry Pi - 1. část

Pátá generace Raspberry Pi už obsahuje solidní procesor a možnost až 16 GB RAM, lze jej docela dobře využít k běhu náročnějších aplikací v režimu 24/7 - což přesně po XDR chceme. V tomto návodu tedy popíšu kompletní a podrobný postup pro vytvoření vlastního domácího XDR/IDS řešení obsahujícího Suricata, Zeek, (Docker), Pi-hole, Elastic Search a Kibana.

Příprava Raspberry Pi

Pro tento účel jsem si koupil nevýkonnější model Raspberry Pi s 16 GB RAM. S určitými omezeními by šlo využít i 8GB verzi, ale vzhledem k celkem zanedbatelné celkové ceně mně dává silnější řešení mnohem větší smysl. Dále je taky vhodné nespoléhat na SD karty, ale k Raspberry rovnou pořídit některý z SSD, a to ideálně s kapacitou 500 GB (kvůli ukládání logů, ale šlo by to vyřešit i menším diskem).

Můj nákupní košík:

  • Raspberry Pi 5 s 16 GB RAM
  • Active Cooler
  • M.2 hat s osazeným SSD 512 GB
  • napájecí zdroj
  • krabička
  • ethernetový kabel
  • SD karta (pro prvotní konfiguraci)

Dále jelikož můj router nemá stejně jako většina jiných domácích routerů možnost zrcadlení portů (port mirroring), řešil jsem to pořízením nového switche (jehož nákup jsem stejně už dlouho odkládal, i když mám všechny porty na routeru už dávno obsazeny, stejně jako na malém unmanaged switchi, který jsem používal doteď). Pro monitoring WiFi pak použiju některý ze síťových USB adaptérů podporujících monitor mode (bude to opět Alfa?).

Další postup popisuje moje další kroky, ale při instalaci OS se dá postupovat i jinou variantou (jestli máte monitor, dost z toho se dá provést v GUI - já záměrně v rámci sebevzdělávání využil jen CLI). Stejně tak nemusí být vždy nutné instalovat systém zvlášť na SD kartu a zvlášť na SSD - mělo by jít přes Raspberry utilitku nastavit bootování rovnou pro SSD a pak pokračovat instalací OS přímo na něm - mně ale toto z nějakého neznámého důvodu nefungovalo, nedokázal jsem totiž v Raspberry Imageru SSD najít, ale je možné, že po připojení R Pi k monitoru bych si s tím poradil. Tuto pro mě (téměř doslova) slepou cestu tedy popisovat nebudu.

Postupoval jsem tedy tak, že jsem nejprve na SD kartu nainstaloval Raspberry OS, pak nabootoval R Pi s SD kartou, nainstaloval Ubuntu server i na čistý SSD, překopíroval konfigurační soubory z SD karty na SSD a tím bylo hotovo. (Možné je také naklonování systému z SD karty na SSD, to jsem ale dělat nechtěl.) Jediný problém (kromě počátečních trablů s bootováním při pokusech o instalaci Ubuntu na SSD jako jediném kroku) jsem měl s nastavením SSH, kdy po instalaci a bootování nefungoval SSH server na SSD korektně a vyžadovalo to několik kolik kol střídavého bootu z SD karty a z SSD, než jsem to vyřešil - v tomto návodu už je ale kompletní funkční postup, takže by se vám to stát nemělo.

1. Instalace Raspberry OS na SD kartu

  • Pokud ještě nemáte, stáhněte a nainstalujte si v počítači Raspberry Imager.
  • Vložte SD kartu (ideálně 32GB) do počítače a spusťte Raspberry Imager
  • Vyberte zařízení („Raspberry Pi 5"), v další rozbalovací nabídce vyberte Raspberry OS a ve třetí rozbalovací nabídce jako úložiště vyberte SD kartu (pokud byste chtěli zkusit instalaci na SSD přímo - což se mně nepodařilo - tak jako zařízení nechte Raspberry 5, při výběru OS vyberte Misc utility images, Bootloader (5 family) a pak možnost NVMe/USB Boot. To nahrajte na SD kartu, vložte do Raspberry, připojte k napájení a nechte firmware nainstalovat - mělo by dojít k přepsání pořadí bootování v EEPROM, po následném rebootu s vyjmutou SD kartou byste pak v Raspberry Imageru jako úložiště měli vidět rovnou SSD - pokud ano, gratuluji, můžete jej stejným následným postupem nainstalovat přímo na SSD)
  • Před zápisem editujte nastavení - vyplňte hostname, zvolte si uživatelské údaje a nakonfigurujte WiFi připojení, pokud nechcete používat jen ethernetový kabel. Nezapomeňte taky v nabídce Services povolit SSH, pokud stejně jako já nepoužíváte u Raspberry monitor.
  • Proveďte instalaci Raspberry OS na SD kartu a až Raspberry Imager práci dokončí, vložte SD kartu do Raspberry a spusťte jej

Tím máme první a nejjednodušší krok za sebou. Šťastlivci, kterým se podařilo Ubuntu nainstalovat přímo na SSD, si můžou dopřát příjemnou chvilku u kávy, vy ostatní si kávu nebo i něco silnějšího raději připravte také.

2. Instalace Ubuntu server na SSD

Pokud teď připojíte Raspberry k monitoru, můžete postupovat úplně stejně jako v prvním případě, jenom vše už uděláte přímo na Raspberry - stáhněte Raspberry Imager a nainstalujete znovu Ubuntu server, tentokrát na SSD. Pro masochisty bez monitoru je postup následující:

  • Připojte se k Raspberry přes SSH
ssh vaseuziv.jmeno@IPadresaRaspberry
  • IP adresu raspberry zjistíte např. přes nmap (když nepoznáte, dejte hledat jen porty 22, nezapomeňte použít sudo pro zlepšení výsledků - sudo nmap -p22 192.168.0.0/24 - IP adresa je samozřejmě jen příklad, upravte si rozsah jak to máte vy). Během připojení budete upozorněni na „The authenticity of host…", napište „yes", pak zadáte vaše nastavené uživatelské heslo a jste tam.

V tuto chvíli jste tedy přes SSH připojeni k Raspberry OS běžícímu na SD kartě v Raspberry. Pro instalaci Ubuntu na SSD identifikujte disk:

lsblk
  • Váš NVMe SSD bude pravděpodobně zobrazen jako nvme0n1.

Stáhněte obraz Ubuntu Server pro Raspberry Pi:

wget https://cdimage.ubuntu.com/releases/24.04.2/release/ubuntu-24.04.2-preinstalled-server-arm64+raspi.img.xz

Použijte nejnovější verzi Ubuntu server, doporučuji LTS (v mém případě šlo o Ubuntu 24.04.2 LTS - zkratka na konci znamená Long Time Support, tato vydání by měla být stabilnější a s delší dobou podpory, což se pro naše účely dokonale hodí).

Rozbalte obraz:

unxz ubuntu-24.04.2-preinstalled-server-arm64+raspi.img.xz

Zápis obrazu na SSD:

sudo dd if=ubuntu-24.04.2-preinstalled-server-arm64+raspi.img of=/dev/nvme0n1 bs=4M status=progress conv=fsync

Vytvořte dočasný adresář pro připojení oddílu:

sudo mkdir -p /mnt/boot

Připojte boot oddíl z NVMe disku:

sudo mount /dev/nvme0n1p1 /mnt/boot

Zkontrolujte obsah adresáře:

ls -la /mnt/boot

3. Nastavení

Zkontrolujte, jestli soubor cmdline.txt obsahuje „root=LABEL=writable" (pokud ne, tak jej změňte):

cat /mnt/boot/cmdline.txt

Volitelné: Pokud chcete, můžete si upravit konfiguraci síťového připojení (např. nastavit WiFi):

sudo nano /mnt/boot/network-config

Vytvořte prázdný soubor pro vytvoření SSH připojení při prvním spuštění:

sudo touch /mnt/boot/ssh

Editujte soubor user-data pro konfiguraci SSH:

sudo nano /mnt/boot/user-data
  • Nastavte uživatelské jméno a heslo, popř. vložte vlastní veřejný klíč pro připojení:
chpasswd:
  expire: false # Toto jsem změnil z "true" na "false", aby nevyžadovalo změnu hesla při prvním přihlášení
users:
  - name: ubuntu
    password: VASE_HESLO # Sem zadejte vaše heslo místo VASE_HESLO
    type: text

# Povolení přihlášení pomocí hesla přes SSH - změněno z "false" na "true"
ssh_pwauth: true

# Přidány SSH klíče pro přihlášení (nahraďte řádek níže vaším veřejným klíčem)
ssh_authorized_keys:
  - VAS_VEREJNY_KLIC_ZDE # Sem vložte obsah vašeho veřejného klíče (např. z ~/.ssh/id_ed25519.pub)

Zkontrolujte, popř. změňte bootování:

sudo rpi-eeprom-config
[all]
BOOT_UART=1
BOOT_ORDER=0xf461
NET_INSTALL_AT_POWER_ON=1

Hodnota BOOT_ORDER=0xf461 znamená, že Raspberry Pi se pokusí bootovat v tomto pořadí:

  1. NVMe (4)
  2. SD karta (6)
  3. USB zařízení (1)

Disk odpojte:

sudo umount /mnt/boot

Pokud by se objevila chyba, že je zařízení používáno, zkuste nejprve ukončit všechny procesy, které by mohly pracovat s připojeným oddílem:

sudo fuser -km /mnt/boot
sudo umount /mnt/boot

Po úspěšném odpojení oddílu můžete Raspberry Pi restartovat a otestovat, zda bootuje z NVMe disku:

sudo reboot

Po restartu by se Raspberry Pi mělo pokusit bootovat z NVMe disku s nově nainstalovaným Ubuntu Serverem. Následně byste se měli být schopni přihlásit pomocí SSH s uživatelským jménem “ubuntu” a buď pomocí SSH klíče, nebo hesla, které jste nastavili.

Tady se může stát, že i když jste v souboru user-data nastavili vlastní uživatelský účet, tak se vám k němu přes SSH nepodaří připojit. V takovém případě použijte defaultní Ubuntu účet:

  • username: ubuntu
  • password: ubuntu

Po přihlášení si pak případně můžete nového uživatele vytvořit:

sudo adduser NOVYUZIVATEL

Tento příkaz vás provede vytvořením nového uživatele a nastavením hesla.

Přidejte uživatele do skupiny sudo (pro administrátorská oprávnění):

sudo usermod -aG sudo NOVYUZIVATEL

Nastavení SSH klíče pro nového uživatele:

sudo mkdir -p /home/NOVYUZIVATEL/.ssh
sudo nano /home/NOVYUZIVATEL/.ssh/authorized_keys

Vložte svůj veřejný SSH klíč do tohoto souboru.

Nastavení správných oprávnění pro SSH soubory:

sudo chmod 700 /home/NOVYUZIVATEL/.ssh
sudo chmod 600 /home/NOVYUZIVATEL/.ssh/authorized_keys
sudo chown -R NOVYUZIVATEL:NOVYUZIVATEL /home/NOVYUZIVATEL/.ssh

Po dokončení těchto kroků se můžete odhlásit a zkusit se přihlásit pomocí nového účtu:

ssh NOVYUZIVATEL@ip_adresa
Jak elegantně zablokovat reklamy a zvýšit bezpečnost celé sítě s Pi-hole
Maltego - komplexní nástroj pro získávání a analýzu informací

Start the conversation