Русский (Russian)

Настройка firewalld на VPS с AlmaLinux и Rocky Linux

2 min
VPS/VDS-хостинг

firewalld это менеджер межсетевого экрана по умолчанию в AlmaLinux 9 и Rocky Linux 9. На вашем VPS Linux Infrawire он позволяет открыть только нужные службы, ограничить SSH вашим IP и перенаправлять порты, не трогая правила nftables вручную.

Главный риск оборвать собственную SSH-сессию. Руководство построено вокруг этого: любое рискованное изменение сначала проверяется в конфигурации runtime и только потом делается постоянным.

📋 Требования

  • VPS с AlmaLinux 9 или Rocky Linux 9
  • Доступ по SSH под root (IP и пароль root есть в вашем личном кабинете)
  • Вторая SSH-сессия, которую нужно держать открытой во время правки правил

1. Установка и запуск firewalld

Bash
dnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state

Последняя команда должна вывести running. Зона по умолчанию public: она уже разрешает SSH, Cockpit и клиент DHCPv6, а остальные входящие соединения отбрасывает.

2. Зоны, службы и порты

Зона это набор правил, применяемый к интерфейсу. Служба это именованная группа портов (ssh это 22/tcp, http это 80/tcp, https это 443/tcp).

Bash
firewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20

Есть две конфигурации. Runtime действует сразу и исчезает после перезагрузки правил или системы. Постоянная (--permanent) хранится на диске, но вступает в силу только после firewall-cmd --reload.

3. Открытие служб и портов

Bash
# Службы firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Свой порт firewall-cmd --permanent --add-port=8080/tcp # Диапазон портов firewall-cmd --permanent --add-port=30000-30100/udp # Применить постоянную конфигурацию firewall-cmd --reload

Чтобы что-то закрыть, используйте соответствующую опцию --remove-service или --remove-port. Уберите службу cockpit, если не пользуетесь веб-консолью: firewall-cmd --permanent --remove-service=cockpit.

4. SSH только с вашего IP через rich rule

Rich rules позволяют задавать условия, например адрес источника. Никогда не удаляйте общее правило SSH, пока не убедитесь, что ограниченное работает.

Bash
# 1. Добавьте правило только в runtime (подставьте ВАШ публичный IP) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. Откройте НОВЫЙ терминал и убедитесь, что SSH по-прежнему работает с YOUR_IP # 3. Сделайте правило постоянным, затем уберите службу SSH, открытую для всех firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload

Если ваш IP изменится, вы потеряете доступ: держите под рукой консоль VPS в личном кабинете как путь восстановления. Для адреса IPv6 напишите family="ipv6" и сам адрес IPv6.

5. Перенаправление порта

Чтобы направить входящий трафик порта 80 на приложение, слушающее порт 8080 на том же сервере:

Bash
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload

Для перенаправления на другую машину добавьте toaddr=TARGET_IP в опцию forward-port и включите маскарадинг командой firewall-cmd --permanent --add-masquerade. Ядро также должно разрешать пересылку, о чём firewalld заботится при маскарадинге.

6. Проверка конфигурации

Bash
firewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp

Сравните списки runtime и постоянной конфигурации: после перезагрузки правил они должны совпадать. С другой машины проверьте порт командой nc -zv VPS_IP 80. Служба, слушающая порт (ss -tlnp), доступна, только если межсетевой экран разрешает её порт.

🛠️ Устранение неполадок

FirewallD is not running: запустите его командой systemctl enable --now firewalld и посмотрите ошибки в journalctl -u firewalld.

Новое правило не действует: вы использовали --permanent без перезагрузки правил. Выполните firewall-cmd --reload.

INVALID_SERVICE или INVALID_ZONE: опечатка в имени. Допустимые имена покажут firewall-cmd --get-services и --get-zones.

SSH на нестандартном порту отклоняется, хотя порт открыт: SELinux должен знать этот порт. Выполните semanage port -a -t ssh_port_t -p tcp 2222 (сначала установите policycoreutils-python-utils), откройте порт в firewalld и перезапустите sshd.

Доступ потерян: воспользуйтесь консолью VPS из личного кабинета, затем выполните firewall-cmd --permanent --add-service=ssh и firewall-cmd --reload. Не используйте firewall-cmd --panic-on: он блокирует весь трафик, включая вашу сессию.


🔒 Теперь ваш VPS открывает только то, что вы выбрали, а SSH остаётся под рукой!

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.