Настройка Firewall Linux: Astra, Alt, Rocky - Пошаговая инструкция | AdminWiki

Настройка Firewall в Linux: Полное руководство для Astra, Alt и Rocky Linux

17 декабря 2025 10 мин. чтения #alt linux #astra linux #firewalld #iptables #linux firewall #nftables #rocky linux #безопасность #брандмауэр #настройка firewall

Представь, что твой сервер — это крепость. Без надежных стен и ворот любая угроза может проникнуть внутрь. Firewall в Linux — это и есть твоя система защиты, контролирующая весь входящий и исходящий сетевой трафик. Давай разберем, как правильно настроить этот критически важный компонент безопасности на разных дистрибутивах, включая Astra Linux, Alt Linux и Rocky Linux.

Важно: Все операции с firewall требуют прав суперпользователя (root). Перед внесением изменений всегда проверяй текущие правила и имей план отката.

Выбор инструмента: 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.
Осторожно! При настройке правил через SSH добавь правило разрешения твоего подключения ПЕРВЫМ, иначе можешь потерять доступ к серверу.

Настройка firewall в Rocky Linux (через firewalld)

Rocky Linux, как наследник RHEL, использует firewalld по умолчанию. Это мощный и гибкий инструмент с концепцией зон.

1. Проверка статуса и основных команд

bash
# Проверить, запущен ли 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).

bash
# Добавляем службы (сервисы) — 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) для шлюза

bash
# Включаем 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

bash
# Проверяем текущие правила
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:

bash
#!/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. Блокировка атак и нежелательного трафика

bash
# Защита от 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

bash
# С 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) с доступом только из внутренней сети

bash
# 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
Отладка: Если служба недоступна, проверь: 1) Работает ли сама служба? 2) Слушает ли она на нужном порту (ss -tlnp или netstat -tlnp)? 3) Не блокирует ли трафик SELinux/AppArmor? 4) Правильно ли настроены правила firewall?

Автоматизация и мониторинг

Настройка firewall в Linux — не разовое действие. Нужно следить за логированием и автоматизировать ответы на угрозы.

Настройка логирования правил iptables

bash
# Логируем все попытки подключения к порту 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 для автоматической блокировки атак

bash
# Установка (на примере 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 не должен мешать работе, но должен быть непреодолимой преградой для несанкционированного доступа.

Следующий шаг: Освоив базовую настройку, изучи расширенные темы: настройку DMZ-зон, интеграцию с IPS/IDS системами (например, Suricata), и управление правилами через системы конфигурации (Ansible, Puppet) для масштабирования на множество серверов.
Поделиться:
Сохранить гайд? В закладки браузера