Для мониторинга и обеспечения безопасности FirewallD На сервере Linux проверьте его состояние, установите базовый уровень минимальных привилегий для зон и служб, включите логирование отклоненных пакетов и автоматизируйте оповещения и блокировки с помощью таких инструментов, как Fail2Ban. Используйте firewall-cmd для отображения, аудита и усиления правил, а затем постоянно просматривайте журналы и обновляйте политики в соответствии с меняющимися угрозами.
В средах серверов Linux FirewallD — это первая линия защиты ваших приложений, доступных извне. В этом руководстве вы узнаете, как отслеживать активность FirewallD, проверять правила и повышать уровень безопасности конфигураций с помощью практических команд и безопасных рабочих процессов. Мы рассмотрим ведение журналов, расширенные правила, ограничение скорости запросов, интеграцию с Fail2Ban и поддержание безопасности на постоянном уровне.
Что такое FirewallD и почему это важно??
FirewallD — это динамический межсетевой экран для хостов, который manageсеть Правила применяются через зоны и службы. В современных версиях RHEL, Rocky, AlmaLinux и Fedora используется следующий подход: бэкэнд nftablesЭто позволяет изменять политики без разрыва соединений, что делает его идеальным решением для производственных серверов, требующих непрерывной работы и надежной безопасности.
Ключевые понятия: Зоны, Сервисы, Время выполнения и Постоянное состояние
Зоны группируют интерфейсы и источники по уровню доверия (например, общедоступный, внутренний, доверенный). Сервисы представляют собой предопределенные наборы правил (например, ssh, http, https), сопоставленные с портами и протоколами.
- Время: Изменения вступают в силу немедленно; теряются при перезагрузке или повторном запуске, если не сохранены.
- постоянный: Сохранено на диск; применяется при перезагрузке.
- Лучшая практика: Создайте постоянную сборку, протестируйте во время выполнения, а затем перезагрузите для сохранения результатов.
Предварительные условия и процедура безопасной смены обстановки
- Иметь доступ к консоли или внеполосный доступ manageперед изменением SSH правила.
- Узнайте свою зону по умолчанию и активные интерфейсы.
- Добавьте в белый список IP-адреса администратора для SSH прежде чем ужесточать политику.
- Запланируйте период технического обслуживания для переустановки критически важных систем.
Проверьте состояние и базовые параметры FirewallD.
Начните с подтверждения. FirewallD установлен.Укажите, какая зона активна и какая используется. Это задаёт базовый уровень мониторинга и предотвращает случайные блокировки.
sudo systemctl status firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-allЕсли вы используете дистрибутив, в котором по умолчанию используется другой брандмауэр (например, UFW в Ubuntu), используйте только одну службу брандмауэра за раз, чтобы избежать конфликтов.
Создайте надежную базовую политику.
Ваша цель — принцип минимальных привилегий: разрешать серверу только то, что ему необходимо. Для типичного веб-сервера это означает следующее: SSH для доступа администратора и HTTP/HTTPS для посетителей.
Установите зону по умолчанию и разрешите необходимые службы.
# Set default zone to "public" and allow core services
sudo firewall-cmd --permanent --set-default-zone=public
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
# Optional: open a specific port (e.g., PostgreSQL 5432)
sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
# Apply changes
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-allКарантин SSH к известным IP-адресам (рекомендуется)
Ограничивая SSH Использование IP-адресов источников значительно снижает вероятность ошибок при переборе паролей. риск. Используйте сложные правила, чтобы разрешить SSH только с проверенных адресов.
# Allow SSH only from admin IPs
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv6 source address=2001:db8::/64 service name="ssh" accept'
# Optionally drop SSH for everyone else (place after accepts)
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule service name="ssh" drop'
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rulesОтслеживание активности и журналов FirewallD
Включить логирование для отклоненных пакетов
Включите запись в журнал отказов, чтобы видеть отклоненный трафик. Это необходимо для мониторинга, оповещения и реагирования на инциденты.
# Enable logging (options: off, all, unicast, broadcast, multicast)
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --get-log-denied
# Tail recent firewall logs
sudo journalctl -u firewalld -fЭффективное чтение и фильтрация журналов
FirewallD записывает данные в systemd-journald. Используйте journalctl для запроса временных диапазонов или grep для анализа без лишнего шума.
# Last hour of FirewallD logs
sudo journalctl -u firewalld --since "1 hour ago"
# Kernel-level drops (network stack)
sudo journalctl -k | grep -i "IN="
# Summarize hits for a specific port (e.g., SSH)
sudo journalctl -k | grep -i "DPT=22" | awk '{print $NF}' | sort | uniq -c | sort -nr | headВ RHEL 8+/Rocky/AlmaLinux/Fedora FirewallD использует nftables. Избегайте прямого редактирования правил nft; manage правила с помощью firewall-cmd для обеспечения согласованности конфигурации.
Автоматические оповещения и блокировки с помощью Fail2Ban
Fail2Ban считывает журналы работы сервиса (например, SSH (использует FirewallD для автоматической блокировки IP-адресов, используемых злоумышленниками). Это проверенный способ уменьшить количество попыток перебора паролей и защитить ресурсы сервера.
# Install fail2ban (RHEL/Rocky/AlmaLinux/Fedora)
sudo dnf install -y fail2ban
# Basic jail for SSH using FirewallD rich rules
sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = firewallcmd-rich-rules
[sshd]
enabled = true
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdМониторинг запретов с помощью fail2ban-client status sshdЕсли вы используете несколько сервисов (Postfix, Dovecot, Nginx), Включите их блокировки и используйте banaction = firewallcmd-rich-rules для обеспечения согласованной работы FirewallD. правоприменение.
Расширенная защита с помощью сложных правил
Ограничение скорости SSH чтобы сбросить грубую силу
Ограничение скорости дополняет Fail2Ban. Следующее правило разрешает до 10 подключений в минуту. SSH; лишние попытки отбрасываются. Настройте под свои условия и законные модели использования.
# Rate-limit SSH globally
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="10/m" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" drop'
sudo firewall-cmd --reloadБлокировка заведомо вредоносных IP-адресов и подсетей
# Block a single IPv4 address
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=198.51.100.23 drop'
# Block an IPv4 subnet
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=198.51.100.0/24 drop'
# Block an IPv6 subnet
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv6 source address=2001:db8:bad::/48 drop'
sudo firewall-cmd --reloadРежим паники и режим блокировки
В режиме паники весь входящий и исходящий трафик немедленно блокируется — это полезно во время инцидентов. В режиме блокировки ограничивается возможность изменения настроек брандмауэра локальными приложениями, что снижает риск несанкционированного доступа.
# Panic mode (emergency only)
sudo firewall-cmd --panic-on
sudo firewall-cmd --panic-off
# Lockdown mode
sudo firewall-cmd --lockdown-on
sudo firewall-cmd --lockdown-off
# Manage lockdown whitelist (XML or firewall-cmd helpers on newer versions)
# /etc/firewalld/lockdown-whitelist.xmlТекущее техническое обслуживание и аудит
- Регулярно проверяйте правила:
firewall-cmd --list-allи--list-rich-rules. - Преобразовать протестированные изменения во время выполнения в постоянные:
firewall-cmd --runtime-to-permanent. - Проверка конфигурационных файлов после внесения изменений:
firewall-cmd --check-config. - Создайте резервную копию конфигураций FirewallD из
/etc/firewalld/. - Для предотвращения несоответствия правил необходимо согласовать действия с облачными межсетевыми экранами (группами безопасности AWS, группами безопасности Azure, межсетевым экраном VPC GCP).
- Еженедельно проверяйте журналы событий; ужесточайте правила на основе анализа тенденций отклоненного трафика.
Распространенные ошибки, которых следует избегать
- Использование iptables-services совместно с FirewallD приводит к конфликтам. Выберите один из вариантов.
- Редактирование nftables напрямую, без использования firewall-cmd.
- Открытие портов на постоянной основе без указания цели и владельца.
- Забыли перезагрузить страницу после внесения необратимых изменений.
- Внесение в белый список 0.0.0.0/0 для SSHВсегда ограничивайте доступ или используйте VPN/бастион.
- Отключение режима запрета логирования не помогает; вы не можете отслеживать то, что не регистрируете в логах.
Пример из реальной жизни: защита веб-сервера за считанные минуты.
# 1) Confirm status and active zones
sudo systemctl is-active firewalld && sudo firewall-cmd --get-active-zones
# 2) Allow only SSH (restricted), HTTP, HTTPS
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule service name="ssh" drop'
# 3) Enable denied logging and rate-limit SSH
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="10/m" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" drop'
# 4) Apply and verify
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
# 5) Watch logs
sudo journalctl -u firewalld -fЧасто задаваемые вопросы
1. Как проверить, запущен ли FirewallD?
Использование: systemctl status firewalld и firewall-cmd --stateЕсли он неактивен, запустите sudo systemctl enable --now firewalldЗатем проверьте зоны и правила с помощью firewall-cmd --get-active-zones и --list-all.
2. Как включить логирование отклоненных пакетов в FirewallD?
Run sudo firewall-cmd --set-log-denied=all Для регистрации всех отклоненных пакетов. Просмотр журналов с помощью journalctl -u firewalld or journalctl -k. Вы можете переключиться на unicast, broadcast или multicast для уменьшения шума.
3. В чём разница между runtime и permanent в FirewallD?
Изменения, вносимые во время выполнения, являются мгновенными, но временными; они исчезают после перезагрузки или повторной загрузки системы. Постоянные изменения сохраняются на диск и применяются после перезагрузки. firewall-cmd --reloadПреобразуйте изменения, внесенные во время выполнения, с помощью firewall-cmd --runtime-to-permanent.
4. Как мне разрешить SSH с одного IP-адреса?
Используйте расширенное правило: sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept' последующей sudo firewall-cmd --reloadПри желании можно добавить правило сброса для всех остальных случаев. SSH попытки.
5. FirewallD лучше, чем iptables, для серверов?
Для большинства современных серверов Linux — да. FirewallD обеспечивает динамическое обновление правил, зон и абстракций служб, а в современных дистрибутивах использует nftables. Его проще безопасно поддерживать в производственной среде, чем управлять правилами iptables напрямую.