Главная
» LINUX
»
Как настроить межсетевой экран SLES 15 с помощью firewall-cmd
Как настроить межсетевой экран SLES 15 с помощью firewall-cmd
Сервис, работающий на сервере SLES 15, может по-прежнему выдавать ошибку тайм-аута для удаленных клиентов, поскольку брандмауэр блокирует новый входящий трафик. Обычно решение заключается в определении активной зоны firewalld и разрешении только того сервиса или порта, которые необходимы приложению. Инструмент командной строки SLES для этой задачи — firewall-cmd.
Данное руководство основано на руководстве SUSE SLES 15 SP7 по безопасности и усилению защиты, а также на справочнике команд firewalld, проверенном 7 октября 2026 года. Более ранние пакеты обновлений и обновленные системы SLES 12 могут иметь другие состояния или устаревшую конфигурацию брандмауэра. Изображения терминала показывают примеры, а не результаты, полученные с реального сервера; замените имена интерфейсов, зоны и службы значениями на вашем хосте.
1. Убедитесь, что firewalld запущен.
В документации SUSE указано, что firewalld установлен и включен по умолчанию в SLES 15. YaST обычно запускает его после установки и помещает интерфейсы в publicзону по умолчанию. Тем не менее, лучше проверить машину, а не предполагать, что настройки по умолчанию не изменились. Выполните эти команды от имени учетной записи, которой разрешено использовать sudo:
sudo systemctl status firewalld
sudo firewall-cmd --state
Диспетчер служб должен сообщать об firewalldактивности службы и firewall-cmd --stateо состоянии системы running. Если служба установлена, но остановлена, запустите ее и включите при загрузке системы:
sudo systemctl enable --now firewalld
Если пакет firewall-cmdотсутствует, проверьте, firewalldустановлен ли он и доступен ли в включенных репозиториях SUSE. Не устанавливайте и не заменяйте компоненты брандмауэра на управляемом сервере бездумно.
В тестовом терминале проверяется состояние firewalld и отображается пример активной публичной зоны с интерфейсом eth0.
2. Найдите зону, защищающую интерфейс сервера.
Firewalld группирует правила в зоны , которые представляют разные уровни доверия. publicЗона обычно используется для сетей, которым не доверяют. Сервис, открытый в одной зоне, не открывается автоматически во всех зонах, поэтому правильное правило в неправильной зоне может привести к недоступности вашего приложения.
Используйте вывод команды active-zone, чтобы найти зону, подключенную к интерфейсу, через который проходит клиентский трафик. Имя интерфейса может быть eth0, ens160, или другим. Если вам нужно проверить один интерфейс, выполните команду:
sudo firewall-cmd --get-zone-of-interface=eth0
Замените eth0на фактический интерфейс. Интерфейс, не назначенный явно зоне, обрабатывается зоной по умолчанию. Избегайте необдуманного изменения зоны по умолчанию: это может повлиять на интерфейсы, которые от нее зависят. На удаленном сервере определите зону SSH или другую зону управления и подтвердите ее правило доступа, прежде чем перезагружать настройки брандмауэра. Если существует, обеспечьте наличие консоли или пути восстановления внеполосным способом.
В списке зон отображается информация о том, какие интерфейсы и службы связаны с примером общедоступной зоны до внесения каких-либо изменений.
3. Выберите именованную службу или конкретный порт.
Служба firewalld — это именованное определение, которое может включать один или несколько портов и протоколов. Обычно проще разрешить доступ известной службе по имени, чем запоминать номер её порта. Перед использованием проверьте список установленных служб и изучите определение:
Для веб-сервера предопределенная httpслужба обычно охватывает TCP-порт 80; httpsдля веб-трафика TLS используется отдельная служба. В документации SLES показан тот же метод на основе служб с примерами, такими как DHCP. Используйте ту службу, которая требуется вашему приложению, и проверьте определение службы локально, если вы не уверены.
Если ни одна из предопределенных служб не подходит, откройте только необходимый порт и протокол. Например, приложение, прослушивающее TCP-порт 8443, может быть разрешено с помощью команды ` --add-port=8443/tcp.`. Открытие порта в брандмауэре не запускает приложение, не привязывает его к сети и не делает его безопасным; убедитесь, что сама служба настроена на прослушивание нужного адреса.
Сначала протестируйте временное правило.
Для короткого теста примените правило к конфигурации во время выполнения. Изменения во время выполнения вступают в силу немедленно, но теряются после перезагрузки брандмауэра или перезапуска службы, если вы не сохраните их навсегда. Firewalld поддерживает правило с ограничением по времени, что полезно, если вы хотите, чтобы тест автоматически завершался:
Для разовой проверки порта используйте --add-port=8443/tcp --timeout=5mвместо --add-service=http. Выберите зону, которая фактически содержит интерфейс сервера; не копируйте, publicесли ваш хост использует другую зону.
Приведенная команда добавляет HTTP-сервис в постоянную конфигурацию общедоступной зоны, а затем перезагружает firewalld для его применения.
4. Сохраните правило и перезагрузите firewalld.
Когда вы будете готовы сохранить правило, добавьте его в постоянную конфигурацию. Следующий пример разрешает HTTP в публичной зоне:
В этих примерах сначала изменяется постоянная конфигурация, а затем она перезагружается, чтобы новое правило вступило в силу. Перезагрузка также заменяет параметры времени выполнения постоянной конфигурацией. Поэтому любые изменения, внесенные только во время выполнения в других местах, могут быть отменены. Перед перезагрузкой производственной системы проверьте важные правила времени выполнения и постоянные правила, особенно правила удаленного администрирования.
Существует также рабочий процесс, ориентированный на выполнение во время работы: протестируйте правило во время выполнения, подтвердите работоспособность службы, затем добавьте то же правило --permanentи перезагрузите систему. Избегайте использования --runtime-to-permanentв качестве ярлыка, если вы не собираетесь сохранять все текущие правила, действующие во время выполнения, включая временные изменения, внесенные другими администраторами или программным обеспечением.
Как можно убедиться, что изменение сработало?
Проверьте как активное правило во время выполнения, так и сохраненное правило. Для HTTP-сервиса в общедоступной зоне выполните:
Запрос должен вернуть yes, постоянный список служб должен включать http, и проверка конфигурации должна завершиться успешно. Для правила порта используйте --query-port=8443/tcpи --list-portsв эквивалентных командах. Также проверьте с отдельного клиента, который может связаться с сервером; локальный запрос через брандмауэр подтверждает наличие правила, а не корректность DNS, маршрутизации, вышестоящих брандмауэров или прослушивателя приложений.
Команды проверки проверяют активное правило службы, сохраненный список служб и синтаксис постоянной конфигурации.
Типичные проблемы и безопасные способы их решения
Правило присутствует, но соединения по-прежнему прерываются по таймауту: убедитесь, что оно добавлено в зону, прикрепленную к интерфейсу, обращенному к клиенту. Затем проверьте, прослушивает ли приложение ожидаемый адрес и порт, и проверьте работу вышестоящего сетевого брандмауэра.
Правило работало до перезагрузки: вероятно, оно было добавлено только во время выполнения. Добавьте его --permanentи перезагрузите систему, затем запросите обе конфигурации.
Доступ по SSH находится под угрозой: проверьте службы активной зоны и постоянные службы перед перезагрузкой. Если SSH требуется, но отсутствует, добавьте sshслужбу в соответствующую зону на постоянной основе перед перезагрузкой. Не закрывайте текущую удаленную сессию, пока не проверите второе соединение.
Вы выполняете миграцию с более старой версии SUSE: в SLES 15 SuSEfirewall2 был заменен на firewalld. SUSE предупреждает, что профили устаревших брандмауэров имеют ограниченную обратную совместимость; ознакомьтесь с руководством по миграции, а не предполагайте, что все старые правила были переведены.
Правила, по-видимому, противоречат друг другу: firewalld предназначен для управления правилами брандмауэра хоста. SUSE предостерегает от изменения одних и тех же правил по отдельности с помощью таких инструментов, как iptables, поскольку это может привести к путанице в активной конфигурации.
Чтобы удалить ненужную постоянную службу или порт, используйте соответствующий параметр --remove-serviceили --remove-portопцию с --permanent, затем перезагрузите страницу и снова проверьте. Например, удалите HTTP из публичной зоны с помощью , sudo firewall-cmd --permanent --zone=public --remove-service=httpа затем sudo firewall-cmd --reload.
Перед завершением проверьте себя.
firewalldОн запущен и работает при загрузке сервера.
Вы определили активную зону для интерфейса, принимающего трафик.
В этой зоне разрешен доступ только для того сервиса или порта, которые необходимы приложению.
Удаленное администрирование по-прежнему разрешено до и после перезагрузки.
Правило отображается в запросах во время выполнения и в постоянных запросах, и проверка конфигурации проходит успешно.
Проверка соединения с другого хоста подтверждает доступность приложения.