Открытые порты — одна из первых вещей, которые стоит проверить после установки VPS или выделенного сервера. По ним можно понять, какие сетевые службы доступны извне и нет ли на сервере сервисов, которые случайно оставили доступными для всего интернета.
Проверка портов полезна не только для безопасности. Она помогает найти причину проблем с SSH, веб-сервером, почтой, VPN, базами данных и другими сервисами.
В этой инструкции разберём несколько способов проверки портов: непосредственно на сервере, с другого компьютера и с помощью онлайн-сервисов.
Что такое открытый порт
Порт — это числовой идентификатор, через который приложение принимает сетевые соединения.
Например:
22 SSH
80 HTTP
443 HTTPS
25 SMTP
53 DNS
110 POP3
143 IMAP
587 SMTP Submission
Сам по себе открытый порт не означает, что сервер взломан или находится под угрозой. Важно понимать, какая программа его использует и действительно ли этот доступ необходим.
Например, для веб-сервера обычно открыты порты 80 и 443, а SSH может работать на 22 или на другом выбранном вами порту.
Проверка портов с помощью ss
В современных Linux-дистрибутивах для просмотра сетевых соединений обычно используется ss.
Выполните:
sudo ss -tulpn
В результате появится список служб, которые прослушивают сетевые порты.
Например:
Netid State Local Address:Port
tcp LISTEN 0.0.0.0:22
tcp LISTEN 0.0.0.0:80
tcp LISTEN 0.0.0.0:443
В этом случае сервер принимает подключения на портах 22, 80 и 443.
Что означают параметры
В команде:
sudo ss -tulpn
используются следующие параметры:
-
-t— TCP; -
-u— UDP; -
-l— только прослушиваемые порты; -
-p— показать процесс, который использует порт; -
-n— показывать номера портов вместо названий служб.
Узнать, какая программа использует порт
Если необходимо определить конкретное приложение, можно выполнить:
sudo ss -lntup
В выводе будет указано имя процесса и его PID.
Например:
users:(("sshd",pid=1234,fd=3))
Это означает, что порт используется SSH-сервисом.
Проверка конкретного порта
Если нужно проверить только один порт, можно использовать ss вместе с фильтром.
Например, для SSH:
sudo ss -lntup | grep :22
Для HTTPS:
sudo ss -lntup | grep :443
Если команда ничего не возвращает, локальная служба не прослушивает этот порт.
Проверка портов с помощью lsof
Другой удобный вариант — lsof.
Если пакет установлен, выполните:
sudo lsof -i -P -n
Чтобы посмотреть только TCP-порты в состоянии LISTEN:
sudo lsof -iTCP -sTCP:LISTEN -P -n
Команда покажет, какая программа открыла порт, её PID и другую информацию о соединении.
Если lsof не установлен, его можно установить через пакетный менеджер вашего дистрибутива.
Для Ubuntu и Debian:
sudo apt update
sudo apt install lsof
Для AlmaLinux, Rocky Linux и других RHEL-подобных систем:
sudo dnf install lsof
Проверка с помощью netstat
На старых системах можно встретить netstat.
Команда:
sudo netstat -tulpn
показывает список прослушиваемых портов.
Однако в современных Linux-дистрибутивах ss предпочтительнее, поскольку netstat считается устаревшим инструментом.
Проверка портов через Nmap
Проверка непосредственно на сервере показывает, какие порты слушают локальные службы. Но этого недостаточно.
Firewall может разрешать или запрещать доступ к этим портам извне.
Поэтому полезно проверить сервер с другой машины.
Для этого удобно использовать Nmap.
Установите Nmap на отдельный компьютер или другой сервер.
Например, для проверки конкретного IP:
nmap 203.0.113.10
Nmap покажет доступные извне порты.
Пример:
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Проверка конкретного порта через Nmap
Если нужно проверить один порт:
nmap -p 22 203.0.113.10
Несколько портов:
nmap -p 22,80,443 203.0.113.10
Диапазон портов:
nmap -p 1-1000 203.0.113.10
Для проверки всех TCP-портов:
nmap -p- 203.0.113.10
Проверка всех портов может занять больше времени.
Почему проверка с другого сервера важнее
Допустим, команда:
sudo ss -tulpn
показывает:
0.0.0.0:3306
Это означает, что MySQL слушает порт 3306 на всех IPv4-интерфейсах.
Но это ещё не означает, что любой пользователь из интернета может подключиться к MySQL.
Доступ может быть ограничен firewall.
Поэтому всегда полезно разделять два понятия:
порт слушает локально — приложение принимает соединения на этом порту;
порт доступен извне — соединение к нему можно установить через интернет.
Именно второй вариант имеет большее значение с точки зрения внешней безопасности.
Проверка firewall
После просмотра открытых портов проверьте правила firewall.
Если используется UFW:
sudo ufw status
Для получения более подробной информации:
sudo ufw status verbose
Если используется firewalld:
sudo firewall-cmd --list-all
Список разрешённых портов:
sudo firewall-cmd --list-ports
Проверка iptables
Если на сервере используется iptables:
sudo iptables -L -n -v
Для более подробного просмотра правил:
sudo iptables -L -n -v --line-numbers
На современных системах правила могут работать через nftables, даже если администратор привык использовать команды iptables.
Проверка nftables
Если используется nftables:
sudo nft list ruleset
Команда покажет активный набор правил firewall.
Не стоит менять правила firewall, не разобравшись в текущей конфигурации. Особенно осторожно нужно работать с SSH, поскольку неправильное правило может сразу закрыть вам удалённый доступ к серверу.
Как проверить порт с помощью nc
Для быстрой проверки доступности конкретного TCP-порта можно использовать nc (Netcat).
Например:
nc -zv 203.0.113.10 443
Если порт доступен, вы увидите сообщение об успешном подключении.
Для проверки SSH:
nc -zv 203.0.113.10 22
Если nc не установлен, его можно установить через пакетный менеджер системы.
Проверка UDP-портов
TCP и UDP работают по-разному, поэтому проверять их нужно отдельно.
Например, Nmap может проверить UDP-порт:
sudo nmap -sU -p 51820 203.0.113.10
Это может быть полезно при проверке VPN-сервисов, DNS и других приложений, использующих UDP.
UDP-сканирование обычно занимает больше времени, чем TCP-проверка.
Какие порты обычно должны быть открыты
Всё зависит от назначения сервера.
Для обычного веб-сервера обычно нужны:
22/tcp SSH
80/tcp HTTP
443/tcp HTTPS
Если используется VPN, могут понадобиться дополнительные порты.
Например, WireGuard по умолчанию использует:
51820/udp
Для OpenVPN часто используется:
1194/udp
Но конкретные порты зависят от конфигурации сервера.
Какие порты не стоит открывать без необходимости
Не следует оставлять доступными из интернета сервисы, которым такой доступ не нужен.
Особое внимание стоит обратить на:
3306 MySQL
5432 PostgreSQL
6379 Redis
11211 Memcached
9200 Elasticsearch
27017 MongoDB
Если база данных используется только локальным приложением, лучше привязать её к 127.0.0.1 или ограничить доступ через firewall.
Например, Redis обычно не должен быть доступен всему интернету.
Как найти подозрительный открытый порт
Если вы обнаружили неизвестный порт, сначала определите процесс:
sudo ss -lntup
или:
sudo lsof -i -P -n
Затем проверьте, какой пакет установил соответствующую службу.
Для systemd можно посмотреть статус:
sudo systemctl status service-name
Если сервис вам не нужен, его можно остановить и отключить автоматический запуск:
sudo systemctl stop service-name
sudo systemctl disable service-name
Перед отключением убедитесь, что служба действительно не используется другими приложениями.
Что делать после проверки
После аудита портов рекомендуется оставить только те службы, которые действительно нужны.
Например, для обычного веб-сервера:
22/tcp
80/tcp
443/tcp
Все остальные порты должны быть закрыты firewall, если в них нет необходимости.
Если SSH работает на нестандартном порту, вместо 22 будет использоваться выбранный вами порт.
Рекомендуемый порядок проверки
Для нового VPS или выделенного сервера удобно использовать следующий порядок:
-
Посмотреть локально открытые порты через
ss. -
Определить программы, которые используют эти порты.
-
Проверить настройки UFW, firewalld или nftables.
-
Выполнить внешнее сканирование через Nmap с другого сервера.
-
Сравнить список необходимых и доступных портов.
-
Закрыть ненужные сервисы.
-
Повторить внешнюю проверку.
Такой подход позволяет увидеть не только то, что запущено на сервере, но и то, что действительно доступно из интернета.
Частые ошибки
Порт отображается как LISTEN, но Nmap показывает его закрытым
Это нормальная ситуация.
Приложение может слушать порт локально, но firewall не разрешает входящие подключения.
Порт открыт, хотя приложение не должно быть доступно из интернета
Проверьте настройки firewall и адрес, на котором служба слушает.
Например:
127.0.0.1:3306
доступен только локально.
А:
0.0.0.0:3306
означает, что приложение слушает все IPv4-интерфейсы.
После изменения firewall пропал SSH
Это одна из самых распространённых ошибок.
Перед изменением firewall убедитесь, что SSH-порт разрешён.
Если вы работаете через удалённую консоль провайдера, например VNC или IPMI, сначала убедитесь, что у вас есть альтернативный способ доступа к серверу.
Итог
Проверка открытых портов — простая, но важная часть администрирования VPS и выделенного сервера.
Для локальной проверки используйте:
sudo ss -tulpn
Для внешней проверки:
nmap SERVER_IP
А для проверки конкретного TCP-порта:
nc -zv SERVER_IP PORT
После проверки оставляйте доступными только те порты, которые действительно используются. Особенно внимательно относитесь к базам данных, кэшам и административным сервисам — им обычно не нужен прямой доступ из интернета.