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 уточнил, что сканирование портов все-таки не является противозаконным.
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 27

    +13
    Руководство неплохое, но есть и официальное nmap.org/man/ru/
    Тоже неплохое и вполне удобное)
      +2
      Да и на сколько я знаю сканирование портов официально не нарушает закон или я ошибаюсь?
        0
        Насчет закона сказать точно не могу, так как статьи конкретно такой нету. Но был пример из личной жизни — с одного моего сервера кто-то упорно сканировал порты — мне звонили из дата-центра с вопросом — с какой целью производится сканирование портов.
          0
          По собственному опыту могу сказать, что само по себе сканирование портов не нарушает закон. Можете поправить в статье.
          0
          Официально — нет. Но агрессивное сканирование сети загрузка хостов тучей запросов мождет быть расценено как попытка взлома или сетевая атака (типа DoS или что-то вроде). Так что большинство провайдеров явно об этом не говорят, но использование подобных утилит и сканеров не одобряют.
          Прямых претензий предъявить в этом случае не получится, но легко могут взять «на карандаш» и устроить нервотрепку по другому поводу.
          Так что сканирование сторонних сетей стоит делать аккуратно и с предосторожностями, раз уж так хочется посканить. :)
            0
            У меня в договоре с провайдером так и написано — запрещено сканировать порты. Но законы, на сколько я знаю, это не нарушает.
              0
              ну провайдер провайдером, а посадить или наказать рублем не могут)
          +3
          Уже было, очень рядом.
            +21
            Убогое какое-то руководство, совсем для детей.
            Ничего не раскрыто, никаких ИНТЕРЕСНЫХ примеров не приведено, банально.
              +1
              Заголовок топика: «Nmap — руководство для начинающих».
                +9
                Дык это не для начинающих даже, и совсем даже не руководство, а так, «водичкой полил».
                Для того что здесь написано даж не надо man nmap, достаточно nmap --help, да и то, там больше будет.
                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
                  Хорошо написано. Спасибо за статью.
                  • UFO just landed and posted this here
                      +2
                      В настройках апача может быть отключен показ версии.
                      Попробуйте так: nmap -sV -PN -p80 artlebedev.ru
                      • UFO just landed and posted this here
                      +1
                      Гм. А автор не мог бы, скажем, не man nmap переработать, а подать материал на пример о том, как производится сканирование при разных режимах, на основе чего делаются выводы об открытости-закрытости порта? Это было бы, имхо, полезней, так как вывод man'а прочитать может в принципе кто угодно, а вот знание таких вещей позволяет, во-первых, более точно трактовать вывод nmap-а, а во-вторых, составлять свои сценарии сканирования, которые могут обойти установленные по пути препятствия в виде firewall'ов и т.д.
                        0
                        > Для опытов возьмем специальный хост для экспериментов, созданный самими разработчиками nmap — scanme.nmap.org.
                        > Выполним от root'а

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

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

                              Only users with full accounts can post comments. Log in, please.