Умение проверять открытые порты на Linux - базовый навык для любого, кто администрирует серверы, диагностирует сетевые проблемы или занимается укреплением безопасности системы. Открытый порт - это, по сути, дверь в твою систему. И если ты не знаешь, какие двери открыты, нормально защитить их не получится. Неважно, запускаешь ли ты веб-сервер на Ubuntu, управляешь VPS или разбираешься с проблемами подключения - список открытых портов даёт чёткое представление о том, что твоя система выставляет в сеть. В этом руководстве разобраны четыре практических способа, объяснена фильтрация результатов и показано, как закрыть ненужные порты.
Главное:
- Команда
ss- современный и самый быстрый способ вывести список открытых портов на Linux. nmapпозволяет сканировать порты с внешней стороны и показывает то, что видит потенциальный злоумышленник.- Используй
lsof, чтобы мгновенно определить, какой процесс занимает конкретный порт. - Закрытие ненужных портов через
ufwилиiptables- самый прямой способ сократить поверхность атаки.
Содержание
- Зачем проверять открытые порты на Linux
- Способ 1: команда ss (современный, рекомендуемый)
- Способ 2: команда netstat (устаревшая, но популярная)
- Способ 3: сканирование портов через nmap (взгляд снаружи)
- Способ 4: команда lsof (маппинг процессов и портов)
- Как фильтровать результаты по порту, TCP или UDP
- Как закрыть или заблокировать порт через ufw или iptables
- Заключение
- FAQ - частые вопросы
Зачем проверять открытые порты на 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 и посмотри, что твой сервер реально открывает наружу.
Проверь любой порт на своём 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 - это предотвратит запуск сервиса после перезагрузки.