markdown
ufw.md
markdown
# ufw Uncomplicated Firewall. Nadstavba nad [nftables](nftables), která z běžných úkonů dělá jednořádkové příkazy. Pro jednoduchý server je to správná volba — pod podmínkou, že víš, kde přestává platit. ## Základ ```bashufw default deny incomingufw default allow outgoing ufw allow 22/tcpufw allow 80,443/tcp ufw enableufw status verbose``` To je celý firewall pro typický webový server. Proto se ufw používá. ## Užitečné varianty ```bashufw allow from 192.168.1.0/24 # celá síť kamkolivufw allow from 192.168.1.0/24 to any port 22 # síť na konkrétní portufw allow from 10.10.0.0/24 to any port 8006 # Proxmox jen z VPNufw limit 22/tcp # omezení opakovaných pokusůufw deny from 203.0.113.5 # blokace adresyufw allow in on wg0 # celé rozhraní (VPN)``` `ufw limit` je šikovná drobnost — povolí šest spojení za třicet vteřin z jedné adresy a další zahodí. Na SSH vystavené do internetu to výrazně zředí log. ## Mazání ```bashufw status numberedufw delete 3ufw delete allow 8080/tcp # podle pravidla, ne podle čísla``` Po smazání podle čísla se ostatní přečíslují. Když mažeš víc pravidel, jdi odspodu nahoru, nebo je maž podle znění. ## Aplikační profily ```bashufw app listufw allow "Nginx Full"ufw app info "Nginx Full"``` Profily jsou v `/etc/ufw/applications.d/`. Pohodlné, ale skryjí ti, které porty se skutečně otevřely — u `ufw app info` si to ověř. ## Logování ```bashufw logging onufw logging mediumtail -f /var/log/ufw.log``` Úrovně jsou `low`, `medium`, `high`, `full`. `medium` je rozumný kompromis. `full` zaplní disk. ## IPv6 Zkontroluj `/etc/default/ufw`: ```IPV6=yes``` Ve výchozím stavu to zapnuté je, ale u starších instalací a u některých obrazů pro VPS ne. Pak máš IPv4 zajištěnou a IPv6 dokořán. Ověř to takhle: ```bashufw status verbose | grep v6``` ## Kde ufw přestává platit Tohle je důvod, proč tahle stránka existuje. Ufw je pohodlné rozhraní k jedné části netfilteru — ne k celému. **`ufw status` neukazuje cizí pravidla.** Docker, Proxmox, libvirt a další si zapisují vlastní řetězce, o kterých ufw neví a neřekne ti o nich. Jediný způsob, jak vidět pravdu: ```bashnft list rulesetiptables -L -n -v``` Když se ti výstup `ufw status` a `nft list ruleset` výrazně liší, věř tomu druhému. **Docker ufw úplně obchází.** `ufw deny 8080` a `docker run -p 8080:80` znamená, že port **je** veřejně dostupný, ať si ufw říká cokoliv. Je to nejzávažnější věc na téhle stránce a má vlastní stránku: [Docker a firewall](Docker-a-firewall). **Forwarding se nastavuje jinde.** Když chceš, aby stroj směroval provoz (router, VPN brána), samotný `ufw allow` nestačí. Musíš v `/etc/default/ufw` nastavit: ```DEFAULT_FORWARD_POLICY="ACCEPT"``` a povolit forwarding v `/etc/ufw/sysctl.conf`. **Složitější logiku ufw neumí.** Značkování, přesměrování portů, podmíněná pravidla, dynamické množiny. V tu chvíli jdi na [nftables](nftables) a ufw vypni — ne obojí naráz. ## Kdy ufw a kdy ne **Ano:** jednotlivý server s několika službami, VPS, stroj bez kontejnerů, situace, kdy chceš rychle a bez chyb. **Ne:** router nebo VPN brána, hostitel s Dockerem (nebo ano, ale s vědomím omezení a s pravidly v `DOCKER-USER`), cokoliv, co potřebuje NAT. ## Ověření zvenku Ufw ti řekne, co si myslí. Skutečnost ti řekne sken zvenku: ```bashnmap -Pn -p- adresa.serveru``` Pusť to z jiného stroje nebo z mobilu na datech. Viz [nástroje](Nastroje).