Для сканирования портов в Linux используется утилита nmap.
Она позволяет извне определить какие службы запущены на сервере и какие порты используются. Утилите передаётся ip адрес сервера или домен, а также дополнительные ключи при необходимости.
Проверка nmap запускается суперпользователем: root или пользователем в группе sudo.
nmap для сканирования портов сервера
Утилита доступа в репозиториях всех популярных дистрибутивов. В Ubuntu устанавливается так:
apt install nmap
nmap часто применяют специалисты по информационной безопасности.
Чужие сервера сканировать таким образом нужно с осторожностью. Попытки сканирования могут быть расценены как вредоносная активность и иметь легальные последствия. Также они могут повлечь сканирование источника запросов и потенциально атаки на него.
Сканирование чужих серверов можно запускать только имея на это разрешение от владельца сервера.
nmap позволяет сканировать порты на любой удаленной машине, указывается IP адрес или доменное имя. Также можно запускать сканирование сервера в локальной сети или собственного компьютера.
Можно использовать хост scanme.nmap.org, его адрес можно найти в документации утилиты (man nmap):
Для демонстрации будем использовать в большинстве случаев локальный адрес.
nmap 127.0.0.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-08-27 08:13 +05
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
25/tcp open smtp
80/tcp open http
631/tcp open ipp
5432/tcp open postgresql
8000/tcp open http-alt
9050/tcp open tor-socks
Nmap done: 1 IP address (1 host up) scanned in 0.31 seconds
Открытые порты и запущенные на них сервисы утилита покажет даже без использования дополнительных ключей.
В результате выполнения выше видно, что просканирована машина 127.0.0.1, на ней обнаружены открытые порты служб SMTP, HTTP, Postgresql и ещё нескольких сервисов.
Ping scan
Добавив —sn можно отключить сканирование и просто проверить в сети ли хост. Такая проверка называется Ping scan. При ней время проверки будет меньше, также владелец хоста (если это внешний чужой хост) не увидит попыток сканирования.
Результат идентичен тому который можно получить запустив ping до интересующего адреса или домена.
nmap -sn 127.0.0.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-08-27 08:17 +05
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00032s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.00 seconds
Полная проверка с помощью nmap
Максимально подробную информацию о портах и службах можно получить так (для TCP)
nmap -sS -sV -sC --version-all -O --osscan-guess -T4 --reason --open -p- -n -v 127.0.0.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-08-27 08:19 +05
NSE: Loaded 146 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 08:19
Completed NSE at 08:19, 0.00s elapsed
Initiating NSE at 08:19
Completed NSE at 08:19, 0.00s elapsed
Initiating SYN Stealth Scan at 08:19
Scanning 127.0.0.1 [65535 ports]
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 25/tcp on 127.0.0.1
Completed SYN Stealth Scan at 08:19, 8.16s elapsed (65535 total ports)
Initiating Service scan at 08:19
Scanning 6 services on 127.0.0.1
Использованные ключи утилиты nmap
sS — задаёт использование техники TCP SYN (может быть -sT для всех TCP соединений, -sU
— UDP)
sV — определяет версии ПО
sC -проводит проверку с использованием набора стандартных скриптом nmap
O — включает проверку ОС
version-all — проверяет все возможные версии ПО, без флага будет ограничиваться несколькими основными вариантами
osscan-guess — определяет операционную систему сервера
T4 — временной шаблон для проверки, значения от 1 до 5, с 5 проверка будет проходить быстрее всего
reason — выводит информацию о причине по которой порт находится в актуальном состоянии
open — показывает только открытые или потенциально открытые порты
n — не разрешать доменные имена в ip адреса
v — выводить подробную информацию
-p- — сканировать все порты от 1 до 65535.
-p — один из самых используемых флагов. Можно задавать ключ --top-ports
и им ограничивать количество проверяемых портов. Большинство служб используют порты из первой тысячи.
Можно запустить проверку на произвольное количество портов с ключами -p0-50000, например — от нуля до 50 тысяч.
Часть вывода при запуске сканирования ещё на одном сервере, проверяется также 127.0.0.1:
Пример для UDP портов:
nmap -sU --top-ports 1000 -Pn -v 127.0.0.1
Во всех случаях можно указывать один IP адрес или диапазон адресов. Так с помощью nmap для сканирования портов можно использовать по подсети /24 если, например, нужно найти в ней веб-сервер и проверить предположение о блокировке на сетевом оборудовании.
Для nmap сканирование портов является основным предназначением, также утилита может выполнять более агрессивные действия — в частности подбирать пароли FTP/SSH.
Этого для чужих серверов лучше не делать без договора на аудит безопасности с их владельцем.
Мы разобрали как использовать nmap для сканирования портов.
Столь же важно знать как защищать свой сервер от попыток сканирования. Их можно запретить при помощи iptables. В том числе можно запретить ICMP трафик.