Skip to content

NGINX - Webserver, Load Balancer und Proxy

NGINX ist neben Apache einer der bekanntesten Webserver. Allerdings kann das Tool mehr als nur ein schlichter Webserver sein. Reverse Proxy, Load Balancer, Mail Proxy oder HTTP cache Server sind ein paar wenige Funktionen die Nginx beherrscht.

Ich möchte euch heute ein paar Beispiele zu einzelnen Funktionen zeigen. Den Anfang macht logischerweise die Installation. Als System verwende ich einen Ubuntu 20.04 LTS Server.

 

Nginx

 

Installation Nginx unter Ubuntu/Debian

Die Installation der frei verfügbaren Version (Die kommerzielle Variante nennt sich Nginx Plus) erfolgt über das Nginx Repository.

sudo wget https://nginx.org/keys/nginx_signing.key

sudo apt-key add nginx_signing.key

sudo nano /etc/apt/sources.list.d/nginx.list

  deb https://nginx.org/packages/mainline/ubuntu/ focal nginx
  deb-src https://nginx.org/packages/mainline/ubuntu/ focal nginx
              
sudo apt install nginx

sudo systemctl is-enabled nginx.service

sudo systemctl enable nginx

Nach der Installation erfolgt eine schnelle Kontrolle.

ss -ltn
ubuntu:~$ curl -I http://127.0.0.2

HTTP/1.1 200 OK
Server: nginx/1.19.6
Date: Thu, 17 Dec 2020 22:20:49 GMT
Content-Type: text/html
Content-Length: 612

Nginx selbst kompilieren

Es besteht auch die Möglichkeit, das Nginx Paket selbst zu kompilieren. Dies wird dann nötig, wenn Pakete benötigt werden, die in der Standardvariante nicht enthalten sind. Die war zum Beispiel bei der Verwendung von GeoIP oder LibreSSL mal bzw. ist noch so.

Mit dem folgenden Befehl können die installierten Module eingesehen werden.

Nginx –V

In der Standardinstallation sollte hier das Modul --add-dynamic-module=/build/nginx-5J5hor/nginx-1.18.0/debian/modules/http-geoip2 angezeigt werden. D.h. das eingangs erwähnte Geo IP Modul wird hier bereits geladen.

Einen eigenen Nginx Server unter Debian/Ubuntu einrichten

Nach einer erfolgreichen Installation zeigt Nginx eine Standardseite an. Diese kann gelöscht oder zusätzlich eine eigene virtuelle Seite angelegt werden. Auf einer IP können so mehrere Webseiten gehostet werden.

Folgende Struktur bietet sich unter Ubuntu an:

Konfiguration der einzelnen virtuellen Server.

/etc/nginx/sites-available/xyz

Momentan aktive Server wobei es sich hier um einen Symlink handelt.

/etc/nginx/sites-enabled/xyz

Schritt für Schritt heißt dies für einen Server welche auf Port 80 lauscht:

#config anlegen
touch /etc/nginx/sites-available/itrig

#config schreiben
nano /etc/nginx/sites-available/itrig

server {

        listen 80 default_server;    

        # Make site accessible from http://localhost/

        server_name localhost;
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
}

#aktiv setzen
ln -s /etc/nginx/sites-available/itrig /etc/nginx/sites-enabled/itrig

Konfiguration überprüfen

nginx –t

Neustart der Konfiguration mit

#lädt nur die neue Konfiguration
nginx –s reload

oder

sudo systemctl reload nginx


Nginx als Loadbalancer verwenden

Neben der reinen Webserverfunktion bietet NGINX die Möglichkeit den Server, als Loadbalancer zu betreiben. Da heißt der Server sorgt für Ausfallsicherheit bzw. Leistung von Webanwendungen, in dem er die Last verteilt. Vorstellen kann man sich dies wie einen Haupthändler, welcher Daten unter verteilt.

LoadbalancerNginx bietet mehrere Varianten an, wie diese Verteilung geschehen kann.

Round Robin

Das bekannteste dürfte das Round Robin Verfahren sein. Es wird eine Liste von Servern durchgearbeitet und die Last nach und nach verteilt. Ist die Liste zu Ende, fängt der Server wieder am Anfang an.

Im unteren Beispiel werden 3 Server in der Gruppe "itrigloadbalancer" zusammengefasst und der Webserver geht diese Liste nach und nach durch. Unterstützt werden die Protokolle HTTP, HTTPS, FastCGI, uwsgi, SCGI, memcached, und gRPC.

http {
    upstream itrigloadbalancer {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://itrig.de;
        }
    }
}

Least Connected

Eine weitere Lastverteilung ist das Least-Connected-Verfahren. Hier wird auf die aktiven Verbindungen der einzelnen Server geschaut. Der Server, welcher die geringste Anzahl an aktiven Verbindungen hat, bekommt die Anfrage zugeschanzt.

upstream intrigleastload {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

Session-Persistenz - IP Hash

Die dritte Möglichkeit Last zu verteilen, stellt das IP-Hash-Verfahren dar. Hier werden von den zugreifenden Client IPs Hash Werte erstellt. Anhand dieser Werte wird einem Client immer ein bestimmter Server zugewiesen. Damit erhält der Nutzer eine Session Persistenz, da Anfragen immer vom gleichen Server beantwortet werden.

Beim Round-Robin- oder Least-Connected-Load-Balancing kann jede nachfolgende Anfrage eines Clients potenziell auf einem anderen Servern ankommen.

upstream itrighash {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

Weighted load balancing

Alle Varianten lassen sich zusätzlich gewichten. So kann es vorkommen, dass ein Server eine bessere Hardware verbaut hat, als ein anderer. Mit Weighted load balancing lässt sich einzelnen Geräten mehr Last zuschieben.

upstream itrigmitgewicht {
        server srv1.example.com;
        server srv2.example.com weight=3;
        server srv3.example.com;
    }
upstream itrig {
    ip_hash;
    server srv1.example.com weight=2;
    server srv2.example.com;
    server srv3.example.com;
}

Mehr zu der Thematik unter load_balancing.


Nginx als Reverse Proxy verwenden

Den aufmerksamen Lesern dürfte aufgefallen sein, dass in einem Code Beispiel weiter oben eine Zeile mit "proxy_pass" vorhanden ist. Diese Zeile deutet darauf hin, dass NGINX als Reverse Proxy eingesetzt wird und ein Aufruf nicht direkt auf dem Server landet, sondern weitergeleitet wird.

location /webshop {
proxy_pass http://opencart.itrig.local;
}

location /landkarte {
proxy_pass http://192.168.100.99;
}

Es gibt verschiedene "Vorteile" für so eine Weiterleitung.

So kann der Nginx als HTTPS Endpunkt dienen und die Struktur dahinter kann unverschlüsselt agieren. Auch bietet NGINX die Möglichkeit als Reverse Proxy und als Load Balancer gleichzeitig zu arbeiten, die Details sind weiter oben zu lesen.

Weiter erlaubt der vorgeschaltete Server eine Caching Funktion, was zum schnelleren Ausliefern von Webseiten beitragen kann.

Hier ein Beispiel mit gesplittetem Cache aus der offiziellen NGINX Cache Dokumentation.

proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m
                 max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m
                 max_size=10g inactive=60m use_temp_path=off;

split_clients $request_uri $my_cache {
              50%          “my_cache_hdd1”;
              50%          “my_cache_hdd2”;
}

server {
    # ...
    location / {
        proxy_cache $my_cache;
        proxy_pass http://my_upstream;
    }
}

Das Thema Sicherheit spielt ebenso eine Rolle, da durch den vorgeschalteten Server, die Angriffsfläche kleiner gehalten wird.


NGINX mit Regex

Richtig interessant wird es, sobald die aufgerufene URL verschiedene Eigenschaften besitzt bzw. ein besonderes Verhalten zeigen sollte.

Diese Eigenschaften werden mit regulären Ausdrücken umgesetzt.

Hier sind ein paar Beispiele von regulären Ausdrücken für NGINX :

# Die URL ist durch * case insensitive
 location ~* /itrig/ {
    #...
    #...
    }

# Die URL ist case sensitive das ^ sorgt dafür das nur z.B. /itrig/logo.jpg gültig ist und nach dem ersten Match gestoppt wird.
 location ^~ /itrig/ {
    #...
    #...
    }

# Bilder anhand der Endung umleiten
 location ~ \.(gif|jpg|png)$ {
    root /data/images;
    }

# Unnötige Endungen aussperren (case insensitive)
 location ~* "\.(old|orig|original|php#|php~|php_bak|save|swo|aspx?|tpl|sh|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rdf)$" {
    deny all;
    }

# Einen Alias setzen
 location /_/static {
        alias /path/to/glory;
    }

# Rewrite einer URL,  "pfad" wird entfernt
    location /pfad {
        rewrite ^/pfad(.*)$ $1 break;
        proxy_pass http://splunk-api:8080;
    }

Es bietet sich immer an, eigene Befehle zu testen, bevor sie produktiv eingesetzt werden, denn neben Einschränkungen auf URLs kann ebenso Haus und Hof geöffnet werden.

Ein Regex Test sollte daher immer gemacht werden. Hier findet sich so ein Tool online regex.datahoarder.dev.

Das Tool kann jederzeit auf der eigenen Umgebung gehostet werden und ist auf Github zu finden.

Nginx_Regular_Expression_Tester

 

Lösung: Monero Wallet konnte nicht geöffnet werden std::bad_alloc

Dieser Bitcoin wird ja gerade wieder durchs Dorf gejagt, somit lohnt sich auch wieder ein Blick ins Monero Wallet dachte ich mir, allerdings erhielt ich beim Öffnen diesen feinen Fehler:

Wallet konnte nicht geöffnet werden std::bad_alloc bzw. "Couldn't open wallet: std::bad_alloc"

Monero

„Alles weg?“, geht einem fix durch den Kopf, muss aber nicht. Denn die GUI, welche seit Jahren auf einer Platte schlummerte, war einfach total veraltet.

Mit einer aktuellen GUI Version (0.17.1.6) von getmonero lief dann alles wieder wie geschmiert.

 

Katoolin3 - Kali Linux Tools unter Ubuntu 20.04 LTS

Ende letzten Jahres hatte ich einen Artikel über Katoolin veröffentlicht.

Das Tool erlaubt es unter bestehenden Ubuntu Installationen die Kali Hacking Tools einzubinden. Heißt, wenn ihr bereits eine Ubuntu Installation habt, dann könnt ihr schnell und einfach auf diese große Toolsammlung zurückgreifen.

Das damalige Script basierte allerdings auf Python 2, was bekanntlich nicht mehr state of the art ist.

Inzwischen ist das Tool auch in Python 3 verfügbar.

Katoolin 3 unter Ubuntu installieren

sudo apt install git python3-apt
sudo add-apt-repository universe

git clone https://github.com/s-h-3-l-l/katoolin3

cd katoolin3/
chmod +x ./install.sh
sudo ./install.sh
sudo katoolin3
katoolin3

Die Sammlung ist im Großen und Ganzen gleichgeblieben.

Es gibt insgesamt 12 Kategorien, hier sollte für jeden etwas dabei sein. 

Bei der Nutzung der Tools ist wie immer Vorsicht geboten, sollte es sich nicht um eine Testumgebung handeln.

  1. Exploitation Tools    
  2. Forensics Tools       
  3. Hardware Hacking      
  4. Information Gathering 
  5. Maintaining Access    
  6. Password Attacks      
  7. Reporting Tools       
  8. Reverse Engineering
  9. Sniffing & Spoofing
  10. Stress Testing
  11. Vulnerability Analysis
  12. Web Applications
  13. Wireless Attacks

Katoolin 3 aktualisieren

cd katoolin3/
chmod +x ./update.sh
sudo ./update.sh

 

Katoolin 3 deinstallieren

cd katoolin3/
chmod +x ./uninstall.sh
sudo ./uninstall.sh

 

BlackArchLinux 2020.06.01 und Network Security Toolkit 32 veröffentlicht

Bevor der Monat zu Ende geht, möchte ich noch zwei Releases nachreichen. BlackArchLinux und Network Security Toolkit haben beide neue Versionen veröffentlicht.

blackarch

BlackArchLinux 2020.06.01

Die neueste Variante der auch Arch Linux basierenden Distribution hat 150 neue Hacking Tools erhalten. Die vorhanden wurden auf den neuesten Stand gebracht.

Neben dem iptables Dienst wurden verschiedene unnötige VirtualBox Funktionen deaktiviert.

Der Black Arch Installer wurde aufv1.1.45 und der Linux Kernel auf 5.6.14 aktualisiert.

Download blackarch


Network Security Toolkit 32

NST
Auch das Network Security Toolkit wurde auf eine neue Version angehoben. Die aktuelle Variante basiert auf Fedora 32 und Linux Kernel 5.6.15.

Zu den augenscheinlichsten Änderungen wird wohl die Anpassung des NST Web User Interface (WUI) zählen. Hier wurde an der Darstellung von Wireshark Scans gearbeitet. Gleiches gilt für Kismet, welches WLAN-Verbindungen analysiert.

Der NST Network Interface Bandwidth Monitor hat nun eine nodejs-basierte Web-Socket Schnittstelle und kann so höhere Datenraten erzielen.

Das bekannte Tool theHarvester ist nun auf der NST WUI zu finden. Damit können Pentester Information aus öffentlichen Quellen sammeln.

Flugzeugfreunde finden nun Dump1090 - Aircraft Surveillance auf dem NST WUI. Damit lassen sich Standortinformationen von Flugzeugen, die auf ihrem ADS-B Mode S-Transponder senden, anzeigen, welche von einem angeschlossenen USB RTL-SDR-Dongle erkannt wurden.

Alle Änderungen findet ihr hier.

Download NST



 


Übersicht 06/2020

 

Name Version Tools Besonderes Basis GUI
Autopsy 4.13.0 ??? The Sleuth Kit Windows  
BackBox 7.0 100+ AWS Ubuntu Xfce
BlackArch 2020.06.01 1750+ ArchLinux ArchLinux Gnome
CAINE 11 100+ WinUFO Ubuntu Mate
DracOS 3.0   veraltet LFS DWM
DEFT Zero 2018.2   offline Lubuntu 14.04 Lxde
Kali Linux 2020.02 300+ ARM Images Debian Testing Multi
Kali AppStore   20+   Android  
LionSec 5.0   veraltet Ubuntu  
Matriux v3 RC1   offline Debian Gnome
NST 32 ??? Server integriert Fedora 32  
NetSecL OS 6.0   veraltet OpenSuse Lxde
Paladin 7.0     Ubuntu  
Parrot OS 4.9 700+ Cloud fähig Debian Buster MATE/KDE
Pentoo 2018.0 RC7.1   veraltet Gentoo Xfce
Ronin     veraltet Lubuntu Lxde
Sans SIFT 3.0   veraltet Ubuntu  

Kali Linux 2020.2, BackBox 7 veröffentlicht und Parrot OS goes Hack The Box

Es hatte sich bereits angekündigt, dass der Platzhirsch in einer neuen Version erscheinen wird.

Vor wenigen Tagen war es nun soweit und Kali Linux 2020.2 wurde veröffentlicht. Einige der Neuerungen sind sichtbar, andere unter der Oberfläche geschehen.

Kali Linux

Kali Linux 2020.2 - Neuerungen

An BackTrack kann sich vielleicht der/die ein oder andere noch erinnern, dies ist der Kali Vorgänger und war mit einer KDE Oberfläche ausgestattet, glaube ich zumindest. KDE Plasma wurden nun aktualisiert und mit einem Dark and Light Mode ausgestattet. Auch der Loginmanager lightdm wurde angepasst.

Powershell wurde in das Meta Large Package fest integriert und kann direkt bei der Installation ausgewählt werden.

Geschieht das nicht, reicht auch ein

sudo apt install -y powershell

Im gleichen Zug wurde der Installer angepasst und die Option „kali-linux-everything“ entfernt.

Neu dabei ist die Auswahl für alle Desktop Umgebungen GNOME, KDE Plasma, LXDE, MATE), sowie das große Paket „ kali-linux-large“.

Kali_Linux_2020.2Welche Installation im Endeffekt die beste ist, hängt wohl vom jeweiligen use case ab. Prinzipiell gilt: Mehr ist nicht gleich besser.

ARM

RaspberryPi Freunde dürfen sich auf Änderungen beim Login einstellen. Analog zum Desktop wurde root/toor durch kali/kali ersetzt und das Arbeiten in den Standardeinstellungen basiert nun nicht mehr auf root Rechten.

Sonstiges

Wie bei jedem Release wurden Pakete aktualisiert, dieses Mal bekamen sogar die Logos ein Makeover.

Kali Linux unterstützt anders als Parrot OS weiterhin Python 2.x.

Änderungen und Neuerungen der NetHunter Images hatte ich bereits in einem anderen Artikel erwähnt.

Download Kali


BackBox Linux 7

Mittlerweile seit 10 Jahren erscheinen regelmäßig BackBox Releases, so auch 2020.

BackBox7

Leider wurden vom Team keine Details veröffentlicht. Allerdings wurde auf Kernel 5.4 umgestellt und die Desktop Umgebung, sowie die Hacking Tools aktualisiert. Das heißt, das Image basiert nun auf Ubuntu 20.04 LTS.

Am UEFI Support wurden ebenfalls Verbesserungen vorgenommen.

Download Backbox



Parrot OS goes Hack The Box

Kleine Meldung am Rande. Parrot OS arbeitet nun mit Hack The Box zusammen. Bei letzterem handelt es ich um eine Online-Trainingsplattform für Cybersicherheit, die es Einzelpersonen und Unternehmen ermöglicht, ihre Fertigkeiten im Bereich von Pen Testing und Co in einer spielerischen Lernumgebung zu verbessern. Über 280 virtuelle Hacking-Labors, reale Unternehmensszenarien und eine wachsende Cybersicherheits-Community von über 300k Mitgliedern stehen dort zum Austausch zur Verfügung.

Ich bin gespannt, was aus dieser Zusammenarbeit entstehen wird.

Hack_The_Box__Parrot_OS

Sollte jemand bei der Registrierung auf Hack The Box Probleme haben, könnt ihr euch gerne melden.

 


Übersicht 05/2020

 

Name Version Tools Besonderes Basis GUI
Autopsy 4.13.0 ??? The Sleuth Kit Windows  
BackBox 7.0 100+ AWS Ubuntu Xfce
BlackArch 2020.01.01 1750+ ArchLinux ArchLinux Gnome
CAINE 11 100+ WinUFO Ubuntu Mate
DracOS 3.0   veraltet LFS DWM
DEFT Zero 2018.2   offline Lubuntu 14.04 Lxde
Kali Linux 2020.02 300+ ARM Images Debian Testing Multi
Kali AppStore   20+   Android  
LionSec 5.0   veraltet Ubuntu  
Matriux v3 RC1   offline Debian Gnome
NST 30 ??? Server integriert Fedora  
NetSecL OS 6.0   veraltet OpenSuse Lxde
Paladin 7.0     Ubuntu  
Parrot OS 4.9 700+ Cloud fähig Debian Buster MATE/KDE
Pentoo 2018.0 RC7.1   veraltet Gentoo Xfce
Ronin     veraltet Lubuntu Lxde
Sans SIFT 3.0   veraltet Ubuntu