Bewährte Nginx-Sicherheitspraktiken.
Nginx ist der am schnellsten wachsende Webserver in der Branche und steht derzeit an zweiter Stelle der Marktanteile.
Er wurde erstmals 2004 auf den Markt gebracht und hat sich seitdem einen hervorragenden Ruf erworben und wird in den Top-Millionen der meistbesuchten Websites eingesetzt.
Dafür gibt es einen Grund – Nginx ist rasend schnell.
In diesem Artikel werde ich einige der wichtigsten Anleitungen zur Sicherung von Nginx für eine Produktionsumgebung erläutern. Fangen wir also an.
SSL/TLS
SSL-Zertifikat einrichten
Der erste Schritt zur Sicherheit im Internet ist die Implementierung von SSL, damit Sie auf Webanwendungen mit https zugreifen können und eine zusätzliche Verschlüsselungsebene in der Kommunikation erhalten.
- Verwenden Sie OpenSSL, um eine CSR mit 2048 Bit und sha-2 zu erzeugen
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
- Der obige Befehl erzeugt die CSR- und Schlüsseldateien direkt am aktuellen Arbeitsplatz. Vergessen Sie nicht, die Dateinamen .csr und .key zu ändern.
Lassen Sie die CSR von einer Zertifizierungsstelle signieren und sobald Sie das signierte Zertifikat haben, können Sie es wie unten beschrieben in Nginx implementieren.
- Melden Sie sich am Nginx-Server an
- Wechseln Sie in den Ordner conf, in dem Sie eine Datei ssl.conf haben.
Hinweis: Bei der Standardinstallation unter Linux finden Sie diese Datei unter /etc/nginx/conf.d.
- Bearbeiten Sie die Datei und fügen Sie Folgendes hinzu, damit Nginx auf dem Port 443 lauschen kann
server {
listen 443 ssl;
server_name bestflare.com;
ssl ein;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
}
Hinweis: Vergessen Sie nicht, den Pfad der Zertifikats- und Schlüsseldatei zu ändern.
- Speichern Sie die Konfiguration und starten Sie Nginx neu. Ein SSL-Zertifikat wird erfolgreich implementiert.
SSL/TLS-Optimierung
SSL zu haben, bedeutet nicht, dass es vollständig sicher ist, und deshalb müssen Sie als Experte für Websicherheit eine Konfiguration anwenden, um den Webserver zu sichern.
Zunächst würde ich empfehlen, einen SSL-Scan gegen die Website durchzuführen, um den Score und die wesentliche Schwachstelle zu ermitteln.
Die aktuelle SSL Labs-Bewertung ist also “C” und ein Ziel ist es, sie auf “A” zu erhöhen
Deaktivieren Sie schwache SSL/TLS-Protokolle
SSL 3, TLS 1.0 und TLS 1.1 sind angreifbar und wir werden nur ein starkes TLS 1.2 Protokoll zulassen.
- Bearbeiten Sie die Datei ssl.conf und fügen Sie im Server-Block Folgendes hinzu
ssl_protocols TLSv1.2;
- Speichern Sie die Datei ssl.conf und starten Sie Nginx neu
Deaktivieren Sie schwache Cipher Suites
Schwache Cipher-Suites können zu Schwachstellen wie einem Logjam führen, und deshalb müssen wir nur starke Cipher zulassen.
- Fügen Sie dem Server-Block in der Datei ssl.conf Folgendes hinzu
ssl_ciphers "EECDH ECDSA AESGCM EECDH aRSA AESGCM EECDH ECDSA SHA384 EECDH ECDSA SHA256 EECDH aRSA SHA384 EECDH aRSA SHA256 EECDH aRSA RC4 EECDH EDH aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
- Speichern Sie die Datei und starten Sie Nginx neu
Kettenzertifikat installieren
Das Fehlen eines Kettenzertifikats wirkt sich auch auf die Gesamtbewertung aus und kann zu einer Fehlermeldung führen, wenn Sie in einem modernen Browser wie Chrome surfen. Sie müssen ein Kettenzertifikat von einer Behörde erhalten. Meistens finden Sie es auf deren Website oder googeln Sie es einfach.
- Fügen Sie den Inhalt des Kettenzertifikats wie folgt in das Website-Zertifikat ein. In meinem Beispiel wäre das /opt/cert/bestflare.pem
- Speichern Sie die Datei und starten Sie Nginx neu
Sicheres Diffie-Hellman für TLS
Diffie-Hellman ist weniger sicher als angenommen. Eine der in letzter Zeit in eine Liste aufgenommenen Best Practices ist die Sicherung von Diffie-Hellman. Dies geschieht durch die Erzeugung einer eindeutigen DH GROUP und das Hinzufügen von ssl_dhparam in der Datei ssl.conf.
- Einzigartige DH-Gruppe mit OpenSSL generieren
openssl dhparam -out dhparams.pem 4096
- Es wird einige Minuten dauern und eine Datei dhparams.pem im aktuellen Arbeitsverzeichnis erzeugen
- Kopieren Sie dhparams.pem in den Ordner cert
- Ändern Sie ssl.conf und fügen Sie im Server-Block Folgendes hinzu
ssl_dhparam /opt/cert/dhparams.pem;
- Speichern Sie die Datei und starten Sie Nginx neu
Das sollte für die SSL/TLS-Optimierung ausreichen. Lassen Sie uns die URL erneut testen, um die Bewertung zu sehen.
Hurra! Jetzt können Sie sehen, dass sie von SSLLabs mit “A” bewertet wurde. Gut gemacht!
Hier ist die vollständige ssl.conf
# HTTPS-Server-Konfiguration
server {
listen 443 ssl;
server_name bestflare.com;
ssl ein;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers ein;
ssl_ciphers "EECDH ECDSA AESGCM EECDH aRSA AESGCM EECDH ECDSA SHA384 EECDH ECDSA SHA256 EECDH aRSA SHA384 EECDH aRSA SHA256 EECDH aRSA RC4 EECDH EDH aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_dhparam /opt/cert/dhparams.pem;
}
Durchsickern von Informationen
Bei der Standardinstallation von Nginx werden viele sensible Informationen preisgegeben, die Hackern bei der Vorbereitung eines Angriffs helfen können.
Wenn Sie mit einer PCI-Compliance-Umgebung arbeiten, gilt dies als Schwachstelle, die ein Durchsickern von Informationen ermöglicht, und Sie müssen das Problem beheben.
Sie müssen server_tokens off verwenden, um das Informationsleck zu deaktivieren. Ich habe dies in meinem früheren Artikel erklärt. Version aus dem Server-Header-Banner in Nginx entfernen
Sicherheit von Webanwendungen
Die Standardkonfiguration von Nginx ist nicht perfekt und kann viele Schwachstellen aufweisen. Deshalb härten wir sie, um sie sicher zu machen.
Deaktivieren Sie unerwünschte HTTP-Methoden
In den meisten Fällen benötigen Sie in Ihrer Webanwendung nur GET, HEAD und POST HTTP-Anfragen. Das Zulassen von TRACE oder DELETE ist riskant, da es Cross-Site-Tracking-Angriffe ermöglicht und einem Hacker den Diebstahl von Cookie-Informationen erlauben könnte.
- Ändern Sie nginx.conf und fügen Sie unter dem Server-Block Folgendes hinzu
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
Speichern Sie die Datei und starten Sie Nginx neu. Jetzt wird 405 Not Allowed angezeigt, wenn jemand versucht, TRACE, DELETE, PUT, OPTIONS zu verwenden.
Chandans-iMac:~ chandan$ telnet bestflare.com 80
Versucht 128.199.100.162...
Verbunden mit bestflare.com.
Escape-Zeichen ist '^]'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Nicht Erlaubt
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Inhalt-Typ: text/html
Inhalt-Länge: 166
Verbindung: close
Clickjacking-Angriff
Sie können X-FRAME-OPTIONS in den HTTP-Header einfügen, um einen Clickjacking-Angriff zu verhindern.
Dazu fügen Sie Folgendes in die Datei nginx.conf ein
add_header X-Frame-Options "SAMEORIGIN";
Der obige Header weist einen Browser an, die Ressourcen NUR von derselben Herkunft zu laden.
X-XSS-Schutz
Injizieren Sie HTTP-Header mit X-XSS-Schutz, um Cross-Site-Scripting-Angriffe zu entschärfen.
- Ändern Sie die Datei nginx.conf, um Folgendes hinzuzufügen
add_header X-XSS-Schutz "1; mode=block";
- Speichern Sie die Konfigurationsdatei und starten Sie Nginx neu. Sie können das Tool Headers Test verwenden, um die Implementierung zu überprüfen.
Vielleicht sind Sie auch an der Implementierung der von OWASP empfohlenen sicheren Header interessiert, die hier erklärt werden.
Mod Security WAF implementieren
Fügen Sie eine zusätzliche Sicherheitsebene hinzu, indem Sie die Web Application Firewall ModSecurity mit dem OWASP Core Rule Setimplementieren .
Alternativ können Sie auch eine Cloud-basierte Sicherheit wie SUCURI vor dem Nginx-Server einsetzen.
Halten Sie Nginx auf dem neuesten Stand
Zu guter Letzt müssen Sie Ihr Nginx auf dem neuesten Stand halten, da viele Leistungsverbesserungen, Sicherheitskorrekturen und neue Funktionen hinzugefügt werden.
Ich hoffe, dies hilft Ihnen, Ihr Nginx sicher zu halten.
Als Nächstes möchten Sie vielleicht lernen, wie Sie Nginx für hohe Leistung von Grund auf aufbauen.