Vorwort: Ich habe kürzlich Funktionen zur Verschlüsselung von Daten geschrieben, aber mir fehlt immer noch das Wissen über Sicherheit. Ich bin zufällig mit WAF-bezogenem Wissen in Berührung gekommen. Es stellte sich heraus, dass Nginx WAF-Funktionen realisieren kann. Ich habe auch kurz die Sprache Lua gelernt. Teile es mit mir 1. Hintergrund von WAFIn der Vergangenheit verwendeten Unternehmen Firewalls normalerweise als erste Verteidigungslinie für ihre Sicherheit. Damals blockierten Firewalls nur einige Datenpakete auf der dritten Schicht (Netzwerkschicht). Da Webanwendungen jedoch immer funktionaler wurden, wurden Webserver aufgrund ihrer starken Rechenleistung, Verarbeitungsleistung und ihres hohen Wertes zum Hauptziel von Angriffen (siebte Schicht, Anwendungsschicht). Herkömmliche Firewalls können jedoch Angriffe, die Schwachstellen in Anwendungen ausnutzen, nicht verhindern. In diesem Zusammenhang entstand die WAF (Web Application Firewall). 2. Was ist WAFDie Web Application Firewall (WAF) dient dem Schutz von Webanwendungen vor verschiedenen Angriffen auf Anwendungsebene, wie etwa Cross-Site-Scripting (XSS), SQL-Injection und Cookie-Poisoning. Anwendungen sind das Tor zu Ihren wichtigen Daten, daher sind Angriffe auf Anwendungen die Hauptursache für Sicherheitslücken. Mit WAF können Sie eine Reihe von Angriffen blockieren, die versuchen, durch Eindringen in das System Daten zu verlieren. 3. Funktionsprinzip1. Der Benutzer sendet über den Browser eine Webseitenanforderung an den Webserver. 2. Bevor die Benutzeranfrage den Webserver erreicht, filtert WAF die Benutzeranfrage 3. WAF erhält die HTTP-Anforderungsparameter des Benutzers und vergleicht sie mit den in der Konfigurationsdatei definierten Regeln (z. B. der IP-Blacklist). Wenn eine Übereinstimmung gefunden wird, wird eine 403-Ablehnung zurückgegeben; andernfalls wird die Anforderung zugelassen. 4. Der WEB-Server antwortet auf die Anfrage des Benutzers und gibt die Seitendaten an den Benutzer zurück. 4. WAF-FunktionWAF ist ein Produkt, das Schutz für Webanwendungen bietet, indem es eine Reihe von Sicherheitsrichtlinien für HTTP/HTTPS ausführt. 5. Unterschiede zwischen WAF und herkömmlichen Firewalls1. Herkömmliche Firewalls arbeiten auf der Netzwerkebene (Schicht 3) und der Transportebene (Schicht 4) 2.WAF arbeitet auf der Anwendungsebene (Schicht 7) 3. Herkömmliche Firewalls filtern IP und Port 4.WAF filtert HTTP-Anfragen, einschließlich URL, IP, User-Agent usw. 6. WAF und DDosDer vollständige Name von DDos lautet Distributed Denial of Service. Dabei wird hauptsächlich eine Gruppe von Computern eingesetzt, um Anfragen an ein einzelnes Zielsystem zu stellen. Dies führt dazu, dass die Ressourcen des Zielsystems erschöpft werden und normale Anfragen abgelehnt werden. Gemäß dem OSI-Netzwerkmodell gibt es drei häufigste Arten von DDos: DDos der Schicht 3 (Netzwerkschicht), DDos der Schicht 4 (Transportschicht) und DDos der Schicht 7 (Anwendungsschicht). WAF befasst sich hauptsächlich mit DDoS-Angriffen der Ebene 7 und ist im Umgang mit DDoS-Angriffen der Ebene 7 effizienter als andere Schutzmaßnahmen. WAF führt eine detaillierte Analyse des HTTP-Verkehrs durch, sodass es normale Zugriffsanforderungen modellieren und diese Modelle dann verwenden kann, um normale Anforderungen von Anforderungen zu unterscheiden, die von Angreifern mithilfe von Robotern oder Skripten ausgelöst werden. 7. Nginx WAF-Funktion
8. Nginx Waf-Schutzprozess
9. WAF basierend auf Nginx9.1 Installieren von Abhängigkeitspaketenyum -y installiere gcc gcc-c++ autoconf automake make entpacken yum -y installiere zlib zlib-devel openssl openssl-devel pcre pcre-devel 9.2 LuaJIT2.0 installierenLuaJIT ist der Just-in-Time-Compiler von Lua. Einfach ausgedrückt ist LuaJIT eine effiziente virtuelle Lua-Maschine. # Wechseln Sie in das Verzeichnis cd /usr/local/src/ # LuaJIT2.0 herunterladen wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz # Entpacken Sie tar xf LuaJIT-2.0.5.tar.gz und cd LuaJIT-2.0.5 # Kompilieren Sie make # Installieren make install PREFIX=/usr/local/lj2 # Erstellen Sie einen Softlink ln -s /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/ # Umgebungsvariable hinzufügen export LUAJIT_LIB=/usr/local/lj2/lib/ exportiere LUAJIT_INC=/usr/local/lj2/include/luajit-2.0/ 9.3 Installieren Sie ngx_devel_kitDas Kit-Modul ist ein Modul, das die Kernfunktionen des Nginx-Servers erweitert. Darauf basierend können Drittanbieter-Modulentwicklungen schnell umgesetzt werden. # Wechseln Sie in das Verzeichnis cd /user/local/src/ # Laden Sie v0.3.0.tar.gz herunter wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz -O ngx_devel_kit.tar.gz # Entpacken Sie tar xf ngx_devel_kit.tar.gz 9.4 Installieren Sie das Lua-Nginx-Modulngx_lua_module ist ein Nginx-HTTP-Modul, das den Lua-Parser in Nginx einbettet, um in der Sprache Lua geschriebene Web-Backend-Skripte zu analysieren und auszuführen. Prinzip des ngx_lua-Moduls
Installieren # Wechseln Sie in das Verzeichnis cd /user/local/src/ # Laden Sie v0.10.9rc7.tar.gz herunter wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz # Entpacken Sie tar -xzvf v0.10.9rc7.tar.gz 9.5 Nginx installieren# Wechseln Sie in das Verzeichnis cd /user/local/src/ # Laden Sie wget http://nginx.org/download/nginx-1.21.0.tar.gz herunter # Entpacken Sie tar xf nginx-1.21.0.tar.gz # Wechseln Sie in das Nginx-Verzeichnis cd nginx-1.21.0 # Kompilieren ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --add-module=/usr/local/src/lua-nginx-module-0.10.9rc7 --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --with-stream # Installieren Sie make && make install # Fügen Sie die nginx-Konfiguration hinzu und fügen Sie den folgenden Inhalt im Serverblock hinzu [root@localhost_test_192.168.10.132 11:04:48 ~]# vim /usr/local/nginx/conf/nginx.conf Standort /lua { Standardtyp „Text/Plain“; content_by_lua 'ngx.say("hallo, lua")'; } # Syntax prüfen [root@localhost_test_192.168.10.132 09:59:33 /usr/local/src]# nginx -t nginx: die Syntax der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist in Ordnung nginx: Test der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist erfolgreich # Starten Sie [root@localhost_test_192.168.10.132 11:08:35 ~]# nginx # Testen Sie curl 127.0.0.1:80/lua 9.6 ngx_lua_waf installieren# Wechseln Sie in das Verzeichnis cd /user/local/src/ # Laden Sie ngx_lua_waf in das conf-Verzeichnis wget herunter https://github.com/loveshell/ngx_lua_waf/archive/master.zip # Entpacken und waf nennen entpacken Sie master.zip -d /usr/local/nginx/conf/ # Ändern Sie den Verzeichnisnamen mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf # Fügen Sie lua_package_path "/usr/local/nginx/conf/waf/?.lua" zum http-Abschnitt von nginx.conf hinzu; lua_shared_dict-Limit 10 m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; Zugriff über Lua-Datei /usr/local/nginx/conf/waf/waf.lua; # Fügen Sie den Benutzer www zur äußersten Ebene von nginx.conf hinzu; # Erstellen Sie ein Protokollverzeichnis mkdir /usr/local/nginx/logs/hack chown www /usr/local/nginx/logs/hack # Lua_waf-Konfiguration [root@localhost_test_192.168.10.132 11:33:53 /usr/local/nginx/conf/waf]# cat config.lua #Regelspeicherpfad RulePath = "/usr/local/nginx/conf/waf/wafconf/" # Ob die Protokollierung von Angriffsinformationen aktiviert werden soll, muss logdir konfiguriert werden Angriffsprotokoll = "ein" # Protokollspeicherverzeichnis, das vom Benutzer erstellt werden muss und über Schreibberechtigungen für den Nginx-Benutzer logdir = "/usr/local/nginx/logs/hack/" verfügen muss # Ob der URL-Zugriff blockiert werden soll UrlDeny="on" # Ob nach dem Abfangen umgeleitet werden soll Redirect="on" # Ob Cookie-Angriffe abgefangen werden sollen CookieMatch="on" # Ob Post-Angriffe abgefangen werden sollen postMatch="on" # Ob die URL-Whitelist aktiviert werden soll whiteModule="on" # Geben Sie den Dateierweiterungstyp ein, der nicht hochgeladen werden darf black_fileExt={"php","jsp"} #ip-Whitelist, mehrere IPs werden durch Kommas getrennt ipWhitelist={"127.0.0.1"} #IP-Blacklist, mehrere IPs werden durch Kommas getrennt ipBlocklist={"192.168.10.1"} # Ob das Abfangen von CC-Angriffen aktiviert werden soll (Sie müssen im http-Abschnitt von nginx.conf das lua_shared_dict-Limit von 10 m hinzufügen;) CCDeny="aus" # Stellen Sie die CC-Angriffsfrequenz in Sekunden ein. # Standardmäßig kann dieselbe IP dieselbe Adresse nur 100 Mal in 1 Minute anfordern CCrate="100/60" # Warnung Inhalt html = [] # Regeldatei [root@localhost_test_192.168.10.132 11:42:12 /usr/local/nginx/conf/waf]# ll wafconf/ insgesamt 24 -rw-r--r-- 1 root root 749 6. April 2016 args -rw-r--r-- 1 root root 652 6. April 2016 Keks -rw-r--r-- 1 root root 733 6. April 2016 Beitrag -rw-r--r-- 1 root root 335 6. April 2016 URL -rw-r--r-- 1 root root 177 6. April 2016 Benutzer-Agent -rw-r--r-- 1 Wurzel Wurzel 8 6. April 2016 whiteurl Die Regeln in den Argumenten lauten: get-Parameterfilterung, Cookie-Filterung ist die Cookie-Filterung für die Anforderungsfilterung, URL-Filterung ist die Regel für die Filterung nur in der get-Anforderungs-URL, Post-Filterung ist die Regel für die Filterung nur in der Post-Anforderung, Whiteurl ist die Whitelist und die darin enthaltenen URLs werden ohne Filterung abgeglichen, User-Agent ist die Filterregel für User-Agent # Load Nginx [root@localhost_test_192.168.10.132 11:32:41]# nginx -s neu laden 9.7 TestergebnisseZugriff auf eine URL mit Parametern
Zusammenfassung: Nginx verwendet das Lua-Modul zur Implementierung von WAF, was sehr leistungsstark ist. Sie können den Code für die sekundäre Entwicklung ändern und ihn anpassen, um den gewünschten Effekt zu erzielen. Vielleicht möchten Sie es einmal ausprobieren. Dies ist das Ende dieses Artikels über die grundlegende Analyse, wie Nginx das Lua-Modul zur Implementierung von WAF verwendet. Weitere relevante Inhalte zur Implementierung von WAF durch Nginx finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Analyse der Methoden zur visuellen Strukturierung und Gestaltung von Kinder-Websites
>>: JavaScript erklärt die Kapselung und Verwendung von Zeitlupenanimationen
Einführung Die meisten Leute, die schon einmal Da...
Inhaltsverzeichnis 1. Konfigurieren Sie Bridging ...
Vorwort Dieser Artikel enthält 1. Mehrere wesentl...
Dieses Tag ist nicht Teil von HTML3.2 und wird nu...
1. Verwenden Sie die Tastenkombination Strg + Ums...
Sie fragen sich möglicherweise, warum Sie die Met...
So installieren und konfigurieren Sie mysql-5.7.5...
Einführung in den Lastenausgleich Bevor wir die L...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Replikationsarchitektur mit ei...
Im Prozess der Teamentwicklung ist die Formulieru...
Jeder hat schon Flipper und Ziegelsteinzertrümmer...
Ich habe vor kurzem ein kleines Programmierprojek...
Remote-Debugging von Webdiensten In .NET ist die ...
<br />Im ersten Abschnitt dieser Reihe haben...