Наличие процесса в выводе ss ещё не означает, что он доступен из интернета. Между приложением и внешним клиентом могут быть сетевой интерфейс, Docker, firewall хоста и правила облачного провайдера.

Сначала смотрим, что слушает Ubuntu

sudo ss -lntup

127.0.0.1:8080 обычно означает доступ только с самого хоста. 0.0.0.0:8080 означает прослушивание всех IPv4-интерфейсов, но не гарантирует прохождение firewall. Для контейнеров также проверьте публикацию портов:

docker ps --format 'table {{.Names}}\t{{.Ports}}'

Потом смотрим правила

На Ubuntu можно проверить UFW и nftables:

sudo ufw status verbose
sudo nft list ruleset

Если используется Docker, опубликованные порты могут проходить через правила DNAT и FORWARD в обход ожидаемого поведения ufw allow/deny. Поэтому одного вывода UFW недостаточно. Для ограничения Docker-трафика изучайте соответствующие цепочки firewall и сетевую схему.

Последняя проверка — снаружи

С другого узла, который не находится в этой же локальной сети, проверьте нужный TCP-порт:

nc -vz -w 3 your-server.example 443

Так вы проверите внешний маршрут, включая NAT или облачный firewall. Не делайте вывод об интернет-доступности по тесту curl localhost на самом сервере.

Хорошая базовая политика

Публичные интерфейсы должны принимать только нужные порты. Сервисные панели, базы данных, метрики и административные endpoints лучше оставлять на loopback, в приватной сети или за VPN. SSH ограничивайте по доверенным адресам, когда это возможно, и сохраняйте аварийный доступ через консоль провайдера.