Введение
В безопасности серверов «поверхность атаки» — это общее количество точек, через которые неавторизованный пользователь может попытаться проникнуть в систему или извлечь данные. Управление сетевыми портами — важная часть уменьшения этой поверхности.
Каждый открытый порт может стать точкой входа для злоумышленника. Если служба прослушивает порт, она готова принимать данные. Если эта служба уязвима или не должна быть доступна извне, система находится под угрозой.
Прослушиваемый порт не означает автоматическую опасность, но указывает на наличие внешнего воздействия. Аудит безопасности начинается с определения доступных служб и проверки того, является ли такой доступ преднамеренным.
Поэтому аудит портов входит в базовую настройку защиты системы. Надёжная безопасность — это не только установка исправлений для программного обеспечения, но и уменьшение ненужной доступности.
В этой лабораторной работе вы выполните базовый аудит безопасности. Вы:
- Выведете список всех прослушиваемых TCP-портов с помощью команды
ss. - Найдёте подозрительные или нестандартные порты.
- Определите процесс и пользователя, которые открыли порт.
Просмотр прослушиваемых TCP-портов
Сначала получите полную картину состояния сети. Для этого используется команда ss (Socket Statistics) — современная и более быстрая замена устаревшему инструменту netstat.
Для аудита нас интересуют прослушиваемые TCP-порты и процессы, которые их открыли.
Информация о процессе превращает необработанный список сокетов в данные, с которыми можно работать. Сам по себе номер порта мало о чём говорит, но связь порта с конкретным процессом и пользователем позволяет оценить ситуацию и управлять ею.
Выполните следующую команду:
sudo ss -lntp
Назначение параметров:
-l(listening): показывает только сокеты, ожидающие подключений.-n(numeric): показывает IP-адреса и номера портов вместо имён узлов — это быстрее и понятнее.-t(tcp): показывает только TCP-сокеты.-p(processes): показывает имя процесса и PID (идентификатор процесса), использующего сокет.- Примечание:
sudoнужен для просмотра информации о процессах служб, принадлежащих другим пользователям.
- Примечание:
Вы увидите вывод, похожий на этот:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.1:8080 0.0.0.0:* users:(("node",pid=123,fd=18))
LISTEN 0 5 0.0.0.0:9999 0.0.0.0:* users:(("python3",pid=456,fd=3))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=789,fd=3))
В столбце Local Address:Port указано, где служба прослушивает подключения. В столбце Process указана отвечающая за это программа.
Также важно проверить, какой адрес используется: 127.0.0.1 или 0.0.0.0. Службы, доступные только через localhost, открыты лишь на самой машине, а 0.0.0.0 обычно означает, что служба прослушивает все сетевые интерфейсы.
Поиск подозрительных портов
Теперь проанализируйте вывод и найдите всё необычное.
Стандартные службы обычно работают на «известных портах» (Well-Known Ports) в диапазоне 0–1023. Например:
- Порт 22: SSH (Secure Shell)
- Порт 80: HTTP (веб-сервер)
- Порт 443: HTTPS (защищённый веб-сервер)
При аудите безопасности обращайте внимание на нестандартные порты и неизвестные вам службы.
Не нужно подозревать каждый незнакомый порт. Важно проверить его назначение. Служба может быть легитимной, временной или запущенной случайно. Аудит позволяет превратить неизвестный внешний доступ в понятный и контролируемый.
Проверьте вывод команды из первого шага. Вы должны увидеть службу, прослушивающую порт 9999. Это нестандартный системный порт, поэтому его нужно исследовать подробнее.
Отфильтруйте эту запись с помощью grep:
sudo ss -lntp | grep 9999
Пример вывода:
LISTEN 0 5 0.0.0.0:9999 0.0.0.0:* users:(("python3",pid=289,fd=3))
Это подтверждает, что на порту 9999 работает процесс. Далее вы точно определите, что это за процесс.
Определение владельца процесса
Знать, что порт открыт, недостаточно. Нужно выяснить, кто запускает службу. Подозрительный процесс, работающий от имени root, представляет критическую угрозу, тогда как процесс ограниченного пользователя может быть менее опасным, хотя и он всё равно может представлять риск.
Найдите PID: посмотрите вывод предыдущей команды. В разделе users: найдите значение pid=....
- Пример:
users:(("python3",pid=289,fd=3))→ PID равен 289. - Примечание: в вашей системе PID будет другим.
Проверьте процесс: используйте команду ps, чтобы вывести сведения об этом PID. Замените <PID> фактическим найденным номером.
ps -f -p <PID>
Пример для PID 289:
ps -f -p 289
Проанализируйте вывод:
UID PID PPID C STIME TTY TIME CMD
labex 289 189 0 10:00 pts/0 00:00:00 python3 -m http.server 9999
- UID: пользователь, от имени которого работает процесс, например
labex. - CMD: точная команда, запустившая процесс, например
python3 -m http.server 9999.
Из этого вывода следует, что пользователь labex запустил HTTP-сервер Python, предназначенный для прослушивания порта 9999. В реальной ситуации, если вы не разрешали запуск этой службы, процесс нужно немедленно завершить.
Этот последний шаг позволяет установить источник активности: не просто определить, «какой порт открыт», а выяснить, «какая команда, запущенная каким пользователем, создала такую сетевую доступность». Именно это делает аудит полезным при реагировании на инциденты и усилении защиты системы.
Итоги
В этой лабораторной работе вы успешно выполнили аудит прослушиваемых портов системы.
Основные выводы:
- Обзор: используйте
sudo ss -lntp, чтобы точно узнать, какие службы ожидают подключений. - Идентификация: распознавайте стандартные порты и отмечайте нестандартные, например 9999, для дальнейшего исследования.
- Определение владельца: используйте
ps -f -p <PID>, чтобы узнать, какой пользователь и какая команда отвечают за подозрительный сокет.
Регулярный аудит помогает обнаруживать неавторизованные службы, например бэкдоры или случайно запущенные веб-серверы, и удалять их до того, как ими воспользуются злоумышленники.



