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

20 wichtige Dinge, die Sie wissen sollten, wenn Sie sich auf einem Nginx-Webserver befinden

Nginx Web Server ist einer der beiden am häufigsten verwendeten Webserver der Welt. Es hat seine Position als perfekte Webserver-Anwendung seit seiner Einführung vor 15 Jahren gefestigt. Nginx ist bekannt für seine überlegene Leistung, die etwa 2,5-mal schneller ist als Apache. Es eignet sich am besten für Websites, die mit einer großen Menge statischer Assets umgehen, kann aber auch für allgemeine Websites verwendet werden. Es ist schon vor langer Zeit über seinen Verwendungszweck hinausgewachsen und wird jetzt für eine Fülle von Aufgaben wie Reverse-Proxy, Caching, Lastenausgleich, Medien-Streaming und mehr verwendet.

Fakten über den Nginx-Webserver

Nginx wird als Engine X ausgesprochen und hat vielfältige Anwendungsfälle in der modernen Webszene. Es kann neben seiner Standardrolle als Webserver für eine Vielzahl von Webdiensten wie Microservices, Cloud Computing und API-Gateways verwendet werden. Wir werden unsere Diskussion unter der Annahme fortsetzen, dass der Nginx-Webserver auf Linux oder ähnlichen UNIX-Systemen läuft.

1. Die Grundlagen von Nginx

Es ist notwendig, dass Sie die Grundlagen richtig beherrschen, bevor Sie mit einem technischen Thema fortfahren. Hier stellen wir also einige grundlegende Dinge zu Nginx vor. Es gibt verschiedene Varianten dieser Anwendung, einschließlich kostenpflichtiger und kostenloser Varianten. Der Open-Source-Nginx-Server wird jedoch von Entwicklern am häufigsten verwendet, einfach weil er fast alle erdenklichen Funktionen bietet und nicht mit einem Preisschild verbunden ist.

Nach der Installation können Sie sudo service Nginx start ausführen, um Ihren Server hochzufahren. Die Serverkonfigurationsdateien werden entweder in /usr/local/nginx/conf/ gespeichert oder /etc/nginx/ Verzeichnisse. Die Webdokumente werden entweder in /usr/local/nginx/html/ gespeichert oder /var/www/html Verzeichnisse. Sie können einen laufenden Server stoppen, indem Sie den Befehl sudo nginx -s ausführen Stopp.

2. Einschalten von SELinux

SELinux (Security-Enhanced Linux) ist eine überzeugende Funktion des Linux-Kernels, die eine bessere Kontrolle über die Systemsicherheit über Sicherheitsrichtlinien für die Zugriffskontrolle bietet. Es ist eine gängige Praxis, SELinux in Systemen zu aktivieren, die dedizierte Webserver ausführen möchten. Sie müssen getsebool -a verwenden Befehl dafür.

$ sudo getsebool -a | less
$ sudo getsebool -a | grep off
$ sudo getsebool -a | grep on

Die obigen Befehle liefern Ihnen Informationen darüber, welche booleschen Einstellungen ein- und ausgeschaltet sind. Für maximale Sicherheit sollten Sie alle Entitäten deaktivieren, die von Ihrem System nicht benötigt werden. Diese Einstellungen werden zusammenfassend als SELinux-Boolesche Werte bezeichnet. Durch das Festlegen geeigneter Werte für diese Variablen wird Ihr System viel sicherer, um Standard-Webangriffe zu verhindern.

3. Entfernen unerwünschter Nginx-Module

- -

Trotz der leichten Natur des Nginx-Standardservers ist es immer eine gute Idee, alle unerwünschten Module zu entfernen, die von Ihrem Server nicht benötigt werden. Dies minimiert den Speicherbedarf erheblich und macht Ihren Server schneller als gewöhnlich. Darüber hinaus schränkt es viele Möglichkeiten Ihres Servers ein. Selbst wenn ein böswilliger Benutzer Zugriff auf Ihren Server erhält, wird es viel Zeit und Geschick erfordern, um die vollständige Kontrolle über das System selbst zu erlangen.

Die folgenden Befehle zeigen, wie Sie SSI und das Auto-Index-Modul deaktivieren, das standardmäßig mit Ihrer Nginx-Binärdatei installiert wird.

sudo ./configure --without-http_autoindex_module --without-http_ssi_module
sudo make
sudo make install

Sie können den folgenden Befehl verwenden, um die Module anzuzeigen, die beim Kompilieren Ihres Nginx-Servers deaktiviert werden können.

sudo ./configure --help | less

4. Minimierung von Netzwerkberechtigungen

Das Minimieren der Netzwerkprivilegien Ihres Webservers trägt ebenfalls zur Erhöhung der Sicherheit bei. Sie können die Mount-Optionen für diesen Job nutzen. Im Wesentlichen bedeutet dies, dass Sie alle Ihre Webseiten über separate Partitionen bedienen können. Dazu müssen Sie zusätzliche Partitionen erstellen und diese unter /nginx einhängen Lage. Stellen Sie sicher, dass Sie sie mit noexec-, nodev- und nosetuid-Berechtigungen mounten.

Sie können dies tun, indem Sie die Datei /etc/fstab bearbeiten . Bearbeiten Sie dies mit Ihrem bevorzugten Editor und fügen Sie am Ende der Datei Folgendes hinzu.

LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2

Wenn Ihr System auf einem anderen Dateisystem läuft, ersetzen Sie ext3 durch den Namen dieses Dateisystems. Dazu benötigen Sie sudo-Berechtigungen.

5. Netzwerkeinstellungen für Nginx härten

Sie können die Sicherheit Ihres Systems weiter festigen, indem Sie einige Kernel- und Netzwerkeinstellungen konfigurieren. Bearbeiten Sie die /etc/sysctl. conf-Datei und fügen Sie die folgenden Zeilen hinzu, um das System Ihres Servers abzuhärten.

# prevent smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1

# stopping being a router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# prevent alteration of routing tables
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

Es gibt eine Fülle von verfügbaren Optionen, mit denen Sie Ihr System sichern können. Sie werden sich als nützlich erweisen, falls jemand die Sicherheit Ihres Servers verletzt.

6. Ändern des Nginx-Versionsheaders

Das Ändern des Versionsheaders Ihres Nginx-Standardservers ist eine großartige Möglichkeit, Möchtegern-Hacker daran zu hindern, in Ihr System einzudringen. Vielen Anwendungen können Fuzzy-Daten zugeführt werden, um den Versionsheader der Serversoftware zu erhalten. Böswillige Benutzer tun dies oft, um genaue Serverinformationen herauszufinden, damit sie bestimmte Schwachstellen für sie ausfindig machen können.

Suchen Sie die folgenden Zeilen aus der Datei src/http/ngx_http_header_filter_module.c .

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Ersetzen Sie sie durch die folgenden Zeilen.

static char ngx_http_server_string[] = "Server: Ninja Web Server" CRLF;
static char ngx_http_server_full_string[] = "Server: Ninja Web Server" CRLF;

Dadurch werden potenziellen Angreifern falsche Informationen über die Serverversion angezeigt.

7. Pufferüberläufe verhindern

Pufferüberläufe treten auf, wenn Codeausschnitte Daten über ihre Grenze hinaus schreiben. Es ist ein klassisches Software-Engineering-Problem, das von erfahrenen Hackern ausgenutzt wird. Bei erfolgreicher Entwicklung können Pufferüberlaufangriffe es unerwünschten Parteien ermöglichen, in Ihr System einzudringen und die Kontrolle über es zu übernehmen. Sie können diese Angriffe weitgehend verhindern, indem Sie die Puffergröße für alle Clients begrenzen. Fügen Sie Folgendes zu Ihrer nginx.conf hinzu Datei.

# limit buffer sizes
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

# set timeouts
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;

Diese Optionen ändern im Wesentlichen den Standardwert dieser Parameter und verringern die Angriffsfläche. Sie können mit ihnen spielen, um herauszufinden, was zu Ihrem Nginx-Webserver passt.

8. Gleichzeitige Verbindungen steuern

Unabhängig davon, ob Sie den Nginx-Standardserver oder etwas anderes ausführen, ist es immer eine gute Praxis, die Anzahl gleichzeitiger Verbindungen zu begrenzen. Es kann in vielen Situationen nützlich sein, z. B. um Denial-of-Service-Angriffe zu verhindern und den Lastausgleich zu verbessern. Mit dem NginxHttpLimitZone-Modul können Administratoren die gleichzeitigen Verbindungen für bestimmte Sitzungen oder IP-Adressen einschränken.

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

Fügen Sie die obigen Zeilen in Ihre nginx.conf ein Datei. Es begrenzt die Anzahl der erlaubten gleichzeitigen Verbindungen auf 5 pro IP. Sie können diesen Wert einfach ersetzen, um ihn Ihren Anforderungen anzupassen.

9. Domänenzugriff filtern

Eine der häufigsten Arten von Problemen, mit denen moderne Nginx-Webserver konfrontiert sind, sind Botnetze. Sie scannen Server oft nach dem Zufallsprinzip und versuchen, alle zugehörigen Domänen zu finden. Sie können sie einfach ablehnen, indem Sie die folgenden Zeilen zu Ihrer nginx.conf hinzufügen Datei.

# encompass client requests to specified domains

if ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$ ) {
return 444;
}

Das Hinzufügen dieser Zeilen zu dieser Datei erlaubt Client-Anfragen nur für die erwähnten Domains. Sie können mehrere Domänen angeben, indem Sie oder “|“ verwenden Betreiber.

10. Einschränken der verfügbaren Methoden

Es gibt mehrere HTTP Methoden zum Abrufen von Webseiten basierend auf Benutzeranfragen. Einige von ihnen sind GET , POSTEN , PUT und LÖSCHEN . Es gibt jedoch eine Reihe zusätzlicher Methoden. Es ist immer eine gute Idee, diese Methoden für einen Benutzer einzuschränken. Dies trägt dazu bei, unerwünschte Datenschutzverletzungen zu verringern, und fügt eine zusätzliche Sicherheitsebene hinzu. Fügen Sie Ihrer Nginx-Konfiguration die folgenden Zeilen hinzu.

# allow only GET && HEAD && POST
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}

Jetzt können Benutzer keine Lösch- oder Suchanfrage auf Ihrem Server ausführen. Nur das GET , KOPF und POSTEN Methoden stehen ihnen zur Verfügung. Weitere Informationen zu HTTP-Methoden finden Sie hier.

11. Einschränken von User Agents

Benutzeragenten sind Computerprogramme, die es Benutzern ermöglichen, mit einem Dienst zu interagieren. Ubuntu-Webbrowser sind die primären Webbenutzeragenten in meinem System.

Manchmal möchten Sie möglicherweise bestimmte Benutzeragenten daran hindern, auf Ihren Server zuzugreifen, wie diese Headless-Browser, die ständig versuchen, Daten von Ihrer Website zu kratzen. Dies ist auch beim Blockieren von Botnets praktisch, da sie oft denselben User Agent verwenden.

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

Wenn Sie diese zu Ihrer Nginx-Konfiguration hinzufügen, werden bekannte Download-Agenten wie wget und BBBike blockiert. Die folgenden Zeilen blockieren einige bekannte Roboter namens msnbot und scrapbot .

#block robots
if ($http_user_agent ~* msnbot|scrapbot) {
return 403;
}

Sie können beliebige Benutzeragenten blockieren. Seien Sie jedoch vorsichtig, da Sie sonst möglicherweise legitimen Datenverkehr zu Ihrem Nginx-Webserver blockieren.

12. Empfehlungs-Spam blockieren

Empfehlungs-Spams sind heute ein häufiges Problem, mit dem viele Webserver konfrontiert sind. Es ist eine Technik, die verwendet wird, um bestimmte Websites bei der Suchmaschine zu bewerben, damit sie mehr Besucher auf ihre Website bekommen. Es ist besonders gefährlich für Webserver mit hoher Auslastung, da es das Ranking einer Website erheblich beeinträchtigen kann. Glücklicherweise können Sie die meisten dieser Spams blockieren, indem Sie Ihrer Nginx-Konfiguration nur ein paar Zeilen hinzufügen.

#deny certain referers
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
# return 404;
return 403;
}

Fügen Sie die obigen Zeilen zu Ihrer nginx.conf hinzu Datei zum Blockieren einiger der häufigsten Empfehlungs-Spams. Sie können diesen Zeilen nach Bedarf weitere Wörter hinzufügen.

13. Bild-Hotlinking verhindern

Bild-Hotlinking ist für viele Web-Admins zu einer gängigen Praxis geworden. In dieser Praxis verwenden Administratoren oft personalisierte Bilder von Ihrem Webserver, um ihre Client-Anfragen zu bedienen. Dies kann ernsthaft schädlich sein, wenn Sie sich nicht darum kümmern, da Ihr Webserver möglicherweise für die Bereitstellung von Bildinhalten verantwortlich ist, die von Benutzern eines anderen Webservers angefordert werden. Sie können dies ganz einfach verhindern und Ihre wertvolle Bandbreite sparen, wie unten gezeigt.

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

Wenn Sie diese Zeilen zu Ihrer Nginx-Konfigurationsdatei hinzufügen, werden die Bildanforderungen vom genannten Webserver blockiert. Auf diese Weise liefert Ihr Nginx-Standardserver Bilder nur an authentische Client-Anfragen. Darüber hinaus möchten Sie möglicherweise die Nginx-Karte verwenden, um das Bild-Hotlinking für eine große Anzahl von Domänen zu blockieren.

14. Einschränken des Verzeichniszugriffs

Sie können oft Tonnen von Webseiten finden, die ihre Verzeichnisse nicht einschränken. Sie sind besonders anfällig für böswillige Benutzer, da sie ihnen ermöglichen, die Website nach Belieben zu durchqueren, und häufig zu einer weiteren Eskalation der Website-Privilegien führen. Das folgende Snippet zeigt Ihnen, wie Sie bestimmte Benutzer blockieren, bestimmte IP-Bereiche zulassen und allen anderen den Zugriff auf das Verzeichnis /docs/ verweigern .

location /docs/ {
# block one user
deny 192.168.1.1;

# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;

# drop rest
deny all;
}

Fügen Sie diese zu Ihrer Nginx-Konfiguration hinzu und ersetzen Sie /docs/ mit Verzeichnissen, die vertrauliche Informationen enthalten. Sie können Ihre Verzeichnisse auch mit Passwörtern schützen, wie unten gezeigt. Erstellen Sie zuerst eine Passwortdatei und fügen Sie einen BENUTZER hinzu

$ sudo mkdir /usr/local/nginx/conf/.htpasswd/
$ sudo htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd USER

Fügen Sie nun diese Zeilen zur nginx.conf hinzu Datei.

# password rotect /personal-images/ and /delta/ directories
location ~ /(personal-images/.*|delta/.*) {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd/passwd;
}

15. Konfigurieren von SSL für den Nginx-Webserver

SSL (Secure Sockets Layer) ist zum De-facto-Sicherheitsstandard moderner Webserver geworden. Jede Website, die diese Technologie nicht implementiert, wird von vielen Sicherheitsexperten als unsicher angesehen. Glücklicherweise ist es einfach, die SSL-Sicherheit für Nginx-Server zu konfigurieren und zu verwalten.

Es gibt viele Möglichkeiten, SSL für eine Website einzurichten. Administratoren können selbstsignierte SSL-Zertifikate erstellen, beliebte Zertifizierungsstellen verwenden oder SSL-Reverse-Proxys einrichten. Wenn Sie relativ neu in der Webserver-Administration sind, empfehlen wir Ihnen, die beliebte Let’s Encrypt-Zertifizierung zu verwenden. Es ist eine kostenlose und einfach zu verwendende Zertifizierungsstelle, die sichere SSL/TLS-Zertifikate bereitstellt. Wie das geht, zeigen wir Ihnen in einer separaten Anleitung.

16. Erhöhung der PHP-Sicherheit

PHP ist eine der am häufigsten verwendeten serverseitigen Sprachen und bedient eine beträchtliche Anzahl von Webseiten im Internet. Es ist jedoch ziemlich alt und anfällig für mehrere Sicherheitslücken. Wenn Sie also PHP auf Ihrem Nginx-Server verwenden, sollten Sie immer vorsichtig sein und bestimmte Sicherheitsstandards implementieren. Fügen Sie beispielsweise die folgenden Zeilen zu Ihrer /etc/php.ini hinzu Datei wird die Sicherheit um einen erheblichen Faktor erhöhen.

# reject crucial functions
disable_functions = phpinfo, system, mail, exec
# max execution time for scripts, in seconds
max_execution_time = 30
# max memory limit for scripts, in MB
memory_limit = 4M
# max allowable POST data
post_max_size = 4M
# restrict PHP information
expose_php = Off
# log errors
log_errors = On
# enable SQL safe mode
sql.safe_mode = On

Es gibt noch viel mehr sicherheitssteigernde Anweisungen, die Sie in diese Datei einfügen können, um Ihren Server schadensresistent zu machen.

17. Verbesserung der Sicherheit des Nginx-Standardservers

Linux-Benutzer können die Gesamtsicherheit von Nginx-Servern durch einige manuelle Konfigurationen leicht verbessern. Wie bereits erwähnt, sollten Sie SELinux für optimalen Schutz auf jedem Computer aktivieren, auf dem Nginx ausgeführt wird. Richten Sie die richtigen Berechtigungen für /nginx ein ist auch extrem wichtig. Führen Sie den folgenden Befehl aus, um herauszufinden, welche Berechtigungen Benutzer für Ihre Nginx-Dokumente haben.

$ sudo find /nginx -user nginx
$ sudo find /usr/local/nginx/html -user nginx

Stellen Sie sicher, dass nur der Stamm oder Eigentümer dieser Dokumente Schreibzugriff darauf hat. Dies kann bei zukünftigen Einbrüchen ein Lebensretter sein, da Angreifer mehr Zeit und Fachwissen benötigen, um weitere Berechtigungen für die Maschine zu erlangen. Verwenden Sie den folgenden Befehl, um alle unerwünschten Archive zu entfernen, die von vi oder anderen Linux-Texteditoren erstellt wurden.

$ sudo find /nginx -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*'
$ sudo find /usr/local/nginx/html/ -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*'

18. Prüfung von Nginx-Protokollen

Wenn Sie die Protokolldateien Ihres Nginx-Servers überprüfen, erhalten Sie wertvolle Informationen wie das Interesse der Benutzer, unerwünschte Authentifizierungsversuche usw. Aus diesem Grund ist die Möglichkeit, Serverprotokolle angemessen zu überwachen, ein hilfreicher Vorteil für Webmaster.

Sie finden die Protokolldateien Ihres Servers im Verzeichnis /usr/local/nginx/logs Verzeichnis. Die folgenden Befehle zeigen uns, wie sie nach vertraulichen Informationen suchen.

$ sudo grep "/login.php??" /usr/local/nginx/logs/access_log
$ sudo grep "...etc/passwd" /usr/local/nginx/logs/access_log
$ sudo egrep -i "denied|error|warn" /usr/local/nginx/logs/error_log

Sie können auch spezifische Überwachungsanwendungen installieren oder erstellen, die Nginx-Protokolle in Echtzeit überprüfen und Sie darüber auf dem Laufenden halten, was auf Ihrem Server vor sich geht.

19. Ausführen von Nginx in Containern

Die meisten Fachleute raten Benutzern, ihren Nginx-Server in einem dedizierten Container auszuführen. Container sind isolierte Umgebungen auf den Servermaschinen, die so gebaut sind, dass Prozesse voneinander getrennt bleiben. Sie können Ihren Nginx-Server problemlos in Containern wie LXD, Docker, FreeBSD-Jails, XEN und anderen virtuellen Linux-Emulatoren installieren und ausführen. Diese werden unter Webmastern allgemein als Chroot-Gefängnisse bezeichnet.

Ein dedizierter Container für Ihren Server enthält alle Ressourcen, die zum Ausführen des Servers und zum Verarbeiten von Clientanforderungen erforderlich sind. Der Vorteil, den Sie erhalten, ist die Isolierung dieses Servers vom Rest Ihrer Maschine. Selbst wenn also jemand durch Schlupflöcher unbefugten Zugriff auf Ihren Server erhält, kann er Ihren Systemkern nicht kontrollieren.

20. Einige hilfreiche Vorschläge

Sie können die verschiedenen Aspekte Ihres Nginx-Webservers einfach konfigurieren, indem Sie die zentralisierte Konfigurationsdatei ändern. Es gibt viel zu tun. Verwenden Sie beispielsweise Folgendes, um Clickjacking zu vermeiden.

add_header X-Frame-Options SAMEORIGIN;

Die nächste Zeile deaktiviert das Sniffing von Inhaltstypen durch einige Browser.

add_header X-Content-Type-Options nosniff;

Um Filter für Cross-Site-Scripting (XSS) zu aktivieren, können Sie

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

Es gibt zahlreiche hilfreiche Funktionen, die Sie in der Nginx-Dokumentation finden können. Stellen Sie jedoch sicher, dass Sie verstehen, was sie tun, bevor Sie etwas anwenden. Andernfalls kann es aufgrund von Fehlkonfigurationen zu Ausfallzeiten auf Ihrer Website kommen.

Abschlussgedanken

Es gibt zu viele Gründe für die Popularität von Nginx-Webservern. Es ist aufgrund seines reichhaltigen Funktionsumfangs und einer scheinbar unbegrenzten Anzahl von Konfigurationsmöglichkeiten zur besten Serversoftware geworden. Wir sehen oft, dass viele Administratoren lediglich den Nginx-Standardserver installieren und verwenden. Ihnen fehlen viele Funktionen und Flexibilität, die Nginx auf diese Weise bietet. Aus diesem Grund haben sich unsere Redakteure die Freiheit genommen, diese Best Practices vor Ihnen zu skizzieren. Hoffentlich konnten wir Ihr Interesse wecken und Ihnen dabei helfen, etwas Neues zu lernen.


Linux
  1. 30 Dinge, die Sie nicht über den Linux-Kernel wussten

  2. Apache vs. Nginx:Welchen Webserver sollten Sie wählen?

  3. Installieren Sie Nginx unter Windows

  4. Nginx setzt bestimmte IPs auf die Whitelist

  5. Was Sie über Ubuntu-Server wissen müssen

Top 10 SSH-Funktionen, die Sie kennen MÜSSEN, um produktiver zu sein

So installieren Sie den Nginx-Webserver unter Ubuntu 20.04

25 Muss Nginx-Befehle für Entwickler und Administratoren kennen

Alles, was Sie über Linux Ubuntu Server wissen müssen

Alles, was Sie über Linux OpenSSH Server wissen müssen

Apache vs. Nginx:Welcher Webserver ist der beste für Sie?