Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Настройка файрвола на Linux: от основ до практики
Настройка файрвола (Firewall) на Linux является фундаментальным навыком DevOps-инженера, обеспечивающим безопасность и управление сетевым трафиком. В современных дистрибутивах основными инструментами являются iptables/nftables (низкоуровневые механизмы ядра) и их фронтенды — firewalld и ufw. Рассмотрим основные подходы.
Выбор инструментария
- iptables — классический, мощный, но сложный в конфигурировании напрямую. Основной инструмент для старых систем и тонкой настройки.
- nftables — современная замена iptables, объединяющая функциональность iptables, ip6tables, arptables и ebtables в единый фреймворк с улучшенным синтаксисом и производительностью. Постепенно становится стандартом.
- firewalld — динамический менеджер с поддержкой зон и сервисов, используемый по умолчанию в RHEL, CentOS, Fedora.
- ufw (Uncomplicated Firewall) — упрощённый фронтенд для iptables, популярный в Ubuntu/Debian.
Практическая настройка на примере firewalld и ufw
1. Использование firewalld (RHEL/CentOS/Fedora)
Firewalld оперирует понятиями зон (для разных уровней доверия) и сервисов (предопределённых наборов портов).
Базовая проверка и управление:
# Проверить статус и активную зону
sudo systemctl status firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
# Добавить разрешение для HTTP (порта 80) и HTTPS (443) на постоянной основе
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Или добавить порт напрямую
sudo firewall-cmd --permanent --add-port=8080/tcp
# Удалить правило
sudo firewall-cmd --permanent --remove-service=ssh
# Применить изменения (после --permanent обязательно!)
sudo firewall-cmd --reload
# Богатая фильтрация по источнику (source)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
2. Использование ufw (Ubuntu/Debian)
Базовая настройка:
# Включить ufw (после предварительной настройки SSH!)
sudo ufw enable
# Разрешить входящие подключения по SSH и HTTP
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow proto tcp from any to any port 443
# Разрешить подключения с конкретной подсети
sudo ufw allow from 10.0.0.0/24 to any port 22
# Запретить порт
sudo ufw deny 23/tcp
# Включить логирование
sudo ufw logging on
# Просмотреть правила с номерами
sudo ufw status numbered
# Удалить правило по номеру
sudo ufw delete 2
Прямая работа с nftables (современный стандарт)
Для сложных сценариев предпочтительнее использовать nftables. Конфигурация хранится в /etc/nftables.conf.
Пример настройки базовых правил:
# Создать таблицу и цепочку
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0\; policy drop\; }
# Добавить правила: разрешить установленные соединения, SSH и HTTP
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input tcp dport 22 accept
sudo nft add rule inet filter input tcp dport {80, 443} accept
sudo nft add rule inet filter input iif lo accept # Разрешить loopback
# Сохранить конфигурацию
sudo nft list ruleset > /etc/nftables.conf
Ключевые принципы и best practices для DevOps
- Принцип наименьших привилегий: Открывайте только необходимые порты для конкретных источников.
- Правило "Deny by default": Политика по умолчанию для входящих соединений должна быть
DROPилиREJECT. - Сохраняемость конфигурации: Всегда проверяйте, что правила сохраняются после перезагрузки (
--permanentв firewalld,ufw enable, сохранение/etc/nftables.conf). - Безопасность SSH: Меняйте порт по умолчанию (22) и/или ограничивайте доступ по IP. Никогда не блокируйте свой текущий SSH-сеанс!
# Опасное правило! Сначала добавьте правило для вашего IP, затем меняйте политику. sudo ufw allow from <YOUR_IP> to any port 22 - Логирование: Настройте логирование отброшенных пакетов для мониторинга атак (
sudo ufw logging mediumилиnftправила с логированием). - Инфраструктура как код: Храните конфигурации файрвола в репозитории (Ansible, Terraform, готовые файлы конфигов). Например, в Ansible используйте модули
ufw,firewalldили шаблоны для nftables. - Сегментация сети: Используйте разные зоны firewalld или отдельные цепочки nftables для фронтенда, бэкенда и баз данных.
Интеграция с CI/CD и оркестрацией
В DevOps-практике настройка файрвола редко делается вручную. Чаще используются:
- Образы облачных провайдеров с предустановленными security groups.
- Terraform для декларативного управления cloud firewall rules (AWS Security Groups, GCP Firewall Rules).
- Ansible/Puppet/Chef для конфигурации файрвола на виртуальных машинах.
- Kubernetes Network Policies для изоляции трафика между подами внутри кластера, что дополняет, но не заменяет хост-файрвол.
Вывод: Выбор инструмента зависит от дистрибутива и сложности задачи. Для большинства серверов достаточно ufw или firewalld. Для маршрутизаторов, шлюзов и высоконагруженных систем изучайте nftables. Главное — понимать сетевую модель Linux и применять правила последовательно, всегда тестируя доступность критичных сервисов после изменений.