Глава 3 · 3.4
Защитна стена с ufw (или nftables)
В мрежата на WebOké целият входящ трафик към Вашия VPS е отворен. Какво да влиза, решавате сами със защитна стена на Вашия сървър. С нея разрешавате само необходимото, например SSH и Вашия уебсайт.
Внимание: Отворете SSH, преди да включите защитната стена. Ако не го направите, ще блокирате собствения си достъп. Ако все пак това се случи, изключете защитната стена през конзолата (вижте Блокиран достъп: не можете да влезете в сървъра си).
ufw на Debian и Ubuntu
ufw е опростен слой над защитната стена на Linux. В Ubuntu той вече е наличен, а в Debian трябва да го инсталирате:
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)
Всичко, което не разрешите, се отказва. Правилата автоматично важат и за IPv6. Портове 80 и 443 са Ви необходими само за уебсайт (глава 5). Ако използвате Caddy с HTTP/3, отворете също sudo ufw allow 443/udp.
Полезни команди за ufw
| Команда | Какво прави? |
|---|---|
sudo ufw status numbered | Показва правилата с номер |
sudo ufw delete 3 | Премахва правило 3 |
sudo ufw allow from 198.51.100.7 to any port 22 proto tcp | Отваря порт само за един IP адрес |
sudo ufw limit OpenSSH | Временно отказва адрес, който започне 6 или повече връзки в рамките на 30 секунди |
sudo ufw disable | Изключва защитната стена (например през конзолата, ако сте блокирали достъпа си) |
Без ufw: nftables
В Debian nftables е защитната стена, която работи във фонов режим. Ако не искате ufw, напишете правилата сами в /etc/nftables.conf. Една малка основа за IPv4 и IPv6 заедно:
#!/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
С nft -c първо проверявате файла. Използвайте ufw или nftables, но не и двете едновременно.
В AlmaLinux и Rocky Linux firewalld вече е наличен: sudo firewall-cmd --permanent --add-service=http --add-service=https и sudo firewall-cmd --reload. Там SSH е отворен по подразбиране.
Съвет: Използвате ли Docker? Портовете, които публикувате с Docker, заобикалят ufw. Затова прочетете Docker и защитната стена: как да публикувате портове безопасно.
