Ответ
В DevOps использую фаервол в двух плоскостях: на уровне ОС (host-based) и на уровне сети. На самих серверах предпочитаю nftables как современную замену iptables.
Базовая политика на сервере с помощью nftables:
Создаю конфигурационный файл /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
define PRIVATE_NETS = { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 }
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Разрешаем established/related соединения
ct state established,related accept
# Разрешаем loopback
iif lo accept
# Разрешаем ICMP (ping)
ip protocol icmp accept
# Разрешаем входящий SSH только из внутренних сетей
tcp dport 22 ip saddr $PRIVATE_NETS accept
# Разрешаем входящие HTTP/HTTPS для веб-сервера
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Активирую и добавляю в автозагрузку: sudo systemctl enable --now nftables.
Для управления в масштабе инфраструктуры:
- Использовал Ansible для распространения единых правил nftables на группы серверов (например, все web-серверы получают правило на порт 80/443, а базы данных — только на 5432 из определенной подсети).
- На облачных серверах (AWS EC2, GCP Compute) правила фаервола на уровне инстансов дублировал Security Groups, что создает два уровня защиты.
- Важно: Всегда сначала добавлял правило для текущей SSH-сессии, чтобы не заблокировать себя, и использовал
nft --checkдля валидации конфига перед применением.