Введение
В операционной системе Linux, как и в любой другой, понимание того, какие порты открыты и какие процессы слушают их, имеет ключевое значение для обеспечения безопасности и эффективного управления сетевыми сервисами. Открытые порты могут быть источником уязвимостей, особенно если они связаны с небезопасными или устаревшими службами.
В этой статье рассматриваются основные инструменты и методы, которые позволяют получить информацию о сетевых соединениях и прослушиваемых портах в Linux, с акцентом на использование
ss и systemd.Основные инструменты для проверки открытых портов
ss — мощный инструмент для анализа сокетов
ss (Socket Statistics) — это современный и эффективный инструмент, предназначенный для отображения информации о сокетах. Он предоставляет более широкие возможности по сравнению с устаревшим netstat, особенно в плане детализации информации и производительности.-t: отображает TCP-сокеты.
-u: отображает UDP-сокеты.
-l: отображает только прослушиваемые сокеты (по умолчанию они не отображаются).
-a: отображает все сокеты, включая не прослушиваемые (например, Established).
-n: показывает числовые адреса и порты вместо разрешения имен.
-p: отображает информацию о процессах, использующих сокеты.
Пример использования:
Bash:
ss -tulnp
Эта команда отображает список всех прослушиваемых TCP и UDP сокетов с указанием PID процесса, если он доступен. Формат вывода:
Код:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:("sshd",pid=1234,fd=3)
LISTEN 0 128 [::]:22 [::]:* users:("sshd",pid=1234,fd=3)
- Показать все TCP-сокеты
Bash:
ss -t
- Показать все UDP-сокеты
Bash:
ss -u
- Показать все прослушиваемые сокеты с процессами
Bash:
ss -tulnp
- Фильтрация по конкретному порту
Bash:
ss -tulnp | grep :22
- Фильтрация по состоянию соединения
Bash:
ss -t state established
ss поддерживает расширенные фильтры, которые позволяют точно указать критерии отбора. Например:
Bash:
ss -o state established '( dport = :ssh or sport = :ssh )'
Эта команда отображает все установленные соединения, связанные с SSH (порт 22).
Для более сложных фильтраций можно использовать выражения:
Bash:
ss -x src /tmp/.X11-unix/*
Это покажет все локальные сокеты, связанные с X-сервером.
systemd и управление сетевыми службами
В современных дистрибутивах Linux, таких как Ubuntu, Fedora и Debian, управление сетевыми службами часто осуществляется через
systemd. Это позволяет легко отслеживать, какие службы слушают определённые порты.Проверка активных служб через systemctl
Команда
systemctl позволяет получить информацию о текущих службах, включая те, которые слушают сетевые порты.
Bash:
systemctl status <service>
Например, для проверки службы SSH:
Bash:
systemctl status ssh
Вывод может содержать информацию о том, какие порты слушает служба:
Код:
● ssh.service - OpenSSH server daemon
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-04-01 10:00:00 UTC; 1h 30min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4915)
Memory: 1.2M
CGroup: /system.slice/ssh.service
└─1234 /usr/sbin/sshd -D
Использование systemd для просмотра портов
Службы systemd могут быть сконфигурированы для прослушивания определённых портов. Информация о таких конфигурациях может быть получена через
systemctl cat или journalctl.
Bash:
systemctl cat ssh
Вывод может содержать секцию
Socket или ListenStream, если служба настроена для прослушивания конкретных портов.Проверка сетевых сокетов через systemd
Система
systemd также предоставляет интерфейс для отслеживания сокетов через systemd-socket-proxyd или через systemd-analyze.
Bash:
systemd-analyze socket
Эта команда показывает список всех сокетов, управляемых
systemd.Проверка реальных слушающих процессов
Один из важнейших аспектов диагностики — определение реального процесса, который слушает порт. Это особенно важно при наличии множества сервисов или при использовании контейнеров.
Использование ps и lsof
Инструменты
ps и lsof позволяют проверить, какие процессы используют определённые порты.
Bash:
ps aux | grep sshd
Bash:
lsof -i :22
Эта команда покажет, какие процессы используют порт 22.
Сравнение с ss и systemd
Инструменты
ss и systemd предоставляют более глубокую информацию о сокетах, чем lsof или ps, особенно в части метаданных и состояния соединений.Примеры практического применения
Анализ открытых портов на сервере
Для полной картины открытых портов на сервере можно выполнить следующий набор команд:
- Показать все прослушиваемые TCP и UDP порты:
Bash:
ss -tulnp
- Показать только TCP-порты:
Bash:
ss -tulnp | grep -E "^LISTEN"
- Показать порты, слушаемые через systemd:
Bash:
systemctl list-sockets
- Проверить, какой процесс слушает порт 22:
Bash:
ss -tulnp | grep :22
- Проверить, какие службы слушают порты:
Bash:
systemctl status
Диагностика проблем с сетевыми портами
Если вы сталкиваетесь с проблемами, связанными с сетевыми портами, такие как невозможность подключения к сервису, можно использовать следующие шаги:
- Проверьте, слушает ли сервис порт:
Bash:
ss -tulnp | grep :<port>
- Проверьте, запущена ли служба:
Bash:
systemctl status <service>
- Проверьте, есть ли конфликты портов:
Bash:
ss -tulnp | grep :<port>
- Проверьте, какие процессы используют порт:
Bash:
lsof -i :<port>
Безопасность и рекомендации
Проверка открытых портов на предмет уязвимостей
Открытые порты, особенно те, которые не используются, могут быть потенциальной угрозой. Рекомендуется:
- Проверять, какие порты открыты на сервере.
- Убедиться, что только необходимые службы слушают порты.
- Использовать фаерволы для ограничения доступа к портам.
- Регулярно обновлять службы и проверять их конфигурации.
Использование фаерволов для управления портами
Использование
iptables или ufw позволяет ограничить доступ к портам:
Bash:
ufw allow 22/tcp
ufw deny 22/tcp
Заключение
Понимание открытых портов и процессов, которые их слушают, — важный аспект администрирования Linux-серверов. Инструменты
ss, systemd и lsof предоставляют мощные возможности для диагностики и управления сетевыми соединениями. Правильное использование этих инструментов позволяет повысить безопасность и эффективность работы сервера.Следует регулярно проверять открытые порты и управлять ими, особенно в средах с высоким уровнем безопасности.
