Как проверить открытые порты в Linux: полное руководство 2026

Терминал Linux с открытыми портами, отображёнными командами ss и netstat

Умение проверять открытые порты на Linux - базовый навык для любого, кто администрирует серверы, диагностирует сетевые проблемы или занимается укреплением безопасности системы. Открытый порт - это, по сути, дверь в твою систему. И если ты не знаешь, какие двери открыты, нормально защитить их не получится. Неважно, запускаешь ли ты веб-сервер на Ubuntu, управляешь VPS или разбираешься с проблемами подключения - список открытых портов даёт чёткое представление о том, что твоя система выставляет в сеть. В этом руководстве разобраны четыре практических способа, объяснена фильтрация результатов и показано, как закрыть ненужные порты.

Главное:

  • Команда ss - современный и самый быстрый способ вывести список открытых портов на Linux.
  • nmap позволяет сканировать порты с внешней стороны и показывает то, что видит потенциальный злоумышленник.
  • Используй lsof, чтобы мгновенно определить, какой процесс занимает конкретный порт.
  • Закрытие ненужных портов через ufw или iptables - самый прямой способ сократить поверхность атаки.

Зачем проверять открытые порты на Linux

Каждый сервис, запущенный на твоей Linux-машине, слушает один или несколько портов. SSH слушает порт 22, HTTP - порт 80, HTTPS - порт 443. Но после нескольких месяцев установки и удаления программ на сервере нередко остаются открытые порты, которые никто намеренно не настраивал. Забытый daemon базы данных, слушающий порт 5432 без правила в файрволе - это реальная угроза, которая уже приводила к утечкам данных.

Проверка открытых портов на Linux помогает:

  • Провести аудит того, какие сервисы реально запущены и доступны извне.
  • Диагностировать, почему приложение не может подключиться к другому сервису.
  • Убедиться, что правила файрвола работают так, как задумано.
  • Подготовиться к аудиту безопасности или пентесту.

Описанные ниже способы охватывают как локальную проверку (что сообщает сама машина), так и внешнее сканирование (что видит удалённый хост). Оба подхода важны.

Способ 1: команда ss (современный, рекомендуемый)

Команда ss (socket statistics) пришла на смену netstat в большинстве современных дистрибутивов Linux. Она быстрее, выдаёт больше деталей и входит в пакет iproute2, который по умолчанию установлен на Ubuntu, Debian, CentOS и Fedora.

Чтобы вывести все открытые порты вместе с именами процессов, выполни:

sudo ss -tulnp

Расшифровка флагов:

  • -t - показать TCP-сокеты
  • -u - показать UDP-сокеты
  • -l - показать только слушающие сокеты
  • -n - показать номера портов вместо имён сервисов
  • -p - показать процесс, использующий каждый сокет

Конкретный пример: На свежем Ubuntu-сервере с Nginx и PostgreSQL вывод может выглядеть так:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0       128     127.0.0.1:5432       0.0.0.0:*          users:(("postgres",pid=5678,fd=5))
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=910,fd=3))

Обрати внимание: PostgreSQL привязан только к 127.0.0.1, то есть снаружи он недоступен. SSH и Nginx привязаны к 0.0.0.0 - они принимают подключения с любого IP. Один этот вывод даёт полное представление о том, что открыто для внешнего мира.

Полный справочник по всем опциям ss смотри на официальной man-странице ss.

Способ 2: команда netstat (устаревшая, но популярная)

Команда netstat входит в старый пакет net-tools. По умолчанию она больше не устанавливается во многих дистрибутивах, но по-прежнему широко используется и стоит её знать - особенно при работе на старых системах.

Установка при необходимости:

sudo apt install net-tools   # Debian/Ubuntu
sudo yum install net-tools   # CentOS/RHEL

Чтобы вывести список открытых портов на Linux через netstat:

sudo netstat -tulnp

Флаги по смыслу идентичны флагам ss. Формат вывода немного отличается, но основная информация та же: протокол, локальный адрес, порт и процесс-владелец.

Одно практическое ограничение: на очень нагруженных серверах с тысячами соединений netstat заметно медленнее ss. На обычном сервере при повседневных задачах разница несущественна.

Способ 3: сканирование портов через nmap (взгляд снаружи)

Инструменты выше показывают то, что сообщает сама машина изнутри. nmap работает иначе - он сканирует порты по сети, имитируя то, что видит внешний злоумышленник или удалённый клиент. Это принципиально важно: файрвол может блокировать порт, который ss всё равно показывает как слушающий.

Установка nmap:

sudo apt install nmap   # Debian/Ubuntu
sudo yum install nmap   # CentOS/RHEL

Сканирование сервера с другой машины в той же сети:

nmap -sT -p 1-1024 192.168.1.10

Сканирование 1000 наиболее распространённых портов с определением версий сервисов:

nmap -sV 192.168.1.10

Флаг -sV пытается определить версию программного обеспечения на каждом открытом порту. Это удобно для выявления устаревших сервисов, требующих обновления.

Важно: Запускай nmap только против серверов, которые тебе принадлежат или на сканирование которых у тебя есть явное разрешение. Сканирование сторонних систем без авторизации может быть незаконным в твоей юрисдикции.

Если нужно проверить, доступен ли конкретный порт снаружи твоей сети без установки nmap - наш бесплатный инструмент Port Checker справится с этим мгновенно, без какой-либо настройки.

Способ 4: команда lsof (маппинг процессов и портов)

Команда lsof (list open files) рассматривает сетевые сокеты как файлы - это согласуется с философией Linux «всё есть файл». Она особенно полезна, когда нужно ответить на вопрос: «Какой процесс использует порт 8080?»

Вывести все сетевые соединения:

sudo lsof -i

Найти процесс, использующий конкретный порт (например, порт 3000):

sudo lsof -i :3000

Это особенно удобно, когда Node.js-приложение разработчика занимает порт и нужно найти и завершить процесс перед перезапуском сервиса.

Как фильтровать результаты по порту, TCP или UDP

Вывод любого из этих инструментов может быть избыточным. Вот самые полезные паттерны фильтрации:

Показать только TCP-порты в состоянии прослушивания (ss):

sudo ss -tlnp

Показать только UDP-порты (ss):

sudo ss -ulnp

Проверить, открыт ли конкретный порт (grep с ss):

sudo ss -tulnp | grep :443

Фильтрация по порту через nmap:

nmap -p 80,443,8080 192.168.1.10

Эти паттерны покрывают подавляющее большинство повседневных задач фильтрации. По вопросам диагностики HTTP на порту 80 смотри наше руководство по диагностике HTTP на порту 80.

Если ты работаешь на Windows и тебе нужен аналогичный разбор, загляни в наше полное руководство по проверке открытых портов на Windows 2026.

Как закрыть или заблокировать порт через ufw или iptables

Обнаружить ненужный открытый порт - это только половина дела. Вот как его закрыть с помощью двух наиболее распространённых инструментов файрвола в Linux.

Использование ufw (Uncomplicated Firewall) - рекомендуется для Ubuntu

Заблокировать входящий трафик на порт 8080:

sudo ufw deny 8080/tcp

Разрешить только SSH и HTTPS, всё остальное запретить:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Проверить текущий статус файрвола:

sudo ufw status verbose

Использование iptables - для расширенного управления

Сбрасывать весь входящий трафик на порт 3306 (MySQL):

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

Сохранить правила, чтобы они сохранялись после перезагрузки:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Для детального изучения синтаксиса iptables и порядка применения правил обращайся к официальной документации Netfilter - это авторитетный источник.

Совет: Блокировка порта через ufw или iptables не останавливает сам сервис - она лишь запрещает внешним подключениям до него добраться. Если нужно полностью остановить сервис, используй sudo systemctl stop servicename. Чтобы он не запускался после перезагрузки, также выполни sudo systemctl disable servicename.

Заключение

Проверка открытых портов на Linux не требует сложных инструментов или глубокой экспертизы. Команда ss даёт быстрый и надёжный локальный обзор. nmap показывает, что доступно снаружи. lsof точно определяет, какой процесс занимает порт. А ufw или iptables позволяют закрыть всё лишнее. Регулярно выполнять эти проверки - особенно после установки нового программного обеспечения или изменения сетевых настроек - одна из самых простых привычек для поддержания безопасности Linux-серверов. Начни прямо сейчас: запусти sudo ss -tulnp и посмотри, что твой сервер реально открывает наружу.

Бесплатный инструмент Port Checker - мгновенная проверка открытых портов на твоём Linux-сервере

Проверь любой порт на своём Linux-сервере - мгновенно

Не уверен, действительно ли порт доступен снаружи? Наш бесплатный инструмент Port Checker сканирует твой сервер с внешней стороны за считанные секунды - без установки и настройки.

Попробовать бесплатный Port Checker →

FAQ - частые вопросы

Выполни sudo ss -tulnp в терминале. Эта команда использует современный инструмент ss и показывает все TCP- и UDP-порты в состоянии прослушивания вместе с именем процесса. Она быстрее netstat и доступна по умолчанию в большинстве актуальных дистрибутивов Linux, включая Ubuntu и Debian.

Обе команды показывают открытые порты и информацию о сокетах, но ss - это современная замена netstat. Она читает данные напрямую из ядра, что делает её быстрее и точнее на нагруженных системах. netstat требует отдельного пакета net-tools, который по умолчанию больше не устанавливается во многих дистрибутивах.

Используй nmap -p PORT TARGET_IP с другой машины в сети. Для быстрой внешней проверки без установки каких-либо инструментов подойдёт онлайн-инструмент проверки портов. Такой подход тестирует доступность порта снаружи с учётом правил файрвола, которые локальные инструменты вроде ss не отражают.

Используй sudo lsof -i :PORT или sudo ss -tulnp | grep :PORT. Обе команды показывают имя процесса и PID, связанные с этим портом. Способ с lsof особенно нагляден: он выводит команду, PID и пользователя в удобочитаемом формате.

Нет. Блокировка порта через ufw или iptables запрещает внешним подключениям достигать сервиса, но сам сервис продолжает работать. Чтобы полностью остановить его, используй sudo systemctl stop servicename. Для постоянного отключения также выполни sudo systemctl disable servicename - это предотвратит запуск сервиса после перезагрузки.