nmap — audyt sieci i skanowanie portów na VPS
Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo
Każdy administrator serwera powinien wiedzieć co "widzi" internet patrząc na jego VPS. Czy
firewall blokuje port MySQL (3306)? Czy Redis (6379) nie jest przypadkiem dostępny
publicznie? Czy SSH działa na niestandardowym porcie? nmap pozwala zobaczyć własny
serwer oczami potencjalnego atakującego — i poprawić konfigurację zanim ktoś skorzysta z luk.
Ten artykuł pokazuje jak efektywnie używać nmap do audytu własnej infrastruktury.
Ważne: Skanuj TYLKO własne serwery lub serwery dla których masz pisemną zgodę właściciela. Skanowanie cudzych serwerów bez zgody jest nielegalne w Polsce i UE (Art. 267 k.k., Computer Misuse Act). nmap generuje też alerty w systemach IDS/IPS.
Instalacja i podstawowe skanowanie
# Ubuntu/Debian sudo apt install nmap -y nmap --version # Podstawowe skanowanie — top 1000 portów TCP nmap 192.168.1.1 nmap twoj-serwer.pl # Typy skanowania: # -sS SYN scan (domyślny, wymaga root) — szybki, mniej wykrywalny # -sT TCP Connect scan (bez root) — wolniejszy, pełne połączenie # -sU UDP scan (wymaga root) — wolny, ważny dla DNS/SNMP/NTP # -sn Ping scan — tylko czy host żyje, bez portów # Najczęstsze flagi analizy: # -sV wykryj wersję usługi (Service Version) # -sC uruchom default scripts NSE # -O wykryj system operacyjny (wymaga root) # -A agresywny: -sV -sC -O -traceroute # Szybki audyt własnego VPS: sudo nmap -sV -sC -O your-vps-ip # Wynik przykładowy: # PORT STATE SERVICE VERSION # 22/tcp open ssh OpenSSH 8.9p1 Ubuntu # 80/tcp open http nginx 1.24.0 # 443/tcp open https nginx 1.24.0 # 3306/tcp closed mysql # 6379/tcp closed redis
Szczegółowe opcje skanowania
# Skanuj WSZYSTKIE porty (65535) — wolniejsze ale kompletne sudo nmap -p- -sV your-vps-ip # Konkretne porty sudo nmap -p 22,80,443,3306,5432,6379 -sV your-vps-ip # Zakres portów sudo nmap -p 1-1024 -sV your-vps-ip # UDP scan (DNS=53, SNMP=161, NTP=123) sudo nmap -sU -p 53,123,161 your-vps-ip # Skanowanie wielu hostów sudo nmap -sV 192.168.1.0/24 # cała podsieć sudo nmap -sV 10.0.0.1-50 # zakres IP sudo nmap -iL hosts.txt # z pliku (jeden IP/hostname per linia) # Timing (szybkosc skanowania): # -T0 Paranoid — bardzo wolny, omija IDS # -T1 Sneaky — wolny, omija IDS # -T2 Polite — ostrożny, nie przeciąża sieci # -T3 Normal — domyślny # -T4 Aggressive — szybki (zalecany do audytu własnych sieci) # -T5 Insane — bardzo szybki, może pominąć wyniki sudo nmap -T4 -p- -sV your-vps-ip # szybki pełny skan
NSE Scripts — testowanie podatności i usług
# Kategorie NSE scripts # safe — bezpieczne, nie zakłócają usług # discovery — zbierają informacje o usługach # auth — testują mechanizmy uwierzytelniania # vuln — sprawdzają znane podatności (CVE) # exploit — aktywnie eksploatują podatności (tylko pentesty!) # intrusive — mogą zakłócić usługi (nie na produkcji) # malware — wykrywają backdoory i malware # Uruchom default scripts (kategoria safe + discovery) sudo nmap -sC your-vps-ip # Sprawdź podatności na portach 80/443 sudo nmap --script=vuln -p 80,443 your-vps-ip # Specific scripts: # SSL/TLS konfiguracja — heartbleed, POODLE, ciphers sudo nmap --script=ssl-heartbleed,ssl-poodle,ssl-enum-ciphers -p 443 your-vps-ip # HTTP server info sudo nmap --script=http-server-header,http-methods,http-robots.txt -p 80,443 your-vps-ip # SSH — obsługiwane algorytmy i podatności sudo nmap --script=ssh2-enum-algos,ssh-auth-methods -p 22 your-vps-ip # MySQL — sprawdź anonimowy dostep sudo nmap --script=mysql-empty-password,mysql-info -p 3306 your-vps-ip # FTP — anonimowy dostep sudo nmap --script=ftp-anon,ftp-bounce -p 21 your-vps-ip # Lista dostepnych skryptow ls /usr/share/nmap/scripts/ | grep ssl nmap --script-help ssl-heartbleed
Output — formaty XML i grepable
# Formaty output:
# -oN Normal — czytelny tekst (domyślny)
# -oX XML — do parsowania narzędziami (np. python lxml)
# -oG Grepable — łatwy grep/awk
# -oA All — wszystkie 3 formaty naraz (zalecane dla audytów)
# Zapisz do wszystkich formatów naraz
sudo nmap -sV -sC -oA /tmp/audit-$(date +%Y%m%d) your-vps-ip
# Wyniki: /tmp/audit-20260410.nmap, .xml, .gnmap
# XML — parsuj przez Python
# python3 -c "
# import xml.etree.ElementTree as ET
# tree = ET.parse('/tmp/audit-20260410.xml')
# for port in tree.findall('.//port'):
# state = port.find('state').get('state')
# if state == 'open':
# print(port.get('portid'), state)
# "
# Grepable — szybkie filtry
grep "open" /tmp/audit-20260410.gnmap
grep "22/open" /tmp/audit-20260410.gnmap | awk '{print $2}' # tylko IP z otwartym SSH
# Ndiff — porównaj dwa skany (co się zmieniło?)
sudo nmap -oX before.xml your-vps-ip
# [po kilku dniach/tygodniach]
sudo nmap -oX after.xml your-vps-ip
ndiff before.xml after.xml # pokaż róznice IPv6 i wykrywanie systemu operacyjnego
# IPv6 skanowanie (flaga -6) sudo nmap -6 -sV 2a01:4f8:1:2::3 # konkretny adres IPv6 sudo nmap -6 -sV fe80::1%eth0 # link-local IPv6 # Wykrywanie OS (wymaga root i otwartych portów) sudo nmap -O your-vps-ip # Running: Linux 5.X # OS details: Linux 5.4 - 5.15 # Network Distance: 1 hop # OS z bardziej agresywnym odgadywaniem sudo nmap -O --osscan-guess --fuzzy your-vps-ip # Traceroute zintegrowany z nmap sudo nmap --traceroute -sV your-vps-ip # Agresywny tryb all-in-one (sV + sC + O + traceroute) sudo nmap -A -T4 your-vps-ip # Skanowanie bez pingoowania hosta (jeśli ICMP jest zablokowany) sudo nmap -Pn -sV your-vps-ip # nie sprawdzaj żywotności przez ping # Tylko ping (odkryj które hosty żyją, bez portów) sudo nmap -sn 192.168.1.0/24
Porównanie nmap, Masscan i Zmap
| Narzędzie | Szybkość | Dokładność | Najlepsze do |
|---|---|---|---|
| nmap | Wolny (tysiące pakietów/sek) | Bardzo wysoka (wersje, OS, NSE) | Dogłębna analiza 1-kilkuset hostów, audyt bezpieczeństwa |
| Masscan | Bardzo szybki (10 mln pkt/sek) | Tylko otwarte porty (TCP) | Skanowanie dużych sieci /16-/8, discovery |
| Zmap | Ekstremalnie szybki (całego internetu w <5 min) | Tylko otwarte porty (jeden port) | Internet-scale research, jeden port naraz |
| RustScan | Bardzo szybki (port discovery) | Średnia (potem oddaje do nmap) | Szybkie odkrycie portów + nmap follow-up |
| Shodan CLI | N/A (dane z bazy) | Historyczna (może być nieaktualna) | Pasywne wywiad o hostach, bez aktywnego skanowania |
Praktyczny audyt VPS — checklist
- Sprawdź otwarte porty z zewnątrz —
sudo nmap -sV -p- your-vps-ip— nic nieoczekiwanego nie powinno być dostępne. - Weryfikacja SSL/TLS —
sudo nmap --script=ssl-enum-ciphers -p 443— szukaj słabych szyfrów (RC4, DES, MD5). - Sprawdź SSH hardening —
sudo nmap --script=ssh2-enum-algos -p 22— czy diffie-hellman-group1 jest wyłączony? - Bazy danych nie powinny być publiczne — porty 3306, 5432, 6379, 27017 muszą być w stanie "filtered" lub "closed" dla zewnętrznych skanów.
- Regularne skanowania — uruchamiaj
nmap -oAco miesiąc i porównuj zndiff— nowe otwarte porty to sygnał alarmowy. - Skanuj też UDP —
sudo nmap -sU -p 53,123,161,500— otwarte UDP dla SNMP, NTP lub IKE to potencjalne wektory ataku.