Проверка открытых и прослушиваемых портов в Linux с помощью Netstat и SS
Мониторинг открытых и прослушиваемых портов в системе Linux — одна из наиболее фундаментальных практик для обеспечения безопасности сервера, диагностики проблем сети и эффективного управления инфраструктурой. Независимо от того, работаете ли вы на production веб-сервере, в среде VPS Hosting или на Dedicated Server, понимание того, какие именно порты открыты и какие сервисы привязаны к ним, дает вам видимость, необходимую для предотвращения несанкционированного доступа, обнаружения неправильных конфигураций и устранения ненужных векторов атак.
В этом подробном руководстве мы рассмотрим, как использовать команды netstat и ss для проверки открытых и прослушиваемых портов в любой системе Linux, сравним их сильные стороны и представим дополнительные инструменты, такие как lsof и nmap, для более глубокого анализа сети.
Почему мониторинг открытых портов имеет значение
Каждый открытый порт на вашем сервере представляет потенциальную точку входа. Сервисы, которые неправильно настроены, устарели или просто забыты, могут подвергнуть вашу систему эксплуатации. Регулярный аудит прослушиваемых портов позволяет вам:
- Выявить несанкционированные сервисы, работающие на неожиданных портах
- Обнаружить попытки вторжения или скомпрометированные процессы
- Проверить правила брандмауэра работают ли они как предполагается
- Подтвердить, что недавно развернутые приложения привязаны к правильным интерфейсам
- Закрыть неиспользуемые порты для сокращения поверхности атаки
Это особенно критично для администраторов, управляющих средами Shared Web Hosting или многопользовательскими серверами, на которых одновременно работают несколько сервисов.
Понимание портов и их типов
Перед тем как переходить к инструментам, важно понять терминологию, которую вы встретите в выводе команд.
| Термин | Описание |
|---|---|
| Открытый порт | Порт, на котором приложение активно прослушивает входящие соединения |
| Прослушиваемый порт | Порт, привязанный к сервису, который ожидает сетевой трафик |
| TCP (Transmission Control Protocol) | Ориентированный на соединение, надежный, используется HTTP, SSH, FTP и т. д. |
| UDP (User Datagram Protocol) | Без соединения, быстрее, но менее надежен, используется DNS, NTP и т. д. |
Проверка портов с помощью netstat
Что такое netstat?
netstat (сетевая статистика) — классическая утилита командной строки, которая предоставляет подробную информацию о сетевых соединениях, таблицах маршрутизации, статистике интерфейсов и прослушиваемых портах. Хотя она официально устарела в пользу ss на современных дистрибутивах, она остается широко используемой и все еще встречается на многих устаревших системах.
Установка netstat
Команда netstat является частью пакета net-tools, который может быть не установлен по умолчанию на современных дистрибутивах Linux.
Debian / Ubuntu:
sudo apt install net-toolsCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-toolsИспользование netstat для проверки открытых и прослушиваемых портов
Для отображения всех прослушиваемых TCP и UDP портов в вашей системе выполните следующую команду:
sudo netstat -tulnРасшифровка флагов:
| Флаг | Описание |
|---|---|
-t | Показать TCP порты |
-u | Показать UDP порты |
-l | Показать только прослушиваемые порты |
-n | Отображать числовые адреса вместо разрешения имен хостов |
Пример вывода
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:53 0.0.0.0:*Понимание столбцов вывода
- Local Address — IP-адрес и номер порта, на котором прослушивает сервис.
0.0.0.0означает, что сервис прослушивает на всех доступных интерфейсах. - Foreign Address — удаленный IP и порт для активных соединений. Звездочка (
*) означает, что соединение еще не установлено. - State — состояние соединения.
LISTENуказывает, что порт открыт и ожидает входящих соединений.
Фильтрация конкретных портов с помощью netstat
Вы можете передать вывод через grep для изоляции конкретного порта или сервиса. Например, для проверки, прослушивает ли что-нибудь порт 80 (HTTP):
sudo netstat -tuln | grep ":80"Для проверки порта 443 (HTTPS), который необходим для серверов с установленными SSL Certificates:
sudo netstat -tuln | grep ":443"Для отображения имени процесса и PID, ответственного за каждое соединение, добавьте флаг -p:
sudo netstat -tulnpПроверка портов с помощью ss
Что такое ss?
ss (статистика сокетов) — современная замена netstat. Она быстрее, эффективнее и предоставляет более богатый вывод — особенно на системах с большим количеством одновременных соединений. Команда ss включена по умолчанию практически на всех современных дистрибутивах Linux и не требует дополнительной установки.
Использование ss для проверки открытых и прослушиваемых портов
Синтаксис ss тесно соответствует синтаксису netstat, что облегчает переход:
ss -tulnРасшифровка флагов:
| Флаг | Описание |
|---|---|
-t | Показать TCP сокеты |
-u | Показать UDP сокеты |
-l | Показать только прослушиваемые сокеты |
-n | Отображать числовые адреса |
Пример вывода
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:*Продвинутое использование ss
Команда ss предлагает ряд продвинутых опций фильтрации и отображения, которые выходят далеко за пределы того, что может предоставить netstat.
Показать только прослушиваемые TCP порты
ss -tlПоказать только прослушиваемые UDP порты
ss -ulОтображение имен процессов и PID
Для определения того, какой процесс использует конкретный порт, используйте флаг -p:
ss -tulnpЭто одна из самых полезных команд для устранения неполадок — она показывает имя процесса и PID рядом с каждым прослушиваемым сокетом, сразу же ясно показывая, какое приложение владеет каким портом.
Пример вывода с флагом -p
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:80 users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0.0.0.0:22 users:(("sshd",pid=987,fd=3))
tcp LISTEN 0.0.0.0:3306 users:(("mysqld",pid=2345,fd=21))Фильтрация по конкретному порту
Для проверки того, какой процесс прослушивает порт 8080:
ss -tulnp | grep ":8080"Показать все установленные TCP соединения
ss -tn state establishedПоказать сводную статистику
ss -sЭто предоставляет быструю сводку общего количества сокетов по типам и состояниям — полезно для обнаружения необычных объемов соединений.
netstat против ss: прямое сравнение
| Функция | `netstat` | `ss` |
|---|---|---|
| Производительность | Медленнее на загруженных системах | Значительно быстрее |
| Доступность по умолчанию | Требует пакет net-tools | Предустановлен на современных дистрибутивах |
| Опции фильтрации | Базовые (требуется grep) | Продвинутые встроенные фильтры |
| Информация о процессе | Доступна с -p | Доступна с -p |
| Детальность вывода | Стандартная | Более подробная информация о сокетах |
| Рекомендуется для | Устаревшие системы, знакомство | Современные среды Linux |
Когда использовать netstat
- На старых системах Linux, где
ssнедоступен - При работе со скриптами или документацией, написанной с использованием синтаксиса
netstat - Для быстрых проверок на системах, где
net-toolsуже установлен
Когда использовать ss
- На любом современном дистрибутиве Linux (Ubuntu 20.04+, CentOS 8+, Debian 10+ и т. д.)
- Когда вам нужен более быстрый вывод на высоконагруженных серверах
- Для продвинутой фильтрации и подробного анализа сокетов
Дополнительные инструменты для аудита портов
Помимо netstat и ss, несколько других утилит ценны для тщательного аудита портов.
Использование lsof
lsof (список открытых файлов) рассматривает сетевые сокеты как файлы, что делает его еще одним мощным способом определить, какой процесс использует данный порт.
Для проверки того, какой процесс привязан к порту 80:
sudo lsof -i :80Для проверки всех прослушиваемых портов:
sudo lsof -i -P -n | grep LISTENПример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 23456 0t0 TCP *:80 (LISTEN)
sshd 987 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)Использование nmap
nmap — мощный
