Bootstrap

как узнать открыть ли нужный нам порт, и как его открыть если он закрыт

как узнать открыть ли нужный нам порт, и как его открыть если он закрыт

Заходим на машину на которой планируем получить данную информацию по портам. Для примера я зашёл на виртуальную машину по SSH, которая у меня работает локальным web сервером.

Допустим мне необходимо понять открыт ли порт для работы с базой данных postgresql это порт 5432, или если для mysql это порт 3306. Какой порт использует та или иная служба или ПО легко можно узнать в поиске интернета, например найдите в поисковике своего браузера "на каком порту работает sftp"...

Итак как проверить открыт ли порт:


sudo lsof -i -P -n

Напротив названий запущенных служб, в крайней колонке указаны порты которые они слушают.

пример получения информации о запущенных процессах.

Теперь ещё раз убедимся, что служба активна


sudo service  postgresql status

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


sudo apt install nmap

и увидим как она работает здесь же, на хосте, где работает postrgessql, проверяем порт этой службы 5432 следующей командой:


nmap -p 5432 localhost

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 адрес проверяемой машины.

как узнать свой ip адрес


ip addres

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

ping 192.168.122.110

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. Предварительно установив её и на этой машине, если этого ещё не было сделано.

nmap -p 5432 192.168.122.110

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 порту. Давайте посмотрим как выглядит открытый порт веб сервера:

nmap -p 80 192.168.122.110

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

в общем найдите свой файл конфигурации. Например так:


sudo find /etc -name "postgresql.conf"

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

если это не помогло вам открыть, порт, то возможно на вашей машине установлены правила фаервола. Но это тема отдельной статьи


sudo iptables -S

Terminal:

mx@itdid:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

если же в выводе этих правилах, вы увидите ограничения нужного вам порта, открыть его можно будет так


sudo iptables -A INPUT -p tcp --dport 5432 --jump ACCEPT

sudo iptables -A OUTPUT -p tcp --dport 5432 --jump ACCEPT

sudo iptables -A FORWARD -p tcp --dport 5432 --jump ACCEPT

sudo iptables-save

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: