Как проверить открытые порты на сервере Печать

  • порт, port
  • 0

Открытые порты — одна из первых вещей, которые стоит проверить после установки 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 или выделенного сервера удобно использовать следующий порядок:

  1. Посмотреть локально открытые порты через ss.

  2. Определить программы, которые используют эти порты.

  3. Проверить настройки UFW, firewalld или nftables.

  4. Выполнить внешнее сканирование через Nmap с другого сервера.

  5. Сравнить список необходимых и доступных портов.

  6. Закрыть ненужные сервисы.

  7. Повторить внешнюю проверку.

Такой подход позволяет увидеть не только то, что запущено на сервере, но и то, что действительно доступно из интернета.

Частые ошибки

Порт отображается как 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

После проверки оставляйте доступными только те порты, которые действительно используются. Особенно внимательно относитесь к базам данных, кэшам и административным сервисам — им обычно не нужен прямой доступ из интернета.


Помог ли вам данный ответ?

« Назад