Stworzenie homelab do testowania skanera Nmap to doskonały sposób na zdobycie praktycznej wiedzy o narzędziach do analizy sieci. W poprzednim artykule nmap jak skanować sieci przedstawiliśmy ogólny opis skanera oraz wizję tego co można nim weryfikować. W tym przypadku korzystamy z VirtualBox i Vagranta, aby utworzyć dwie maszyny wirtualne – jedną pełniącą rolę skanera, drugą będącą serwerem do skanowania. Takie środowisko pozwala na bezpieczne i kontrolowane testowanie różnych scenariuszy, w tym analizy otwartych portów i wykrywania usług na urządzeniach w sieci.
Cel i funkcja laboratorium
Naszym celem jest zrozumienie, jak działa Nmap oraz jakie informacje może dostarczyć tym, którzy chcą nauczyć się jak audytować infrastrukturę. Testowanie tego narzędzia w rzeczywistych warunkach mogłoby prowadzić do niepożądanych konsekwencji, takich jak przeciążenie sieci lub niezamierzone blokady systemów. Dlatego stworzenie takiego lokalnego laboratorium z maszynami wirtualnymi zapewnia bezpieczne środowisko do nauki i eksperymentów. W rzeczywistej sieci, gdzie działa wiele różnych usług, nawet niewielki błąd w skanowaniu mógłby wywołać problemy. Dzięki utworzeniu homelab możemy bez obaw przetestować różne opcje Nmap, dokładnie zrozumieć wyniki skanowania i zobaczyć, jak te informacje mogą pomóc w identyfikacji zagrożeń.
Maszyny wirtualne działające w jednej podsieci pozwalają symulować prawdziwe środowisko sieciowe. Jedna z maszyn pełni rolę skanera, na którym zainstalowane zostanie narzędzie Nmap. Druga maszyna działa jako serwer docelowy, który będziemy skanować. Ta maszyna serwerowa ma zainstalowanych wiele różnych usług, nasłuchujących na różnych portach, co umożliwia przeprowadzenie pełnego skanowania sieci. Dzięki temu laboratorium możemy zobaczyć, jak Nmap identyfikuje usługi, które porty są otwarte oraz jakie dane można pozyskać z tej analizy.
Usługi zainstalowane na maszynie „serwer_do_skanowania”
Maszyna „serwer_do_skanowania” została skonfigurowana tak, aby nasłuchiwać na wielu różnych portach. Na serwerze uruchomione zostały różne usługi sieciowe, które są szeroko stosowane w rzeczywistych środowiskach sieciowych. Każda z tych usług działa na specyficznym porcie, co sprawia, że nasz lab jest wszechstronny i realistyczny. Poniżej przedstawiamy usługi, które będą skanowane za pomocą Nmap.
PostgreSQL – baza danych
PostgreSQL to zaawansowany system zarządzania relacyjnymi bazami danych, działający standardowo na porcie 5432. Jest to jeden z najczęściej używanych systemów bazodanowych w środowiskach produkcyjnych, zarówno przez małe aplikacje, jak i duże systemy korporacyjne. PostgreSQL obsługuje zapytania SQL i pozwala na zarządzanie dużymi zbiorami danych w sposób bezpieczny i wydajny. W naszej konfiguracji serwer PostgreSQL został ustawiony tak, aby nasłuchiwał na wszystkich interfejsach sieciowych. Umożliwi to naszemu skanerowi Nmap wykrycie go podczas skanowania.
Dzięki otwartemu portowi 5432, Nmap może nie tylko zidentyfikować usługę, ale także sprawdzić wersję zainstalowanego PostgreSQL, co pozwala na zrozumienie potencjalnych luk bezpieczeństwa. Administratorzy mogą wykorzystać te informacje do oceny, czy serwer bazy danych wymaga aktualizacji lub dodatkowej ochrony.
Nginx – serwer WWW
Nginx to jeden z najpopularniejszych serwerów WWW, który działa na porcie 80 (HTTP) oraz porcie 443 (HTTPS). Wyróżnia się wydajnością i elastycznością, dlatego szeroko stosuje się go w środowiskach produkcyjnych, zwłaszcza tam, gdzie serwuje się dynamiczne aplikacje internetowe lub potrzebne jest szybkie przekierowywanie ruchu sieciowego. Nginx w naszym laboratorium obsługuje zarówno niezabezpieczony ruch HTTP, jak i ruch HTTPS, zabezpieczony certyfikatem SSL. To pozwala na symulowanie zarówno standardowego ruchu, jak i szyfrowanych połączeń, które będą widoczne w wynikach skanowania Nmap.
Po uruchomieniu skanera Nmap będziemy mogli zobaczyć, jak narzędzie identyfikuje serwer Nginx. Jakie porty są otwarte i czy serwer używa certyfikatów SSL do ochrony połączeń. To doskonała okazja, aby sprawdzić, jak Nmap radzi sobie z identyfikacją serwerów zabezpieczonych certyfikatami i zrozumieć, jak ważne jest używanie protokołów szyfrowania w nowoczesnych aplikacjach internetowych.
vsftpd – serwer FTP
vsftpd, czyli Very Secure FTP Daemon, to usługa FTP działająca na porcie 21. FTP to jeden z najstarszych protokołów sieciowych, używany do przesyłania plików między klientami a serwerami. W dzisiejszych czasach, choć FTP jest mniej popularny w związku z pojawieniem się nowszych, bardziej bezpiecznych protokołów, nadal znajduje zastosowanie w wielu systemach, zwłaszcza tam, gdzie wymagana jest szybka i prosta wymiana plików. W naszym laboratorium vsftpd został skonfigurowany, aby działał w trybie pasywnym, co zwiększa jego bezpieczeństwo i wydajność.
Skanowanie Nmapem pozwoli nam zobaczyć, jak otwarty port 21 wskazuje na aktywną usługę FTP, oraz sprawdzić, czy Nmap jest w stanie wykryć, jakiego typu FTP serwer działa i jakie zabezpieczenia są wprowadzone.
SNMP – Simple Network Management Protocol
SNMP to protokół zarządzania siecią, używany do monitorowania stanu urządzeń sieciowych, takich jak serwery, routery, drukarki czy przełączniki. Działa na porcie 161 (UDP) i jest szeroko wykorzystywany w środowiskach korporacyjnych do zdalnego monitorowania stanu infrastruktury IT. Dzięki SNMP administratorzy mogą zbierać informacje o stanie urządzeń, ich zasobach i wydajności, a także zdalnie zarządzać konfiguracją urządzeń. W naszym laboratorium SNMP jest skonfigurowany, aby nasłuchiwał na standardowym porcie 161, co umożliwi jego łatwą identyfikację za pomocą Nmapa.
Przeprowadzenie skanowania z użyciem Nmap pozwoli nam zidentyfikować aktywność SNMP w sieci. Będzie to przydatne do oceny, jak ten protokół wpływa na bezpieczeństwo sieci i jakie informacje można z niego uzyskać.
Apache – drugi serwer WWW
Apache, obok Nginx, jest kolejnym serwerem WWW działającym w naszym laboratorium. Nasłuchuje na portach 8080 (HTTP) oraz 8443 (HTTPS) i obsługuje żądania zarówno niezabezpieczone, jak i szyfrowane. Apache to drugi, najpopularniejszy serwer WWW na świecie, wykorzystywany do hostowania stron internetowych oraz aplikacji. Dzięki swojej modularnej architekturze pozwala na łatwe zarządzanie różnymi usługami, takimi jak proxy, obsługa SSL czy dynamiczne treści.
Podczas skanowania Nmap zidentyfikuje zarówno otwarte porty HTTP i HTTPS, a także pokaże, które certyfikaty SSL zabezpieczają ruch. To doskonała okazja, aby sprawdzić, jak Nmap radzi sobie z identyfikacją serwerów WWW działających równolegle na różnych portach.
RabbitMQ – system kolejkowania wiadomości
RabbitMQ to otwarto źródłowy system kolejkowania wiadomości, który umożliwia wymianę komunikatów między aplikacjami w sposób asynchroniczny. W naszym laboratorium RabbitMQ działa na dwóch portach: 5672 (AMQP) oraz 15672 (panel administracyjny). RabbitMQ często wykorzystuje się w architekturze mikroserwisów oraz w systemach, gdzie potrzebna jest wysoka niezawodność przesyłania komunikatów między komponentami.
Skanowanie za pomocą Nmap zidentyfikuje porty związane z RabbitMQ i sprawdzi, które inne usługi są aktywne w tym samym czasie.
To ważne, aby zrozumieć, jak działa ten system kolejkowania wiadomości i jakie potencjalne ryzyka związane z otwartymi portami mogą wystąpić.
Postfix – serwer pocztowy
Postfix to popularny serwer pocztowy SMTP, który działa na portach 25 (SMTP) oraz 465 (szyfrowany SMTP). SMTP to protokół używany do wysyłania wiadomości e-mail między serwerami pocztowymi. Postfix, jako jeden z najczęściej używanych serwerów pocztowych, oferuje wysoką wydajność, elastyczność i bezpieczeństwo. W tej konfiguracji serwer nasłuchuje na standardowych portach, co pozwala na identyfikację jego działania podczas skanowania sieci.
Przeprowadzenie skanowania Nmap ujawni działające porty SMTP oraz wskaże, czy serwer używa szyfrowania do zabezpieczania przesyłanych wiadomości e-mail.
Podsumowanie – homelab do testowania skanera Nmap
W ramach naszego laboratorium do testowania Nmapa stworzyliśmy środowisko, które obejmuje szeroki wachlarz usług sieciowych, takich jak PostgreSQL, Nginx, Apache, SNMP, RabbitMQ oraz Postfix. Każda z tych usług działa na określonym porcie i pełni kluczową rolę w rzeczywistych infrastrukturach sieciowych. Naszym celem w tym laboratorium jest przeprowadzenie pełnego skanowania sieci za pomocą Nmapa. Pozwoli to zobaczyć, jak to narzędzie radzi sobie z identyfikacją otwartych portów, działających usług oraz ich wersji. Dzięki temu będziemy mogli lepiej zrozumieć, jak Nmap pomaga w codziennym zarządzaniu sieciami oraz jak identyfikuje potencjalne zagrożenia.
W kolejnych częściach pokażemy, jak przeprowadzać skanowanie za pomocą Nmap oraz jakie wyniki można uzyskać z analizy.
Poniżej znajduje się kompletny kod jaki należy uruchomić by powstało środowisko testowe.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# Definicja maszyny "skaner"
config.vm.define "skaner" do |skaner|
skaner.vm.box = "generic/ubuntu2204"
skaner.vm.hostname = "skaner"
skaner.vm.provider "virtualbox" do |vb|
vb.name = "skaner"
vb.memory = 1024
vb.cpus = 1
vb.gui = true
vb.customize ["modifyvm", :id, "--groups", "/NMAP/nmap"]
end
# Konfiguracja sieci prywatnej - stały adres IP w tej samej podsieci co "serwer_do_skanowania"
skaner.vm.network "private_network", ip: "192.168.50.10"
skaner.vm.disk :disk, size: "10GB", primary: true
skaner.vm.provision "shell", inline: <<-SHELL
# Aktualizacja repozytoriów i instalacja Nmap
apt-get update
apt-get install -y nmap
SHELL
end
# Definicja maszyny "serwer_do_skanowania"
config.vm.define "serwer_do_skanowania" do |serwer|
serwer.vm.box = "generic/ubuntu2204"
serwer.vm.hostname = "serwer-do-skanowania"
serwer.vm.provider "virtualbox" do |vb|
vb.name = "serwer_do_skanowania"
vb.memory = 2048
vb.cpus = 1
vb.gui = true
vb.customize ["modifyvm", :id, "--groups", "/NMAP/nmap"]
end
# Konfiguracja sieci prywatnej - stały adres IP w tej samej podsieci co "skaner"
serwer.vm.network "private_network", ip: "192.168.50.11"
# Przekierowanie portów do maszyny hosta
serwer.vm.network "forwarded_port", guest: 5432, host: 5432
serwer.vm.network "forwarded_port", guest: 80, host: 8080
serwer.vm.network "forwarded_port", guest: 443, host: 8443
serwer.vm.network "forwarded_port", guest: 21, host: 2121
serwer.vm.disk :disk, size: "10GB", primary: true
serwer.vm.provision "shell", inline: <<-SHELL
# Aktualizacja repozytoriów i instalacja potrzebnych pakietów
apt-get update
apt-get install -y postgresql nginx vsftpd snmpd openssl ufw certbot python3-certbot-nginx
# Konfiguracja PostgreSQL do nasłuchiwania na wszystkich interfejsach
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /etc/postgresql/14/main/postgresql.conf
echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf
systemctl restart postgresql
systemctl enable postgresql
# Konfiguracja Nginx
# Usunięcie domyślnej konfiguracji
# Usunięcie domyślnej konfiguracji
sudo rm /etc/nginx/sites-enabled/default
# Tworzenie nowej konfiguracji Nginx
cat > /etc/nginx/sites-available/default <<EOF
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
return 301 https://\$host\$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name _;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
}
EOF
# Tworzenie symlinka do aktywowania konfiguracji
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# Generowanie samo-podpisanego certyfikatu
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt \
-subj "/C=PL/ST=Mazowieckie/L=Warszawa/O=Firma/CN=localhost"
systemctl restart nginx
systemctl enable nginx
# Konfiguracja vsftpd (FTP)
#sed -i 's/listen=NO/listen=YES/' /etc/vsftpd.conf
#sed -i 's/#write_enable=YES/write_enable=YES/' /etc/vsftpd.conf
#sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd
# Usunięcie domyślnej konfiguracji
sudo rm /etc/snmp/snmpd.conf
# Tworzenie nowej konfiguracji Nginx
cat > /etc/snmp/snmpd.conf <<EOF
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
sysServices 72
master agentx
agentaddress udp:161
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
rouser authPrivUser authpriv -V systemonly
includeDir /etc/snmp/snmpd.conf.d
EOF
# Konfiguracja SNMP do nasłuchiwania na wszystkich interfejsach
#sed -i 's/agentaddress 127.0.0.1,[::1]/agentAddress udp:161/' /etc/snmp/snmpd.conf
systemctl restart snmpd
systemctl enable snmpd
# Instalacja Apache
sudo apt-get install -y apache2
# Włączenie modułów proxy i SSL
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
# Tworzenie pliku konfiguracyjnego dla Apache
sudo cat > /etc/apache2/sites-available/000-default.conf <<EOF
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Konfiguracja dla HTTP
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/error.log
CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:8443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Konfiguracja dla HTTPS
SSLEngine on
SSLCertificateFile /etc/ssl/certs/nginx-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/nginx-selfsigned.key
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/error.log
CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF
# Zmiana portów w pliku ports.conf
sudo sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf
sudo echo "Listen 8443" >> /etc/apache2/ports.conf
sudo sed -i 's/Listen 443/# Listen 443/' /etc/apache2/ports.conf
# Aktywowanie SSL VirtualHost
#sudo a2ensite default-ssl
sudo a2ensite 000-default
# Restart Apache, aby wprowadzić zmiany
sudo systemctl restart apache2
# Aktualizacja pakietów
sudo apt-get update
# Instalacja RabbitMQ
sudo apt-get install -y rabbitmq-server
# Włączenie i uruchomienie RabbitMQ
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
# Ustawienie RabbitMQ do nasłuchiwania na domyślnym porcie 5672 (AMQP) oraz na porcie 15672 (panel administracyjny)
sudo rabbitmq-plugins enable rabbitmq_management
# Restart RabbitMQ, aby wprowadzić zmiany
sudo systemctl restart rabbitmq-server
# Instalacja Postfix
sudo debconf-set-selections <<< "postfix postfix/mailname string localhost"
sudo debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
sudo apt-get install -y postfix
# Konfiguracja Postfix, aby nasłuchiwał na portach 25 (SMTP) i 465 (SMTPs)
sudo sed -i '/^#submission inet n - n - - smtpd/a smtps inet n - y - - smtpd\n -o syslog_name=postfix/smtps\n -o smtpd_tls_wrappermode=yes\n -o smtpd_sasl_auth_enable=yes\n -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject' /etc/postfix/master.cf
# Zmiana domyślnej konfiguracji main.cf, aby obsługiwać TLS
sudo sed -i 's/#smtpd_tls_cert_file=/smtpd_tls_cert_file=\/etc\/ssl\/certs\/nginx-selfsigned.crt/' /etc/postfix/main.cf
sudo sed -i 's/#smtpd_tls_key_file=/smtpd_tls_key_file=\/etc\/ssl\/private\/nginx-selfsigned.key/' /etc/postfix/main.cf
sudo sed -i 's/#smtpd_tls_security_level=may/smtpd_tls_security_level=encrypt/' /etc/postfix/main.cf
sudo sed -i 's/#smtpd_tls_auth_only = yes/smtpd_tls_auth_only = yes/' /etc/postfix/main.cf
sudo sed -i 's/#smtpd_tls_loglevel = 1/smtpd_tls_loglevel = 1/' /etc/postfix/main.cf
# Dodanie konfiguracji dla SSL na porcie 465 (smtps)
sudo sed -i '/^# Port 465 configuration/a smtps inet n - y - - smtpd\n -o smtpd_tls_wrappermode=yes\n -o smtpd_sasl_auth_enable=yes\n -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject' /etc/postfix/master.cf
# Restart Postfix
sudo systemctl restart postfix
# Konfiguracja zapory (ufw) do otwarcia odpowiednich portów
ufw allow 21/tcp
ufw allow 22/tcp
ufw allow 25/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 465/tcp
ufw allow 8080,8443/tcp
ufw allow 5432/tcp
ufw allow 161/udp
ufw allow 5672/tcp # AMQP port
ufw allow 15672/tcp # Management panel port (RabbitMQ GUI)
ufw --force enable
# Restartowanie wszystkich usług dla pewności
systemctl restart postgresql nginx vsftpd snmpd
SHELL
end
end
Jeden komentarz do „Homelab do testowania skanera Nmap”