Проверка наличия «слушающих» служб
Сразу после установки свежей операционной системы необходимо проверить запущенные службы и удалить из процесса загрузки все ненужные службы. Можно использовать сканер портов (такой, как mnaр) и запустить его для проверки узла, но если его нет, то вам придется подключить свою свежую (и, вероятно, незащищенную) машину к сети и загрузить сканер портов. Кроме того, необходимо учитывать, что mnaр может быть обманут, если система использует правила межсетевого экрана (firewall). Если установлены четкие правила, служба может остаться совершенно незаметной для mnaр, пока совпадает какое-либо условие (например, IP-адрес). Когда имеется доступ к самому ядру сервера, вероятно, более эффективным будет найти открытые порты с помощью программ, установленных вместе с операционной системой. Одной из них является netstat — программа, выводящая сведения и статистику, относящуюся к работе сети.
Для получения списка «слушающих» портов и связанных с ними процессов под Linux выполните:
# netstat -luntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State RD/Program nаmе
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1679/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* - 1766/dhclient
По этому результату можно увидеть, что машина, вероятно, является рабочей станцией, поскольку для удаленного доступа она имеет лишь DHCP-клиент, запущенный совместно с SSH-демоном. Используемые порты перечислены после двоеточия в столбце Local Address (локальный адрес) (22 — для sshd и 68 — для dhclient). Отсутствие каких-либо еще «слушающих» процессов говорит о том, что это, скорее всего, рабочая станция, а не сетевой сервер.
К сожалению, BSD-версия утилиты netstat не дает нам список процессов и идентификаторы процессов (PID), владеющих «слушающим» портом. Тем не менее netstat в BSD все-таки полезна для вывода списка «слушающих» портов вашей системы. Для получения списка «слушающих» портов во FreeBSD запустите команду
# netstat -a -n | egrep 'Proto | LISTEN1
Proto Ftecv<3 Send-Q Local Address Foreign Address (state)
tcp4 0 0 *.587 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
tcp4 0 0 *.22 *.* LISTEN
tcp4 0 0 *.993 *.* LISTEN
tcp4 0 0 *.143 *.* LISTEN
tcp4 0 0 *.53 *.* LISTEN
В столбце локального адреса снова перечислены используемые порты. Многие опытные системные администраторы помнят распространенные номера портов популярных служб и видят, что на этом сервере запущены SSH-, SMTP-, DNS-, IMAP- и IMAP+SSL-службы. Если вы все же сомневаетесь, какая служба обычно запускается на данном порте, то либо исключите ключ -п из команды netstat (он заставляет эту утилиту использовать имена, но при просмотре DNS-адресов выполнение может занять значительно больше времени), либо вручную просмотрите файл /etc/services:
# grep -w 998 /etc/servicesimaps 998/udp # inap4 protocol over TLS/SSL inaps 993/tcp # imap4 protocol over TLS/SSL
Обратите также внимание на то, что, в отличие от результата выполнения netstat в Linux, мы не получаем PID самих демонов. Помимо этого не перечислены UDP-порты для DNS. Для вывода UDP-сокетов необходимо в аргумент egrep добавить udp4, придав ему следующий вид: 'Proto|LISTEN|udp4'. Однако из-за особенностей работы UDP не все UDP-сокеты обязательно будут связаны с процессами-демонами.
В ОС FreeBSD существует другая команда, позволяющая получить необходимые сведения. Команда sockstat выполняет только малую часть того, что «умеет» netstat, и предоставляет сведения только о доменных сокетах Unix и Интернет-сокетах. И опять же видно, что запущены sshd-, SMTP-, DNS-, ШАР- и IMAP+SSL-служ-бы, но теперь мы знаем процессы, владеющие сокетами, плюс их PID. Сейчас можно видеть, что IMAP-службы были порождены от inetd, а не от отдельных демонов и что работу SMTP и DNS обеспечивают sendmail и named.
Для большинства прочих Unix-подобных ОС можно воспользоваться утилитой Isof (http://ftp.cerias.purdue.edu/pub/tools/miix/sysutils/lsof/). Название Isof получено сокращением от «list open files* (список открытых файлов), и, как явствует из имени, утилита позволяет выводить список всех файлов, открытых в системе, с добавлением процессов и PID их открывших. Поскольку сокеты и файлы в Linux работают одинаково, Isof может использоваться для просмотра списка открытых сокетов (параметр -i).
Для получения списка «слушающих» портов и процессов, владеющих ими, выполните команду
# Isof -i -n | egrep 'COMMAND|LISTEN1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
TCP *:domain (LISTEN)
TCP *:imap (LISTEN)
TCP *:imaps (LISTEN)
TCP *:ssh (LISTEN)
TCP *:smtp (LISTEN)
TCP *-submission (LISTEN)
Для вывода UDP-сокетов можно изменить аргумент egrep. Однако на этот раз вместо udp4 нужно использовать уточнение UDP, и аргумент примет следующий вид: COMMAND|LISTEN|UDP. Как упоминалось ранее, не все UDP-сокеты обязательно будут связаны с процессами-демонами.