Wéi installéiert ModSecurity fir Nginx op Debian/Ubuntu


Et ass de Wonsch vun all Entwéckler sécher Webapplikatiounen z'installéieren déi sécher vu Gefore sinn. Op déi meescht Geleeënheeten ass dëst ouni Ustrengung gesot wéi gemaach. D'Frequenz vun de Websäiten, déi gehackt ginn, geet erop, well Hacker weiderhin all Attackvektoren ausnotzen, déi zur Verfügung stinn.

WebApp Sécherheet kann eng grouss Erausfuerderung sinn, besonnesch mat der Prävalenz vu béiswëllegen Tools wéi Rootkits, Scanner, Bots, an aner Malware. Och wann se verletzt ka schéngen wéini wann net wann, et ass virsiichteg e puer anstänneg Sécherheetsmoossnamen ëmzesetzen fir Är Webapplikatiounen ze schützen.

[ Dir kënnt och gär hunn: 5 Tools fir e Linux Server fir Malware a Rootkits ze scannen ]

Ee vun den Tools déi en anstännege Sécherheetsniveau géint Attacke kënne bidden ass ModSecurity genannt. Dëst ass eng gratis an Open-Source Web Application Firewall (WAF) déi Är Webapplikatioune schützt virun enger grousser Palette vu Layer 7 Attacke wéi Cross-Site Scripting (XSS), SQL Injektioun, Sessiounskaping, a vill méi.

An dësem Guide wäerte mir Iech weisen wéi Dir ModSecurity installéiere an konfiguréieren fir mat Nginx op Debian-baséiert Linux Verdeelungen wéi Ubuntu ze schaffen.

Schrëtt 1: Installatioun Ofhängegkeeten

Fir d'Installatioun unzefänken, sinn eng Zuel vu Softwareabhängegkeeten erfuerderlech fir d'Installatioun erfollegräich ze sinn. Awer als éischt, update d'Packagelëschten an erfrëscht d'Repositories wéi follegt.

$ sudo apt update

Als nächst installéiert d'Ofhängegkeeten wéi follegt.

$ sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev

Schrëtt 2: Installéiert déi lescht Nginx Versioun


De nächste Schrëtt ass den Nginx Webbrowser z'installéieren. Fir déi lescht Versioun z'installéieren, wäerte mir se aus dem ondrej/nginx-mainline PPA w installéieren deen am Moment vun engem Debian Entwéckler zënter 2000 erhale gëtt.

Fir de PPA op Äre lokalen Ubuntu System ze addéieren, fuert de Kommando aus:

$ sudo add-apt-repository ppa:ondrej/nginx-mainline -y

Als nächst, update d'Packagelëschten an installéiert déi lescht Versioun vun Nginx wéi follegt

$ sudo apt update
$ sudo apt install nginx-core nginx-common nginx nginx-full

Typesch ass nëmmen de Standardrepository aktivéiert. Et ass virsiichteg de Quellcode-Repository z'aktivéieren, sou datt Dir spéider den Nginx Quellcode am nächste Schrëtt erofluede kënnt.

Fir dëst z'erreechen, ännert d'Nginx Repository Datei.

$ sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list

Situéiert an decommentéiert dës Linn fir de Quellcode-Repository z'aktivéieren:

# deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main

D'Datei soll elo erschéngen wéi gewisen.

Späichert d'Ännerungen a gitt eraus.

Update dann de Package Index.

$ sudo apt update

Schrëtt 3: Download Nginx Source Package

Fir den ModSecurity dynamesche Modul ze kompiléieren, musse mir den Nginx Quellcode Package eroflueden. Fir dëst ze maachen, wäerte mir als éischt en Nginx Verzeichnis am /usr/local/src/ Wee erstellen fir d'Nginx Quellcode Package Datei z'empfänken.

$ sudo mkdir -p /usr/local/src/nginx 

Als nächst gitt d'Verzeichnis Permissiounen wéi gewisen. Gitt sécher de Benotzernumm mat Ärem aktuellen sudo Benotzernumm ze ersetzen.

$ sudo chown username:username -R /usr/local/src/

Duerno, navigéiert an den Nginx Quellverzeechnes:

$ cd /usr/local/src/nginx 

Fuert weider a luet d'Nginx Quelldatei Packagen erof:

$ sudo apt source nginx

Dir wäert héchstwahrscheinlech an de folgende Feeler kommen:

W: Download is performed unsandboxed as root as file 'nginx_1.19.5.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Dëst ass näischt fir Iech ze schaffen. Also ignoréiert einfach de Feeler.

Dir kënnt e Bléck op d'Quelldatei hunn mam ls Kommando.

$ ls -l

Gitt sécher datt d'Quellcode Versioun mat der Versioun vum Nginx installéiert ass.

$ nginx -v

Schrëtt 4: Installéiert d'Libmodsecurity3 Bibliothéik

Libmodesecurity ass eng Modsecurity Bibliothéik déi HTTP Filteren fir Är Uwendungen handhabt. Et ginn zwou Méiglechkeeten et z'installéieren. Dir kënnt den apt Package Manager benotzen wéi gewisen

$ sudo apt install libmodsecurity3

Déi aner Approche ass et aus enger Quell z'installéieren déi léiwer ass well et Iech déi lescht Versioun gëtt. Fir d'Installatioun vu Libmodsecurity vun der Quell unzefänken, klon de Git Repository wéi gewisen:

$ git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

Navigéiert an de gekloonten Verzeichnis:

$ cd /usr/local/src/ModSecurity/

Maacht e Punkt fir d'Submodulen z'installéieren

$ sudo git submodule init
$ sudo git submodule update

Duerno baut d'Ëmfeld mat de Kommandoen hei drënner.

$ sudo ./build.sh 
$ sudo ./configure

Nach eng Kéier, ignoréiert de Feeler hei ënnen ugewisen.

fatal: No names found, cannot describe anything.

Dann kompiléiert de Quellcode an installéiert aner Utilitys mat dem folgenden Make Kommando. Dëst dauert ongeféier 25 Minutten, an e bësse Gedold ass néideg.

$ sudo make -j4

Eemol fäerdeg, installéiert d'Bibliothéiken.

$ sudo make install

Schrëtt 5: Luet a kompiléiert ModSecurity v3 Nginx Connector

De nächste Schrëtt ass den ModSecurity Nginx Connector erofzelueden an ze kompiléieren. De Connector, wéi den Numm et scho seet, verbënnt d'Libmodsecurity Bibliothéik op den Nginx Webserver. Fir de Modsecurity Connector erofzelueden, klon et aus dem GitHub Repository wéi follegt.

$ git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Navigéiert an de gekloonten Verzeichnis.

$ cd /usr/local/src/nginx/nginx-1.21.3/

Fuert weider an installéiert Build Ofhängegkeeten

$ sudo apt build-dep nginx
$ sudo apt install uuid-dev

Als nächst kompiléiert de ModSecurity Nginx Connector Modul mam --with-compat Fändel. D'Optioun --with-compat mécht de ModSecurity Nginx Connector Modul binär-kompatibel mat der aktueller Nginx Bibliothéik.

$ sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Wann dat gemaach ass, baut de ModSecurity Nginx Connector Modul mam Make Kommando.

$ sudo make modules

De Modul gëtt als objs/ngx_http_modsecurity_module.so gespäichert. Dir musst dëse Modul an den /usr/share/nginx/modules/ Verzeechnes kopéieren wéi follegt.

$ sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Schrëtt 6: Lued de ModSecurity Nginx Connector Modul

Fir den Nginx Connector Modul ze lueden, Als éischt gitt op d'Haapt Nginx Konfiguratiounsdatei.

$ sudo vim /etc/nginx/nginx.conf

Fëllt déi folgend Linn just ënner den éischte puer Zeilen

load_module modules/ngx_http_modsecurity_module.so;

Zousätzlech, fügen déi folgend Zeilen an der http {...} Sektioun. Dëst erméiglecht ModSecurity fir all Nginx virtuelle Hosten.

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

Späichert d'Ännerungen a gitt d'Datei aus.

Als nächst, erstellt den /etc/nginx/modsec/ Verzeichnis deen d'ModSecurity Konfiguratioun späichert.

$ sudo mkdir /etc/nginx/modsec/

Als nächst kopéiert d'ModSecurity Konfiguratiounsdatei wéi follegt.

$ sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Da öffnen d'Konfiguratiounsdatei.

$ sudo vim /etc/nginx/modsec/modsecurity.conf

Situéiert der Linn mat der SecRuleEngine Direktiv ufänken.

SecRuleEngine DetectionOnly

Dës Linn instruéiert ModSecurity nëmmen HTTP Transaktiounen ze protokolléieren, awer hëlt keng Handlung am Gesiicht vun engem Web App Attack. Dir musst dëst änneren fir datt Modsecurity net nëmmen Webattacken erkennt, awer och blockéiert.

Ännert d'Linn op d'Linn hei ënnen

SecRuleEngine On

Späichert d'Ännerungen a gitt d'Datei aus.

Als nächst erstellt d'Datei /etc/nginx/modsec/main.conf.

$ sudo vim  /etc/nginx/modsec/main.conf

Fügt dës Linn un fir d'Konfiguratiounsdatei /etc/nginx/modsec/modsecurity.conf ze referenzéieren.

Include /etc/nginx/modsec/modsecurity.conf

Späichert d'Ännerungen a gitt d'Datei aus.

Zousätzlech kopéiert d'Unicode Mapping Datei.

$ sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Test dann d'Nginx Konfiguratioun.

$ sudo nginx -t

Den Test soll erfollegräich sinn. Wann net, gitt zréck a kontrolléiert ob all d'Ännerunge richteg sinn.

Dann endlech, Nginx nei starten fir all d'Ännerungen anzesetzen.

$ sudo systemctl restart nginx

A verifizéiert datt Nginx leeft wéi erwaart.

$ sudo systemctl status nginx

Schrëtt 7: Download OWASP Corerule Set

Fir ModSecurity fir Är Webapplikatiounen ze schützen, musst Dir Reegele spezifizéieren déi verdächteg Aktivitéiten entdecken an se blockéieren. Fir unzefänken, ass et léiwer existent Regelsets z'installéieren déi Iech hëllefen d'Seeler ze léieren.

Den OWASP Core Rule Set (CRS) ass e gratis, Open-Source, a Gemeinschaftserhaltege Regelset, dee Reegele ubitt fir allgemeng Attackvektore wéi SQL Injektioun, Cross-Site Scripting (XSS) ofzewieren.

Luet den OWASP Core Rule Set vu Github erof wéi mat dem wget Kommando gewisen.

$ wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

Extrait déi kompriméiert Datei.

$ tar xvf v3.3.0.tar.gz

Vergewëssert Iech den onkompriméierten Verzeechnes op de /etc/nginx/modsec/ Wee ze réckelen.

$ sudo mv coreruleset-3.3.0/ /etc/nginx/modsec/

Dann ëmbenennen d'crs-setup.conf.example Datei op crs-setup.conf.

$ sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Erëm, gitt zréck op d'ModSecurity Konfiguratiounsdatei.

$ sudo vim /etc/nginx/modsec/main.conf

An bäidréit déi folgend Zeilen.

Include /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf

De Fichier soll elo 3 Zeilen hunn:

Späichert d'Datei an, nach eng Kéier, Nginx nei starten.

$ sudo systemctl restart nginx

Schrëtt 8: Testen aus ModSecurity

Schlussendlech wäerte mir en Test ModSecurity ausféieren a bestätegen datt et verdächteg HTTP-Traffic erkennen a blockéiere kann.

Mir wäerten d'ModSecurity Konfiguratiounsdatei änneren an eng Blockéierungsregel erstellen déi den Zougang zu enger bestëmmter URL blockéiert wann se vun engem Webbrowser zougänglech sinn.

$ sudo vim /etc/nginx/modsec/modsecurity.conf

Füügt dës Linn just ënner der SecRuleEngine On Direktiv

SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

Dir kënnt d''ID' an 'msg' Tags op Är gewënschte Wäerter setzen.

Späichert d'Ännerungen a restart Nginx.

$ sudo systemctl restart nginx

Start elo Äre Browser a besicht d'URL hei ënnen mam ?testparam=test Suffix

http://server-ip/?testparam=test

Dir sollt e 403 'Verbueden' Feeler kréien. Dëst weist datt Dir probéiert Zougang zu enger verbuedener Ressource um Webserver ze kréien.

Zousätzlech kënnt Dir d'Nginx Fehlerprotokoller iwwerpréiwen fir ze bestätegen datt de Client blockéiert gouf

$ cat /var/log/nginx/error.log | grep "Test Successful"

[ Dir kënnt och gär hunn: Wéi ModSecurity mat Apache op Debian/Ubuntu opzestellen]

Dat war en Iwwerbléck iwwer wéi Dir Modsecurity mat Nginx op Debian an Ubuntu opstellt. Mir hoffen, datt dëst profitéiert huet.