Настройка firewall на VPS через nftables
nftables — стандартный firewall на современных Linux (Debian 10+/Ubuntu 20.04+/RHEL 8+). Заменяет iptables. Этот гайд — минимальный набор правил для веб-сервера, чтобы вы не заблокировали сами себя.
Проверка текущего состояния
systemctl status nftables
nft list rulesetЕсли правил нет — начнём с чистого листа. Если есть — сохраните бэкап: nft list ruleset > /root/nftables-backup.conf.
Первый шаг: страховка от блокировки
Перед применением любых правил с policy drop откройте вторую SSH-сессию и запустите таймаут:
echo 'sleep 300 && nft flush ruleset' | at nowЧерез 5 минут правила сбросятся автоматически. Если что-то пошло не так — просто ждите, доступ восстановится.
Минимальный конфиг
Создайте /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
iif lo accept
ct state established,related accept
ct state invalid drop
ip protocol icmp accept
ip6 nexthdr ipv6-icmp accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority filter; policy drop;
}
chain output {
type filter hook output priority filter; policy accept;
}
}Проверка и активация
nft -c -f /etc/nftables.conf # проверка синтаксиса
nft -f /etc/nftables.conf # применение
nft list ruleset # что получилось
systemctl enable --now nftables # persistentЕсли SSH не оборвался — снимите таймаут-скрипт: atrm <job-id> (atq покажет список).
Rate-limit на SSH — против брута
Добавьте в chain input перед общим tcp dport 22 accept:
tcp dport 22 ct state new limit rate 5/minute burst 5 packets accept
tcp dport 22 dropБольше 5 попыток в минуту с одного IP — блок.
Открыть дополнительный порт
Например, WireGuard на UDP 51820:
udp dport 51820 accept