Проверка открытых и прослушиваемых портов в Linux с использованием netstat и ss
Мониторинг открытых и прослушиваемых портов в системе Linux — одна из наиболее критических практик для поддержания безопасности сервера, диагностики проблем с сетью и эффективного управления инфраструктурой. Регулярно проверяя, какие порты открыты и какие сервисы привязаны к ним, вы можете заранее выявить попытки несанкционированного доступа, обнаружить неправильные конфигурации и устранить ненужные векторы атак до того, как они станут серьезными уязвимостями.
Независимо от того, запускаете ли вы высоконагруженное приложение на плане VPS Hosting или управляете парком bare-metal машин, понимание сетевого воздействия вашего сервера Linux является обязательным. Это руководство содержит подробное и технически точное описание того, как использовать netstat и ss — два наиболее широко используемых инструмента командной строки для проверки портов в Linux — вместе с дополнительными инструментами и лучшими практиками из реальной жизни.
1. Понимание портов и их типов
Прежде чем переходить к самим инструментам, важно четко понять, что такое порты, как они категоризируются и почему их мониторинг имеет значение.
Что такое сетевой порт?
Сетевой порт — это логическая конечная точка связи, связанная с конкретным процессом или сервисом на хосте. Порты позволяют одному серверу с одним IP-адресом одновременно запускать несколько сетевых сервисов — например, веб-сервер на порту 80, SSH-демон на порту 22 и базу данных на порту 3306.
Категории портов
| Диапазон | Категория | Описание |
|---|---|---|
| 0–1023 | Известные порты | Зарезервированы для стандартных системных сервисов (HTTP, SSH, FTP и т. д.) |
| 1024–49151 | Зарегистрированные порты | Используются приложениями и промежуточным ПО (MySQL, PostgreSQL и т. д.) |
| 49152–65535 | Динамические/эфемерные порты | Временно назначаются для исходящих клиентских соединений |
Состояния портов, которые вы встретите
- LISTEN — порт открыт и сервис активно ожидает входящих соединений.
- ESTABLISHED — существует активное соединение между двумя конечными точками.
- TIME_WAIT — соединение закрывается; система ожидает, чтобы убедиться, что удаленная сторона получила финальное подтверждение.
- CLOSE_WAIT — удаленная сторона закрыла соединение; локальное приложение еще не закрыло свою сторону.
Транспортные протоколы
- TCP (Transmission Control Protocol): ориентирован на соединение, надежен, с проверкой ошибок и гарантированной доставкой. Используется HTTP, HTTPS, SSH, FTP и большинством протоколов прикладного уровня.
- UDP (User Datagram Protocol): без соединения, быстрее, но без гарантий доставки. Используется DNS, NTP, DHCP и сервисами потоковой передачи.
2. Проверка портов с помощью netstat
Что такое netstat?
netstat (сетевая статистика) — это классическая утилита командной строки, которая отображает активные сетевые соединения, таблицы маршрутизации, статистику интерфейсов и прослушиваемые порты. Хотя она официально устарела в пользу ss на современных дистрибутивах Linux, netstat остается широко распространенной — особенно на устаревших системах и в окружениях, где администраторы хорошо знакомы с её синтаксисом.
Установка netstat
netstat является частью пакета net-tools, который больше не устанавливается по умолчанию на многих современных дистрибутивах. Установите его следующим образом:
Debian / Ubuntu:
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux:
sudo pacman -S net-toolsОсновной синтаксис netstat
sudo netstat [options]Проверка всех прослушиваемых портов TCP и UDP
sudo netstat -tulnРасшифровка флагов:
| Флаг | Значение |
|---|---|
-t | Отображать TCP соединения и порты |
-u | Отображать UDP соединения и порты |
-l | Показывать только прослушиваемые сокеты (порты, ожидающие соединений) |
-n | Отображать числовые IP-адреса и номера портов (пропустить разрешение DNS для скорости) |
Пример вывода:
Active Internet connections (only servers)
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
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Чтение вывода:
- Proto — используемый протокол (tcp, udp, tcp6, udp6).
- Local Address — IP-адрес и номер порта, на котором прослушивается сервис.
0.0.0.0означает, что сервис прослушивает все доступные интерфейсы;127.0.0.1означает, что он доступен только локально. - Foreign Address — адрес удаленного клиента (отображается как
0.0.0.0:*для прослушиваемых портов без активного соединения). - State — состояние соединения (
LISTEN,ESTABLISHED,TIME_WAITи т. д.).
Включение информации о процессах
Чтобы увидеть, какой процесс владеет каждым прослушиваемым портом, добавьте флаг -p:
sudo netstat -tulnpПример вывода с информацией о процессе:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Примечание: Вы должны запустить эту команду с sudo, чтобы увидеть имена процессов для всех пользователей, а не только для своих.
Фильтрация вывода для конкретных портов или сервисов
Используйте grep для сужения результатов до конкретного порта или сервиса:
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Просмотр всех активных соединений (не только прослушиваемых)
Чтобы увидеть все активные соединения, включая установленные, удалите флаг -l:
sudo netstat -tunpОтображение таблицы маршрутизации
sudo netstat -rОтображение статистики сетевого интерфейса
sudo netstat -i3. Проверка портов с помощью ss
Что такое ss?
ss (socket statistics) — это современная замена netstat, разработанная как часть пакета iproute2. Она взаимодействует напрямую с ядром Linux через сокеты Netlink, что делает её значительно быстрее и эффективнее, чем netstat — особенно на системах с тысячами одновременных соединений.
ss установлена по умолчанию практически на всех современных дистрибутивах Linux, включая Ubuntu 18.04+, CentOS 7+, Debian 9+ и их производные.
Основной синтаксис ss
ss [options] [filter]Проверка всех прослушиваемых портов TCP и UDP
ss -tulnФлаги имеют идентичное значение netstat:
| Флаг | Значение |
|---|---|
-t | Показать сокеты TCP |
-u | Показать сокеты UDP |
-l | Показать только прослушиваемые сокеты |
-n | Показать числовые адреса (без разрешения DNS) |
Пример вывода:
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 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*Включение информации о процессах
sudo ss -tulnpПример вывода:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Фильтрация по протоколу
Показать только прослушиваемые порты TCP:
ss -tlПоказать только прослушиваемые порты UDP:
ss -ulПоказать все соединения TCP (включая установленные):
ss -tРасширенная фильтрация с помощью ss
Одна из самых мощных функций ss — встроенная фильтрация на основе выражений, которая позволяет фильтровать по порту, адресу, состоянию и многому другому — без использования grep.
Фильтр по номеру конкретного порта:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Фильтр по порту назначения:
ss -tuln dport = :3306Показать все сокеты в состоянии ESTABLISHED:
ss -t state establishedПоказать все сокеты в состоянии LISTEN:
ss -t state listeningФильтр по IP-адресу источника:
ss -tuln src 192.168.1.100Показать соединения с определённым удалённым хостом:
ss -t dst 203.0.113.50Объединение нескольких фильтров:
ss -t state established '( dport = :443 or sport = :443 )'Отображение использования памяти сокетом
ss также может показывать подробное использование памяти для каждого сокета, что полезно для диагностики проблем производительности:
ss -tmОтображение информации о таймерах
ss -toЭто показывает таймеры повторной передачи и таймеры keepalive для соединений TCP, что неоценимо для диагностики проблем со стабильностью соединения.
4. Сравнение netstat и ss
Оба инструмента достигают одной и той же фундаментальной цели, но есть значимые различия, которые должны направлять ваш выбор:
| Функция | netstat | ss |
|---|---|---|
| Пакет | net-tools (часто не предустановлен) | iproute2 (предустановлен на современных дистрибутивах) |
| Скорость | Медленнее (читает из /proc/net/) | Быстрее (использует интерфейс ядра Netlink) |
| Производительность при масштабировании | Деградирует при тысячах соединений | Эффективно обрабатывает большое количество соединений |
| Продвинутая фильтрация | Требует передачи в grep | Встроенная фильтрация на основе выражений |
| Детальность вывода | Хорошая | Более детальная (память, таймеры и т. д.) |
| Поддержка IPv6 | Адекватная | Отличная |
| Статус поддержки | Устарел | Активно поддерживается |
| Кривая обучения | Знаком опытным администраторам | Немного другой синтаксис, но хорошо задокументирован |
Когда использовать netstat
- При администрировании старых систем Linux (CentOS 6, Debian 7 и т. д.), где
ssможет быть недоступен. - При работе со скриптами или документацией, которые уже используют синтаксис
netstat. - Когда вам удобнее его формат вывода и вам не нужна продвинутая фильтрация.
Когда использовать ss
- На любом современном дистрибутиве Linux (Ubuntu 18.04+, CentOS 7+, Debian 9+ и новее).
- При управлении серверами с большим объемом одновременных соединений — такими как те, которые работают на Dedicated Servers под высокой нагрузкой.
- Когда вам нужна продвинутая фильтрация, информация о таймерах или статистика памяти сокетов.
- Для автоматизации и написания скриптов, где производительность имеет значение.
5. Другие инструменты для проверки открытых портов
Помимо netstat и ss, существует несколько других утилит, полезных для проверки портов и анализа сети в Linux.
lsof — List Open Files (Including Sockets)
lsof (List Open Files) рассматривает сетевые сокеты как файлы (в соответствии с философией Linux «всё является файлом») и может отобразить, какой процесс имеет открытый определённый порт.
Установка lsof:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yПроверить, какой процесс использует порт 80:
sudo lsof -i :80Проверить, какой процесс использует порт 443:
sudo lsof -i :443Список всех сетевых соединений:
sudo lsof -iСписок всех TCP слушающих сокетов:
sudo lsof -i TCP -s TCP:LISTENПример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap — это мощный инструмент сканирования сети, используемый для аудита безопасности, обнаружения сети и сканирования портов. В отличие от ss и netstat (которые проверяют локальную систему), nmap может сканировать как локальные, так и удалённые хосты.
Установка nmap:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yСканировать все TCP порты на localhost:
sudo nmap -sT localhostСканировать открытые порты с определением ОС:
sudo nmap -sT -O localhostСканировать определённый диапазон портов:
sudo nmap -p 1-1024 localhostСканировать UDP порты (требует прав root):
sudo nmap -sU localhostСканировать удалённый сервер:
sudo nmap -sT 203.0.113.50> Важно: Сканируйте только системы, которыми вы владеете, или системы, на сканирование которых у вас есть явное разрешение. Несанкционированное сканирование портов может нарушить законодательство и условия обслуживания.
fuser — Определение процессов, использующих файлы или сокеты
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Прямой интерфейс ядра
Для целей скриптинга вы можете читать информацию о портах непосредственно из виртуальной файловой системы ядра Linux:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpОбратите внимание, что адреса и порты в /proc/net/tcp отображаются в шестнадцатеричном формате и требуют преобразования для удобства чтения человеком. Инструменты, такие как ss и netstat, автоматически анализируют эти данные.
6. Лучшие практики безопасности при управлении открытыми портами
Знание того, как проверить открытые порты — это только половина дела. Действия на основе этой информации — вот что обеспечивает безопасность вашего сервера. Вот практические рекомендации, которые должен следовать каждый администратор Linux:
Принцип минимальной открытости
Открывайте только те порты, которые абсолютно необходимы для работы вашего приложения. Каждый открытый порт — это потенциальный вектор атаки. Регулярно проверяйте прослушиваемые порты и закрывайте или блокируйте брандмауэром все, что не должно быть общедоступным.
Привязка сервисов к определенным интерфейсам
Избегайте привязки сервисов к 0.0.0.0 (все интерфейсы), если это не требуется. Например, сервер базы данных MySQL должен прослушивать только 127.0.0.1, если он доступен только локально:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Используйте брандмауэр
Используйте ufw (Ubuntu) или firewalld / iptables (CentOS/RHEL) для ограничения доступа к открытым портам по IP-адресу, подсети или сетевому интерфейсу:
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Регулярная проверка прослушиваемых портов
Планируйте регулярные проверки портов с помощью заданий cron или инструментов мониторинга. Внезапно появившийся новый прослушиваемый порт может указывать на скомпрометированный сервис, неправильную конфигурацию или — в худшем случае — вредоносное ПО:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtЗащита сервисов с помощью SSL/TLS
Любой сервис, открытый в интернет — веб-серверы, почтовые серверы, панели управления — должен использовать зашифрованные соединения. Дополните открытые порты действительными SSL сертификатами для защиты данных при передаче и предотвращения атак типа «человек посередине».
Мониторинг неожиданных изменений
Используйте инструменты обнаружения вторжений, такие как AIDE, Tripwire или auditd, чтобы получать оповещения при запуске новых процессов, прослушивающих порты. Интегрируйте с централизованным логированием (например, ELK Stack, Graylog) для полной видимости.
Отключение неиспользуемых сервисов
Если сервис не требуется, остановите его и отключите его запуск при загрузке:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Краткий справочник: наиболее полезные команды
| Задача | Команда netstat | Команда ss | |
|---|---|---|---|
| Все прослушиваемые TCP/UDP порты | sudo netstat -tuln | sudo ss -tuln | |
| Все прослушиваемые порты с PID | sudo netstat -tulnp | sudo ss -tulnp | |
| Только прослушиваемые TCP порты | sudo netstat -tln | sudo ss -tl | |
| Только прослушиваемые UDP порты | sudo netstat -uln | sudo ss -ul | |
| Фильтр по порту 80 | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Все установленные соединения | sudo netstat -tunp | sudo ss -t state established | |
| Показать таблицу маршрутизации | sudo netstat -r | ip route show |
Заключение
Мониторинг открытых и прослушиваемых портов — это фундаментальный навык для любого администратора Linux или инженера DevOps. Независимо от того, защищаете ли вы production веб-сервер, устраняете проблему подключения или проводите плановый аудит безопасности, netstat и ss дают вам немедленную, практическую видимость сетевого воздействия вашей системы.
Подведем итоги ключевых выводов:
- Используйте
ssкак основной инструмент на любом современном дистрибутиве Linux — он быстрее, имеет больше функций и активно поддерживается. - Используйте
netstatпри работе с устаревшими системами или когда существующие скрипты и рабочие процессы зависят от него. - Дополняйте
lsofиnmapдля более глубокого анализа на уровне процессов и внешнего сканирования портов. - Всегда действуйте на основе полученных результатов — закрывайте ненужные порты, привязывайте сервисы к правильным интерфейсам и применяйте правила брандмауэра.
- Защищайте открытые сервисы с помощью надлежащих SSL сертификатов и контроля доступа.
Если вы ищете хостинг-среду, которая дает вам полный root-доступ для реализации этих практик безопасности, планы VPS хостинга AlexHost обеспечивают полный контроль над конфигурацией вашего Linux сервера — включая управление брандмауэром, усиление безопасности сервисов и мониторинг сети. Для команд, которым требуется максимальная производительность и выделенные ресурсы, наши выделенные серверы обеспечивают мощность и изоляцию, необходимые для операций безопасности корпоративного уровня. Если вы предпочитаете управляемую среду с привычным интерфейсом, изучите наши опции VPS с cPanel для упрощенного управления сервером без ущерба для контроля.
Регулярный аудит портов в сочетании с усиленной конфигурацией сервера — одна из наиболее эффективных защит от несанкционированного доступа и утечек данных. Сделайте это обычной частью вашей практики системного администрирования.
на всех хостинговых услугах