Документация
VPS

Настройка firewall на VPS через nftables

Минимальный набор правил nftables для веб-сервера. Без блокировки самого себя.

6 мин

Настройка 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

Что дальше