LINUX.ORG.RU
ФорумAdmin

Не виден порт снаружи ubuntu

 ,


0

1

Всем привет. Я использую Ubuntu 18.04 Столкнулся с проблемой, что мой порт действительно открыт. Но снаружи не прослушивается. Я не хочу использовать nginx, apache, (я надеюсь это реально) Вот что он выводит мне когда я пишу:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

sudo iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

Порт 443 как видно открыт, я начинаю проверять его. Пишет закрыт (проверяю через обычные сайты онлайн проверок портов). Пожалуйста подскажите мне решение. Я не работал ранее с убунту и файрволлом, я не понимаю почему его не видно снаружи. п.с - извиняюсь если создал тему не в той ветке.



Последнее исправление: dexter2 (всего исправлений: 1)

Iptables - это пакетный фильтр, в котором ты можешь настроить правила для обработки входящих, исходящих, транзитных сетевых пакетов.

У тебя сейчас стоит политика длоя

  • INPUT - входящих
  • FORWARD - транзитных
  • OUTPUT - исходящийх

пакетов в значении ACCEPT, т.е. прохождение пакетов разрешено.

И свои правила ниже ты мог не писать.

Т.е. прохождение пакетов на любой порт разрешено и так.

Я не хочу использовать nginx, apache, (я надеюсь это реально) Вот что он выводит мне когда я пишу:

Порт 443 как видно открыт, я начинаю проверять его. Пишет закрыт

Порт будет открыт, когда пакеты с номером порта не блокируются сетевых (пакетным) фильтром. И когда запущено приложение (процесс), которые слушают этот порт и отправляют ответные пакеты об успешном подключении.

Поэтому тебе нужно запустить какое-то приложение, которое прослушивает эти порты.

Обычно 80 и 443 порт слушает WEB-сервер.

А тебе что надо?

kostik87 ★★★★★
()
Ответ на: комментарий от dexter2

Ты читать умеешь? Открытый порт - это когда его не блокируют и запущено приложение, которое его слушает.

Запусти apache или nginx.

Покажи вывод:

netstat -tulpn

Меньше букв я написать не могу.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Приложение на Express. (node.js)

netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      680/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      777/sshd: /usr/sbin
tcp6       0      0 :::22                   :::*                    LISTEN      777/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           680/systemd-resolve
dexter2
() автор топика
Ответ на: комментарий от dexter2

Напишу более просто, чем Костик, твоё приложение на express ДОЛЖНО использовать порт 443 (или 80) или же используй реверс-прокси в виде nginx (что в общем случае является правильным), если приложению не хватает прав на исползования порта 443.

vvn_black ★★★★★
()
Ответ на: комментарий от dexter2

Приложение должно слушать паорт на внешнем сетевом интерфейсе.

В каждой операционной систее есть как минимум одно сетевое устройство, это lo (loopback), с адрресом из сети 127.0.0.0/8, обычно это 127.0.0.1.

Это виртуальный внутренний сетевой интерфейс.

В компьютерах, пусть и виртульных обычно есть ещё и физический ещё сетевой интерфейс.

Для доступа к приложению по сети оно должно слушать пакеты с IP адресом этого сетевого интерфейса или пакеты на всех сетевых интерфейсах, в этом случае IP адрес, который слушает приложение должен быть 0.0.0.0.

Т.е. в выводе

netstat -tulpn

Должны присутствовать строки

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80             0.0.0.0:*               LISTEN      546/app
tcp        0      0 0.0.0.0:443            0.0.0.0:*               LISTEN      546/app

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

У меня вот-так

netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      62339/systemd-resol
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      777/sshd: /usr/sbin
tcp6       0      0 :::22                   :::*                    LISTEN      777/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           62339/systemd-resol

dexter2
() автор топика
Ответ на: комментарий от dexter2

Я так и думал, что у тебя nodejs.

Скомпилируй приложение в продуктовом режиме:

npm run build

Поставь WEB-сервер и опубликуй директорию dist или public или как у тебя настроено через WEB-сервер.

Настрой WEB-сервер, чтобы он слушал 80 и 443 порт на 0.0.0.0 и всё будет работать.

Ну либо можешь запустить своё приложение через

npm run dev

Но укажи параметры, чтобы оно слушало внешний сетевой интерфейс.

Но в npm run dev можно указать только один порт.

kostik87 ★★★★★
()

Я не хочу использовать nginx, apache, (я надеюсь это реально)

А в чем смысл не использовать веб-серверов? Надо же кому-то перезапускать приложение при падениях и слушать 80 и 443, которые только под рутом можно слушать. Можно, конечно, чтобы приложение было само себе веб-сервер, но не на production же. Или это что-то тестовое?

damix9 ★★★
()
Ответ на: комментарий от damix9

Он ничего не написал о том, как запускает проект.

При простом запуске npm run dev проект запускается на 127.0.0.1.

Как его запустить на 0.0.0.0 и вообще на порту 80 мне сейчас лень искать.

На память не помню.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Да, я запускаю, по простому. Я занял порты. Но как я понял, они не слушают меня, или я не могу попросту понять принцип работы, Если я проверяю на чекере пишет включен 443 80, если я проверю с помощи команды netstat -ntlp | grep LISTEN

tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      2820/systemd-resolv
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15745/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      15745/sshd

Они не высвечиваются. У вас не будет ли ссылки на статью? Примерную то, что мне нужно. Я не могу найти. Заранее извиняюсь, за свой тупизм.

dexter2
() автор топика
Ответ на: комментарий от dexter2

Скажи, а когда ты запускаешь команду

npm run dev

Ты пробовал читать то, что написано на экране?

Что-то вроде:

 vite v2.9.9 dev server running at:

  > Local: http://localhost:3000/
  > Network: use `--host` to expose

  ready in 292ms.

Пробовал гуглить что за опция хост (–host) и для чего она?

Сам догадаешься какая опция позволит тебе указать номер порта?

Да, я запускаю, по простому.

Как именно?

Я занял порты.

Как именно ты их занял и какие?

Но как я понял, они не слушают меня, или я не могу попросту понять принцип работы

После выполнения команды

npm i install
npm run dev

Не закрывая консоль где ты запустил эти команды выполни в другой консоли

sudo netstat -tulpn
sudo netstat -tulpn | grep node

И ты должен увидеть какой порт слушает приложение nodejs.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)