Поиск по сайту:

Как использовать 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:

  1. 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.

Вы можете быстро узнать, какие службы у вас запущены, введя команду со следующими параметрами:

  1. sudo netstat -plunt

Вы увидите следующие результаты:

Output
Proto 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, введя:

  1. sudo apt-get update
  2. sudo apt-get install nmap

Одним из дополнительных преимуществ установки этого программного обеспечения является улучшенный файл сопоставления портов. Вы можете увидеть гораздо более обширную связь между портами и службами, просмотрев этот файл:

  1. 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, чтобы не возвращать частичные результаты для некоторых запросов. Выполнение некоторых команд может занять много времени:

Сканирование операционной системы хоста:

  1. sudo nmap -O scanme.nmap.org

Пропустите часть обнаружения сети и предположите, что хост находится в сети. Это полезно, если вы получаете ответ «Примечание: хост не работает» в других ваших тестах. Добавьте это к другим параметрам:

  1. sudo nmap -PN scanme.nmap.org

Сканировать без предварительного обратного поиска DNS по указанному IP-адресу. Это должно ускорить ваши результаты в большинстве случаев:

  1. sudo nmap -n scanme.nmap.org

Сканировать определенный порт вместо всех общих портов:

  1. sudo nmap -p 80 scanme.nmap.org

Для сканирования TCP-соединений nmap может выполнить трехэтапное рукопожатие (поясняется ниже) с целевым портом. Выполните это следующим образом:

  1. sudo nmap -sT scanme.nmap.org

Для сканирования UDP-соединений введите:

  1. sudo nmap -sU scanme.nmap.org

Сканировать каждый открытый порт TCP и UDP:

  1. sudo nmap -n -PN -sT -sU -p- scanme.nmap.org

Сканирование TCP \SYN использует способ, которым TCP устанавливает соединение.

Чтобы установить TCP-соединение, запрашивающая сторона отправляет серверу пакет «запрос на синхронизацию». Затем сервер отправляет обратно пакет «подтверждение синхронизации». Затем первоначальный отправитель отправляет пакет «подтверждения» обратно на сервер, и соединение устанавливается.

Однако при SYN-сканировании соединение разрывается, когда с сервера возвращается первый пакет. Это называется «полуоткрытым» сканированием и используется как способ тайного сканирования портов, поскольку приложение связанный с этим портом, не будет получать трафик, потому что соединение никогда не завершается.

Это больше не считается скрытным с принятием более совершенных брандмауэров и пометкой незавершенного запроса SYN во многих конфигурациях.

Чтобы выполнить сканирование SYN, выполните:

  1. sudo nmap -sS scanme.nmap.org

Более скрытый подход заключается в отправке недопустимых заголовков TCP, которые, если хост соответствует спецификациям TCP, должны отправить пакет обратно, если этот порт закрыт. Это будет работать на серверах, отличных от Windows.

Вы можете использовать флаги \-sF, \-sX или \-sN. Все они дадут ответ, который мы ищем:

  1. sudo nmap -PN -p 80 -sN scanme.nmap.org

Чтобы узнать, какая версия службы запущена на хосте, вы можете попробовать эту команду. Он пытается определить службу и версию, проверяя различные ответы сервера:

  1. sudo nmap -PN -p 80 -sV scanme.nmap.org

Наконец, вы можете использовать nmap для сканирования нескольких машин.

Чтобы указать диапазон IP-адресов с помощью \- или \/24 для одновременного сканирования нескольких хостов, используйте следующую команду:

  1. sudo nmap -PN xxx.xxx.xxx.xxx-yyy

Или просканируйте сетевой диапазон на наличие доступных сервисов с помощью такой команды:

  1. sudo nmap -sP xxx.xxx.xxx.xxx-yyy

Есть много других комбинаций команд, которые вы можете использовать, но это должно помочь вам начать изучение уязвимостей вашей сети.

Заключение

Понимание конфигурации портов и способов обнаружения векторов атак на вашем сервере — это только один шаг к защите вашей информации и вашего VPS. Однако это необходимый навык.

Выяснив, какие порты открыты и какую информацию можно получить от служб, принимающих подключения к этим портам, вы получите информацию, необходимую для блокировки вашего сервера. Любая посторонняя информация, просочившаяся с вашего компьютера, может быть использована злоумышленником для использования известных уязвимостей или разработки новых. Чем меньше они смогут понять, тем лучше.