Как проверить открытые порты в Linux?
Порты — это сетевые интерфейсы, через которые осуществляется передача данных между компьютерами. Каждый открытый порт в системе указывает на то, что какая-то служба или приложение прослушивает этот порт и готово принять входящие соединения. Иногда необходимо узнать, какие порты открыты в системе, чтобы проверить безопасность, диагностику сетевых проблем или просто понять, какие сервисы запущены. В Linux есть несколько командных инструментов, которые помогают выявить открытые порты и прослушивающие их процессы.
В этой статье мы рассмотрим несколько способов проверки открытых портов в Linux с использованием таких инструментов, как netstat
, ss
, nmap
и других.
Метод 1: Использование команды netstat
netstat
(network statistics) — это один из самых популярных инструментов для просмотра сетевой активности. Хотя в некоторых новых дистрибутивах netstat
заменен на ss
, многие системы все еще поддерживают netstat
.
Установка netstat
Если команда netstat
не установлена в вашей системе, вы можете установить её через пакетный менеджер. На системах, основанных на Debian (например, Ubuntu и Найс ОС Linux), это делается так:
sudo apt install net-tools
На системах Red Hat или НАЙС ОС используйте команду:
sudo yum install net-tools
Просмотр всех открытых портов
Чтобы увидеть все открытые порты и процессы, которые их прослушивают, выполните следующую команду:
sudo netstat -tuln
Здесь:
-t
— отображает TCP-соединения.-u
— отображает UDP-соединения.-l
— отображает только те порты, которые находятся в режиме прослушивания (listening).-n
— выводит IP-адреса и номера портов в числовом формате (без попытки разрешения имен хостов).
Результат команды покажет список всех активных TCP и UDP портов, которые прослушиваются. Пример вывода:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
Здесь видно, что порт 80 прослушивается службой на всех интерфейсах (0.0.0.0), а MySQL сервер прослушивает порт 3306 на локальном интерфейсе (127.0.0.1).
Метод 2: Использование команды ss
ss
(Socket Stat) — это современная альтернатива netstat
, которая предлагает более быстрый и подробный вывод сетевой активности. На многих современных дистрибутивах Linux, в том числе и на НАЙС ОС ss
уже предустановлен.
Просмотр открытых портов с помощью ss
Чтобы отобразить все открытые порты с помощью ss
, используйте следующую команду:
sudo ss -tuln
Вывод команды аналогичен netstat
и показывает все активные порты TCP и UDP. Пример вывода:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
Команда ss
также поддерживает множество других параметров для анализа сетевых подключений и может использоваться для более детальной диагностики.
Метод 3: Использование команды lsof
lsof
(List Open Files) — это мощный инструмент, который показывает список открытых файлов, включая сетевые сокеты. Он может быть полезен для отображения информации о портах и процессах, которые их используют.
Просмотр портов с помощью lsof
Чтобы увидеть список всех процессов, которые открыли порты, выполните следующую команду:
sudo lsof -i -P -n
Здесь:
-i
— отображает сетевые соединения.-P
— выводит порты в числовом формате.-n
— предотвращает попытки разрешить имена хостов.
Пример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1274 root 3u IPv4 19348 0t0 TCP *:22 (LISTEN)
mysqld 1523 mysql 20u IPv4 21512 0t0 TCP 127.0.0.1:3306 (LISTEN)
nginx 1624 www 6u IPv4 18476 0t0 TCP *:80 (LISTEN)
Вывод команды lsof
показывает процессы, которые прослушивают порты, идентификатор процесса (PID), тип подключения и IP-адрес, на котором открыт порт.
Метод 4: Использование nmap
для сканирования портов
nmap
(Network Mapper) — это продвинутый инструмент для сетевого сканирования, который позволяет не только проверять открытые порты на локальной системе, но и выполнять сканирование удаленных систем.
Установка nmap
Если nmap
не установлен в вашей системе, его можно установить с помощью пакетного менеджера. Например, на Ubuntu или других дистрибутивах на основе Debian выполните:
sudo apt install nmap
На CentOS или НАЙС ОС:
sudo yum install nmap
Сканирование портов на локальной системе
Чтобы отсканировать все открытые порты на локальной машине, используйте следующую команду:
sudo nmap -sT -O localhost
Здесь -sT
указывает на выполнение TCP сканирования, а -O
— это попытка определить операционную систему. Пример вывода:
Starting Nmap 7.60 ( https://nmap.org ) at 2024-09-19 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
OS detection performed. OS: Linux 3.X (99%)
Вывод показывает, что на локальной системе открыты порты 22 (SSH) и 80 (HTTP). Инструмент nmap
полезен для глубокого анализа сетевой активности и безопасности.
Метод 5: Использование fuser
для проверки открытых портов
Команда fuser
позволяет узнать, какие процессы используют конкретные порты. Это полезно для точной диагностики, если вам нужно узнать, какой процесс прослушивает определенный порт.
Проверка порта с помощью fuser
Чтобы узнать, какой процесс использует порт, выполните команду:
sudo fuser 80/tcp
Если порт 80 (HTTP) используется каким-либо процессом, вы увидите его идентификатор (PID). Например, если процесс с PID 1624 использует порт 80, вывод будет следующим:
80/tcp: 1624
Затем можно использовать команду ps
, чтобы получить информацию о процессе:
ps -p 1624 -o comm=
Эта команда выведет имя программы, которая использует порт.
Заключение
Проверка открытых портов в Linux — это важная задача для мониторинга сетевой активности и обеспечения безопасности системы. Существует несколько инструментов, которые помогают это сделать, включая netstat
, ss
, lsof
, nmap
и fuser
. Каждый из них имеет свои преимущества и особенности, и выбор инструмента зависит от конкретной задачи.
Использование этих команд поможет вам быстро узнать, какие порты открыты, какие процессы их прослушивают, и как можно улучшить безопасность системы, закрывая ненужные порты.