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 Nginx på Debian og Ubuntu. Vi håper at dette har vært gunstig.