Как использовать Nmap для сканирования открытых портов
Введение
Работа в сети — обширная и непосильная тема для многих начинающих системных администраторов. Существуют различные уровни, протоколы и интерфейсы, а также множество инструментов и утилит, которые необходимо освоить, чтобы понять их.
В сетях TCP/IP и UDP порты являются конечными точками для логической связи. На одном IP-адресе может работать множество служб, таких как веб-сервер, сервер приложений и файловый сервер. Чтобы каждая из этих служб могла взаимодействовать, каждая из них прослушивает и обменивается данными через определенный порт. Когда вы подключаетесь к серверу, вы подключаетесь к IP-адресу и порту.
Во многих случаях используемое вами программное обеспечение указывает порт за вас. Например, когда вы подключаетесь к https://linux-console.net
, вы подключаетесь к серверу linux-console.net
через порт 443
, порт по умолчанию для защищенного веб-трафика. Поскольку это значение по умолчанию, ваш браузер добавляет порт за вас.
В этом руководстве вы более подробно изучите порты. Вы будете использовать программу netstat
для определения открытых портов, а затем использовать программу nmap
для получения информации о состоянии портов машины в сети. Когда вы закончите, вы сможете определить общие порты и сканировать свои системы на наличие открытых портов.
Примечание. В этом руководстве рассматривается безопасность IPv4. В Linux безопасность IPv6 поддерживается отдельно от IPv4. Например, \nmap по умолчанию сканирует адреса IPv4, но также может сканировать адреса IPv6, если указан правильный параметр (nmap -6).
Если ваш VPS настроен для IPv6, не забудьте защитить сетевые интерфейсы IPv4 и IPv6 с помощью соответствующих инструментов. Дополнительные сведения об инструментах IPv6 см. в этом руководстве: Как настроить инструменты для использования IPv6 на Linux VPS.
Понимание портов
В сетевой модели OSI много уровней. Транспортный уровень — это уровень, в первую очередь связанный со связью между различными службами и приложениями.
Этот уровень является основным уровнем, с которым связаны порты.
Некоторое знание терминологии необходимо для понимания конфигурации порта. Вот несколько терминов, которые помогут вам понять последующее обсуждение:
- Порт: адресуемое сетевое расположение, реализованное внутри операционной системы, которое помогает различать трафик, предназначенный для разных приложений или служб.
- Интернет-сокеты: дескриптор файла, который указывает IP-адрес и связанный с ним номер порта, а также протокол передачи, который будет использоваться для обработки данных.
- Привязка: процесс, происходящий, когда приложение или служба использует интернет-сокет для обработки вводимых и выводимых данных.
- Прослушивание: считается, что служба «прослушивает» порт, когда она привязывается к комбинации порт/протокол/IP-адрес, чтобы ожидать запросов от клиентов службы.
После получения запроса он затем устанавливает соединение с клиентом (при необходимости), используя тот же порт, который он прослушивал. Поскольку используемые интернет-сокеты связаны с определенным IP-адресом клиента, это не мешает серверу одновременно прослушивать и обслуживать запросы других клиентов.
- Сканирование портов. Сканирование портов — это процесс попытки подключения к ряду последовательных портов с целью получения информации о том, какие из них открыты и какие службы и операционная система за ними стоят.
Определение общих портов
Порты обозначаются числом в диапазоне от 1
до 65535
.
- Многие порты ниже
1024
связаны со службами, которые Linux и Unix-подобные операционные системы считают критически важными для основных сетевых функций, поэтому вы должны иметь привилегии суперпользователя, чтобы назначать им службы. - Порты между
1024
и49151
считаются «зарегистрированными». Это означает, что они могут быть «зарезервированы» (в очень широком смысле этого слова) для определенных служб отправив запрос в IANA (Управление по присвоению номеров в Интернете). Они не соблюдаются строго, но могут дать представление о возможных службах, работающих на определенном порту. - Порты между
49152
и65535
не могут быть зарегистрированы и предлагаются для частного использования.
Из-за огромного количества доступных портов вам никогда не придется беспокоиться о большинстве служб, которые имеют тенденцию привязываться к определенным портам.
Тем не менее, есть некоторые порты, которые стоит знать из-за их повсеместного распространения. Ниже приведен лишь очень неполный список:
- 20: FTP-данные
- 21: порт управления FTP
- 22: SSH
- 23: Telnet (небезопасно, не рекомендуется для большинства случаев)
- 25: SMTP
- 43. Протокол WHOIS
- 53. Службы DNS
- 67: порт DHCP-сервера
- 68: порт DHCP-клиента
- 80: HTTP – незашифрованный веб-трафик
- 110: почтовый порт POP3.
- 113: Идентификация служб аутентификации в сетях IRC
- 143: почтовый порт IMAP
- 161: SNMP
- 194: IRC
- 389: порт LDAP
- 443: HTTPS — безопасный веб-трафик
- 587: SMTP — порт отправки сообщений
- 631: порт демона печати CUPS
- 666: DOOM — у этой устаревшей игры есть собственный порт.
Это лишь некоторые из служб, обычно связанных с портами. Вы должны быть в состоянии найти соответствующие порты для приложений, которые вы пытаетесь настроить, в их соответствующей документации.
Большинство служб можно настроить на использование портов, отличных от портов по умолчанию, но вы должны убедиться, что и клиент, и сервер настроены на использование нестандартного порта.
Вы можете получить список некоторых распространенных портов, просмотрев файл /etc/services
:
- less /etc/services
Это даст вам список общих портов и связанных с ними служб:
Output. . .
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
. . .
В зависимости от вашей системы, это будет отображать несколько страниц. Нажмите клавишу ПРОБЕЛ
, чтобы просмотреть следующую страницу записей, или нажмите Q
, чтобы вернуться к подсказке.
Это не полный список; скоро вы это увидите.
Проверка открытых портов
Существует ряд инструментов, которые вы можете использовать для сканирования открытых портов. В большинстве дистрибутивов Linux по умолчанию устанавливается netstat
.
Вы можете быстро узнать, какие службы у вас запущены, введя команду со следующими параметрами:
- sudo netstat -plunt
Вы увидите следующие результаты:
OutputProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd
tcp6 0 0 :::22 :::* LISTEN 785/sshd
Здесь показаны порт и прослушивающий сокет, связанные со службой, а также перечислены протоколы UDP и TCP.
Инструмент nmap
— это еще один метод, который вы можете использовать для идентификации портов.
Использование Nmap
Часть защиты сети включает в себя тестирование уязвимостей. Это означает попытку проникнуть в вашу сеть и обнаружить слабые места так же, как это сделал бы злоумышленник.
Из всех доступных для этого инструментов nmap
, пожалуй, самый распространенный и мощный.
Вы можете установить nmap
на компьютер с Ubuntu или Debian, введя:
- sudo apt-get update
- sudo apt-get install nmap
Одним из дополнительных преимуществ установки этого программного обеспечения является улучшенный файл сопоставления портов. Вы можете увидеть гораздо более обширную связь между портами и службами, просмотрев этот файл:
- less /usr/share/nmap/nmap-services
Вы увидите такой вывод:
Output. . .
tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078]
tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer
compressnet 2/tcp 0.000013 # Management Utility
compressnet 2/udp 0.001845 # Management Utility
compressnet 3/tcp 0.001242 # Compression Process
compressnet 3/udp 0.001532 # Compression Process
unknown 4/tcp 0.000477
rje 5/udp 0.000593 # Remote Job Entry
unknown 6/tcp 0.000502
echo 7/tcp 0.004855
echo 7/udp 0.024679
echo 7/sctp 0.000000
. . .
Помимо почти 20 тысяч строк, в этом файле также есть дополнительные поля, такие как третий столбец, в котором указана открытая частота этого порта, обнаруженная во время поискового сканирования в Интернете.
Сканирование портов с помощью nmap
Nmap может раскрыть много информации о хосте. Это также может заставить системных администраторов целевой системы думать, что кто-то имеет злой умысел. По этой причине тестируйте его только на принадлежащих вам серверах или в ситуациях, когда вы уведомили владельцев.
Создатели nmap
предоставляют тестовый сервер, расположенный по адресу scanme.nmap.org
.
Этот или ваши собственные серверы являются хорошей мишенью для практики nmap.
Вот некоторые общие операции, которые можно выполнить с помощью nmap. Мы будем запускать их все с привилегиями sudo, чтобы не возвращать частичные результаты для некоторых запросов. Выполнение некоторых команд может занять много времени:
Сканирование операционной системы хоста:
- sudo nmap -O scanme.nmap.org
Пропустите часть обнаружения сети и предположите, что хост находится в сети. Это полезно, если вы получаете ответ «Примечание: хост не работает» в других ваших тестах. Добавьте это к другим параметрам:
- sudo nmap -PN scanme.nmap.org
Сканировать без предварительного обратного поиска DNS по указанному IP-адресу. Это должно ускорить ваши результаты в большинстве случаев:
- sudo nmap -n scanme.nmap.org
Сканировать определенный порт вместо всех общих портов:
- sudo nmap -p 80 scanme.nmap.org
Для сканирования TCP-соединений nmap может выполнить трехэтапное рукопожатие (поясняется ниже) с целевым портом. Выполните это следующим образом:
- sudo nmap -sT scanme.nmap.org
Для сканирования UDP-соединений введите:
- sudo nmap -sU scanme.nmap.org
Сканировать каждый открытый порт TCP и UDP:
- sudo nmap -n -PN -sT -sU -p- scanme.nmap.org
Сканирование TCP \SYN использует способ, которым TCP устанавливает соединение.
Чтобы установить TCP-соединение, запрашивающая сторона отправляет серверу пакет «запрос на синхронизацию». Затем сервер отправляет обратно пакет «подтверждение синхронизации». Затем первоначальный отправитель отправляет пакет «подтверждения» обратно на сервер, и соединение устанавливается.
Однако при SYN-сканировании соединение разрывается, когда с сервера возвращается первый пакет. Это называется «полуоткрытым» сканированием и используется как способ тайного сканирования портов, поскольку приложение связанный с этим портом, не будет получать трафик, потому что соединение никогда не завершается.
Это больше не считается скрытным с принятием более совершенных брандмауэров и пометкой незавершенного запроса SYN во многих конфигурациях.
Чтобы выполнить сканирование SYN, выполните:
- sudo nmap -sS scanme.nmap.org
Более скрытый подход заключается в отправке недопустимых заголовков TCP, которые, если хост соответствует спецификациям TCP, должны отправить пакет обратно, если этот порт закрыт. Это будет работать на серверах, отличных от Windows.
Вы можете использовать флаги \-sF, \-sX или \-sN. Все они дадут ответ, который мы ищем:
- sudo nmap -PN -p 80 -sN scanme.nmap.org
Чтобы узнать, какая версия службы запущена на хосте, вы можете попробовать эту команду. Он пытается определить службу и версию, проверяя различные ответы сервера:
- sudo nmap -PN -p 80 -sV scanme.nmap.org
Наконец, вы можете использовать nmap для сканирования нескольких машин.
Чтобы указать диапазон IP-адресов с помощью \- или \/24 для одновременного сканирования нескольких хостов, используйте следующую команду:
- sudo nmap -PN xxx.xxx.xxx.xxx-yyy
Или просканируйте сетевой диапазон на наличие доступных сервисов с помощью такой команды:
- sudo nmap -sP xxx.xxx.xxx.xxx-yyy
Есть много других комбинаций команд, которые вы можете использовать, но это должно помочь вам начать изучение уязвимостей вашей сети.
Заключение
Понимание конфигурации портов и способов обнаружения векторов атак на вашем сервере — это только один шаг к защите вашей информации и вашего VPS. Однако это необходимый навык.
Выяснив, какие порты открыты и какую информацию можно получить от служб, принимающих подключения к этим портам, вы получите информацию, необходимую для блокировки вашего сервера. Любая посторонняя информация, просочившаяся с вашего компьютера, может быть использована злоумышленником для использования известных уязвимостей или разработки новых. Чем меньше они смогут понять, тем лучше.