Hvordan installere ModSecurity for Nginx på Debian/Ubuntu


Det er enhver utvikleres ønske å distribuere sikre nettapplikasjoner som er sikre mot trusler. I de fleste tilfeller er dette enkelt sagt enn gjort. Frekvensen av nettsteder som blir hacket fortsetter å øke ettersom hackere fortsetter å utnytte alle angrepsvektorer de har til rådighet.

WebApp-sikkerhet kan være en stor utfordring, spesielt med utbredelsen av ondsinnede verktøy som rootkits, skannere, roboter og annen skadelig programvare. Selv om det å bli brutt kan virke et spørsmål om når hvis ikke hvis, er det fornuftig å implementere noen anstendige sikkerhetstiltak for å beskytte nettapplikasjonene dine.

Et av verktøyene som kan gi et anstendig sikkerhetsnivå mot angrep kalles ModSecurity. Dette er en gratis og åpen kildekode Brannmur for nettapplikasjoner (WAF) som beskytter nettapplikasjonene dine mot et stort utvalg av lag 7-angrep, for eksempel skripting på tvers av nettsteder ( >XSS), SQL-injeksjon, øktkapring og mange flere.

I denne veiledningen vil vi vise deg hvordan du installerer og konfigurerer ModSecurity til å fungere med Nginx på Debian-baserte Linux-distribusjoner som Ubuntu.

Trinn 1: Installer avhengigheter

For å starte installasjonen kreves en rekke programvareavhengigheter for at installasjonen skal lykkes. Men først, oppdater pakkelistene og oppdater depotene som følger.

sudo apt update

Deretter installerer du avhengighetene som følger.

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

Trinn 2: Installer siste Nginx-versjon


Det neste trinnet vil være å installere Nginx nettleseren. For å installere den nyeste versjonen, skal vi installere den fra
ondrej/nginx-mainline PPA w som for tiden blir vedlikeholdt av en Debian-utvikler siden 2000.

For å legge til PPA til ditt lokale Ubuntu-system, utfør kommandoen:

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

Oppdater deretter pakkelistene og installer den nyeste versjonen av Nginx som følger

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

Vanligvis er bare standarddepotet aktivert. Det er klokt å aktivere kildekodelageret slik at du senere kan laste ned Nginx-kildekoden i neste trinn.

For å oppnå dette, endre Nginx-depotfilen.

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

Finn og fjern kommenter denne linjen for å aktivere kildekodelageret:

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

Filen skal nå vises som vist.

Lagre endringene og avslutt.

Oppdater deretter pakkeindeksen.

sudo apt update

Trinn 3: Last ned Nginx kildepakke

For å kompilere den dynamiske modulen ModSecurity, må vi laste ned kildekodepakken Nginx. For å gjøre dette vil vi først opprette en Nginx-katalog i /usr/local/src/-banen for å imøtekomme Nginx-kildekodepakkefilen.

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

Deretter tildeler du katalogtillatelsene som vist. Pass på å erstatte brukernavnet med ditt faktiske sudo-brukernavn.

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

Deretter navigerer du inn i Nginx-kildekatalogen:

cd /usr/local/src/nginx 

Fortsett og last ned Nginx-kildefilpakkene:

sudo apt source nginx

Du vil mest sannsynlig komme inn i følgende feil:

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)

Dette er ingenting for å få deg opparbeidet. Så bare ignorer feilen.

Du kan ta en titt på kildefilen ved å bruke ls-kommandoen.

ls -l

Pass på at kildekodeversjonen sammenfaller med versjonen av Nginx som er installert.

nginx -v

Trinn 4: Installer Libmodsecurity3-biblioteket

Libmodesecurity er et Modsecurity-bibliotek som håndterer HTTP-filtrering for applikasjonene dine. Det er to måter å installere den på. Du kan bruke apt package manager som vist

sudo apt install libmodsecurity3

Den andre tilnærmingen er å installere den fra en kilde som er å foretrekke siden den gir deg den nyeste versjonen. For å starte installasjonen av Libmodsecurity fra kilden, klone git-depotet som vist:

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

Naviger inn i den klonede katalogen:

cd /usr/local/src/ModSecurity/

Gjør et poeng å installere undermodulene

sudo git submodule init
sudo git submodule update

Etterpå bygger du miljøet ved å bruke kommandoene nedenfor.

sudo ./build.sh 
sudo ./configure

Igjen, ignorer feilen som vises nedenfor.

fatal: No names found, cannot describe anything.

Kompiler deretter kildekoden og installer andre verktøy ved å bruke følgende make-kommando. Dette tar rundt 25 minutter, og det kreves litt tålmodighet.

sudo make -j4

Når du er ferdig, installer bibliotekene.

sudo make install

Trinn 5: Last ned og kompiler ModSecurity v3 Nginx Connector

Det neste trinnet er å laste ned og kompilere ModSecurity Nginx-kontakten. Koblingen, som navnet antyder, kobler Libmodsecurity-biblioteket til Nginx-nettserveren. For å laste ned Modsecurity-koblingen, klone den fra GitHub-depotet som følger.

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

Naviger inn i den klonede katalogen.

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

Fortsett og installer byggeavhengigheter

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

Deretter kompilerer du ModSecurity Nginx Connector-modulen med --with-compat-flagget. Alternativet --with-compat gjør ModSecurity Nginx Connector-modulen binærkompatibel med det gjeldende Nginx-biblioteket.

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

Når det er gjort, bygg ModSecurity Nginx Connector-modulen ved å bruke make-kommandoen.

sudo make modules

Modulen er lagret som objs/ngx_http_modsecurity_module.so. Du må kopiere denne modulen til katalogen /usr/share/nginx/modules/ som følger.

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

Trinn 6: Last inn ModSecurity Nginx Connector Module

For å laste Nginx-koblingsmodulen, gå først til hovedkonfigurasjonsfilen for Nginx.

sudo vim /etc/nginx/nginx.conf

Legg til følgende linje rett under de første linjene

load_module modules/ngx_http_modsecurity_module.so;

I tillegg legger du til følgende linjer i http {...}-delen. Dette aktiverer ModSecurity for alle virtuelle Nginx-verter.

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

Lagre endringene og avslutt filen.

Deretter oppretter du /etc/nginx/modsec/-katalogen som vil lagre ModSecurity-konfigurasjonen.

sudo mkdir /etc/nginx/modsec/

Deretter kopierer du ModSecurity-konfigurasjonsfilen som følger.

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

Åpne deretter konfigurasjonsfilen.

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

Finn linjen som begynner med SecRuleEngine-direktivet.

SecRuleEngine DetectionOnly

Denne linjen instruerer ModSecurity til å bare logge HTTP-transaksjoner, men ikke gjøre noe i møte med et nettappangrep. Du må endre dette slik at Modsecurity ikke bare oppdager, men også blokkerer nettangrep.

Endre linjen til linjen nedenfor

SecRuleEngine On

Lagre endringene og avslutt filen.

Deretter oppretter du filen /etc/nginx/modsec/main.conf.

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

Legg til denne linjen for å referere til /etc/nginx/modsec/modsecurity.conf konfigurasjonsfilen.

Include /etc/nginx/modsec/modsecurity.conf

Lagre endringene og avslutt filen.

I tillegg kopierer du Unicode-tilordningsfilen.

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

Test deretter Nginx-konfigurasjonen.

sudo nginx -t

Testen skal være vellykket. Hvis ikke, gå tilbake og sjekk om alle endringene som er gjort er riktige.

Så til slutt, start Nginx på nytt for å bruke alle endringene som er gjort.

sudo systemctl restart nginx

Og kontroller at Nginx kjører som forventet.

sudo systemctl status nginx

Trinn 7: Last ned OWASP Corerule Set

For at ModSecurity skal beskytte nettapplikasjonene dine, må du spesifisere regler som skal oppdage mistenkelige aktiviteter og blokkere dem. For å komme i gang er det å foretrekke å installere eksisterende regelsett som vil hjelpe deg å lære deg tauene.

OWASP Core Rule Set (CRS) er et gratis, åpen kildekode og fellesskap vedlikeholdt regelsett som gir regler for å avverge vanlige angrepsvektorer som SQL-injeksjon, Cross-site scripting (XSS).

Last ned OWASP Core Rule Set fra Github som vist ved å bruke wget-kommandoen.

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

Pakk ut den komprimerte filen.

tar xvf v3.3.0.tar.gz

Sørg for å flytte den ukomprimerte katalogen til /etc/nginx/modsec/ banen.

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

Gi deretter nytt navn til crs-setup.conf.example-filen til 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

Igjen, gå tilbake til ModSecurity-konfigurasjonsfilen.

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

Og legg til følgende linjer.

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

Filen skal nå ha 3 linjer:

Lagre filen og start Nginx på nytt.

sudo systemctl restart nginx

Trinn 8: Testing av ModSecurity

Til slutt skal vi utføre en test ModSecurity og bekrefte at den kan oppdage og blokkere mistenkelig HTTP-trafikk.

Vi skal redigere ModSecurity-konfigurasjonsfilen og lage en blokkeringsregel som vil blokkere tilgang til en bestemt URL når den åpnes av en nettleser.

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

Legg til denne linjen rett under SecRuleEngine On-direktivet

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

Du kan angi 'id' og 'msg'-taggene til dine foretrukne verdier.

Lagre endringene og start Nginx på nytt.

sudo systemctl restart nginx

Start nå nettleseren din og besøk URL-en nedenfor med ?testparam=test-suffikset

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

Du bør få en 403 «Forbidden»-feil. Dette indikerer at du prøver å få tilgang til en forbudt ressurs på webserveren.

I tillegg kan du sjekke Nginx-feilloggene for å bekrefte at klienten ble blokkert

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

Det var en oversikt over hvordan du kan sette opp Modsecurity med NginxDebian og Ubuntu. Vi håper at dette har vært gunstig.