Представь, что твой сервер — это крепость. Без надежных стен и ворот любая угроза может проникнуть внутрь. Firewall в Linux — это и есть твоя система защиты, контролирующая весь входящий и исходящий сетевой трафик. Давай разберем, как правильно настроить этот критически важный компонент безопасности на разных дистрибутивах, включая Astra Linux, Alt Linux и Rocky Linux.
Выбор инструмента: iptables, firewalld или nftables?
В современном Linux существует несколько систем управления firewall. Давай быстро определим, с чем будем работать:
| Инструмент | Описание | Используется в | Сложность |
|---|---|---|---|
iptables |
Классический, проверенный временем инструмент. Работает напрямую с ядром. | Почти все дистрибутивы (базовый уровень) | Средняя/Высокая |
firewalld |
Динамический менеджер с поддержкой зон и сервисов. Удобен для рабочих станций и серверов. | RHEL/CentOS/Rocky Linux, Fedora | Низкая/Средняя |
nftables |
Современная замена iptables с улучшенным синтаксисом и производительностью. | Новые версии Debian, Ubuntu, некоторые сборки | Средняя |
ufw |
Uncomplicated Firewall — упрощенный интерфейс для iptables. | Ubuntu, Debian | Очень низкая |
Базовые принципы настройки firewall в Linux
Прежде чем переходить к конкретным дистрибутивам, усвоим фундаментальные правила:
- Политика по умолчанию (Default Policy): Определяет, что делать с пакетами, не подпадающими ни под одно правило. Рекомендуется:
INPUT DROP,FORWARD DROP. - Цепочки (Chains):
INPUT(входящий трафик),OUTPUT(исходящий),FORWARD(транзитный). - Правила обрабатываются сверху вниз. Первое совпадение — выполнение действия.
- Всегда разрешай loopback-интерфейс (lo):
-i lo -j ACCEPT. - Разрешай установленные соединения:
-m state --state ESTABLISHED,RELATED -j ACCEPT.
Настройка firewall в Rocky Linux (через firewalld)
Rocky Linux, как наследник RHEL, использует firewalld по умолчанию. Это мощный и гибкий инструмент с концепцией зон.
1. Проверка статуса и основных команд
# Проверить, запущен ли firewalld и посмотреть активную зону
sudo systemctl status firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
# Посмотреть все доступные зоны
sudo firewall-cmd --get-zones
# Посмотреть правила активной зоны (обычно 'public')
sudo firewall-cmd --list-all
2. Базовая настройка зоны public для сервера
Допустим, у нас веб-сервер (порт 80, 443) и SSH (порт 22).
# Добавляем службы (сервисы) — firewalld знает стандартные порты
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Или добавляем порты напрямую (если нестандартный порт SSH 2222)
sudo firewall-cmd --permanent --add-port=2222/tcp
# Удаляем службу (пример, если не нужен FTP)
sudo firewall-cmd --permanent --remove-service=ftp
# Блокируем конкретный IP-адрес
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
# Применяем изменения (перезагружаем firewalld)
sudo firewall-cmd --reload
# Проверяем итоговые правила
sudo firewall-cmd --list-all --zone=public
3. Настройка маскировки (NAT) для шлюза
# Включаем masquerading (подмену IP) для зоны external или internal
sudo firewall-cmd --permanent --zone=external --add-masquerade
# Добавляем правило проброса портов (port forwarding)
# Пример: порт 8080 на внешнем интерфейсе -> порт 80 внутреннего сервера 10.0.0.2
sudo firewall-cmd --permanent --zone=external \
--add-forward-port=port=8080:proto=tcp:toport=80:toaddr=10.0.0.2
sudo firewall-cmd --reload
Настройка firewall в Astra Linux и Alt Linux
Эти российские дистрибутивы часто используются в госсекторе и корпоративной среде. Они могут использовать как iptables, так и собственные оболочки. Рассмотрим классический подход с iptables, который работает везде.
1. Сохранение и восстановление правил iptables
# Проверяем текущие правила
sudo iptables -L -n -v
# Сохраняем правила в файл (временные, до перезагрузки)
sudo iptables-save > ~/iptables-backup.txt
# Для постоянного сохранения (зависит от дистрибутива)
# Debian/Ubuntu/Astra (если нет своих утилит):
sudo apt install iptables-persistent
sudo netfilter-persistent save
# RHEL/Rocky/Alt (часть пакета iptables-services):
sudo service iptables save
# или
sudo /sbin/iptables-save > /etc/sysconfig/iptables
2. Пример скрипта настройки базового firewall на iptables
Создадим файл /etc/firewall-setup.sh:
#!/bin/bash
# Сброс всех правил до значений по умолчанию
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Устанавливаем политики по умолчанию (DROP для входящих и транзитных)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешаем localhost (loopback)
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем пакеты от уже установленных соединений
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем SSH (порт 22) с любого адреса. ЗАМЕНИ 22 на свой порт при необходимости!
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешаем HTTP/HTTPS для веб-сервера
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Разрешаем ping (ICMP) - опционально
iptables -A INPUT -p icmp -j ACCEPT
# Логируем запрещенные пакеты (удобно для отладки)
iptables -A INPUT -j LOG --log-prefix "[IPTABLES-DROPPED] "
# Выводим итоговые правила
echo "Firewall rules set:"
iptables -L -n -v
Сделай файл исполняемым и запусти: sudo chmod +x /etc/firewall-setup.sh && sudo /etc/firewall-setup.sh. Этот скрипт — отличная основа для настройки firewall в Alt Linux и других дистрибутивах, где нужен прямой контроль.
3. Блокировка атак и нежелательного трафика
# Защита от SYN-flood атак
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A INPUT -p tcp --syn -j DROP
# Блокировка сканирования портов (попыток множества подключений)
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Запрет доступа с конкретной подсети
iptables -A INPUT -s 192.168.100.0/24 -j DROP
# Ограничение количества соединений с одного IP (для защиты от DoS)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT
Практические сценарии и решение проблем
Сценарий 1: Веб-сервер с доступом только на 80, 443 и SSH с одного IP
# С firewalld (Rocky Linux)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --remove-service=ssh # Удаляем общее правило SSH
sudo firewall-cmd --permanent --add-rich-rule='\
rule family="ipv4" source address="203.0.113.5" service name="ssh" accept'
sudo firewall-cmd --reload
# С iptables (Astra/Alt Linux)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s 203.0.113.5 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP # Все остальные для SSH блокируем
Сценарий 2: Сервер БД (PostgreSQL) с доступом только из внутренней сети
# Firewalld
sudo firewall-cmd --permanent --zone=internal --add-source=10.0.0.0/24
sudo firewall-cmd --permanent --zone=internal --add-service=postgresql
sudo firewall-cmd --permanent --zone=public --remove-service=postgresql
sudo firewall-cmd --reload
# Iptables
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 5432 -j ACCEPT
iptables -A INPUT -p tcp --dport 5432 -j DROP
ss -tlnp или netstat -tlnp)? 3) Не блокирует ли трафик SELinux/AppArmor? 4) Правильно ли настроены правила firewall?
Автоматизация и мониторинг
Настройка firewall в Linux — не разовое действие. Нужно следить за логированием и автоматизировать ответы на угрозы.
Настройка логирования правил iptables
# Логируем все попытки подключения к порту 22 (SSH)
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "[SSH-ATTEMPT] " --log-level 4
# Логируем все дропнутые пакеты
iptables -A INPUT -j LOG --log-prefix "[IPTABLES-DROP] " --log-level 4
# Просмотр логов (обычно в /var/log/kern.log или /var/log/messages)
sudo tail -f /var/log/kern.log | grep IPTABLES
Использование fail2ban для автоматической блокировки атак
# Установка (на примере Debian/Ubuntu/Astra)
sudo apt install fail2ban
# Основной конфиг /etc/fail2ban/jail.local
# Пример настройки для защиты SSH
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
# Запуск и проверка
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd
Часто задаваемые вопросы (FAQ)
Как проверить, не блокирует ли firewall мой порт?
Используй telnet или nc с другого хоста: telnet ваш_сервер 80. Если соединение не устанавливается, проверь правила. Локально проверь командой sudo iptables -L -n | grep :80 или sudo firewall-cmd --list-ports.
Правила сбрасываются после перезагрузки. Как сделать их постоянными?
Для iptables используй iptables-persistent (Debian/Ubuntu) или service iptables save (RHEL). Для firewalld все правила, добавленные с ключом --permanent, сохраняются автоматически. Не забудь сделать firewall-cmd --reload.
Чем отличается политика DROP от REJECT?
DROP просто отбрасывает пакет без ответа (атакующий будет ждать таймаута). REJECT отправляет обратно пакет "destination unreachable". DROP безопаснее (не дает информации), но REJECT удобнее для отладки легитимных служб.
Как полностью отключить firewall в экстренном случае?
Firewalld: sudo systemctl stop firewalld && sudo systemctl disable firewalld. Iptables: sudo iptables -F && sudo iptables -X && sudo iptables -t nat -F && sudo iptables -P INPUT ACCEPT && sudo iptables -P FORWARD ACCEPT && sudo iptables -P OUTPUT ACCEPT. Никогда не оставляй сервер без firewall надолго!
Можно ли настроить firewall через графический интерфейс?
Да. В Astra Linux часто есть центры управления безопасностью. В Rocky Linux с GUI можно использовать firewall-config. Но для серверов и глубокого понимания всегда предпочтительнее командная строка.
Заключение
Настройка firewall — краеугольный камень безопасности любого Linux-сервера или рабочей станции. Независимо от того, работаешь ты с Rocky Linux и его firewalld, или настраиваешь firewall в Astra Linux через классические iptables, принципы остаются общими: минимальные необходимые разрешения, логирование и регулярный аудит.
Начни с простой конфигурации, протестируй её, убедись, что все необходимые службы работают, а затем постепенно добавляй правила для конкретных сценариев. Используй инструменты вроде fail2ban для автоматизации защиты. Помни: грамотно настроенный firewall не должен мешать работе, но должен быть непреодолимой преградой для несанкционированного доступа.