Firewall в Linux: настройка nftables и firewalld

0
14
Обложка статьи: Firewall в Linux: настройка nftables и firewalld

Firewall на Linux-сервере должен разрешать только нужные порты и запрещать остальное. Выбор инструмента зависит от дистрибутива, суть настройки одна и та же. Главная опасность: закрыть порт SSH и потерять доступ.

Какой инструмент выбрать

Инструмент Где используется Когда выбирать
firewalld RHEL, Rocky, AlmaLinux, Fedora Зоны и сервисы, правила меняются на лету
nftables Debian, Ubuntu, любой дистрибутив Один файл правил, полный контроль
ufw Ubuntu Простой фасад для небольших серверов

Не включайте два менеджера одновременно: они перезаписывают правила друг друга. iptables в современных дистрибутивах обычно уже работает поверх nftables.

firewalld: открыть порт

systemctl enable --now firewalld
firewall-cmd --get-active-zones
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-all

Флаг --permanent пишет правило в конфигурацию, а --reload применяет. Без него правило пропадёт после перезагрузки.

Ограничить SSH адресом администратора:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" accept'
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

Сначала добавьте правило для своего адреса и проверьте его в отдельной сессии, и только потом убирайте общий доступ.

nftables: минимальный набор правил

Файл /etc/nftables.conf:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    iif lo accept
    ct state established,related accept
    ct state invalid drop
    ip protocol icmp accept
    ip6 nexthdr icmpv6 accept
    tcp dport { 22, 443 } accept
  }
  chain forward {
    type filter hook forward priority 0; policy drop;
  }
  chain output {
    type filter hook output priority 0; policy accept;
  }
}
nft -c -f /etc/nftables.conf     # проверка синтаксиса без применения
systemctl enable --now nftables
nft list ruleset

Если сервер управляется по SSH, перед применением запланируйте откат: (sleep 120; nft flush ruleset) &. Если связь сохранилась, завершите фоновую задачу, если нет — через две минуты правила сбросятся.

Docker и firewall

Docker сам добавляет правила публикации портов и обходит правила ufw/firewalld для опубликованных контейнеров. Не публикуйте порты баз данных на 0.0.0.0. Привязывайте их к 127.0.0.1: -p 127.0.0.1:5432:5432.

Как проверить

ss -tulpn                       # что слушает сервер
nft list ruleset                # или firewall-cmd --list-all
nmap -Pn -p- SERVER_IP          # снаружи, с другой машины

Снаружи должны быть видны только разрешённые порты. Как читать вывод сканера: Nmap: сканирование сети и разбор вывода, состояния портов. Общий порядок защиты нового сервера: hardening Linux.

Оставьте свой ответ