Проверка открытых и прослушиваемых портов в Linux с помощью Netstat и SS
Мониторинг открытых и прослушиваемых портов в системе Linux — одна из наиболее фундаментальных практик для поддержания безопасности сервера, диагностики сетевых проблем и эффективного управления инфраструктурой. Независимо от того, работаете ли вы с производственным веб-сервером, средой 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 сертификатами:
sudo netstat -tuln | grep ":443"Чтобы также отобразить имя процесса и PID, ответственные за каждое соединение, добавьте флаг -p:
sudo netstat -tulnpПроверка портов с ss
Что такое ss?
ss (socket statistics) — это современная замена 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 vs. 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 — это мощный инструмент сканирования сети, который может обнаруживать открытые порты как локально, так и на удаленных хостах. Он особенно полезен для проверки конфигурации брандмауэра с внешней точки зрения.
Установите nmap, если он еще не установлен:
sudo apt install nmap # Debian/Ubuntu
sudo yum install nmap # CentOS/RHELСканируйте все TCP порты на локальной машине:
sudo nmap -sT localhostСканируйте открытые порты на конкретном IP-адресе:
sudo nmap -sV 192.168.1.100Флаг -sV также пытается определить версию сервиса, работающего на каждом открытом порту, что неоценимо для выявления устаревшего или уязвимого программного обеспечения.
> Примечание безопасности: Запускайте сканирование nmap только на системах, которыми вы владеете или на которые у вас есть явное разрешение на сканирование.
Практический рабочий процесс безопасности: аудит портов сервера
Вот рекомендуемый пошаговый рабочий процесс для аудита открытых портов на сервере Linux:
- Список всех прослушиваемых портов с информацией о процессе:
ss -tulnp- Сопоставьте каждый порт с ожидаемыми сервисами. Если вы видите неизвестный процесс на неожиданном порту, немедленно проведите расследование.
- Проверьте сервисы, прослушивающие все интерфейсы (
0.0.0.0), которые должны быть доступны только локально. Например, сервер базы данных (порт 3306) обычно должен привязываться к127.0.0.1, а не к0.0.0.0.
- Проверьте правила брандмауэра с помощью
iptables -L -nилиufw status verboseчтобы убедиться, что только предполагаемые порты открыты снаружи.
- Используйте
nmapс внешнего хоста чтобы подтвердить, какие порты действительно доступны из интернета, так как правила брандмауэра могут отличаться от того, чтоssсообщает локально.
- Закройте или ограничьте любые порты, которые не требуются с помощью брандмауэра или остановив связанный сервис.
Краткий справочник: Наиболее полезные команды
# List all listening TCP and UDP ports (modern, recommended)
ss -tuln
# List listening ports with process names and PIDs
ss -tulnp
# List all listening ports using netstat (legacy)
sudo netstat -tulnp
# Check which process is using port 443
ss -tulnp | grep ":443"
# Check open ports with lsof
sudo lsof -i -P -n | grep LISTEN
# Scan local machine for open ports with nmap
sudo nmap -sT localhostЗаключение
Регулярный аудит открытых и прослушиваемых портов является неотъемлемой частью администрирования Linux-сервера. Такие инструменты, как netstat и ss, обеспечивают немедленную и детальную видимость того, какие сервисы работают, какие порты они занимают и присутствует ли что-то неожиданное в вашей системе.
Для современных Linux-окружений ss — это явный выбор — он быстрее, более функционален и доступен по умолчанию. Однако netstat остается надежной альтернативой для устаревших систем или администраторов, уже знакомых с его синтаксисом. Дополнение этих инструментов lsof и nmap дает полную картину сетевой уязвимости вашего сервера.
Независимо от того, укрепляете ли вы новое развертывание VPS Hosting, управляете парком Dedicated Servers или защищаете окружение Email Hosting, овладение аудитом портов — это важный навык, который напрямую способствует безопасности и надежности вашей инфраструктуры.
на всех хостинговых услугах