Найти в Дзене

Debian 12, настройка Firewall

В Debian 12 для управления фаерволом используется nftables — это современная замена iptables, которая идёт «из коробки». Именно его и разберём. Но сначала разберем что вообще работает на серваке Есть несколько способов проверить, какой фаервол активен в системе: systemctl status firewalld # firewalld (используется в RHEL/CentOS/Fedora)
systemctl status nftables # nftables
systemctl status iptables # iptables
systemctl status ufw # ufw (используется в Ubuntu/Debian) Активный будет иметь статус active (running), остальные — inactive или not found. systemctl is-active firewalld nftables iptables ufw 2>/dev/null nft list ruleset 2>/dev/null # если что-то выведет — nftables работает
iptables -L 2>/dev/null # если есть правила — iptables
ufw status 2>/dev/null # ufw
firewall-cmd --state 2>/dev/null # firewalld which nft iptables ufw firewall-cmd 2>/dev/null Ubuntu/Debian — как правило ufw (поверх iptables или nftables)
RHEL/CentOS/Fedor
Оглавление

В Debian 12 для управления фаерволом используется nftables — это современная замена iptables, которая идёт «из коробки». Именно его и разберём.

Но сначала разберем что вообще работает на серваке

Есть несколько способов проверить, какой фаервол активен в системе:

Проверить запущенные сервисы

systemctl status firewalld # firewalld (используется в RHEL/CentOS/Fedora)
systemctl status nftables # nftables
systemctl status iptables # iptables
systemctl status ufw # ufw (используется в Ubuntu/Debian)

Активный будет иметь статус active (running), остальные — inactive или not found.

Быстрая проверка одной командой

systemctl is-active firewalld nftables iptables ufw 2>/dev/null

Посмотреть загруженные правила

nft list ruleset 2>/dev/null # если что-то выведет — nftables работает
iptables -L 2>/dev/null # если есть правила — iptables
ufw status 2>/dev/null # ufw
firewall-cmd --state 2>/dev/null # firewalld

Проверить, что вообще установлено

which nft iptables ufw firewall-cmd 2>/dev/null

Что обычно используется на разных дистрибутивах

Ubuntu/Debian — как правило ufw (поверх iptables или nftables)
RHEL/CentOS/Fedora — firewalld
Arch Linux — чаще всего чистый nftables
Debian серверный — нередко голый nftables или iptables

Главный признак: active (running) в systemctl — тот и работает. Иногда могут быть активны несколько одновременно, например ufw поверх nftables — в таком случае управлять лучше через верхний уровень (ufw), а не напрямую через nft.

Приступим. Настройка nftables

nftables использует таблицы (tables) → цепочки (chains) → правила (rules). Конфиг можно писать как скриптом на bash, так и напрямую в /etc/nftables.conf.

Пример скрипта для типичного веб-сервера

Создайте файл, например /etc/firewall.sh:

nano /etc/firewall.sh

Копипастим туда

#!/bin/bash

# Очищаем все текущие правила
nft flush ruleset

# Создаём таблицу для IPv4
nft add table inet filter

# --- Цепочка для входящего трафика ---
nft add chain inet filter input \
{ type filter hook input priority 0 \; policy drop \; }

# Разрешаем loopback (локальный интерфейс)
nft add rule inet filter input iif lo accept

# Разрешаем уже установленные и связанные соединения
nft add rule inet filter input ct state established,related accept

# Разрешаем ICMP (ping)
nft add rule inet filter input ip protocol icmp accept

# Разрешаем SSH (порт 22)
nft add rule inet filter input tcp dport 22 accept

# Разрешаем HTTP и HTTPS
nft add rule inet filter input tcp dport { 80, 443 } accept

# --- Цепочка для форвардинга ---
nft add chain inet filter forward \
{ type filter hook forward priority 0 \; policy drop \; }

# --- Цепочка для исходящего трафика ---
nft add chain inet filter output \
{ type filter hook output priority 0 \; policy accept \; }
# Сохраняем текущие правила
nft list ruleset > /etc/nftables.conf

Делаем файл исполняемым и запускаем:

chmod +x /etc/firewall.sh
bash /etc/firewall.sh

Проверяем что получилось:

nft list ruleset

Сохранение правил после перезагрузки

Лучший способ — сохранить правила в стандартный конфиг и включить сервис:

# Сохраняем текущие правила
nft list ruleset > /etc/nftables.conf

# Включаем автозапуск
systemctl enable --now nftables

Защита SSH от брутфорса

Это очень полезное дополнение к скрипту — ограничиваем количество попыток подключения:

# Создаём таблицу для счётчиков
nft add table inet dos_protection
nft add chain inet dos_protection input \
{ type filter hook input priority -1 \; }

# Не более 3 новых SSH-подключений в минуту с одного IP
nft add rule inet dos_protection input \
tcp dport 22 ct state new \
limit rate over 3/minute \
drop

Полезные команды для работы с nftables

# Посмотреть все правила

nft list ruleset

# Удалить все правила

nft flush ruleset

# Перезагрузить из конфига

systemctl restart nftables

# Добавить правило на лету (без скрипта)

nft add rule inet filter input tcp dport 8080 accept

# Удалить конкретное правило по handle-номеру

nft list ruleset -a # смотрим handle номер
nft delete rule inet filter input handle 5

Важные моменты

Всегда сначала разрешайте SSH прежде чем поставить policy drop на входящие — иначе отрежете себя от сервера. Если работаете удалённо, можно добавить временный таймер на сброс: echo "nft flush ruleset" | at now + 2 minutes — если что-то пошло не так, через 2 минуты правила сбросятся сами.