# Сети

Networking

# Кто слушает порт в Linux

<div class="article_body" id="bkmrk-%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BA-%D0%BF%D0%BE" itemprop="articleBody">Открытый доступ к порту хоть и является угрозой безопасности системы, но по сути ничего плохого не представляет до тех пор, пока его не начинает использовать программа. А чтобы выяснить какая программа слушает какой порт можно использовать утилиты "netstat" (или "ss") и "lsof".  
  
Чтобы узнать информацию о программе, которая прослушивает определённый порт, можно воспользоваться командой "lsof" со следующими ключами:</div>```
sudo lsof -i :номер_порта
```

<div class="article_body" id="bkmrk-%D0%97%D0%B4%D0%B5%D1%81%D1%8C-%22%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_%D0%BF%D0%BE%D1%80%D1%82%D0%B0%22-" itemprop="articleBody">Здесь "номер_порта" - это цифра.  
  
Пример результата выполнения команды с 53 портом:</div>```
$: sudo lsof -i :53
COMMAND   PID            USER   TYPE NODE NAME
systemd-r 818 systemd-resolve   IPv4  UDP localhost:domain 
systemd-r 818 systemd-resolve   IPv4  TCP localhost:domain (LISTEN)
```

<div class="article_body" id="bkmrk-%D0%9D%D0%BE-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC-%D1%87%D0%B0%D1%89%D0%B5-" itemprop="articleBody">Но рекомендуем чаще запускать команду для получения списка программ, которые используют какие-либо tcp/udp порты. В этом помогает "netstat" или "ss":</div>```
sudo netstat -lntup
```

<div class="article_body" id="bkmrk-%D0%9E%D0%BF%D0%B8%D1%88%D0%B5%D0%BC-%D0%B2%D1%81%D0%B5-%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%2C-%D0%BA%D0%BE" itemprop="articleBody">Опишем все ключи, которые используются в команде - -l показать только прослушиваемые "LISTEN" порты.
- -n показывать адреса как ip, а не пытаться определять домены.
- -t показывать TCP порты.
- -u показывать UDP порты.
- -p показать название программы, которая слушает порт.

Если запустить эту команду на веб сервере, то команда распечатает в терминале такую информацию (некоторые столбцы скрыты):</div>```
$: sudo netstat -lntup
Prt  Local Addr     State   PID/Program
tcp  0.0.0.0:443    LISTEN  204/nginx
tcp  0.0.0.0:80     LISTEN  202/nginx
tcp  0.0.0.0:22     LISTEN  174/sshd
udp  127.0.0.1:323          233/chronyd
```

<div class="article_body" id="bkmrk-%D0%9F%D0%BE-%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D1%83-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-" itemprop="articleBody">По результату можно заметить какая программа прослушивает какой порт. Если ip в секции "Local Address" равен "127.0.0.1", то это локальное обращение. Такой порт можно не закрывать фаерволом - он и так не будет доступен извне. Но ip с нулями "0.0.0.0" говорят о том, что программа слушает все адреса. То есть она примет любой запрос, в том числе внешний.</div>