Firewall UFW na Ubuntu: pravidla, porty a časté chyby
Praktický návod k UFW: výchozí politiky, povolení SSH a webu, omezení podle IP, mazání pravidel, logování a pozor na Docker, který UFW obchází.
UFW (Uncomplicated Firewall) je na Ubuntu nejjednodušší způsob, jak řídit, které porty jsou dostupné z internetu. Pod kapotou generuje pravidla pro netfilter (na Ubuntu 24.04 přes iptables-nft), ale vy pracujete s čitelnými příkazy. Ukážeme si bezpečný postup i nejčastější pasti.
Instalace a výchozí politika
Na Ubuntu je UFW obvykle předinstalovaný. Pokud ne:
sudo apt install ufw
Rozumný výchozí stav je: příchozí provoz zakázat, odchozí povolit.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Nejdřív SSH, pak zapnout
Nejčastější chyba: zapnete firewall a odříznete se od serveru. Proto vždy nejdřív povolte SSH:
sudo ufw allow OpenSSH
# nebo pokud SSH běží na jiném portu:
sudo ufw allow 2222/tcp
Teprve potom:
sudo ufw enable
sudo ufw status verbose
Povolení webových a dalších služeb
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Nebo použijte aplikační profily, které přidávají balíčky do /etc/ufw/applications.d/:
sudo ufw app list
sudo ufw allow 'Nginx Full' # porty 80 a 443
Pro HTTP/3 (QUIC) je potřeba povolit i UDP: sudo ufw allow 443/udp.
Rozsah portů (třeba pro herní server):
sudo ufw allow 27015:27030/udp
U rozsahu musíte vždy uvést protokol.
Pravidla jen pro konkrétní IP
Databázi nebo administraci nikdy neotevírejte celému světu. Povolte jen svou IP nebo interní síť:
sudo ufw allow from 198.51.100.25 to any port 22 proto tcp
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
Blokace konkrétní adresy:
sudo ufw insert 1 deny from 192.0.2.66
Proč insert 1? UFW vyhodnocuje pravidla shora dolů a použije první shodu. Pokud by deny bylo až za obecným allow 80/tcp, nikdy by se neuplatnilo.
Ochrana proti hrubé síle: limit
sudo ufw limit OpenSSH
Pravidlo limit zablokuje IP, která se během 30 sekund pokusí o 6 a více spojení. Je to jednoduchá ochrana; propracovanější řešení nabízí fail2ban.
Výpis a mazání pravidel
sudo ufw status numbered
Výstup vypadá zhruba takto:
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Smazání podle čísla:
sudo ufw delete 2
Nebo podle původního zápisu: sudo ufw delete allow 80/tcp. Pozor: po smazání se čísla posunou, takže při mazání více pravidel postupujte od nejvyššího čísla.
Logování
sudo ufw logging low
Zablokované pakety pak najdete v /var/log/ufw.log (případně přes journalctl -k | grep UFW). Úroveň medium a vyšší generuje hodně záznamů – na malém VPS hlídejte místo na disku.
Pozor na Docker
Docker zapisuje vlastní pravidla do netfilteru, která se vyhodnocují před pravidly UFW. Pokud spustíte kontejner s -p 5432:5432, port bude dostupný z internetu, i když ho UFW „blokuje“.
Řešení:
- publikujte porty jen na localhost:
-p 127.0.0.1:5432:5432(vdocker-compose.ymljako"127.0.0.1:5432:5432"), - před kontejnery dejte reverzní proxy (nginx) a ven otevřete jen 80/443,
- pro filtrování provozu ke kontejnerům použijte řetězec
DOCKER-USER.
Ověření zvenku je nejspolehlivější – z jiného stroje spusťte nmap -p 5432 203.0.113.10.
IPv6
Pokud má server IPv6 adresu, ujistěte se, že v /etc/default/ufw je IPV6=yes (výchozí). Jinak by pravidla platila jen pro IPv4 a služby by byly přes IPv6 otevřené.
Rychlý tahák
| Úkol | Příkaz |
|---|---|
| Stav | sudo ufw status verbose |
| Povolit port | sudo ufw allow 443/tcp |
| Povolit z IP | sudo ufw allow from 1.2.3.4 to any port 22 |
| Smazat pravidlo | sudo ufw delete <číslo> |
| Dočasně vypnout | sudo ufw disable |
| Reset všeho | sudo ufw reset |
Firewall je první vrstva. Doplňte ho vypnutými hesly u SSH a pravidelnými aktualizacemi.