Как проверить, открыт ли порт в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь основным методам проверки статуса сетевых портов в системе Linux. Понимание, какие порты открыты, является фундаментальным для сетевого администрирования, устранения неполадок и анализа безопасности.

Вы начнете с использования команды netstat с определенными параметрами для вывода списка всех открытых TCP- и UDP-портов, находящихся в состоянии прослушивания. Затем вы подтвердите статус портов с помощью более современной команды ss, которая предоставляет аналогичные сетевые статистические данные. Наконец, вы будете использовать команду nc (netcat) для активного тестирования соединения с определенным портом, чтобы убедиться, что он доступен и открыт с точки зрения клиента. Завершив эти шаги, вы получите практические навыки идентификации и проверки открытых портов в своей среде Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/RemoteAccessandNetworkingGroup -.-> linux/nc("Networking Utility") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/nc -.-> lab-558746{{"Как проверить, открыт ли порт в Linux"}} linux/netstat -.-> lab-558746{{"Как проверить, открыт ли порт в Linux"}} end

Вывод списка открытых портов с помощью netstat -tuln

На этом этапе вы научитесь выводить список открытых портов в системе Linux с использованием команды netstat. Понимание, какие порты открыты, является важным для устранения сетевых неполадок и обеспечения безопасности.

Команда netstat (сокращение от "network statistics", сетевые статистики) представляет собой инструмент командной строки, который отображает сетевые соединения, таблицы маршрутизации, статистику интерфейсов, маскирующие соединения и членство в мультикаст-группах.

Мы будем использовать следующие параметры с командой netstat:

  • -t: Отображать TCP-соединения.
  • -u: Отображать UDP-соединения.
  • -l: Отображать сокеты, находящиеся в состоянии прослушивания (открытые порты).
  • -n: Отображать числовые адреса вместо разрешения имен хостов и имен служб.

Если терминал еще не открыт, откройте его. Вы можете найти значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду и нажмите Enter:

netstat -tuln

Вы увидите вывод, похожий на следующий:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*

Разберем вывод:

  • Proto: Протокол сокета (например, tcp, udp).
  • Local Address: Локальный IP-адрес и номер порта. Формат: IP_Address:Port. 0.0.0.0 означает, что служба прослушивает все доступные IPv4-интерфейсы, а ::: означает, что она прослушивает все доступные IPv6-интерфейсы.
  • Foreign Address: Удаленный IP-адрес и номер порта. 0.0.0.0:* или :::* указывает, что сокет не подключен к определенному удаленному адресу (он находится в состоянии прослушивания).
  • State: Состояние сокета. LISTEN означает, что порт открыт и ожидает входящих соединений.

В примере вывода можно видеть, что порт 53 (DNS) и порт 22 (SSH) находятся в состоянии LISTEN как для IPv4, так и для IPv6.

Эта команда очень полезна для быстрой проверки, какие службы запущены и доступны в вашей системе.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Подтверждение статуса портов с помощью ss -tuln

На предыдущем этапе вы использовали команду netstat для вывода списка открытых портов. Теперь давайте воспользуемся более современным и часто быстрым инструментом, называемым ss (socket statistics, статистика сокетов), чтобы достичь той же цели. ss разработан для замены netstat и предоставляет более подробную информацию о сокетах.

Мы будем использовать аналогичные параметры с командой ss, как и с командой netstat:

  • -t: Отображать TCP-сокеты.
  • -u: Отображать UDP-сокеты.
  • -l: Отображать сокеты, находящиеся в состоянии прослушивания (открытые порты).
  • -n: Отображать числовые адреса вместо разрешения имен хостов и имен служб.

Если терминал еще не открыт, откройте его.

Введите следующую команду и нажмите Enter:

ss -tuln

Вы увидите вывод, похожий на следующий:

Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
udp    UNCONN     0      0      127.0.0.53%lo:53                 0.0.0.0:*
udp    UNCONN     0      0      0.0.0.0:68                       0.0.0.0:*
tcp    LISTEN     0      128    127.0.0.53%lo:53                 0.0.0.0:*
tcp    LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp    LISTEN     0      128    [::]:22                          [::]:*

Вывод похож на вывод netstat и показывает протокол (Netid), состояние (State), локальный адрес и порт (Local Address:Port) а также адрес и порт удаленного узла (Peer Address:Port).

Вы можете увидеть те же порты (53 и 22), перечисленные как LISTEN, что подтверждает результаты, полученные с помощью netstat.

Хотя формат вывода несколько отличается, ss предоставляет аналогичную информацию о прослушивающих портах и обычно предпочтителен в современных системах Linux из-за своей производительности и дополнительных возможностей (которые мы не будем рассматривать в этом вводном практическом занятии).

Использование как netstat, так и ss может помочь в кросс-проверке информации и знакомстве с разными инструментами, доступными в Linux.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Тестирование доступности порта с помощью nc -zv

На предыдущих этапах вы узнали, как выводить список открытых портов с использованием команд netstat и ss. Теперь давайте воспользуемся командой nc (netcat) для проверки, можно ли на самом деле подключиться к определенному порту. nc - это универсальная сетевая утилита, которая может считывать данные из сетевых соединений и записывать в них с использованием протоколов TCP или UDP.

Мы будем использовать nc с следующими параметрами:

  • -z: Указывает, что nc должен только сканировать на наличие работающих серверов (daemons), не отправляя им никаких данных. Это полезно для проверки, открыт ли порт.
  • -v: Включает подробный вывод, показывающий больше деталей о попытке подключения.

Мы проверим доступность порта 22 (SSH), который, как мы видели на предыдущих этапах, находится в состоянии прослушивания. Мы будем тестировать подключение к локальной машине, которую можно указать по IP-адресу 127.0.0.1 или по имени хоста localhost.

Если терминал еще не открыт, откройте его.

Введите следующую команду и нажмите Enter:

nc -zv 127.0.0.1 22

Вы должны увидеть вывод, похожий на следующий:

Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!

Этот вывод подтверждает, что nc смог успешно подключиться к порту 22 на вашей локальной машине.

Теперь давайте попробуем проверить порт, который, скорее всего, не открыт, например, порт 80 (HTTP), так как в этой среде по умолчанию не запущен веб-сервер.

Введите следующую команду и нажмите Enter:

nc -zv 127.0.0.1 80

Скорее всего, вы увидите вывод, указывающий на отказ в подключении или истечение времени ожидания, похожий на следующий:

nc: connect to 127.0.0.1 port 80 (tcp) failed: Connection refused

Этот вывод показывает, что nc не смог подключиться к порту 80, что ожидаемо, так как на этом порту не запущена никакая служба.

Использование nc -zv - это быстрый и простой способ проверить, доступен ли и открыт ли определенный порт из вашего текущего расположения.

Нажмите Продолжить, чтобы завершить это практическое занятие.

Резюме

В этом практическом занятии вы узнали, как проверить, открыт ли порт в системе Linux с использованием инструментов командной строки. Вы начали с использования команды netstat -tuln для вывода списка всех открытых TCP- и UDP-портов, находящихся в состоянии прослушивания, и поняли формат вывода, включающий протокол, локальный адрес, внешний адрес и состояние.

Затем вы подтвердили статус портов с помощью команды ss -tuln, которая предоставляет аналогичную информацию, как и netstat, но часто считается более современной и быстрой альтернативой. Наконец, вы узнали, как проверить доступность определенного порта с помощью команды nc -zv, которая пытается установить соединение и сообщает, открыт ли порт и доступен ли он. Эти шаги предоставляют важные навыки для решения сетевых проблем и проведения анализа безопасности в системах Linux.