
Открытые порты в системе Ubuntu представляют собой точки входа для сетевого взаимодействия. Их мониторинг важен для выявления ненужных сервисов и предотвращения несанкционированного доступа. Команды командной строки позволяют быстро получить полный список активных портов и связанных с ними процессов без установки дополнительных утилит.
Netstat и ss предоставляют детальную информацию о соединениях TCP и UDP, включая состояние портов и PID процессов. Команда lsof позволяет определить, какие приложения используют конкретные порты, что особенно полезно при диагностике конфликтов или зависших служб.
Для внешнего анализа открытых портов на локальной машине или удалённом сервере удобен nmap. Он показывает открытые, закрытые и фильтруемые порты, а также служит для проверки корректности настройки брандмауэра. Использование telnet или nc позволяет тестировать доступность конкретных портов и выявлять сетевые проблемы на уровне соединения.
Регулярная проверка портов помогает поддерживать безопасность и контроль за сетевой активностью. Автоматизация через скрипты на Bash или Python позволяет выполнять проверку по расписанию и формировать отчёты о состоянии портов для оперативного реагирования на изменения в системе.
Использование команды netstat для просмотра открытых портов
Для удобства можно сохранять результаты в файл: netstat -tulpn > ports.txt. Это позволяет вести журнал изменений портов и отслеживать появление новых сервисов на сервере в динамике. Такой подход упрощает аудит безопасности и контроль сетевой активности.
Проверка портов с помощью команды ss
Команда ss используется для быстрого анализа открытых портов и активных соединений в Ubuntu. Она заменяет netstat в современных системах и работает быстрее, предоставляя детальную информацию о TCP и UDP соединениях. Для отображения всех прослушиваемых портов применяют команду ss -tuln, где -t показывает TCP, -u – UDP, -l – только прослушиваемые порты, -n – числовой формат адресов и портов.
Чтобы связать порты с конкретными процессами, используется ключ -p: ss -tulpn. Это позволяет определить PID и имя процесса для каждого открытого порта, что важно при диагностике конфликтов служб.
| Протокол | Локальный адрес | Состояние | PID/Программа |
|---|---|---|---|
| tcp | 0.0.0.0:22 | LISTEN | 1024/sshd |
| tcp | 127.0.0.1:3306 | LISTEN | 2048/mysqld |
| udp | 0.0.0.0:53 | — | 512/named |
Применение команды lsof для выявления активных соединений

Для фильтрации по конкретному порту применяется команда lsof -i :80, где 80 – номер порта. Это позволяет быстро выявить процессы, занимающие критические порты, и определить источник сетевой активности. Аналогично можно проверять диапазоны портов с помощью lsof -i 1000-2000.
| COMMAND | PID | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
|---|---|---|---|---|---|---|---|---|
| sshd | 1024 | root | 3u | IPv4 | 0t0 | — | — | 0.0.0.0:22 (LISTEN) |
| mysqld | 2048 | mysql | 10u | IPv4 | 0t0 | — | — | 127.0.0.1:3306 (LISTEN) |
Использование nmap для сканирования локальных и удалённых портов
Команда nmap применяется для детального анализа открытых портов на локальной машине и удалённых серверах. Для базового сканирования всех TCP-портов на локальном хосте используют команду nmap -p- 127.0.0.1, где -p- указывает сканировать весь диапазон портов от 1 до 65535.
Для проверки конкретного диапазона портов применяют nmap -p 20-1024 192.168.1.10, что позволяет быстро выявить открытые сервисы и оценить их состояние. Ключ -sV позволяет определить версию службы, работающей на порту: nmap -sV 192.168.1.10.
| Порт | Состояние | Сервис |
|---|---|---|
| 22/tcp | open | ssh |
| 80/tcp | open | http |
| 443/tcp | filtered | https |
Для удалённого сканирования рекомендуется использовать nmap -Pn, чтобы пропустить проверку хоста на пинг и сразу анализировать порты. Результаты удобно сохранять в файл: nmap -p 1-65535 -oN scan_results.txt 192.168.1.10, что позволяет вести документацию открытых портов и отслеживать изменения конфигурации сервера.
Фильтрация портов по протоколам TCP и UDP

Для поиска конкретного протокола можно использовать фильтры с grep: ss -tuln | grep tcp покажет только TCP-порты, а ss -tuln | grep udp – UDP. Аналогично работает lsof -i tcp или lsof -i udp, что помогает выявлять процессы, использующие нужный протокол.
Для сканирования с nmap применяются ключи -sT для TCP и -sU для UDP: nmap -sU -p 53 192.168.1.10 проверяет только UDP-порт 53. Такой подход обеспечивает точный контроль над проверкой открытых портов по конкретному протоколу.
Определение процессов, занимающих конкретные порты

Для более детального анализа можно использовать ss -tulpn | grep 3306, что позволяет определить процесс, занимающий порт MySQL, с указанием состояния соединения и локального адреса. Эта информация полезна при диагностике конфликтов между сервисами или выявлении неожиданных приложений, прослушивающих сетевые порты.
Если необходимо завершить процесс, занимающий порт, используют команду kill -9 PID, где PID получен из lsof или netstat. Перед завершением рекомендуется убедиться, что процесс не является критическим для работы системы или сервисов.
Проверка доступности портов с помощью telnet и nc

Команды telnet и nc используются для проверки доступности конкретных портов на локальной или удалённой машине. Они позволяют определить, открыт ли порт для соединений и реагирует ли служба на запросы.
Примеры использования telnet:
- telnet 192.168.1.10 22 – проверка доступности SSH-порта на удалённом сервере.
- telnet localhost 80 – тестирование локального HTTP-сервиса.
Использование nc (netcat) позволяет более гибко проверять порты и соединения:
- nc -v -w 5 localhost 3306 – проверка доступности MySQL-порта с тайм-аутом 5 секунд.
Преимущество nc перед telnet заключается в возможности автоматизации и сканирования диапазонов портов, а также в использовании различных опций для установки TCP и UDP соединений. Для системного контроля рекомендуется сохранять результаты команд в файл, например: nc -zv 192.168.1.10 1-1024 > ports_status.txt.
Автоматизация проверки портов через скрипты
Автоматизация проверки открытых портов позволяет регулярно отслеживать сетевую активность и выявлять неожиданные изменения. В Ubuntu используют Bash-скрипты или Python для периодического анализа портов и генерации отчётов.
Пример Bash-скрипта для проверки портов с помощью ss:
- Создать файл check_ports.sh.
- Добавить команды:
#!/bin/bash PORTS=(22 80 443 3306) for PORT in "${PORTS[@]}" do ss -tuln | grep ":$PORT" > /dev/null if [ $? -eq 0 ]; then echo "Порт $PORT открыт" else echo "Порт $PORT закрыт" fi done - Сделать скрипт исполняемым: chmod +x check_ports.sh.
- Запуск по расписанию через cron: crontab -e и добавить строку 0 * * * * /path/to/check_ports.sh >> ports_log.txt.
Для Python можно использовать модуль socket для проверки доступности TCP-портов:
- Создать список портов и хостов.
- Попытка соединения через socket.connect_ex.
- Запись результатов в файл CSV или текстовый лог для анализа.
Регулярное выполнение скриптов позволяет поддерживать актуальный список открытых портов, быстро реагировать на появление новых служб и формировать отчёты для аудита сетевой безопасности.
Вопрос-ответ:
Какая команда позволяет быстро узнать, какие порты открыты на сервере Ubuntu?
Для просмотра открытых портов на Ubuntu используют команды netstat, ss и lsof. Например, ss -tuln выводит список всех TCP и UDP портов, которые находятся в состоянии прослушивания, а lsof -i показывает активные соединения и процессы, их использующие. Эти команды позволяют определить, какие сервисы принимают подключения и по каким портам.
Как определить, какой процесс занимает конкретный порт?
Чтобы узнать, какой процесс использует конкретный порт, используют lsof -i :PORT или netstat -tulpn | grep PORT. Команды выводят PID процесса и его имя. Например, lsof -i :3306 покажет процесс MySQL, если порт 3306 занят. Эта информация помогает при конфликте портов или проверке безопасности, чтобы убедиться, что на критические порты не воздействуют посторонние сервисы.
Можно ли проверить доступность порта на удалённом сервере без установки дополнительных инструментов?
Да, проверить доступность порта на удалённом сервере можно с помощью telnet или nc. Например, telnet 192.168.1.10 22 проверяет SSH-порт, а nc -zv 192.168.1.10 80 проверяет доступность HTTP-порта. Эти команды позволяют определить, принимает ли сервер соединения на указанном порту, что полезно для диагностики сетевых проблем.
Как автоматизировать проверку портов на сервере?
Проверку портов можно автоматизировать с помощью скриптов на Bash или Python. В Bash создают список интересующих портов и используют ss или lsof для проверки их состояния. Скрипт можно запускать по расписанию через cron и сохранять результаты в файл. В Python используют модуль socket для попытки соединений с конкретными портами, результаты записывают в лог или CSV. Это позволяет регулярно отслеживать открытые порты и обнаруживать новые сервисы на сервере.
