Просмотр открытых портов в Linux

Материал из My WiKi
Перейти к навигации Перейти к поиску

Если порт открыт это означает, что какая либо программа (например сервис) использует его для связи с другой программой через интернет или в локальной системе. Чтобы посмотреть какие порты открыты в вашей системе Linux можно использовать команду netstat. В выводе будут показаны все сервисы и прослушиваемые ими порты и ip адреса

Способ 1. NETSTAT

sudo netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address    State     PID/Program name
tcp        0      0 0.0.0.0:139        0.0.0.0:*          LISTEN    2392/smbd
tcp        0      0 0.0.0.0:9518       0.0.0.0:*          LISTEN    2894/skype
tcp        0      0 0.0.0.0:8080       0.0.0.0:*          LISTEN    2896/vlc
tcp        0      0 127.0.0.1:3493     0.0.0.0:*          LISTEN    2467/upsd
...

Здесь:

  • -l или --listening - посмотреть только прослушиваемые порты
  • -p или --program - показать имя программы и ее PID
  • -t или --tcp - показать tcp порты
  • -u или --udp - показать udp порты
  • -n или --numeric - показывать ip адреса в числовом виде

Способ 2. LSOF

Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию i.

sudo lsof -i
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd   715 chrony    1u  IPv4    13129      0t0  UDP localhost:323
snmpd    1027   root    6u  IPv4    18708      0t0  UDP *:snmp
snmpd    1027   root    7u  IPv4    18709      0t0  TCP localhost:smux (LISTEN)
nginx    1294   root   13u  IPv4    18924      0t0  TCP *:http (LISTEN)
dovecot 11672   root   24u  IPv4 15726436      0t0  TCP *:pop3 (LISTEN)
sshd    26790   root    3u  IPv4 18902987      0t0  TCP nginx.itsm.pw:22->189.75.85.19:58072 (ESTABLISHED)
...

Еще один пример, смотрим какие процессы работают с http:

sudo lsof -i | grep http
nginx    1294   root   12u  IPv4    18923      0t0  TCP *:https (LISTEN)
nginx    1294   root   13u  IPv4    18924      0t0  TCP *:http (LISTEN)
nginx    1294   root   14u  IPv6    18925      0t0  TCP *:http (LISTEN)
nginx    1295  nginx   12u  IPv4    18923      0t0  TCP *:https (LISTEN)

Способ 3. NMAP

Nmap - мощный сетевой сканер, разработанный для сканирования и тестирования удаленных узлов, но ничего не мешает направить его на локальный компьютер:

nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2019-02-18 00:41 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (-1400s latency).
Not shown: 990 closed ports
PORT     STATE SERVICE
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
199/tcp  open  smux
443/tcp  open  https
465/tcp  open  smtps
587/tcp  open  submission
993/tcp  open  imaps
995/tcp  open  pop3s
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Если вы хотите посмотреть какие порты на компьютере доступны снаружи, здесь тоже пригодится Nmap. Если компьютер - общедоступный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант - используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:

wget -O -q icanhazip.com
11.22.33.44

Дальше запускаем сканирование:

nmap 11.22.33.44

В результате мы можем получить открытый порт 80 веб сервера, или даже 21 - файлового сервера, которых мы не устанавливали, эти порты открыты роутером, 80 - для веб-интерфейса, а 21 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS.