GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So härten und sichern Sie den NGINX-Webserver unter Linux

Nginx ist wohl einer der am weitesten verbreiteten kostenlosen und Open-Source-Webserver, der zum Hosten von Websites mit hohem Datenverkehr verwendet wird. Es ist bekannt für seine Stabilität, hervorragende Leistung, geringen Ressourcenverbrauch und schlanke Konfiguration. Zu den beliebten Websites, die von Nginx unterstützt werden, gehören WordPress.com, GitHub, Netflix, Airbnb, Hulu, Eventbrite, Pinterest und SoundCloud, um nur einige zu nennen.

Die Standardkonfigurationen sind zwar leistungsstark und stabil, aber nicht sicher, und es sind zusätzliche Optimierungen erforderlich, um den Webserver zu stärken und ihm die dringend benötigte Sicherheit zu geben, um Angriffe und Sicherheitsverletzungen zu verhindern.

In diesem Artikel gehen wir auf einige der Schritte ein, die Sie unternehmen können, um Ihren Nginx-Webserver zu härten und zu sichern und ihn optimal zu nutzen.

1) SSL-Zertifikat implementieren

Einer der vorläufigen und entscheidenden Schritte beim Härten Ihres Nginx-Webservers besteht darin, ihn mithilfe eines SSL-Zertifikats zu sichern. Das SSL-Zertifikat ist ein kryptografisches digitales Zertifikat, das den Datenverkehr zwischen Ihrem Webserver und den Webbrowsern der Besucher Ihrer Website verschlüsselt. Es zwingt Ihre Website auch, das sichere HTTPS-Protokoll zu verwenden und HTTP zu verwerfen, das den Datenverkehr im Klartext sendet. Dadurch wird die Hin- und Rückkommunikation gesichert und vor Hackern geschützt, die versuchen könnten, vertrauliche Informationen wie Benutzernamen, Passwörter und Kreditkarteninformationen abzuhören und zu stehlen.

Sie können das kostenlose Let’s Encrypt SSL-Zertifikat nutzen, das einfach zu installieren und zu konfigurieren ist und 90 Tage gültig ist. Sobald Sie es installiert haben, können Sie die Stärke der SSL-Verschlüsselung überprüfen, indem Sie Ihre Domain auf SSL Labs testen . Die Ergebnisse werden unten angezeigt.

Wie Sie sehen können, hat die von uns verwendete Domäne aufgrund der schwachen Protokollunterstützung, die in Gelb hervorgehoben ist, die Note B erhalten. Wir müssen noch ein paar Anpassungen vornehmen, um es auf Klasse A zu bringen. Mal sehen, wie wir die Protokollunterstützung im nächsten Schritt verbessern können.

2) Schwache SSL/TLS-Protokolle deaktivieren

Wie Sie anhand der Ergebnisse gesehen haben, bedeutet die Implementierung von SSL nicht unbedingt, dass Ihre Website vollständig gesichert ist. Veraltete Versionen wie TLS 1.0, TLS 1.1 und SSL 3 gelten als schwach und stellen Schwachstellen dar, die Hacker ausnutzen und schließlich Ihren Webserver kompromittieren können. Diese Protokolle sind anfällig für Schwachstellen wie POODLE, BEAST und CRIME.

Tatsächlich haben die beliebtesten und am weitesten verbreiteten Webbrowser das Ende der Unterstützung für TLS 1.0 und TLS 1.1 innerhalb der angegebenen Fristen angekündigt.

  • Browsername           Datum
  • Google Chrome           Januar 2020
  • Mozilla Firefox             März 2020
  • Safari/Webkit               März 2020
  • Microsoft Edge             Juni 2020

Mit diesen Informationen wäre es ratsam, die neuesten Sicherheitsprotokolle einzuhalten, und zum Zeitpunkt der Erstellung dieses Artikels ist das neueste Protokoll  TLS 1.2, wobei TLS 1.3 später im Jahr 2020 erwartet wird.

Um TLS 1.2 und TLS 1.3 zu implementieren, bearbeiten wir zwei Dateien:

  • /etc/nginx/nginx.conf  –  Dies ist die Hauptkonfigurationsdatei von nginx
  • /etc/nginx/sites-available/example.com (oder /default)

Wenn Sie Let’s Encrypt SSL ausführen, stellen Sie sicher, dass Sie die folgenden Dateien bearbeiten

  • /etc/nginx/nginx.conf
  •  /etc/letsencrypt/options-ssl-nginx.conf

Verwenden Sie die folgenden Schritte, um schwache SSL/TLS-Protokolle zu deaktivieren

Schritt 1) ​​Bearbeiten Sie die Datei nginx.conf

Stellen Sie zunächst sicher, dass Sie eine Sicherungskopie der Datei /etc/nginx/nginx.conf erstellen, bevor Sie Änderungen vornehmen. Öffnen Sie dann die Datei mit einem Texteditor Ihrer Wahl

$ sudo vi /etc/nginx/nginx.conf

Suchen Sie die folgende Zeile

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

Um die schwachen Protokolle zu deaktivieren, löschen Sie einfach die Protokolle TLSv1 und TLSv1.1 und fügen Sie am Ende TLSv1.2 und TLSv1.3 hinzu.

ssl_protocols TLSv1.2  TLSv1.3 ; # Dropping SSLv3, ref: POODLE

Dies sollte in Zeile 36 wie folgt aussehen

Speichern und beenden Sie die Konfigurationsdatei.

Schritt 2) Bearbeiten Sie die Nginx-Serverblockdatei

Veraltete Protokolle befinden sich möglicherweise noch in Ihren jeweiligen Nginx-Serverblock-Konfigurationsdateien. Die Blockkonfigurationsdateien sind im Verzeichnis /etc/nginx/sites-available/ enthalten.

Fahren Sie daher fort und ändern Sie Ihre Blockkonfigurationsdatei

$ sudo vi /etc/nginx/sites-available/example.com
OR
$ sudo vi /etc/nginx/sites-available/default

Scrollen Sie wie zuvor und suchen Sie die folgende Zeile

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Löschen Sie erneut das Protokoll TLSv1 und TLSv1.1 und fügen Sie das TLSv1.3 am Ende hinzu.

HINWEIS: Wenn Sie Let’s Encrypt SSL verwenden, ändern Sie die SSL-Datei:

$ sudo vi /etc/letsencrypt/options-ssl-nginx.conf

Damit die Änderungen bestehen bleiben, starten Sie den Nginx-Webserver neu

$ sudo systemctl restart nginx

Gehen Sie jetzt zum SSL Labs-Test und testen Sie Ihre Domain noch einmal. Diesmal sollten Sie wie gezeigt eine A-Bewertung erhalten.

3)  Offenlegung von Informationen verhindern

Ein Teil der Härtung Ihres Servers besteht darin, die Offenlegung von Informationen auf Ihrem Webserver so weit wie möglich einzuschränken. Informationen können durch HTTP-Header oder Fehlerberichte durchgesickert sein. Einige dieser Informationen beinhalten die Version von Nginx, die Sie ausführen, und Sie möchten das wirklich nicht an Hacker weitergeben.

Standardmäßig zeigt Nginx HTTP-Header-Informationen an, wenn Sie den folgenden Befehl ausführen:

$ curl -I http://localhost

Aus der Ausgabe in der zweiten Zeile können Sie ersehen, dass die Version von Nginx und das Betriebssystem, auf dem es ausgeführt wird, offengelegt wurde

Server:nginx/1.14.0 (Ubuntu)

Die Version würde auch in einem Webbrowser angezeigt, wenn eine Fehlerseite wie eine 404-Fehlerseite wie gezeigt angezeigt wird.

Um dieses Informationsleck zu vermeiden, bearbeiten Sie die nginx.conf -Datei und kommentieren Sie unter dem Abschnitt http { die folgende Zeile aus

server_tokens off;

Speichern Sie die Änderungen und beenden Sie. Starten Sie dann den Webserver neu, damit die Änderungen widergespiegelt werden.

$ sudo systemctl restart nginx

Laden Sie nun die Fehlerseite neu und beachten Sie den Unterschied. Die Version und das Betriebssystem, auf dem Nginx ausgeführt wird, wurde weggelassen.

Sie können auch überprüfen, wie viele Informationen von Ihrem Webserver lecken, indem Sie die Server Signature Site besuchen und überprüfen Sie Ihre Domain. Wenn alles in Ordnung ist, erhalten Sie die folgende Ausgabe.

4)  Entfernen Sie unerwünschte HTTP-Methoden

Eine weitere bewährte Vorgehensweise besteht darin, unerwünschte Protokolle zu deaktivieren, die nicht vom Webserver implementiert werden. Die folgende Zeile erlaubt die Implementierung der Methoden GET, POST und HEAD und schließt alle anderen Methoden einschließlich TRACE und DELETE aus. Fügen Sie die folgende Zeile in Ihre Serverblockdatei ein.

location / {
limit_except GET HEAD POST { deny all; }
}

5) Schwache Cipher Suites deaktivieren

Machen Sie es sich neben der Implementierung von SSL zum Ziel, schwache und unsichere Chiffren einschließlich der RC4-Chiffren zu deaktivieren. Diese werden standardmäßig nur zum Zwecke der Abwärtskompatibilität mit früheren Nginx-Versionen gebündelt, und es gibt keinen guten Grund, sie zu haben, da sie als potenzielle Schwachstellen dienen, die ausgenutzt werden können. Ersetzen Sie daher in Ihrer ssl.conf-Datei die Verschlüsselungen durch die folgende Verschlüsselungssammlung.

'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

6) Entfernen Sie alle unnötigen Module

Um die Bedrohungslandschaft weiter zu minimieren, ist es ratsam, alle unnötigen Module aus den Standardservereinstellungen zu entfernen. Best Practice verlangt, dass Sie ein schlankes Profil halten und nur die Module aktivieren, die zum Bereitstellen von Inhalten vom Webserver verwendet werden. Achten Sie jedoch darauf, die Module, die Sie möglicherweise benötigen, nicht zu deinstallieren oder zu entfernen. Führen Sie als Empfehlung Tests in einer QA- oder Testumgebung durch, bevor Sie entscheiden, welche Module deaktiviert werden sollten und welche für Ihren Webserver erforderlich sind.

7) Besseren Überlauf verhindern

In der Speicherverwaltung ist ein Puffer ein Speicherort, der Daten vorübergehend aufnimmt, sobald sie von einem Speicherort zum anderen übertragen werden.

Wenn die Datenmenge die Kapazität des Speicherpuffers übersteigt, kommt es zu einem Pufferüberlauf. Mit anderen Worten, Pufferüberläufe treten auf, wenn ein Programm mehr Daten in einen Speicherblock schreibt, als es halten oder verarbeiten kann.

Ein Angreifer kann diese Schwachstelle ausnutzen, um bösartigen Code zu senden, der ein System gefährden kann. Als Standardverfahren wird empfohlen, einige Anpassungen am Webserver vorzunehmen, um solche Probleme zu mindern. Fügen Sie die folgenden Codezeilen zur Datei nginx.conf hinzu.

##buffer policy
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
##end buffer policy

8) XSS-Angriffe verhindern

Ein XSS-Angriff (Cross-Site-Scripting) ist ein Angriff, bei dem ein Hacker eine Webanwendung verwendet, um schädlichen Code oder ein browserseitiges Skript in eine vertrauenswürdige Website einzufügen. Wenn ein Besucher der Website die Website besucht, wird das Skript heruntergeladen und kann auf verschiedene Browserressourcen wie Cookies und Sitzungstoken zugreifen.

Eine der Schutzmaßnahmen gegen solche Angriffe besteht darin, die folgende Zeile in die Datei ssl.conf einzufügen.

add_header X-XSS-Protection "1; mode=block";

9) Vermeiden Sie Clickjacking-Angriffe

Um Clickjacking-Angriffe zu vermeiden, hängen Sie die X-Frame-Options wie gezeigt an den HTTP-Header in der Datei nginx.conf an

add_header X-Frame-Options "SAMEORIGIN";

Wenn Sie fertig sind, speichern Sie den Nginx-Webserver und starten Sie ihn neu.

10) Automatisierte Benutzeragenten verweigern

Um Ihren Server vor Bots und anderen automatisierten Skripten zu schützen, die von Angreifern eingesetzt werden können, um Informationen von Ihrer Website abzurufen, ist es ratsam, bestimmte Benutzeragenten ausdrücklich abzulehnen, was letztendlich zu Deny-of-Service-Angriffen auf DOS führen kann. Hängen Sie die folgende Zeile in der Datei nginx.conf an.

if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}

11) Bild-Hotlinking verhindern

Hotlinking ist eine Praxis, bei der ein Benutzer ein Bild mit Ihrer Website verlinkt, anstatt das Bild direkt auf seine Website hochzuladen. Wenn dies passiert, erscheint Ihr Bild auf ihrer Website und die Kehrseite davon ist, dass Sie am Ende für zusätzliche Bandbreite bezahlen.

Um dies zu verhindern, suchen Sie in der Nginx-Konfigurationsdatei nach der Standortanweisung und fügen Sie das folgende Snippet an

# Stop deep linking or hot linking
location /images/ {
  valid_referers none blocked www.example.com example.com;
   if ($invalid_referer) {
     return   403;
   }
}

Sie können die Bilderweiterungen auch wie gezeigt angeben:

valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
    rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.example.com/banned.jpg last
}

12) Halten Sie Nginx auf dem neuesten Stand

Einfach richtig? Ihren Webserver auf dem neuesten Stand zu halten, ist eine der Möglichkeiten, wie Sie Ihren Server sichern können. Beim Aktualisieren Ihres Webservers werden die erforderlichen Patches angewendet, die bereits vorhandene Schwachstellen beheben, die von Hackern ausgenutzt werden können, um Ihren Server zu kompromittieren.

Das war eine Zusammenfassung einiger der wichtigsten Maßnahmen, die Sie ergreifen können, um Ihren Nginx-Webserver zu härten und ihn vor gängigen Exploit-Techniken zu schützen. Dies trägt wesentlich zum Schutz Ihrer Website-Dateien und der Besucher Ihrer Website bei.

Auch lesen :So konfigurieren Sie NGINX als TCP/UDP-Load-Balancer unter Linux


Linux
  1. Was ist ein Webserver und wie funktioniert ein Webserver?

  2. So installieren Sie den Nginx-Webserver unter Linux

  3. Wie behebt man die DROWN-Schwachstelle im Apache/NGINX-Webserver und SMTP?

  4. So installieren und sichern Sie PostgreSQL Server auf RockyLinux 8

  5. So installieren Sie RabbitMQ Server und Erlang unter Linux

So installieren Sie Nginx auf einem Arch Linux Cloud Server

So fügen Sie PHP-FPM-Unterstützung auf Apache und Nginx-Webserver auf Ubuntu 18.04 hinzu

So installieren und konfigurieren Sie den Caddy Web Server mit PHP unter Rocky Linux 8

So installieren und konfigurieren Sie den Nginx-Webserver unter Oracle Linux 8

So installieren und konfigurieren Sie den DNS-Server unter Linux

So installieren Sie Nginx unter Rocky Linux 9