как узнать открыть ли нужный нам порт, и как его открыть если он закрыт
Заходим на машину на которой планируем получить данную информацию по портам. Для примера я зашёл на виртуальную машину по SSH, которая у меня работает локальным web сервером.
Допустим мне необходимо понять открыт ли порт для работы с базой данных postgresql это порт 5432, или если для mysql это порт 3306. Какой порт использует та или иная служба или ПО легко можно узнать в поиске интернета, например найдите в поисковике своего браузера "на каком порту работает sftp"...
Итак как проверить открыт ли порт:
Напротив названий запущенных служб, в крайней колонке указаны порты которые они слушают.
пример получения информации о запущенных процессах.
Теперь ещё раз убедимся, что служба активна
☯
Terminal:
⌕
≡
✕
mx@itdid:~$ sudo service postgresql status ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Sun 2023-01-01 01:28:44 CST; 1h 30min ago Process: 790 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 790 (code=exited, status=0/SUCCESS) CPU: 1ms Jan 01 01:28:44 192 systemd[1]: Starting PostgreSQL RDBMS... Jan 01 01:28:44 192 systemd[1]: Finished PostgreSQL RDBMS.
Видим служба активна, теперь давайте проверим открыт ли нужный нам порт 5432 в нашей локальной сети.
От сюда следует вывод, что для начала стоит убедиться запущена ли нужная вам служба, порт доступа, к которой вы проверяете.
Теперь давайте установим необходимое ПО, это утилита nmap
и увидим как она работает здесь же, на хосте, где работает postrgessql, проверяем порт этой службы 5432 следующей командой:
☯
Terminal:
⌕
≡
✕
mx@itdid:~$ nmap -p 5432 localhost Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-02 00:11 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.00062s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 5432/tcp open postgresql Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
Видно в статусе, слово open, это означает, что порт открыт. Но наша задача проверить открытость порта в локальной сети, для этого нам нужен локальный ip адрес проверяемой машины.
☯
Terminal:
⌕
≡
✕
mx@itdid:~$ ip addres 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:a2:de:9c brd ff:ff:ff:ff:ff:ff altname enp0s3 inet 192.168.122.110/24 brd 192.168.122.255 scope global dynamic noprefixroute ens3 valid_lft 2137sec preferred_lft 2137sec inet6 fe80::5054:ff:fea2:de9c/64 scope link noprefixroute valid_lft forever preferred_lft forever
получили ip адрес 192.168.122.110
Теперь давайте проверим доступность порта с хоста, выхожу из терминала гостевой машины, т.е. фактически открываю терминал другой машины в этой же локальной сети.
сначала убедимся, что мы вообще видим эту машину в нашей локальной сети командой ping
☯
Terminal:
⌕
≡
✕
user@mx:~ $ ping 192.168.122.110 PING 192.168.122.110 (192.168.122.110) 56(84) bytes of data. 64 bytes from 192.168.122.110: icmp_seq=1 ttl=64 time=0.582 ms 64 bytes from 192.168.122.110: icmp_seq=2 ttl=64 time=0.622 ms 64 bytes from 192.168.122.110: icmp_seq=3 ttl=64 time=0.565 ms ^C --- 192.168.122.110 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2041ms rtt min/avg/max/mdev = 0.565/0.589/0.622/0.023 ms
Замечательно пинг проходит. Останавливаем работу утилиты горячей клавишей ctrl+c. И теперь проверяем доступность извне 5432 порта известной нам утилитой nmap. Предварительно установив её и на этой машине, если этого ещё не было сделано.
☯
Terminal:
⌕
≡
✕
user@mx:~ $ nmap -p 5432 192.168.122.110 Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-02 09:26 MSK Nmap scan report for podariderevo (192.168.122.110) Host is up (0.00057s latency). PORT STATE SERVICE 5432/tcp closed postgresql Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Мы видим, что этот порт закрыт для нашей машины из локальной сети. По умолчанию, сервер баз данных pgsql разрешает подключение только с локального компьютера, т.е. по внутреннему ip адресу 127.0.0.1. Поэтому мы не сможем подключиться к базе данных напрямую, на котором допустим работает наш сайт, через web сервер, в моём случае это вебсервер apache, который работает на 80 порту. Давайте посмотрим как выглядит открытый порт веб сервера:
☯
Terminal:
⌕
≡
✕
user@mx:~ $ nmap -p 80 192.168.122.110 Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-02 09:31 MSK Nmap scan report for podariderevo (192.168.122.110) Host is up (0.00055s latency). PORT STATE SERVICE 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds
Видно, что 80 порт открыт из локальной сети, что логично, но допустим нам, нужен именно 5432. Чтобы поработать удалённо с базой данных напрямую, а не через админку нашего сайта. Например, чтобы можно было подключиться к ней с помощью ПО dbeaver-cv. Итак, сейчас мы убедились, что служба работает и порт активно ей слушается, но он закрыт из локальной сети. Как открыть этот порт, и что его может закрывать?
В первую очередь, порт может быть закрыт конфигурацией самого сервера postgresql
В Debian подобном дистрибутиве, файлы сервера pgsql находятся в /etc/postgresql. Однако в других дистрибутивах начало пути может быть и таким, например у centOS: /db/pgsql
в общем найдите свой файл конфигурации. Например так:
☯
Terminal:
⌕
≡
✕
mx@itdid:~$ sudo find /etc -name "postgresql.conf" /etc/postgresql/13/main/postgresql.conf #12488b;">/var/www/html/django_project$ ls /etc/postgresql/13/main conf.d pg_ctl.conf pg_ident.conf start.conf environment pg_hba.conf postgresql.conf mx@192:/var/www/html/django_project$ vim /etc/postgresql/13/main/postgresql.conf
mx@192:/var/www/html/django_project$ sudo vim /etc/postgresql/13/main/postgresql.conf
находим в нём строку закоментированную строку listen_addresses = 'localhost', и заменяем её на listen_addresses = '*'
Сохраняем изменения в файле и перезугружаем сервер.
☯
Terminal:
⌕
≡
✕
mx@itdid:~/var/www/html/django_project$ system restart postgresql -bash: system: command not found mx@itdid:~:/var/www/html/django_project$ sudo service postgresql restart mx@itdid:~:/var/www/html/django_project$ sudo service postgresql status ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor pr> Active: active (exited) since Mon 2023-01-02 02:19:27 CST; 5s ago Process: 75641 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 75641 (code=exited, status=0/SUCCESS) CPU: 1ms Jan 02 02:19:27 192 systemd[1]: Starting PostgreSQL RDBMS... Jan 02 02:19:27 192 systemd[1]: Finished PostgreSQL RDBMS.
Снова проверяем открытость порта из локальной сети:
и убеждаемся, что этого было более чем достаточно в данном случае.
☯
Terminal:
⌕
≡
✕
user@mx:~ $ nmap -p 5432 192.168.122.110 Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-02 11:39 MSK Nmap scan report for podariderevo (192.168.122.110) Host is up (0.00044s latency). PORT STATE SERVICE 5432/tcp open postgresql Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds
если это не помогло вам открыть, порт, то возможно на вашей машине установлены правила фаервола. Но это тема отдельной статьи
☯
Terminal:
⌕
≡
✕
mx@itdid:~$ sudo iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
если же в выводе этих правилах, вы увидите ограничения нужного вам порта, открыть его можно будет так
-
- Roman Sakhno
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.