Homelab do testowania skanera Nmap

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *