#Как устроено
В AlmaLinux по умолчанию включён firewalld. Он работает с зонами: каждому сетевому интерфейсу назначена зона (обычно public), в зоне перечислены разрешённые службы и порты. Всё остальное входящее блокируется. Поэтому только что установленный nginx, SSH на другом порту или игровой сервер будут недоступны из сети, пока вы их не разрешите. Правила бывают временными (runtime, пропадают после перезагрузки) и постоянными (--permanent).
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Забыли --permanentПравило временное. | Всё работает до перезагрузки. | Добавьте правило с --permanent или выполните firewall-cmd --runtime-to-permanent. |
Служба слушает только localhostВ конфигурации bind 127.0.0.1. | ss показывает 127.0.0.1:порт. | Измените адрес прослушивания на 0.0.0.0 или нужный интерфейс. |
Интерфейс в другой зонеПравило добавлено в public, а интерфейс в internal. | --get-active-zones показывает другую зону. | Добавьте правило в нужную зону через --zone=. |
| SELinux запрещает привязку к портуНестандартный порт. | В журнале записи AVC. | sudo semanage port -a -t http_port_t -p tcp 8080. |
| Фильтр на стороне хостингаГруппа безопасности, внешний файрвол. | Локально порт открыт, снаружи нет. | Откройте порт в панели провайдера. |
| Нет проброса портаСервер за домашним роутером. | Снаружи недоступен. | Настройте перенаправление портов на роутере. |
#Проверка по шагам
- Убедитесь, что служба запущена и слушает портКоманда
ss -ltnp. Если служба слушает только127.0.0.1, снаружи она недоступна независимо от файрвола. - Проверьте состояние firewalld и зонуОткройте терминал администратора:
sudo firewall-cmd --state, затемsudo firewall-cmd --get-active-zonesиsudo firewall-cmd --list-all. Запишите имя активной зоны и разрешённые службы, сравните их с нужным портом. Если firewalld не установлен или не запущен, проверьте фактический межсетевой экран системы, а не устанавливайте второй без необходимости. - Посмотрите открытые порты и службыНа сервере проверьте локально
sudo ss -lntup: найдите нужный TCP/UDP-порт и адрес прослушивания. Значение127.0.0.1:ПОРТозначает доступ только с самого сервера;0.0.0.0или[::]— прослушивание на интерфейсах с учётом дополнительных правил. Если порта нет, сначала запускайте/исправляйте службу, а не открывайте межсетевой экран. - Откройте порт или службуТолько администратор и только если нужная служба действительно слушает порт: узнайте активную зону
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. - Перезагрузите правилаСохраните открытые файлы и завершите рабочие процессы. Перезагрузите систему штатным способом или командой
sudo reboot, если у вас есть права и допустимо прерывать работу сервера. После загрузки повторите операцию, вызвавшую ошибку. - Проверьте снаружиС другого устройства в той же сети попробуйте подключиться к точному адресу и порту службы, например
curl -I http://АДРЕС:ПОРТдля HTTP (подставьте действительные адрес и порт). Если локально служба отвечает, но снаружи нет, проверьте межсетевой экран, роутер и правила облачного провайдера. Не открывайте небезопасный порт в интернет только ради тестирования. - Проверьте внешние фильтрыЕсли служба слушает нужный порт и в правильной зоне firewalld он уже разрешён, проверьте остальные уровни сети. С другой машины выполните запрос к публичному IP и порту через
curl -vдля HTTP(S) либо проверку порта инструментом, принятым в вашей среде. В панели облачного провайдера проверьте входящие правила группы безопасности, у маршрутизатора — проброс порта и NAT, у приложения — адрес привязки (127.0.0.1не доступен извне). Не отключайте всю защиту ради одного порта. На сервере с SSH перед изменениями сохраните возможность управления через консоль провайдера. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Частые ловушки
Не отключайте firewalld целиком ради быстрой проверки (systemctl stop firewalld): сервер сразу окажется открытым для всех. Если нужно проверить, виноват ли файрвол, лучше временно добавить нужный порт и убедиться в результате, а затем оставить только необходимое. Для SSH не закрывайте порт 22, пока не подключились на новый порт из второй сессии.