Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Безопасность

Проверка открытых и прослушиваемых портов в 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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch 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 -i

3. Проверка портов с помощью 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

Оба инструмента достигают одной и той же фундаментальной цели, но есть значимые различия, которые должны направлять ваш выбор:

Функцияnetstatss
Пакет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 -tulnsudo ss -tuln
Все прослушиваемые порты с PIDsudo netstat -tulnpsudo ss -tulnp
Только прослушиваемые TCP портыsudo netstat -tlnsudo ss -tl
Только прослушиваемые UDP портыsudo netstat -ulnsudo ss -ul
Фильтр по порту 80`sudo netstat -tulngrep ":80"`sudo ss -tuln sport = :80
Все установленные соединенияsudo netstat -tunpsudo ss -t state established
Показать таблицу маршрутизацииsudo netstat -rip route show

Заключение

Мониторинг открытых и прослушиваемых портов — это фундаментальный навык для любого администратора Linux или инженера DevOps. Независимо от того, защищаете ли вы production веб-сервер, устраняете проблему подключения или проводите плановый аудит безопасности, netstat и ss дают вам немедленную, практическую видимость сетевого воздействия вашей системы.

Подведем итоги ключевых выводов:

  • Используйте ss как основной инструмент на любом современном дистрибутиве Linux — он быстрее, имеет больше функций и активно поддерживается.
  • Используйте netstat при работе с устаревшими системами или когда существующие скрипты и рабочие процессы зависят от него.
  • Дополняйте lsof и nmap для более глубокого анализа на уровне процессов и внешнего сканирования портов.
  • Всегда действуйте на основе полученных результатов — закрывайте ненужные порты, привязывайте сервисы к правильным интерфейсам и применяйте правила брандмауэра.
  • Защищайте открытые сервисы с помощью надлежащих SSL сертификатов и контроля доступа.

Если вы ищете хостинг-среду, которая дает вам полный root-доступ для реализации этих практик безопасности, планы VPS хостинга AlexHost обеспечивают полный контроль над конфигурацией вашего Linux сервера — включая управление брандмауэром, усиление безопасности сервисов и мониторинг сети. Для команд, которым требуется максимальная производительность и выделенные ресурсы, наши выделенные серверы обеспечивают мощность и изоляцию, необходимые для операций безопасности корпоративного уровня. Если вы предпочитаете управляемую среду с привычным интерфейсом, изучите наши опции VPS с cPanel для упрощенного управления сервером без ущерба для контроля.

Регулярный аудит портов в сочетании с усиленной конфигурацией сервера — одна из наиболее эффективных защит от несанкционированного доступа и утечек данных. Сделайте это обычной частью вашей практики системного администрирования.