Kapitola 3 · 3.4
Firewall s ufw (nebo nftables)
V síti WebOké je veškerý příchozí provoz na Váš VPS otevřený. O tom, co projde dovnitř, rozhodujete sami pomocí firewallu na svém serveru. Díky němu povolíte jen to, co je potřeba, například SSH a Váš web.
Pozor: Než firewall zapnete, povolte SSH. Pokud to neuděláte, zablokujete si přístup sami sobě. Pokud se to přesto stane, vypněte firewall přes konzoli (viz Zablokovaný přístup: nedostanete se na svůj server).
ufw na Debianu a Ubuntu
ufw je jednoduchá vrstva nad firewallem Linuxu. Na Ubuntu je už nainstalovaný, na Debianu si ho nainstalujete:
anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw allow OpenSSH
anna@web1:~$ sudo ufw allow 80,443/tcp
anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
anna@web1:~$ sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80,443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80,443/tcp (v6) ALLOW IN Anywhere (v6)
Vše, co nepovolíte, bude odmítnuto. Pravidla platí automaticky i pro IPv6. Porty 80 a 443 potřebujete jen pro web (kapitola 5). Pokud používáte Caddy s HTTP/3, povolte také sudo ufw allow 443/udp.
Užitečné příkazy ufw
| Příkaz | Co dělá? |
|---|---|
sudo ufw status numbered | Zobrazí pravidla s čísly |
sudo ufw delete 3 | Odstraní pravidlo 3 |
sudo ufw allow from 198.51.100.7 to any port 22 proto tcp | Otevře port jen pro jednu IP adresu |
sudo ufw limit OpenSSH | Dočasně odmítne adresu, která během 30 sekund zahájí 6 nebo více spojení |
sudo ufw disable | Vypne firewall (například přes konzoli, pokud jste si zablokovali přístup) |
Bez ufw: nftables
Na Debianu je nftables firewallem, který běží pod kapotou. Pokud nechcete ufw, napíšete si pravidla sami do /etc/nftables.conf. Malý základ pro IPv4 a IPv6 zároveň:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif "lo" accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport { 22, 80, 443 } accept
}
}
anna@web1:~$ sudo nft -c -f /etc/nftables.conf
anna@web1:~$ sudo systemctl enable --now nftables
Pomocí nft -c soubor nejprve zkontrolujete. Používejte ufw, nebo nftables, ne obojí současně.
Na AlmaLinux a Rocky Linux je už nainstalovaný firewalld: sudo firewall-cmd --permanent --add-service=http --add-service=https a sudo firewall-cmd --reload. SSH je tam ve výchozím stavu povolené.
Tip: Používáte Docker? Porty, které publikujete pomocí Dockeru, obcházejí ufw. Přečtěte si proto Docker a firewall: jak bezpečně publikovat porty.
