Пользователь
0,0
рейтинг
28 октября 2011 в 18:19

Администрирование → Nmap — руководство для начинающих из песочницы

Многие слышали и пользовались замечательной утилитой nmap. Ее любят и системные администраторы, и взломщики. Даже Голливуд знает про нее — в фильме «Матрица» при взломе используется nmap.


nmap — это аббревиатура от «Network Mapper», на русский язык наиболее корректно можно перевести как «сетевой картограф». Возможно, это не лучший вариант перевода на русский язык, но он довольно точно отображает суть — инструмент для исследования сети и проверки безопасности. Утилита кроссплатформенна, бесплатна, поддерживаются операционных системы Linux, Windows, FreeBSD, OpenBSD, Solaris, Mac OS X.

Рассмотрим использование утилиты в Debian. В стандартной поставке дистрибутива nmap отсутствует, установим его командой

# aptitude install nmap

Nmap умеет сканировать различными методами — например, UDP, TCP connect(), TCP SYN (полуоткрытое), FTP proxy (прорыв через ftp), Reverse-ident, ICMP (ping), FIN, ACK, SYN и NULL-сканирование. Выбор варианта сканирования зависит от указанных ключей, вызов nmap выглядит следующим образом:

nmap <ключи> цель

Для опытов возьмем специальный хост для экспериментов, созданный самими разработчиками nmap — scanme.nmap.org. Выполним от root'а
Ключи сканирования задавать необязательно — в этом случае nmap проверит хост на наличие открытых портов и служб, которые слушают эти порты.
Запустим командой:

# nmap scanme.nmap.org

Через несколько секунд получим результат:
Interesting ports on scanme.nmap.org (74.207.244.221):
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

Ничего необычного, ssh на стандартном порту и http на 80. Nmap распознаёт следующие состояния портов: open, filtered, closed, или unfiltered. Open означает, что приложение на целевой машине готово для принятия пакетов на этот порт. Filtered означает, что брандмауэр, фильтр, или что-то другое в сети блокирует порт, так что Nmap не может определить, является ли порт открытым или закрытым. Closed — не связанны в данный момент ни с каким приложением, но могут быть открыты в любой момент. Unfiltered порты отвечают на запросы Nmap, но нельзя определить, являются ли они открытыми или закрытыми.

# nmap -O scanme.nmap.org

Хинт: Если во время сканирования нажать пробел — можно увидеть текущий прогресс сканирования и на сколько процентов он выполнен. Через несколько секунд получаем ответ, в котором пока что интересна строчка Device type:

Device type: general purpose|WAP|webcam|storage-misc
Running (JUST GUESSING) : Linux 2.6.X|2.4.X (93%), AXIS Linux 2.6.X (89%), Linksys Linux 2.4.X (89%)
Aggressive OS guesses: Linux 2.6.17 - 2.6.28 (93%), Linux 2.6.9 - 2.6.27 (93%), Linux 2.6.24 (Fedora 8) (92%), Linux 2.6.18 (Slackware 11.0) (92%), Linux 2.6.19 - 2.6.26 (92%), OpenWrt (Linux 2.4.32) (91%), Linux 2.6.22 (91%), Linux 2.6.22 (Fedora Core 6) (90%), Linux 2.6.13 - 2.6.27 (90%), Linux 2.6.9 - 2.6.18 (90%)
No exact OS matches for host (test conditions non-ideal).


Вообще, точную версию ядра средствами nmap определить невозможно, но примерную дату «свежести» и саму операционную систему определить можно. Можно просканировать сразу несколько хостов, для этого надо их перечислить через пробел:

# nmap -O example.com example2.com

Вернемся к нашему подопытному хосту. Хочется узнать поподробнее, какой используется софт. Попробуем уточнить полученные данные с помощью ключей -sV:

# nmap -sV example.com example2.com

Получим ответ:

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
80/tcp open http Apache httpd 2.2.14 ((Ubuntu))
Service Info: OS: Linux


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

Агрессивное сканирование можно провести, указав ключ -A

# nmap -A scanme.nmap.org

Nmap выведет очень много информации, я не стану приводить пример. Сканирование может длится довольно долго, занимая несколько минут.

В локальных сетях или просто имея на руках диапазон ip адресов, удобно проверить их на занятость с помощью ключей -sP:

# nmap -sP 192.168.1.0/24

Сканирование проходит довольно быстро, так как по сути это обычный ping-тест, отвечает ли хост на ping. Следует учесть, что хост может не отвечать на ping из-за настроек фаерволла. Если нужный участок сети нельзя ограничить маской, можно указать диапазон адресов, с какого и по какой надо провести сканирование. Например, есть диапазон адресов с 192.168.1.2 до 192.168.1.5. Тогда выполним:

# nmap -sP 192.168.1.2-5

Ответ будет выглядеть так:

Host 192.168.1.2 is up (0.0023s latency)
Host 192.168.1.3 is up (0.0015s latency)
Host 192.168.1.4 is up (0.0018s latency)
Host 192.168.1.5 is up (0.0026s latency)


В моем случае все ip в данный момент были в сети.
Это далеко не все возможности nmap, но уместить их в рамках одной статьи несколько сложновато.

Если вам ближе GUI — есть замечательная утилита Zenmap — графическая оболочка для nmap, умеющая заодно и строить предполагаемую карту сети.

Хочу предупредить, что сканирование портов на удаленных машинах может нарушать закон.
UDPInflame уточнил, что сканирование портов все-таки не является противозаконным.
@hyperwolf
карма
22,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (27)

  • +13
    Руководство неплохое, но есть и официальное nmap.org/man/ru/
    Тоже неплохое и вполне удобное)
    • +2
      Да и на сколько я знаю сканирование портов официально не нарушает закон или я ошибаюсь?
      • 0
        Насчет закона сказать точно не могу, так как статьи конкретно такой нету. Но был пример из личной жизни — с одного моего сервера кто-то упорно сканировал порты — мне звонили из дата-центра с вопросом — с какой целью производится сканирование портов.
        • 0
          По собственному опыту могу сказать, что само по себе сканирование портов не нарушает закон. Можете поправить в статье.
      • 0
        Официально — нет. Но агрессивное сканирование сети загрузка хостов тучей запросов мождет быть расценено как попытка взлома или сетевая атака (типа DoS или что-то вроде). Так что большинство провайдеров явно об этом не говорят, но использование подобных утилит и сканеров не одобряют.
        Прямых претензий предъявить в этом случае не получится, но легко могут взять «на карандаш» и устроить нервотрепку по другому поводу.
        Так что сканирование сторонних сетей стоит делать аккуратно и с предосторожностями, раз уж так хочется посканить. :)
      • 0
        У меня в договоре с провайдером так и написано — запрещено сканировать порты. Но законы, на сколько я знаю, это не нарушает.
        • 0
          ну провайдер провайдером, а посадить или наказать рублем не могут)
  • +3
    Уже было, очень рядом.
  • +21
    Убогое какое-то руководство, совсем для детей.
    Ничего не раскрыто, никаких ИНТЕРЕСНЫХ примеров не приведено, банально.
    • +1
      Заголовок топика: «Nmap — руководство для начинающих».
      • +9
        Дык это не для начинающих даже, и совсем даже не руководство, а так, «водичкой полил».
        Для того что здесь написано даж не надо man nmap, достаточно nmap --help, да и то, там больше будет.
        • 0
          А мне было интересно.
      • 0
        а как надо?
  • +37
    Чтобы не гадать что значит closed, filtered, unfiltered есть удобный ключ --reason показывающий почему было принято такое решение, например получен tcp rst или icmp port unreachable.

    Ключ -A означает запустить все возможные тесты одновременно, включая набор скриптов из nmap.org/nsedoc/ а не агрессивное сканирование.

    Агрессивным сканированием автор программы называет тайминги между запросами и количество параллельных запросов, задается опцией -T?, где? — цифра от одного до пяти означающая режим.

    Об этом подробно написано в книге автора nmap Гордона Лайена. Часть книги можно читать бесплатно на сайте nmap.org/book/toc.html но некоторые главы (например про тайминги) доступны только в печатной версии которую можно купить на амазоне:
    www.amazon.com/Nmap-Network-Scanning-Official-Discovery/dp/0979958717/ref=sr_1_1?ie=UTF8&qid=1319820045&sr=8-1
    Если кому-то интересно почитать недостающие главы, я могу поделиться отсканированной версией.

    Обычно я использую nmap c такими ключами:

    nmap -sS -p- -PS80,22 -n -T4 -vvv --reason google.com

    -sS — посылать только syn и считать порт открытым если получен syn_ack
    -p- — сканировать все 65 тысяч портов, потому как по дефолту сканируются только популярные до 1024
    -PS80,22 — принимать решение о том что хост онлайн не на основании icmp echo, а на основании доступности tcp-порта
    -n — не делать DNS-резолв, типа выяснения PTR записей и прочего
    -T4 — большая скорость, маленькие тайминги (если канал у цели и себя быстрый)
    -vvv — максимум verbosity, так найденные порты будут показаны по ходу сканирования а не после завершения
    --reason — показывать почему было принято решение о таком состоянии порта
    • +10
      Тот случай, когда комент содержательнее статьи.
  • 0
    Спасибо. Узнал что у 3 из 4 роутеров стоит стандартный заводской пароль. Ужас!
    • 0
      если с помощью nmap, будьте любезны — напишите с какими ключами сканировали
  • 0
    Хорошо написано. Спасибо за статью.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      В настройках апача может быть отключен показ версии.
      Попробуйте так: nmap -sV -PN -p80 artlebedev.ru
      • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Гм. А автор не мог бы, скажем, не man nmap переработать, а подать материал на пример о том, как производится сканирование при разных режимах, на основе чего делаются выводы об открытости-закрытости порта? Это было бы, имхо, полезней, так как вывод man'а прочитать может в принципе кто угодно, а вот знание таких вещей позволяет, во-первых, более точно трактовать вывод nmap-а, а во-вторых, составлять свои сценарии сканирования, которые могут обойти установленные по пути препятствия в виде firewall'ов и т.д.
  • 0
    > Для опытов возьмем специальный хост для экспериментов, созданный самими разработчиками nmap — scanme.nmap.org.
    > Выполним от root'а

    Объясните пожалуйста, зачем это делать от root'а?
    • +1
      > Объясните пожалуйста, зачем это делать от root'а?

      Так ведь некоторые вещи «простому смертному» делать недозволено. А от рута можно (в т.ч. и ping с нестандартными параметрами запускать и т.п.).
    • 0
      Рут нужен для syn-сканироваия, потому что обычному юзеру можно только открыть полноценное TCP соединение.
  • 0
    Спасибо за статью. Помогло.
  • 0
    Спасибо, хорошая статья! Для новичков в мире линукс — то что надо :-)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.