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

Tipps und Tricks zum Sichern Ihres Nginx-Webservers

Nginx ist ein leichtgewichtiger Open-Source-Hochleistungswebserver, der am schnellsten wachsende Webserver der Welt. Nginx läuft auf Linux, Windows, Mac OS und dem Solaris-Betriebssystem. NGINX wird immer beliebter, was bedeutet, dass immer mehr NGINX-Bereitstellungen gesichert werden müssen.

In diesem Tutorial erklären wir einige beliebte Sicherheitstipps und -tricks für Nginx-Server.

Anforderungen

  • Ein Server mit Ubuntu 18.04 oder Debian 9.
  • Ein Root-Passwort wird auf Ihrem Server eingerichtet.

Nginx installieren

Zuerst müssen Sie Nginx auf Ihrem System installieren. Sie können es installieren, indem Sie den folgenden Befehl ausführen:

apt-get install nginx -y

Sobald Nginx installiert wurde, können Sie den Status von Nginx mit dem folgenden Befehl überprüfen:

systemctl status nginx

Sie sollten die folgende Ausgabe sehen:

? nginx.service – Ein Hochleistungs-Webserver und ein Reverse-Proxy-Server :43:14 UTC; Vor 4 Minuten 40 Sekunden Dokumente:man:nginx(8) Prozess:2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Prozess:2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process an; (code=beendet, status=0/SUCCESS) Prozess:2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process an; (code=exited, status=0/SUCCESS) Main PID:2285 (nginx) Tasks:2 (limit:1111) CGroup:/system.slice/nginx.service ??2285 nginx:master process /usr/sbin/nginx - g Dämon an; master_process an; ??2290 nginx:Arbeitsprozess 10. März 02:43:14 ubuntu1804 systemd[1]:Starten eines Hochleistungs-Webservers und eines Reverse-Proxy-Servers ... 10. März 02:43:14 ubuntu1804 systemd[1]:nginx.service:Fehler beim Analysieren der PID aus der Datei /run/nginx.pid:Ungültiges Argument 10. März 02:43:14 ubuntu1804 systemd[1]:Gestartet Ein Hochleistungs-Webserver und ein Reverse-Proxy-Server.

Nginx aktualisieren

Sie müssen Ihren Nginx-Webserver aktualisieren, da viele Leistungsverbesserungen, neue Funktionen und Sicherheitsfixes hinzugefügt werden. Die meisten modernen Linux-Distributionen enthalten nicht die neueste Version von nginx in ihren Standardpaketlisten. Sie müssen also die neueste Version von nginx über einen Paketmanager aktualisieren. Sie können Ihren Nginx-Webserver mit dem folgenden Befehl aktualisieren:

apt-get update -y
apt-get install nginx --reinstall -y

Offenlegung von Informationen verhindern

Zuerst müssen Sie Nginx daran hindern, seine Versionsinformationen preiszugeben.

Standardmäßig zeigt Nginx seinen Namen und seine Version in den HTTP-Headern an.

Sie können dies mit dem folgenden Befehl überprüfen:

curl -I http://localhost

Sie sollten die folgende Ausgabe sehen:

HTTP/1.1 200 OKServer:nginx/1.14.0 (Ubuntu)Datum:Sa, 09.03.2019 15:28:01 GMTContent-Type:text/htmlContent-Length:10918Last-Modified:Fr, 01.02.2019 16:05:17 GMTConnection:keep-aliveETag:"5c546e3d-2aa6"Accept-Ranges:bytes

In der obigen Ausgabe sollten Sie die Nginx- und Betriebssystemversion sehen.

Sie können diese Informationen ausblenden, indem Sie die Datei /etc/nginx/nginx.conf bearbeiten:

nano /etc/nginx/nginx.conf

Fügen Sie die server_tokens offline im HTTP-Konfigurationsteil hinzu:

http { ## # Basic Settings ## server_tokens off;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Webserver neu, um die Änderungen zu übernehmen:

systemctl startet nginx neu

Führen Sie nun den Curl-Befehl erneut aus:

curl -I http://localhost

Sie sollten die folgende Ausgabe sehen:

HTTP/1.1 200 OKServer:nginxDatum:Sa, 09. März 2019 15:33:31 GMTInhaltstyp:text/htmlInhaltslänge:10918Zuletzt geändert:Fr, 01. Februar 2019 16:05:17 GMTVerbindung:keep-aliveETag :"5c546e3d-2aa6"Accept-Ranges:bytes

Beschränken Sie die IPs vom Zugriff

Nginx wird mit einem einfachen Modul namens ngx_http_access_module geliefert, um eine bestimmte IP-Adresse zuzulassen oder abzulehnen.

Wenn Sie Nginx das Formular 172.16.0.0/16 zulassen und von anderen Subnetzen ablehnen möchten. Öffnen Sie dann die Datei /etc/nginx/sites-enabled/default:

nano /etc/nginx/sites-enabled/default

Nehmen Sie die folgenden Änderungen im Serverblock vor:

server { hören 80 default_server; hören [::]:80 default_server; 172.16.0.0/16 zulassen; alle ablehnen;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann Nginx neu, um diese Änderungen zu übernehmen:

systemctl startet nginx neu

Versuchen Sie nun, von einem anderen IP-Adressbereich wie 192.168.0.102 auf Ihren Nginx-Server zuzugreifen.

Überprüfen Sie als Nächstes das Nginx-Protokoll mit dem folgenden Befehl:

tail -f /var/log/nginx/error.log

In der folgenden Ausgabe sollte der Zugriff verboten sein:

09.03.2019 16:13:01 [Fehler] 11589#11589:*1 Zugriff verboten durch Regel, Client:192.168.0.102, Server:_, Anfrage:"GET /test/HTTP/1.1", Host :"172.16.0.122"

Nginx mit TLS sichern

TLS (Transport Layer Security) ist der Nachfolger von SSL (Secure Socket Layer). Es bietet stärkeres und effizienteres HTTPS und enthält weitere Verbesserungen wie Forward Secrecy, Kompatibilität mit modernen OpenSSL-Verschlüsselungssammlungen und HSTS. Dieses Tutorial zeigt, wie Sie ein selbstsigniertes SSL-Zertifikat in Nginx aktivieren. Wenn Sie stattdessen ein Zertifikat von let's Encrypt verwenden möchten, schauen Sie hier nach: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Erstellen Sie zunächst mit dem folgenden Befehl ein Verzeichnis für SSL:

mkdir /etc/nginx/ssl/

Als nächstes generieren Sie einen Schlüssel und ein Zertifikat mit dem folgenden Befehl:

cd /etc/nginx/ssl/

Generieren Sie zuerst den Schlüssel mit dem folgenden Befehl:

openssl genrsa -aes256 -out nginx.key 1024

Sie sollten die folgende Ausgabe sehen:

Generieren des privaten RSA-Schlüssels, 1024 Bit langer Modulus...++++++............................. ++++++e ist 65537 (0x010001)Geben Sie die Passphrase für nginx.key ein:Verifying – Geben Sie die Passphrase für nginx.key ein:

Generieren Sie als Nächstes csr mit dem folgenden Befehl:

openssl req -new -key nginx.key -out nginx.csr

Geben Sie alle Informationen wie unten gezeigt an:

Generieren des privaten RSA-Schlüssels, 1024 Bit langer Modulus...++++++............................. ++++++e ist 65537 (0x010001)Passphrase für nginx.key eingeben:Verifying – Passphrase für nginx.key eingeben:[email protected]:~# openssl req -new -key nginx.key -out nginx. csrGeben Sie die Passphrase für nginx.key ein:Sie werden gleich aufgefordert, Informationen einzugeben, die in Ihre Zertifikatsanforderung aufgenommen werden. Was Sie gleich eingeben werden, ist ein sogenannter Distinguished Name oder DN. Es gibt einige Felder außer Ihnen kann einige leer lassen Für einige Felder gibt es einen Standardwert. Wenn Sie „.“ eingeben, bleibt das Feld leer ) [Some-State]:GujaratLocality Name (zB Stadt) []:JunagadhOrganization Name (zB Company) [Internet Widgits Pty Ltd]:ITOrganizational Unit Name (zB Section) []:ITCommon Name (zB Server FQDN or YOUR name) []:HITESHEmail Address []:[email protected]Bitte geben Sie die folgenden "zusätzlichen" Attribute ein, die gesendet werden sollen mit Ihrer ZertifikatsanforderungEin Challenge-Passwort []:adminEin optionaler Firmenname []:IT

Als nächstes signieren Sie das Zertifikat mit dem folgenden Befehl:

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Sie sollten die folgende Ausgabe sehen:

Signatur oksubject=C =IN, ST =Gujarat, L =Junagadh, O =IT, OU =IT, CN =HITESH, emailAddress =[email protected]Privaten Schlüssel abrufenGeben Sie die Passphrase für nginx.key ein:

Öffnen Sie als Nächstes die standardmäßige virtuelle Nginx-Hostdatei und definieren Sie das Zertifikat:

nano /etc/nginx/sites-enabled/default

Nehmen Sie die folgenden Änderungen vor:

server {listen 192.168.0.100:443 ssl; root /var/www/html; index index.html index.htm index.nginx-debian.html; Servername _; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Server neu, um diese Änderungen zu übernehmen:

systemctl startet nginx neu

Kennwortschutz für das Verzeichnis

Beim Einrichten eines Nginx-Webservers können Sie auch ein bestimmtes Verzeichnis mit einem Passwort schützen. Sie können dies mit der .htpasswd-Datei tun.

Erstellen Sie dazu die passwd-Datei und fügen Sie den Benutzer mit dem folgenden Befehl hinzu:

mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Sie sollten die folgende Ausgabe sehen:

Neues Passwort:Neues Passwort erneut eingeben:Passwort für Benutzer admin hinzufügen

Erstellen Sie als Nächstes mit dem folgenden Befehl ein Testverzeichnis im Nginx-Webstammverzeichnis:

mkdir /var/www/html/test

Geben Sie als Nächstes mit dem folgenden Befehl das Eigentum an den www-data-Benutzer:

chown -R www-data:www-data /var/www/html/test

Öffnen Sie als Nächstes die standardmäßige virtuelle Nginx-Hostdatei mit dem folgenden Befehl:

nano /etc/nginx/sites-enabled/default

Als nächstes schützen Sie das Testverzeichnis wie unten gezeigt:

 Ort /test { auth_basic "Eingeschränkt"; auth_basic_user_file /etc/nginx/.htpasswd/passwd;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Dienst neu, um diese Änderungen zu übernehmen:

systemctl startet nginx neu

Öffnen Sie als Nächstes Ihren Webbrowser und geben Sie die URL http://your-server-ip/test ein. Sie werden aufgefordert, Benutzername und Passwort einzugeben, um auf das Testverzeichnis zuzugreifen, wie auf der folgenden Seite gezeigt:

Herzliche Glückwünsche! Sie haben Ihren Nginx-Server erfolgreich auf dem Ubuntu 18.04-Server gesichert. Ich hoffe, dies wird Ihnen helfen, Ihre auf dem Nginx-Webserver gehostete Anwendung zu schützen. Fühlen Sie sich frei, mich zu fragen, wenn Sie Fragen haben. Weitere Informationen finden Sie im Nginx-Sicherheitsdokument.


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

  2. So installieren Sie den Nginx-Webserver unter Linux

  3. LAMP vs. LEMP – Tipps zur Auswahl von Apache oder Nginx für Ihren Webserver

  4. Top 8 MySQL-Kommandozeilen-Tipps und Tricks

  5. 10 Tipps zum Sichern Ihres Apache-Webservers unter UNIX / Linux

Sichern Sie Ihren Apache-Webserver Best Practice

10 umsetzbare SSH-Härtungstipps zur Sicherung Ihres Linux-Servers

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

Installieren und konfigurieren Sie Varnish Cache mit Nginx Web Server unter Ubuntu 18.04

So verstecken Sie Ihre NGINX-Serverversion.

Entdecken Sie CyberPanel und installieren Sie es, um Ihren Webhost zu steuern