Best Practices für die Nginx-Sicherheit.
Nginx ist der am schnellsten wachsende Webserver in der Branche und belegt derzeit die Nummer zwei bei den Marktanteilen.
Es wurde ursprünglich im Jahr 2004 veröffentlicht und hat sich seitdem einen ausgezeichneten Ruf erworben und wird in den Millionen am stärksten frequentierten Standorten eingesetzt.
Dafür gibt es einen Grund - Nginx ist blitzschnell.
In diesem Artikel werde ich über einige der wichtigsten Anleitungen zur Sicherung der Nginx für eine Produktionsumgebung. Also fangen wir an.
SSL/TLS
Implementieren Sie das SSL-Zertifikat
Der erste Schritt in Bezug auf die Websicherheit besteht darin, SSL zu implementieren, damit Sie mit https auf Webanwendungen zugreifen und der Kommunikation eine Verschlüsselungsebene hinzufügen können.
- Nutzen Sie den OpenSSL CSR mit 2048 Bit und sha-2 zu generieren
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
- Der obige Befehl generiert CSR- und Schlüsseldateien, die derzeit direkt arbeiten. Vergessen Sie nicht, den Dateinamen .csr und .key zu ändern.
Lassen Sie den CSR von einer Zertifizierungsstelle signieren. Sobald Sie das signierte Zertifikat haben, können Sie es wie folgt in Nginx implementieren.
- Melden Sie sich beim Nginx-Server an
- Wechseln Sie in den Ordner conf, in dem Sie eine Datei ssl.conf haben.
Hinweis: In der Standardinstallation unter Linux befindet sich diese Datei unter /etc/nginx/conf.d.
- Bearbeiten Sie die Datei und fügen Sie Folgendes hinzu, damit Nginx den 443-Port abhören kann
server {
listen 443 ssl;
server_name bestflare.com;
ssl on;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
}
Hinweis: Vergessen Sie nicht, den Pfad des Zertifikats und der Schlüsseldatei zu ändern.
- Speichern Sie die Konfiguration und starten Sie Nginx neu. Ein SSL-Zertifikat ist erfolgreich implementiert.
SSL / TLS-Optimierung
SSL bedeutet nicht, dass es vollständig sicher ist. Als Web Security-Experte müssen Sie daher eine Konfiguration anwenden, um den Webserver zu sichern.
Zu Beginn würde ich empfehlen, eine auszuführen SSL-Scan gegen die Website, um die Punktzahl und wesentliche Verwundbarkeit zu finden.
Die aktuelle Bewertung für SSL Labs lautet also "C" und ein Ziel ist es, es "A" zu machen.
Deaktivieren Sie schwache SSL / TLS-Protokolle
SSL 3, TLS 1.0 und TLS 1.1 sind anfällig, und wir erlauben nur ein starkes TLS 1.2-Protokoll.
- Bearbeiten Sie die Datei ssl.conf und fügen Sie sie unten im Serverblock hinzu
ssl_protocols TLSv1.2;
- Speichern Sie die Datei ssl.conf und starten Sie Nginx neu
Deaktivieren Sie schwache Chiffresuiten
Schwache Chiffresuiten können zu Sicherheitslücken wie a führen logjamund deshalb müssen wir nur eine starke Chiffre zulassen.
- Fügen Sie dem Serverblock 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
Installieren Sie das Kettenzertifikat
Das Fehlen eines Kettenzertifikats wirkt sich auch auf die Gesamtbewertung aus. Dies kann zu einem Fehler beim Surfen in einem modernen Browser wie Chrome führen. Sie müssen ein Kettenzertifikat von der Behörde erhalten. Meistens finden Sie auf ihrer Website oder nur Google es.
- Fügen Sie den Inhalt des Kettenzertifikats wie folgt in das Website-Zertifikat ein. In meinem Beispiel wäre es /opt/cert/bestflare.pem
- Speichern Sie die Datei und starten Sie den Nginx neu
Sicherer Diffie-Hellman für TLS
Diffie-Hellman ist weniger sicher als angenommen. Eine der Best Practices, die kürzlich in eine Liste aufgenommen wurden, ist die Sicherung von Diffie-hellman. Dies wird durch Generieren einer eindeutigen DH-GRUPPE und Hinzufügen von ssl_dhparam in der Datei ssl.conf erreicht.
- Generieren Sie mithilfe von OpenSSL eine eindeutige DH-Gruppe
openssl dhparam -out dhparams.pem 4096
- Es dauert einige Minuten und generiert eine Datei dhparams.pem in einem aktuellen Arbeitsverzeichnis
- Kopieren Sie dhparams.pem in den Ordner cert
- Ändern Sie die Datei ssl.conf und fügen Sie im Serverblock Folgendes hinzu
ssl_dhparam /opt/cert/dhparams.pem;
- Speichern Sie die Datei und starten Sie den Nginx neu
Dies sollte für die SSL / TLS-Optimierung ausreichen. Testen Sie die URL erneut, um die Bewertung anzuzeigen.
Woo ho! Jetzt können Sie sehen, dass es so ist "EIN" Bewertung durch SSLLabs. Gut gemacht!
Hier ist die vollständige ssl.conf
# HTTPS server configuration
server {
listen 443 ssl;
server_name bestflare.com;
ssl on;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
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;
}
Information Leakage
In der Standardinstallation von Nginx werden viele vertrauliche Informationen angezeigt, die Hackern helfen können, sich auf einen Angriff vorzubereiten.
Wenn Sie an einer PCI-Konformitätsumgebung arbeiten, wird dies als Sicherheitslücke in Bezug auf Informationslecks angesehen und muss das Problem beheben.
Sie müssen server_tokens off verwenden, um den Informationsverlust zu deaktivieren. Ich habe dies in meinem vorherigen Artikel erklärt. Entfernen Sie die Version aus dem Server-Header-Banner in Nginx
Web Application Security
Die Standardkonfiguration von Nginx ist nicht perfekt und kann viele Schwachstellen aufweisen. Deshalb haben wir sie gehärtet, um sie sicher zu machen.
Deaktivieren Sie unerwünschte HTTP-Methoden
Meistens benötigen Sie in Ihrer Webanwendung nur die HTTP-Anforderung GET, HEAD & POST. Das Zulassen von TRACE oder DELETE ist riskant, da es Cross-Site-Tracking-Angriffe ermöglichen und möglicherweise einem Hacker ermöglichen kann, die Cookie-Informationen zu stehlen.
- Ändern Sie die Datei nginx.conf und fügen Sie unter Serverblock Folgendes hinzu
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
Speichern Sie die Datei und starten Sie den Nginx neu. Dies zeigt nun 405 Nicht erlaubt an, wenn jemand versucht, TRACE, DELETE, PUT, OPTIONS zu verwenden.
Chandans-iMac:~ chandan$ telnet bestflare.com 80
Trying 128.199.100.162...
Connected to bestflare.com.
Escape character is '^]'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
Clickjacking-Angriff
Sie können X-FRAME-OPTIONS in den HTTP-Header einfügen, um einen Clickjacking-Angriff zu verhindern.
Dies wird erreicht, indem unten in der Datei nginx.conf hinzugefügt wird
add_header X-Frame-Options "SAMEORIGIN";
Der obige Header weist einen Browser an, die Ressourcen NUR vom selben Ursprung zu laden.
X-XSS-Schutz
Injizieren Sie den HTTP-Header mit X-XSS-Schutz, um Cross-Site-Scripting-Angriffe abzuwehren.
- Ändern Sie die Datei nginx.conf, um Folgendes hinzuzufügen
add_header X-XSS-Protection "1; mode=block";
- Speichern Sie die Konfigurationsdatei und starten Sie Nginx neu. Du kannst den ... benutzen Header-Test Tool zur Überprüfung nach der Implementierung.
Möglicherweise möchten Sie auch die von OWASP empfohlenen sicheren Header implementieren, die erläutert werden hier.
Implementieren Sie Mod Security WAF
Fügen Sie eine zusätzliche Sicherheitsebene hinzu, indem Sie die Webanwendungs-Firewall implementieren ModSecurity mit OWASP-Kernregelsatz.
Alternativ, wenn Sie die Verwendung von Cloud-basierter Sicherheit wie z SUKURI vor dem Nginx-Server.
Halten Sie Nginx auf dem neuesten Stand
Last but not least müssen Sie Ihr Nginx auf dem neuesten Stand halten, da es viele Leistungsverbesserungen, Sicherheitskorrekturen und neue Funktionen gibt.
Ich hoffe, dies hilft Ihnen, Ihre Nginx sicher zu halten.
Als nächstes könnten Sie daran interessiert sein, etwas zu lernen Bauen Sie Nginx für hohe Leistung von Grund auf neu.