#Что означает ошибка
Сервис недоступен из сети, порт закрыт
В openSUSE по умолчанию работает firewalld (в новых версиях; раньше — SuSEfirewall2). Порт, закрытый брандмауэром, делает сервис недоступным снаружи, хотя локально он работает. Открыть порт можно через YaST или командами firewall-cmd.
Различайте runtime- и permanent-правила: без --permanent правило пропадёт после перезагрузки.
Проверьте зону сетевого интерфейса.
В openSUSE используется firewalld. Откройте порт или службу в нужной зоне и примените правило навсегда.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет правила | Порт закрыт. | Добавьте. |
| Не сохранено | Runtime. | --permanent. |
| Другая зона | Интерфейс. | Проверьте. |
| Служба слушает localhost | Bind. | Измените. |
#Пошаговое решение
- Проверьте firewall-cmd --stateОткройте терминал администратора:
sudo firewall-cmd --state, затемsudo firewall-cmd --get-active-zonesиsudo firewall-cmd --list-all. Запишите имя активной зоны и разрешённые службы, сравните их с нужным портом. Если firewalld не установлен или не запущен, проверьте фактический межсетевой экран системы, а не устанавливайте второй без необходимости. - Проверьте, что служба слушает портНа сервере openSUSE в терминале выполните
sudo ss -lntupи найдите нужный номер порта в локальном адресе (например,0.0.0.0:443или[::]:443). Если приложение слушает только127.0.0.1, открытие порта в firewalld само по себе не сделает его доступным извне. Проверьте конфигурацию самой службы и её журнал; не открывайте порт, пока не понятно, какой процесс должен на нём работать. - Добавьте порт с --permanentТолько администратор и только если нужная служба действительно слушает порт: узнайте активную зону
sudo firewall-cmd --get-active-zonesи текущее правилоsudo firewall-cmd --list-all. Для стандартной службы предпочтительнееsudo firewall-cmd --permanent --zone=ИМЯ_ЗОНЫ --add-service=ИМЯ_СЛУЖБЫ(замените оба имени фактическими), затемsudo firewall-cmd --reload. Проверьте правило, запомните его для отката через--remove-service; не открывайте публичный доступ к административным портам без ограничения IP. - Примените --reloadПосле изменения правил в постоянной конфигурации firewalld выполните
sudo firewall-cmd --reload. Сначала убедитесь, что ваш текущий доступ по SSH разрешён правилами и есть консоль провайдера на случай ошибочной блокировки. Затем проверьтеsudo firewall-cmd --get-active-zonesиsudo firewall-cmd --zone=ИМЯ_ЗОНЫ --list-all, заменяя имя зоны из первого вывода. Если порт не появился, проверьте, в какую зону добавлялось правило. - Проверьте с другой машиныС другого устройства в той же сети попробуйте подключиться к точному адресу и порту службы, например
curl -I http://АДРЕС:ПОРТдля HTTP (подставьте действительные адрес и порт). Если локально служба отвечает, но снаружи нет, проверьте межсетевой экран, роутер и правила облачного провайдера. Не открывайте небезопасный порт в интернет только ради тестирования. - Определите зону и действующие сервисыLinux · Терминал (Bash)КомандаНужен sudoОпределите зону и действующие сервисы. Не меняйте правила до проверки, какой интерфейс подключён к сети.
sudo firewall-cmd --get-active-zonessudo firewall-cmd --list-all
#Диагностика
Состояние: sudo systemctl status firewalld, sudo firewall-cmd --state. Зона и правила: sudo firewall-cmd --get-active-zones, sudo firewall-cmd --list-all. Убедитесь, что служба слушает: sudo ss -ltnp | grep :8080. Если слушает только 127.0.0.1, брандмауэр ни при чём — настройте приложение на 0.0.0.0.
#Открытие портов
Порт: sudo firewall-cmd --permanent --add-port=8080/tcp, диапазон: --add-port=5000-5100/tcp, служба: --add-service=http (--get-services покажет доступные). Применить: sudo firewall-cmd --reload. Для определённой зоны: --zone=public. Закрыть: --remove-port=8080/tcp. Ограничить источник: sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="22" protocol="tcp" accept'.
#YaST и проверки
Графически: sudo yast2 firewall → «Allowed Services» → «Add». Проверьте внешний доступ с другой машины: nc -zv IP 8080 или онлайн-проверка. Для NAT и проброса: --add-forward-port=port=80:proto=tcp:toport=8080. Если настроен роутер или облачный Security Group, откройте порт и там. На серверах зону public не заменяйте на trusted. Для SuSEfirewall2 в старых системах используйте /etc/sysconfig/SuSEfirewall2.
sudo ss -lntpsudo firewall-cmd --list-all