В этой статье разберём:
- что такое открытый порт и чем он связан со службой;
- как посмотреть, какие порты открыты прямо сейчас;
- как понять, какой процесс слушает порт;
- как найти лишние службы и отключить их;
- какие команды удобно использовать на пустом Ubuntu VPS.
Что такое открытый порт простыми словами
У каждого сетевого сервиса на сервере обычно есть свой порт. Например:
-
22 — SSH, удалённый вход на сервер;
-
80 — HTTP;
-
443 — HTTPS;
-
3306 — MariaDB/MySQL;
-
5432 — PostgreSQL.
Если порт слушается, значит какой-то процесс на сервере ждёт входящие подключения. Это не всегда плохо: SSH должен слушать свой порт, веб-сервер — тоже. Проблема появляется тогда, когда:
-
открыт сервис, который не используется;
-
база данных слушает внешний интерфейс, хотя должна быть доступна только локально;
-
на сервере запущены лишние службы, о которых уже никто не помнит.
Наша задача — посмотреть, что именно открыто, и понять: это нормально или нет.
Какие инструменты будем использовать
Для проверки открытых портов на Ubuntu удобнее всего использовать такие команды:
-
ss— главный инструмент для просмотра слушающих портов и соединений; -
lsof— показывает, какой именно процесс держит порт; -
systemctl— показывает службы, которые запущены и включены в автозагрузку.
На большинстве VPS ss уже есть. Для lsof можно сразу поставить пакет:
sudo apt update
sudo apt install -y lsof
Если захочешь использовать старую команду netstat, её нужно ставить отдельно через пакет net-tools, но сегодня ss обычно удобнее и современнее.
Как посмотреть открытые порты на сервере
Основная команда:
sudo ss -tulpn
Разберём ключи:
-
-t— TCP-порты; -
-u— UDP-порты; -
-l— только слушающие порты; -
-p— показать процесс, если возможно; -
-n— показывать числа, а не пытаться «расшифровывать» имена сервисов.
Пример типичного вывода:
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=731,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1022,fd=6))
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1022,fd=7))
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mariadbd",pid=1188,fd=20))
Что здесь видно:
-
0.0.0.0:22— SSH доступен снаружи на всех интерфейсах; -
0.0.0.0:80и0.0.0.0:443— веб-сервер слушает HTTP и HTTPS; -
127.0.0.1:3306— база данных слушает только локально, это хороший вариант; -
в столбце
Processвидно, какой процесс держит порт.
Как понять, порт открыт наружу или только локально
Один и тот же сервис может слушать:
-
0.0.0.0— на всех IPv4-интерфейсах; -
::— на всех IPv6-интерфейсах; -
127.0.0.1— только локально, снаружи не доступен; -
IP_СЕРВЕРА— только на конкретном адресе.
Например:
127.0.0.1:5432
означает, что PostgreSQL доступен только с самого сервера. Это безопаснее, если сайт и база стоят на одном VPS.
А вот такое:
0.0.0.0:5432
уже значит, что база слушает внешнюю сеть, и если ещё и фаервол не режет порт, к ней могут пытаться подключаться снаружи.
Как найти процесс, который держит порт
Если вывода ss недостаточно или хочется перепроверить процесс, поможет lsof.
Например, ищем, кто держит порт 22:
sudo lsof -i :22
Или порт 80:
sudo lsof -i :80
Пример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 731 root 3u IPv4 17654 0t0 TCP *:ssh (LISTEN)
Здесь видно:
-
COMMAND — имя процесса;
-
PID — идентификатор процесса;
-
USER — от какого пользователя он запущен;
-
NAME — какой порт слушает.
Как посмотреть запущенные и включённые службы
Чтобы увидеть, какие службы сейчас работают:
systemctl list-units --type=service --state=running
Если нужен список служб, которые стартуют автоматически при загрузке:
systemctl list-unit-files --type=service --state=enabled
Для проверки конкретной службы:
sudo systemctl status ssh
sudo systemctl status nginx
sudo systemctl status mariadb
Даже на пустом VPS полезно посмотреть эти списки: иногда там уже есть службы, о которых владелец сервера вообще не знает.
Как понять, что сервис лишний
Сервис стоит считать лишним, если:
-
ты не устанавливал его и не понимаешь, зачем он нужен;
-
он слушает внешний порт, но у тебя нет ни сайта, ни базы, ни панели, которые должны там работать;
-
он остался после тестов или старой настройки;
-
он включён в автозагрузку, но реально не используется.
Примеры типовых ситуаций:
-
на сервере нет сайта, а открыт 80 или 443 — значит, где-то работает веб-сервер;
-
база данных слушает наружу, хотя приложение крутится на том же VPS — это лишний риск;
-
работает демон, про который ты вообще ничего не знаешь — сначала разобраться, потом отключать.
Как остановить и отключить лишнюю службу
Если ты понял, что сервис не нужен, его можно остановить и убрать из автозагрузки.
sudo systemctl stop имя_службы
sudo systemctl disable имя_службы
Например, если установлен Apache, но он не нужен:
sudo systemctl stop apache2
sudo systemctl disable apache2
После этого снова проверяем:
sudo ss -tulpn
Если порт исчез — всё правильно, именно эта служба его и держала.
Важно: не отключай наугад ssh, сетевые службы и системные демоны, если не понимаешь, за что они отвечают. Иначе можно потерять доступ к серверу.
Как проверить порт снаружи
Команда ss показывает, что слушается на самом сервере. Но иногда полезно понять, доступен ли порт снаружи по сети.
Если есть другой компьютер или сервер, можно использовать:
nc -zv IP_ВАШЕГО_VPS 22
nc -zv IP_ВАШЕГО_VPS 80
nc -zv IP_ВАШЕГО_VPS 443
Если nc не установлен, можно просто попробовать подключиться обычным клиентом: через SSH, браузер или программу для конкретного сервиса.
Это полезно, потому что сервис может слушать порт, но фаервол всё равно может не пускать подключения снаружи.
Что ещё стоит проверить на пустом VPS
Если сервер новый и на нём пока почти ничего нет, то нормальная картина обычно такая:
-
открыт только SSH;
-
если установлен веб-сервер — 80 и 443;
-
базы и внутренние сервисы либо не установлены, либо слушают только
127.0.0.1.
Для быстрой проверки пустого VPS удобно выполнить три команды подряд:
sudo ss -tulpn
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=service --state=enabled
Частые ошибки и путаница
-
«Я вижу порт 127.0.0.1:3306 — это опасно?»
Нет. Если база слушает только локально, это как раз безопаснее.
-
«Служба выключена, а порт всё равно слушается»
Значит, порт держит другой процесс. Проверяй через
ssиlsof. -
«Порт слушается, но снаружи не подключается»
Проверь фаервол: UFW, iptables/nftables или ограничения у хостинг-провайдера.
-
«Вижу странную службу, но боюсь выключать»
И правильно. Сначала выясни, что это за пакет и за что он отвечает, а уже потом принимай решение.
Итоги
-
Разобрались, что такое открытый порт и как он связан со службой.
-
Научились смотреть слушающие порты через
ss -tulpn. -
Узнали, как определять процесс, который держит порт, через
lsof. -
Посмотрели, как проверять запущенные и включённые службы через
systemctl. -
Разобрали, как отличать нормальные сервисы от лишних и как их отключать.
Вывод: регулярная проверка открытых портов и служб — это одна из самых простых и полезных привычек в администрировании VPS. Одна команда может быстро показать, не появилось ли на сервере что-то лишнее.