Der ultimative Leitfaden zur Sicherung, Härte und Verbesserung der Leistung des NGINX -Webservers

Der ultimative Leitfaden zur Sicherung, Härte und Verbesserung der Leistung des NGINX -Webservers
Nginx -Sicherheitshärtungspitzen

Basierend auf den wunderbaren Dingen, die Sie gehört haben Nginx, Vielleicht haben Sie beschlossen, es auszuprobieren. Möglicherweise haben Sie es so gut gefallen, dass Sie in Betracht ziehen, Ihre Apache -Installationen durch einige der Artikel zu dem Thema zu ersetzen, das wir auf dieser Website veröffentlicht haben.

Wenn ja, bin ich sicher, dass Sie diesen Leitfaden mit offenen Armen begrüßen werden, da wir abdecken wollen 12 Tipps, um die Sicherheit Ihres Nginx zu erhöhen Server (von Nginx auf dem neuesten Stand bis hin zur Verwendung von TLs und der Umleitung von HTTP in HTTPS) und Sie werden feststellen, dass einige von ihnen dem, was Sie mit Apache tun würden, sehr ähnlich sind.

Verpassen Sie nicht:

13 Tipps für Sicherheit und Härten von Apache Webserver und Härten

25 Apache HTaccess Tricks, um den Apache -Webserver zu sichern

Nginx -Testumgebung

Wir werden die folgende Umgebung in diesem Leitfaden verwenden:

  1. Debian GNU/Linux 8.1 (Jessie).
  2. IP Adresse: 192.168.0.25 (tecmintlovesnginx.com) und 192.168.0.26 (NginxMeanspower.com), wie im Abschnitt IP-basierter virtueller Hosts unter beschrieben
    1. „So einrichten name-basierte und IP-basierte virtuelle Hosts (Serverblöcke) mit Nginx“
  3. Nginx Version: Nginx/1.6.2.
  4. Für Ihre Bequemlichkeit finden Sie hier die endgültige Konfigurationsdatei (Pastebin -Link).

Vor diesem Hintergrund beginnen wir, beginnen wir.

Tipp Nr. 1: Halten Sie Nginx auf dem neuesten Stand

Zum Zeitpunkt dieses Schreibens die neuesten Nginx -Versionen im CentOS (in Epel) und Debian -Repositories sind 1.6.3 Und 1.6.2-5, bzw.

Verpassen Sie nicht: Installieren Sie die neueste stabile Version von Nginx aus Repositories und Quelle

Obwohl die Installation von Software aus den Repositories einfacher ist, als das Programm aus dem Quellcode zu kompilieren, hat diese letzte Option zwei Vorteile: 1) Sie können zusätzliche Module in Nginx (wie mod_security) erstellen und 2) immer eine neuere Version bereitstellen als die Repositories (1.9.9 Ab heute). Die Versionshinweise sind immer auf der Nginx -Website verfügbar.

Verpassen Sie nicht:

Schützen Sie Apache gegen Brute Force und DDOS -Angriffe mit mod_security und mod_evasive

Tipp 2: Entfernen Sie unnötige Module in Nginx

Um Module aus Nginx explizit zu entfernen, während Sie bei der Installation von der Quelle installiert werden, tun Sie:

# ./configure-without-module1-without-module2-without-Module3 

Zum Beispiel:

# ./configure-without-http_dav_module ---withouthttp_spdy_module 

Wie Sie wahrscheinlich erraten werden, müssen Module aus einer früheren Nginx -Installation aus der Quelle entfernt werden, um die Kompilierung erneut durchzuführen.

Ein Wort der Vorsicht: Konfigurationsanweisungen werden von Modulen bereitgestellt. Stellen Sie sicher, dass Sie kein Modul deaktivieren, das eine Richtlinie enthält, die Sie in der Straße benötigen! Sie sollten die Nginx -Dokumente für die Liste der in jedem Modul verfügbaren Anweisungen überprüfen, bevor Sie eine Entscheidung über die Deaktivierung von Modulen treffen.

Tipp Nr. 3: Deaktivieren Sie die Richtlinie server_tokens in nginx

Der server_tokens Die Richtlinie fordert NGINX an, seine aktuelle Version auf Fehlerseiten anzuzeigen. Dies ist nicht wünschenswert, da Sie diese Informationen nicht mit der Welt weitergeben möchten, um Angriffe auf Ihrem Webserver zu verhindern, die durch bekannte Schwachstellen in dieser spezifischen Version verursacht werden.

Um die zu deaktivieren server_tokens Richtlinie festlegen, ob Sie in einem Serverblock ausgehen sollen:

Server Hören 192.168.0.25:80; server_tokens aus; server_name tecminintlovesnginx.com www.tecmintlovesnginx.com; access_log/var/www/logs/tecmintlovesnginx.Zugang.Protokoll; ERROR_LOG/VAR/www/logs/tecmintlovesnginx.Fehler.Protokollfehler; root/var/www/tecmintlovesnginx.com/public_html; Indexindex.HTML -Index.HTM;  

Starten Sie Nginx neu und überprüfen Sie die Änderungen:

Nginx -Versionsinformationen ausblenden

Tipp Nr. 4: HTTP -Benutzeragenten in Nginx verweigern

Ein HTTP -User Agent ist eine Software, die für die Inhaltsverhandlung mit einem Webserver verwendet wird. Dies schließt auch Malware -Bots und Crawler ein, die sich möglicherweise auf die Leistung Ihres Webservers auswirken, indem sie Systemressourcen verschwenden.

Um die Liste der unerwünschten Benutzeragenten leichter zu verwalten, erstellen Sie eine Datei (erstellen Sie eine Datei (/etc/nginx/blockuseragents.Regeln zum Beispiel) mit dem folgenden Inhalt:

Karte $ http_user_agent $ blockedagent Standard 0; ~*bösartig 1; ~*Bot 1; ~*Hintertür 1; ~*Crawler 1; ~*Bandit 1;  

Platzieren Sie als Nächstes die folgende Zeile vor der Definition des Serverblocks:

Inhaftieren/etc/nginx/blockuseragents.Regeln; 

Und eine IF -Anweisung zur Rückgabe einer 403 -Antwort, wenn sich die Benutzeragentenzeichenfolge in der oben definierten schwarzen Liste befindet:

Deaktivieren Sie Benutzeragenten in Nginx

Starten Sie Nginx neu und alle Benutzeragenten, deren String dem oben genannten übereinstimmt, werden vom Zugriff auf Ihren Webserver blockiert. Ersetzen 192.168.0.25 Mit der IP Ihres Servers und können Sie eine andere Zeichenfolge für die auswählen --User-Agent Schalter von wget:

# WGet http: // 192.168.0.25/Index.html # wget --user-Agent "Ich bin ein Bandit haha" http: // 192.168.0.25/Index.html 
Blockieren Sie Benutzeragenten in Nginx

Tipp Nr. 5: Deaktivieren Sie unerwünschte HTTP -Methoden in Nginx

HTTP -Methoden werden auch als Verben bezeichnet, und geben die gewünschten Maßnahmen an, die auf eine von Nginx bediente Ressource ergriffen werden soll. Für gemeinsame Websites und Anwendungen sollten Sie nur zulassen ERHALTEN, POST, Und KOPF und alle anderen deaktivieren.

Platzieren Sie dazu die folgenden Zeilen in einen Serverblock. A 444 Die HTTP -Antwort bedeutet eine leere Reaktion und wird häufig in Nginx verwendet, um Malware -Angriffe zu narren:

if ($ request_method !~ ^(Get | Kopf | Post) $) return 444;  

Zum Testen verwenden Locken a LÖSCHEN Fordern Sie die Ausgabe an und vergleichen Sie sie mit dem Senden eines regulären ERHALTEN:

# curl -x löschen http: // 192.168.0.25/Index.html # curl -x post http: // 192.168.0.25/Index.html 
Deaktivieren Sie unerwünschte HTTP -Anforderungen in Nginx

Tipp Nr. 6: Stellen Sie die Einschränkungen der Puffergrößen in Nginx fest

Um Pufferüberlaufangriffe gegen Ihren NGINX -Webserver zu verhindern, legen Sie die folgenden Anweisungen in einer separaten Datei fest (erstellen /etc/nginx/conf.D/Puffer.Conf, Zum Beispiel):

client_body_buffer_size 1k; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffer 2 1k; 

Die obigen Direktiven stellen sicher, dass Anfragen an Ihren Webserver keinen Pufferüberlauf in Ihrem System verursachen. Weitere Informationen darüber, was jeder von ihnen tut.

Fügen Sie dann eine Anweisung in die Konfigurationsdatei hinzu:

Inhaftieren/etc/nginx/conf.D/*.conf; 
Stellen Sie die Puffergröße in Nginx ein

Tipp Nr. 7: Begrenzen Sie die Anzahl der Verbindungen nach IP in Nginx

Um die Verbindungen per IP zu begrenzen, verwenden Sie die limit_conn_zone (In einem HTTP -Kontext oder zumindest außerhalb des Serverblocks) und limit_conn (in einer HTTP-, Serverblock- oder Standortkontext) Richtlinien.

Beachten Sie jedoch, dass nicht alle Verbindungen gezählt werden - sondern nur diejenigen, die eine vom Server bearbeitete Anfrage und der gesamte Anforderungsheader gelesen haben.

Lassen Sie uns beispielsweise die maximale Anzahl von Verbindungen auf festlegen 1 (Ja, es ist eine Übertreibung, aber es wird den Job in diesem Fall in Ordnung erledigen) in einer Zone namens ADDR (Sie können diesen auf den gewünschten Namen festlegen):

limit_conn_zone $ BINARY_REMOTE_ADDR ZONE = ADDR: 5M; limit_conn addr 1; 
Begrenzen Sie die Anzahl der HTTP -Anforderungen in Nginx

Ein einfacher Test mit Apache Benchmark (Nginx -Last ausführen) wobei 10 Gesamtverbindungen werden mit hergestellt 2 Gleichzeitige Anfragen helfen uns, unseren Standpunkt zu demonstrieren:

# AB -n 10 -c 2 http: // 192.168.0.25/Index.html 

Weitere Informationen finden Sie im nächsten Tipp.

Tipp Nr. 8: Setup Monitor -Protokolle für Nginx einrichten

Sobald Sie den im vorherigen Tipp beschriebenen Test durchgeführt haben, überprüfen Sie das für den Serverblock definierte Fehlerprotokoll:

Nginx -Fehlerprotokoll

Sie möchten vielleicht verwenden Grep So filtern die Protokolle für fehlgeschlagene Anforderungen an die an die hinzufügenr Zone definiert in Tipp Nr. 7:

# Grep addr/var/www/logs/tecmintlovesnginx.Fehler.log - -color = auto 
Nginx -Protokollüberwachung

Ebenso können Sie das Zugriffsprotokoll für Interessensinformationen filtern, z. B.:

  1. Client IP
  2. Browsertyp
  3. HTTP -Anforderungstyp
  4. Ressource angefordert
  5. Der Serverblock beantwortet die Anforderung (nützlich, wenn sich mehrere virtuelle Hosts bei derselben Datei anmelden).

Und ergreifen Sie angemessene Maßnahmen, wenn Sie ungewöhnliche oder unerwünschte Aktivitäten erkennen.

Tipp Nr. 9: Verhindern

Image Hotlinking geschieht, wenn eine Person auf einer anderen Seite ein Bild angezeigt wird, das auf Ihrem gehostet wird. Dies führt zu einer Zunahme Ihrer Bandbreite (für die Sie bezahlen), während die andere Person das Bild glücklich ansieht, als wäre es sein Eigentum. Mit anderen Worten, es ist ein doppelter Verlust für Sie.

Nehmen wir zum Beispiel an, Sie haben ein Unterverzeichnis mit dem Namen img In Ihrem Serverblock, in dem Sie alle in diesem virtuellen Host verwendeten Bilder speichern. Um zu verhindern, dass andere Websites Ihre Bilder verwenden, müssen Sie den folgenden Standortblock in Ihre virtuelle Host -Definition einfügen:

Ort / img / valid_refererers Keine blockiert 192.168.0.25; if ($ Invalid_referer) return 403;  

Dann ändern Sie die Index.html Datei in jedem virtuellen Host wie folgt:

192.168.0.26

192.168.0.25





Nginx bedeutet Strom


Nginx bedeutet Strom!








Tecmint liebt Nginx


Tecmint liebt Nginx!




Stöbern Sie jetzt zu jeder Website und wie Sie sehen können, wird das Bild korrekt angezeigt 192.168.0.25 wird aber durch a ersetzt 403 Antwort in 192.168.0.26:

Deaktivieren Sie die Hotlinking von Nginx Bild

Beachten Sie, dass dieser Tipp vom Remote -Browser abhängt, der das Refererfeld sendet.

Tipp #10: SSL deaktivieren und nur TLS in Nginx aktivieren

Wann immer möglich, tun Sie alles, um zu vermeiden SSL in einer seiner Versionen und Verwendung Tls stattdessen. Die folgende ssl_protocols sollte in einem Server- oder HTTP -Kontext in Ihrer virtuellen Hostdatei platziert werden oder handelt SSL.Conf, Aber es liegt ganz bei Ihnen):

SSL_PROTOCOLS TLSV1 TLSV1.1 TLSV1.2; 

Zum Beispiel:

Deaktivieren Sie SSL und aktivieren Sie TLs in Nginx

Tipp Nr. 11: Erstellen Sie Zertifikate in Nginx

Generieren Sie zunächst einen Schlüssel und ein Zertifikat. Verwenden Sie eine andere Art von Verschlüsselung, wenn Sie möchten:

# OpenSSL Genrsa -aes256 -out tecmintlovesnginx.Schlüssel 1024 # OpenSSL Req -NEW -key Tecmintlovesnginx.Key -out tecmintlovesnginx.CSR # CP Tecmintlovesnginx.Key Tecminintlovesnginx.Taste.org # opensensl RSA -in tecmintlovesnginx.Taste.org -out tecminintlovesnginx.Schlüssel # OpenSSL X509 -Req -Tage 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.Key -out tecmintlovesnginx.crt 

Fügen Sie dann die folgenden Zeilen in einen separaten Serverblock hinzu, um sich auf den nächsten Tipp vorzubereiten ((http -> https Umleitung) und verschieben Sie die SSL-bezogenen Richtlinien auch in den neuen Block:

Server Hören 192.168.0.25: 443 SSL; server_tokens aus; server_name tecminintlovesnginx.com www.tecmintlovesnginx.com; root/var/www/tecmintlovesnginx.com/public_html; SSL_Certificate/etc/nginx/sites-fähig/certs/tecmintlovesnginx.CRT; ssl_certificate_key/etc/nginx/sites-fähig/certs/tecmintlovesnginx.Taste; SSL_PROTOCOLS TLSV1 TLSV1.1 TLSV1.2;  

Im nächsten Tipp überprüfen wir, wie unsere Website jetzt ein selbstsigniertes Cert und TLS verwendet.

Tipp Nr. 12: Umleiten

Fügen Sie den ersten Serverblock die folgende Zeile hinzu:

Rückgabe 301 https: // $ server_name $ request_uri; 
HTTP in nginx auf https umleiten

Die obige Richtlinie gibt a zurück 301 (Dauerhaft bewegt) Antwort, die für die dauerhafte URL -Umleitung verwendet wird, wenn eine Anfrage an Port 80 Ihres virtuellen Hosts gestellt wird, und wird die Anforderung an den Serverblock umgeleitet, den wir im vorherigen Tipp hinzugefügt haben.

Das Bild unten zeigt die Umleitung und bestätigt die Tatsache, dass wir verwenden Tls 1.2 Und AES-256 zur Verschlüsselung:

Überprüfen Sie die TLS -Nginx -Verschlüsselung

Zusammenfassung

In diesem Artikel haben wir einige Tipps geteilt, um Ihren Nginx -Webserver zu sichern. Wir würden gerne hören, was Sie denken, und wenn Sie andere Tipps haben, die Sie mit dem Rest der Community teilen möchten, können Sie uns gerne wissen, indem Sie uns eine Notiz mit dem folgenden Kommentarformular senden.