How to Check (Scan) for Open Ports in Linux
25 Апреля 2020
|
Терминал
Независимо от того, решаете ли вы проблемы с сетевым подключением или настраиваете брандмауэр, в первую очередь необходимо проверить, какие порты действительно открыты в вашей системе.
Что такое открытый порт
Порт прослушивания — это сетевой порт, который прослушивает приложение. Вы можете получить список прослушивающих портов в вашей системе, запросив сетевой стек с помощью таких команд, как , или . Каждый порт прослушивания может быть открыт или закрыт (отфильтрован) с помощью брандмауэра.
В общих чертах, открытый порт — это сетевой порт, который принимает входящие пакеты из удаленных мест.
Например, если вы используете веб-сервер, который прослушивает порты, и эти порты открыты на вашем брандмауэре, любой (кроме заблокированных ips) сможет получить доступ к веб-сайтам, размещенным на вашем веб-сервере, с помощью своего браузера. В этом случае оба и являются открытыми портами.
Открытые порты могут представлять угрозу безопасности, так как каждый открытый порт может использоваться злоумышленниками для использования уязвимости или выполнения любых других типов атак. Вы должны выставить только порты, необходимые для функциональности вашего приложения и закрыть все другие порты.
Проверьте открытые порты с
Nmap — это мощный инструмент сетевого сканирования, который может сканировать отдельные узлы и большие сети. Он в основном используется для аудита безопасности и тестирования на проникновение.
Если доступно, должен быть ваш первый инструмент, когда дело доходит до сканирования портов. Помимо сканирования портов можно также определить Mac-адрес, тип ОС, версии ядра и многое другое.
Следующая команда из консоли определяет, какие порты прослушивают TCP-соединения из сети:
Говорит для сканирования портов TCP и для сканирования всех 65535 портов. Если не используется, будет сканироваться только 1000 портов.
Вывод выше показывает, что только порты , и открыты в целевой системе.
Для сканирования портов UDP используйте вместо :
Для получения дополнительной информации посетите страницу руководства nmap и прочитайте обо всех других мощных опциях этого инструмента.
Проверьте открытые порты с
Netcat (или ) — это инструмент командной строки, который может читать и записывать данные через сетевые подключения, используя протоколы TCP или UDP.
С его помощью можно сканировать один порт или диапазон портов.
Например, для поиска открытых портов TCP на удаленном компьютере с IP-адресом в диапазоне вы должны использовать следующую команду:
Опция указует сканировать только открытые порты, без отправки каких — либо данных и для более многословной информации.
Вывод будет выглядеть примерно так:
Если вы хотите, чтобы на экране выводились только строки с открытыми портами, вы можете отфильтровать результаты с помощью команды grep .
Для сканирования UDP-портов передайте параметр в команду:
Проверьте открытые порты с помощью Bash Pseudo Device
Другой способ проверить, является ли определенный порт открытым или закрытым, — использовать оболочку Bash или псевдоустройство.
При выполнении команды на псевдоустройстве Bash откроет TCP или UDP-соединение с указанным хостом на указанном порту.
Следующий оператор if..else проверит, открыт ли порт on :
Как работает приведенный выше код?
Время ожидания по умолчанию при подключении к порту с использованием псевдоустройства очень велико, поэтому мы используем команду для уничтожения команды test через 5 секунд. Если соединение установлено с портом, тестовая команда вернет true.
Вы также можете использовать цикл for для проверки диапазона портов:
Вывод будет выглядеть примерно так:
Мы показали вам несколько инструментов, которые вы можете использовать для поиска открытых портов. Есть также другие утилиты и методы для проверки открытых портов, например, вы можете использовать модуль Python , или .
Как это выглядит в команде?
Да никак. Если команде в терминале не придать специфический вид, этот тип сканирования TCP SYN проводится по умолчанию. Но права root (или админа) понадобятся всё равно:
# nmap -sS 192.168.1.1
TCP connect scan (-sT) – техника сканирования по умолчанию БЕЗ ROOT (АДМИНИСТРАТОРА) ПРАВ. Так что будьте внимательны. В отличие от предыдущего типа (TCP SYN), соединение по протоколу TCP идёт по всем правилам, ваш компьютер будет просить соединения по портам TCP (не UDP) официально:
# nmap -sT 192.168.1.1
UDP Scan (-sU)
По названию вы уже поняли, что работа будет проводиться с портами UDP. Об этом разговор уже шёл. Сразу к делу: поиск открытых портов будет эффективнее, если использовать опции -sS вместе с –sU. В этом режиме Nmap отсылает UDP пакеты на компьютер-жертву и ждёт ответа. Если возвращается сообщение об ошибке, что ICMP недоступен, значит порт закрыт. Напротив, если сообщение подходящего характера, порт открыт:
# nmap -sU 192.168.1.1
FIN Scan (-sF) и иже с ним
О двух типах сканирования портов TCP вы уже знаете: “полноразмерный” пинг (-sT) и “половинчатый” SYN (-sS). Они запомнятся сами по себе, так как будут нас сопровождать почти в каждой из операций сканирования. Однако есть смысл попробовать и дополнительные варианты сканирования. О них я уже упоминал в одной из предыдущих статей: FIN, Xmas Tree и Null сканирования. Против серверов на базе ОС от Microsoft они не прокатят.
Смысл применения каждого из трёх вариантов прост: сканируя “мёртвый” порт, Nmap видит RESET пакет – своеобразную попытку перезагрузить связь со стороны закрытого порта, который этот пакет нам и присылает. А что делает открытый порт? Он роняет или сбрасывает это пинг. Потому, что большинство систем обнаружения вторжений (IDS) внимательно следят за входящими SYN пакетами.
Если на компьютере пользователя установлен фаерволл, простые TCP пакеты не «прокатят». Сканирование IDS и IPS ещё куда ни шло, но вот пакеты синхронизации бранмауэр заблокирует обязательно. Сканирование портов с флагом FIN не требует полноценного обмена данными между вашими компьютерами.
В этом случае компьютер жертвы не сможет создать лог соединения с компьютером хакера. Это тоже преимущество FIN сканирования. На тот же манер можно использовать сканирование с атрибутами xmas (-sX) и Null (-sN). Смысл тот же, но есть небольшая разница. FIN сканирование посылает пакеты с пометкой FIN, Null сканирование не отсылает ни одного бита информационных пакетов, а вот Xmas отсылает пакеты с флагами FIN, PSH и URG.
Ping Scan (-sP) – этот вид сканирования предназначен только для того, чтобы определить, работает ли хост. Открытые порты он не обнаруживает.
# nmap -sP 192.168.1.1
Version Detection (-sV)
Эта техника сканирования используется для того, чтобы узнать версию запущенного на компьютере жертвы ПО и транслируемого по соответствующим портам. Про открытые порты также ничего не расскажет.
# nmap -sV 192.168.1.1
Idle Scan (-sI)
Самый, видимо, популярный тип сканирования, так позволяет проводить сканирование портов анонимно. Nmap не отправляет пакеты с вашего IP – программа использует другой компьютер из той же сети.
nmap -sI компьютер-зомби компьютер-жертва
# nmap -sI 192.168.1.6 192.168.1.1
Эти команды используются для того, чтобы обнаружить открытые порты на компьютере с IP адресом 192.168.1.1 при одновременном использовании компьютера-зомби с адресом 192.168.1.6. Идеальная техника сканирования в анонимном режиме.
Что такое открытый порт
Порт прослушивания – это сетевой порт, который прослушивает приложение. Вы можете просмотреть порты прослушивания в вашей системе, запросив сетевой стек с помощью таких команд, как ss, netstat или lsof. Каждый порт прослушивания может быть открыт или закрыт (отфильтрован) с помощью брандмауэра.
В общих чертах, открытый порт – это сетевой порт, который принимает входящие пакеты из удаленных мест.
Например, если вы используете веб-сервер, который прослушивает порты 80 и 443, то эти порты открыты на вашем брандмауэре, любой (кроме заблокированных ips) сможет получить доступ к веб-сайтам, размещенным на вашем веб-сервере, с помощью своего браузера. В этом случае оба 80 и 443 являются открытыми портами.
Открытые порты могут представлять угрозу безопасности, так как каждый открытый порт может использоваться злоумышленниками для использования уязвимости или выполнения любых других типов атак. Вы должны выставить только порты, необходимые для функциональности вашего приложения и закрыть все другие порты.
Как использовать сканирование портов через nmap эффективно?
Nmap умеет использовать сразу несколько отличных друг от друга техник, с помощью которых сканирование портов пройдёт успешно
Самое трудное, что нас поджидает, это обход фаервола и (сейчас внимание!) внедрение программы в систему противника. Учтём и тот факт, что скрипты Nmap постоянно пополняются, и просто невозможно охватить все её возможности
Но это в другой раз, а сейчас только про порты. Да, и не забываем – по умолчанию программа сканирует только первую тысячу портов.
В каждой утилите, в том числе и Nmap, существуют ходовые и проторенные варианты, которые могут значительно облегчить жизнь начинающему. Если что-то не получается, обратитесь к статье Тихое сканирование Nmap или как остаться незамеченным.
Простые команды Nmap.
Самый прямой способ узнать в сети компьютер или нет, это тот самый пинг. Он используется во всех самых простых и самых сложных (по умолчанию) утилитах сканирования. Пинг – это не что иное как ICMP запрос с ожиданием эха (одна из целей его создания, один из главных принципов – машина должна на него ответить). Ping адрес-сайта – самая простая и знакомая всем команда. Её суть – начало простого диалога с компьютером (“Ты здесь? – Да/Нет”). Своим названием она обязана сонару, исследующему подводные объекты. В компьютерах сетях всё тоже самое. Большинство наиболее применимых команд Nmap можно найти в статье Самые употребляемые команды Nmap.
Кстати, для начала стоит убедиться, установлена ли сама Nmap. Для этого в терминале Линукс наберите:
nmap --version
Терминал вернёт номер текущей версии продукта. В Кали Nmap предустановлена.
Если нужно просканировать одиночную сеть, используйте команду:
nmap ваша_цель
# nmap ваша_цель.ru
# nmap 192.168.1.1
где ваша_цель – ресурс, который вы сканируете. Эта команда проверит состояние самых используемых портов на этом хосте, запустив сканер TCP портов.
Несмотря на всю кажущуюся простоту, Nmap проводит огромную работу. И это можно немного изменить. Так, утилита начинает с того, что конвертирует имя хоста, приводя его в IPv4 вид, используя DNS. Вы можете использовать иной DNS сервер, например DNS Google:
nmap --dns-servers 8.8.8.8 site.com
Для чего я это всё пишу… Это и следующее движение можно вообще пропустить. Делается это установкой флага -n . Ведь следующим шагом Nmap будет обратная конвертация IPv4 адреса в имя хоста на латинице. Повторяю, это “дело” можно пропустить:
nmap -n site.com
В итоге целевой компьютер пингуется на предмет “жив” этот хост (работает) или спит, то есть выключен. Но и этот шаг можно пропустить (зачем – рассмотрим подробнее потом), используя опцию -PN:
nmap -PN site.com
И вот запускается само сканирование TCP портов и, чтобы указать, какие порты вас интересуют, можно придать команде вид типа:
nmap -p1-30 site.com #сканирует с 1 по 30 порты nmap -p- site.com #сканирует все порты nmap -p site.com #сканирует также все порты
Если нужно отсканировать фрагмент сети или всю, как во второй команде, подсеть, используйте команды:
nmap site.com/cdir
nmap 192.168.1.1/24
Если вы нацелились на ещё куда более обширный объём работ, можете опускать целые ранги в указанных диапазонах с помощью символа * (этот символ прекрасно “прокатывает” в поисковых сиситемах, если вы не уверены в вводимых символах, которые ищете):
nmap 192.168.1.*
и даже
nmap 192.168.*.*
Вариаций куча. Множественные, но выборочные цели сканировать нетрудно; нужно просто разделить цели в набираемой команде с помощью пробела:
nmap цель1 цель2 цель3
# nmap 192.168.1.1 192.168.1.8
Если нужно «проверить» список IP адресов, но не всю сетку, используйте команду типа:
nmap site.com-100
Или
# nmap 192.168.1.1-100
Далее. Допустим, у вас целый список машин, которые вы собираетесь атаковать. Сканер можно заставить просканировать весь список:
# nmap -iL список_целей.txt
…если вы, конечно, абсолютно уверены, что составленный список корректен.
Как сканировать IPv6 адреса в nmap
Чтобы сканировать открытые порты на IPv6 адресах необходимо соблюдение ряда условий:
- удалённых хост должен иметь IPv6 адрес
- ваш провайдер Интернет-услуг также должен иметь поддержку IPv6 и вашему устройству должен быть присвоен IPv6 адрес
- если устройство, с которого выполняется сканирование, не напрямую подключено к роутеру, то эта сеть также должна поддерживать IPv6. Например, Интернет-провайдер, ваш роутер и ваш компьютер поддерживают IPv6 — следовательно, вы можете сканировать эту версию адресов. Но если вы с этого же компьютера попытаетесь выполнить сканирование, например, из виртуальной машины за NAT, которая подключена к сети 10.*.*.*, то сканирование завершиться неудачей из-за ошибки вида:
Если все условия соблюдены, то к команде сканирования nmap нужно добавить опцию -6 и в качестве цели указать:
- полный IPv6 адрес
- имя хоста (если к нему привязан IPv6)
- для подсетей можно использовать нотацию CIDR
В настоящее время диапазоны октетов для IPv6 ещё не поддерживаются.
Даже если в качестве цели явно указан IPv6 адрес, опцию -6 нужно обязательно указывать, иначе возникнет ошибка вида:
Все опции и возможности nmap поддерживаются также и для IPv6 адресов.
Если вам нужно просканировать порты на IPv6 адресе, но отсутствует такая техническая возможность, то вы можете воспользоваться онлайн сервисом «» (бесплатный, не требует регистрации).
Пример сканирования IPv6 адреса в Nmap:
Проверьте открытые порты с помощью псевдоустройств в Bash
Другой способ проверить, является ли определенный порт открытым или закрытым, – это использование оболочки Bash псевдоустройства /dev/tcp/.. или /dev/udp/…
При выполнении команды на псевдоустройстве /dev/$PROTOCOL/$HOST/$IP в Bash откроет TCP или UDP-соединение с указанным хостом на указанном порту.
Следующий оператор if..else проверит, открыт ли порт 443 на kernel.org:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null' then echo "Порт открыт" else echo "Порт закрыт" fi
Порт открыт
Как работает приведенный выше код?
Время ожидания по умолчанию при подключении к порту с использованием псевдоустройства очень велико, поэтому мы используем команду timeout для уничтожения команды test через 5 секунд. Если соединение установлено у kernel.org с портом 443 тестовая команда вернет true.
Вы также можете использовать цикл for для проверки диапазона портов:
for PORT in {20..80}; do timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "порт $PORT открыт" done
Вывод будет выглядеть примерно так:
порт 22 открыт порт 80 открыт
Быстрое сканирование огромных сетей в nmap
lijiejie, в предложил вариант быстрого сканирования огромных подсетей.
Сканирование больших подсетей в nmap, например 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,100.64.0.0/10 — это нетривиальная задача. На таких сетях nmap очень медленный и можно никогда не дождаться результатов сканирования. В результате многие просто используют другие инструменты, такие как и .
Сканируя огромное сетевое пространство, нас больше всего беспокоит эффективность, то есть затраты времени. Ради быстроты иногда можно пожертвовать точностью.
Основная идея быстрого сканирования — пинговать с высоким уровнем параллелизма:
sudo nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oX nmap_output.xml 100.64.0.0/10
Значение опций:
- -sn: не сканировать порты, только пинговать хост
- -PE: определяет, жив ли хост через эхо ICMP
- -n: не преобразует IP-адреса в доменные имена.
- —min-hostgroup 1024: Регулирует размер групп для параллельного сканирования. Минимальная группировка установлена на 1024 IP-адреса. В Nmap есть возможность осуществлять сканирование портов или сканирование с целью определения версии нескольких хостов параллельно. Это происходит путём разделения целевого IP пространства на группы, а затем сканирования одной группы за раз. В общем случае целесообразно использовать большие группы. Недостатком является то, что вы не можете узанть информацию о каком-либо хосте, пока не закончится сканирование всей группы. Таким образом, если Nmap начнет сканирование группы из 50-ти хостов, то пользователь не будет получать никакой информации (кроме обновлений информации предлагаемых в вербальном режиме), пока не будет завершено сканирование всех 50-ти хостов. о умолчанию Nmap использует компромиссный подход к решению этой проблемы. Сначала производится сканирование небольших групп из 5-ти хостов, поэтому первые результаты приходят быстро, затем размер группы постепенно увеличивается до максимального — 1024. Точные значения по умолчанию зависят от заданных опций. Для большей эффективности Nmap использует группы больших размеров для UDP сканирования и для некоторых типов TCP сканирования портов.
- —min-parallelism 1024: Регулирует распараллеливание запросов. Этот параметр очень важен. Чтобы в полной мере использовать системные и сетевые ресурсы, мы устанавливаем количество проверок на не менее чем 1024. Эти опции регулируют общее количество запросов для группы хостов. Опции используются при сканировании портов и при обнаружении хостов. По умолчанию Nmap высчитывает степень параллельности основываясь на производительности сети. Если пакеты отбрасываются, то Nmap использует меньшее количество запросов. Количество запросов медленно увеличивается по мере того, как сеть продолжает нормально работать. Эти опции устанавливают минимальную и максимальную границы для этой переменной. По умолчанию параллелизм устанавливается в 1, если сеть работает плохо, и может достигать нескольких сотен при идеальных условиях.
- -oX nmap_output.xml: Вывести результат в формате XML, имя файла — nmap_output.xml
По окончании сканирования вы можете проанализировать XML-документ, чтобы узнать, какие IP-адреса активны.
Совет: количество одновременных зондов можно настроить в соответствии с условиями вашей сети.
Посмотрите на следующие данные результатов сканирования:
Read data files from: /usr/bin/../share/nmap Nmap done: 4012855 IP addresses (140507 hosts up) scanned in 2590.61 seconds Raw packets sent: 7897197 (221.122MB) | Rcvd: 160371 (6.456MB)
Просканировано 4012855 адресов за 2590 секунд — это 43 минуты. Найдено 140507 хостов онлайн. С настройками по умолчанию сканирование сети /10 заняло бы намного больше времени.
основные черты
Nmap это полностью бесплатная утилита с открытым исходным кодом, она позволяет нам обнаруживать сети и хосты, а также проводить аудит безопасности. Эта программа совместима с Linux, Windows и операционные системы macOS, но во всех они используются через командную строку, хотя у нас есть возможность установки ZenMap, это графическая утилита Nmap для сканирования портов через графический интерфейс пользователя. Если вы не хотите сражаться с командами через консоль, этот графический пользовательский интерфейс может быть полезен на первых этапах работы с этой замечательной программой, однако, когда у вас будет больше опыта, вы обязательно будете выполнять все команды прямо из терминала.
Nmap позволяет нам обнаруживать хосты в локальной сети, а также через Интернет, таким образом мы можем узнать, есть ли эти хосты (компьютеры, серверы, маршрутизаторы, коммутаторы, IoT устройства) в данный момент подключены к Интернету или локальной сети. Этот инструмент также позволяет нам выполнять сканирование портов на разных хостах, видеть, какие службы у нас активны на указанных хостах, благодаря тому, что он сообщает нам статус их портов, мы можем знать, какую операционную систему использует определенный компьютер. , и мы даже можем автоматизировать различные тесты на проникновение, чтобы проверить безопасность оборудования.
Nmap имеет разные типы сканирования портов, они могут быть через сегменты TCP, дейтаграммы UDP или пакеты ICMP, кроме того, он позволяет выполнять сканирование скрытым образом, чтобы их было трудно обнаружить брандмауэрами. Конечно, мы сможем выполнять сканирование портов на определенных конкретных портах, между диапазонами портов, диапазонами IP-адресов, возможность использования пакетов TCP null, FIN, Xmas и ACK в дополнение к SYN для обнаружения открытых портов TCP.
Другие функции, которые предлагает нам этот инструмент, — это возможность провести полную инвентаризацию сети и даже проверить, работает ли определенный хост или служба. Эта программа была разработана для сканирования большого количества хостов, поэтому, если вам нужно сканировать несколько целей, у вас не возникнет проблем. Эта программа очень гибкая, она включает в себя десятки передовых методов сканирования хостов и портов, кроме того, она также позволяет проводить аудит через NSE (Nmap Search Engine), поэтому она действительно эффективна.
Nmap имеет различные состояния портов, которые появятся при сканировании портов
Важно знать, что означает каждое состояние Nmap, потому что при любом сканировании портов он будет возвращать разные состояния
Статус порта с Nmap
- Откройте — Приложение активно принимает соединения TCP или UDP. Порт открыт и может использоваться, пентестеры смогут использовать этот открытый порт для эксплуатации системы. Это состояние по умолчанию, если у нас нет брандмауэра, блокирующего доступ.
- Закрыто : Закрытый порт доступен, потому что он отвечает на Nmap, однако на этом порту нет запущенных приложений. Это полезно для обнаружения того, что хост включен, или как часть обнаружения операционной системы. Системному администратору рекомендуется отфильтровать эти порты с помощью брандмауэра, чтобы они были недоступны. Что касается пентестера, то желательно оставить эти порты «закрытыми» для анализа в дальнейшем, на случай, если они поставят новую услугу.
- Отфильтрованный : В этом состоянии Nmap не может определить, открыт ли порт, потому что на этом порту есть брандмауэр, фильтрующий пакеты Nmap. Эти отфильтрованные порты появятся, когда у нас будет активирован брандмауэр. Nmap будет неоднократно пытаться подключиться, что значительно замедляет сканирование портов.
- Открыть | Отфильтрованный : Nmap не знает, открыт порт или отфильтрован. Это происходит потому, что открытый порт не отправляет никакого ответа, и это отсутствие ответа может быть от брандмауэра. Этот статус появляется, когда мы используем UDP и IP, и мы используем сканирование FIN, NULL и Xmas.
- Закрыто | Отфильтрованный : в этом состоянии неизвестно, закрыт порт или фильтруется. Это состояние используется только при сканировании простоя IP.
После того, как мы увидели основные функции Nmap и состояние доступных портов, мы собираемся установить и использовать его.
Выводы
В этой статье мы рассмотрели как выполняется сканирование портов nmap, а также несколько простых примеров использования этой утилиты. Эти команды nmap могут быть полезными многим системным администраторам, чтобы улучшить безопасность их систем. Но это далеко не все возможности утилиты. Продолжайте экспериментировать с утилитой чтобы узнать больше только не в чужих сетях!
Ниже вы найдете 20 базовых примеров использования команды Nmap.
Вы узнаете, как использовать Nmap из командной строки в Linux для поиска активных хостов в сети и сканирования открытых портов.
Вы увидите, как удаленно определить операционную систему с помощью отпечатков стека TCP/IP и как узнать версию программного обеспечения запущенного на удаленном сервере.
Я так-же покажу как с помощью Nmap осуществить скрытое сканирование, как определить фаервол и как подменить MAC адрес.
Дельный Совет: Хотите сохранить анонимность? Узнайте как использовать ПРОКСИ из командной строки в Linux. Читать далее →