Kako namestiti ModSecurity za Nginx na Debian/Ubuntu


Želja vsakega razvijalca je uvesti varne spletne aplikacije, ki so varne pred grožnjami. V večini primerov je to enostavno reči kot narediti. Pogostost vdorov na spletna mesta narašča, saj hekerji še naprej izkoriščajo vse vektorje napadov, ki so jim na voljo.

Varnost WebApp je lahko velik izziv, zlasti zaradi razširjenosti zlonamernih orodij, kot so rootkiti, skenerji, roboti in druga zlonamerna programska oprema. Čeprav se morda zdi, da je kršitev samo vprašanje, kdaj, če ne, če je, je pametno izvesti nekaj dostojnih varnostnih ukrepov za zaščito vaših spletnih aplikacij.

[ Morda vam bo všeč tudi: 5 orodij za skeniranje strežnika Linux za zlonamerno programsko opremo in rootkite ]

Eno od orodij, ki lahko zagotovi dostojno raven varnosti pred napadi, se imenuje ModSecurity. To je brezplačen in odprtokodni požarni zid spletnih aplikacij (WAF), ki ščiti vaše spletne aplikacije pred obsežno paleto napadov plasti 7, kot so skriptiranje med spletnimi mesti (XSS), injekcija SQL, ugrabitev seje in še veliko več.

V tem priročniku vam bomo pokazali, kako namestiti in konfigurirati ModSecurity za delo z Nginxom na distribucijah Linuxa, ki temeljijo na Debianu, kot je Ubuntu.

1. korak: Namestite odvisnosti

Za začetek namestitve so potrebne številne odvisnosti programske opreme, da bo namestitev uspešna. Toda najprej posodobite sezname paketov in osvežite repozitorije, kot sledi.

$ sudo apt update

Nato namestite odvisnosti, kot sledi.

$ 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

2. korak: Namestite najnovejšo različico Nginxa


Naslednji korak bo namestitev spletnega brskalnika Nginx. Za namestitev najnovejše različice jo bomo namestili iz ondrej/nginx-mainline PPA w, ki jo trenutno od leta 2000 vzdržuje razvijalec Debian.

Če želite dodati PPA v svoj lokalni sistem Ubuntu, izvedite ukaz:

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

Nato posodobite sezname paketov in namestite najnovejšo različico Nginxa, kot sledi

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

Običajno je omogočeno samo privzeto skladišče. Preudarno je omogočiti repozitorij izvorne kode, tako da lahko pozneje v naslednjem koraku prenesete izvorno kodo Nginx.

Če želite to doseči, spremenite datoteko repozitorija Nginx.

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

Poiščite in odkomentirajte to vrstico, da omogočite repozitorij izvorne kode:

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

Datoteka bi se morala zdaj prikazati, kot je prikazano.

Shranite spremembe in zapustite.

Nato posodobite indeks paketa.

$ sudo apt update

3. korak: Prenesite izvorni paket Nginx

Za prevajanje dinamičnega modula ModSecurity moramo prenesti paket izvorne kode Nginx. Da bi to naredili, bomo najprej ustvarili imenik Nginx na poti /usr/local/src/ za namestitev paketne datoteke izvorne kode Nginx.

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

Nato dodelite dovoljenja imenika, kot je prikazano. Ne pozabite zamenjati uporabniškega imena s svojim dejanskim uporabniškim imenom sudo.

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

Nato se pomaknite v izvorni imenik Nginx:

$ cd /usr/local/src/nginx 

Nadaljujte in prenesite pakete izvornih datotek Nginx:

$ sudo apt source nginx

Najverjetneje se boste znašli v naslednji napaki:

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)

To vas ne razburja. Torej preprosto prezrite napako.

Z ukazom ls si lahko ogledate izvorno datoteko.

$ ls -l

Prepričajte se, da različica izvorne kode sovpada z različico nameščenega Nginxa.

$ nginx -v

4. korak: Namestite knjižnico Libmodsecurity3

Libmodesecurity je knjižnica Modsecurity, ki upravlja s filtriranjem HTTP za vaše aplikacije. Obstajata dva načina za namestitev. Uporabite lahko upravitelja paketov apt, kot je prikazano

$ sudo apt install libmodsecurity3

Drugi pristop je, da ga namestite iz vira, ki je boljši, saj vam ponuja najnovejšo različico. Če želite začeti namestitev Libmodsecurity iz vira, klonirajte git repozitorij, kot je prikazano:

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

Pomaknite se v klonirani imenik:

$ cd /usr/local/src/ModSecurity/

Poudarite namestitev podmodulov

$ sudo git submodule init
$ sudo git submodule update

Nato zgradite okolje s spodnjimi ukazi.

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

Še enkrat prezrite spodaj prikazano napako.

fatal: No names found, cannot describe anything.

Nato prevedite izvorno kodo in namestite druge pripomočke z naslednjim ukazom make. To traja približno 25 minut in zahteva nekaj potrpljenja.

$ sudo make -j4

Ko končate, namestite knjižnice.

$ sudo make install

5. korak: Prenesite in prevedite ModSecurity v3 Nginx Connector

Naslednji korak je prenos in prevajanje priključka ModSecurity Nginx. Konektor, kot že ime pove, povezuje knjižnico Libmodsecurity s spletnim strežnikom Nginx. Če želite prenesti priključek Modsecurity, ga klonirajte iz repozitorija GitHub, kot sledi.

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

Pomaknite se v klonirani imenik.

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

Nadaljujte in namestite odvisnosti gradnje

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

Nato prevedite modul ModSecurity Nginx Connector z zastavico --with-compat. Možnost --with-compat naredi modul ModSecurity Nginx Connector binarno združljiv s trenutno knjižnico Nginx.

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

Ko je to storjeno, z ukazom make sestavite modul ModSecurity Nginx Connector.

$ sudo make modules

Modul je shranjen kot objs/ngx_http_modsecurity_module.so. Ta modul morate kopirati v imenik /usr/share/nginx/modules/, kot sledi.

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

6. korak: Naložite priključni modul ModSecurity Nginx

Če želite naložiti priključni modul Nginx, najprej odprite glavno konfiguracijsko datoteko Nginx.

$ sudo vim /etc/nginx/nginx.conf

Pripnite naslednjo vrstico tik pod prvih nekaj vrstic

load_module modules/ngx_http_modsecurity_module.so;

Poleg tega dodajte naslednje vrstice v razdelek http {...}. To omogoča ModSecurity za vse virtualne gostitelje Nginx.

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

Shranite spremembe in zaprite datoteko.

Nato ustvarite imenik /etc/nginx/modsec/, ki bo shranil konfiguracijo ModSecurity.

$ sudo mkdir /etc/nginx/modsec/

Nato kopirajte konfiguracijsko datoteko ModSecurity, kot sledi.

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

Nato odprite konfiguracijsko datoteko.

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

Poiščite vrstico, ki se začne z direktivo SecRuleEngine.

SecRuleEngine DetectionOnly

Ta vrstica naroči ModSecurity, da beleži samo transakcije HTTP, vendar ne ukrepa ob napadu spletne aplikacije. To morate spremeniti, tako da Modsecurity ne bo samo zaznal, ampak tudi blokiral spletne napade.

Spremenite vrstico v spodnjo vrstico

SecRuleEngine On

Shranite spremembe in zaprite datoteko.

Nato ustvarite datoteko /etc/nginx/modsec/main.conf.

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

Dodajte to vrstico za sklicevanje na konfiguracijsko datoteko /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Shranite spremembe in zaprite datoteko.

Poleg tega kopirajte datoteko za preslikavo Unicode.

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

Nato preizkusite konfiguracijo Nginxa.

$ sudo nginx -t

Test bi moral biti uspešen. Če ne, se vrnite nazaj in preverite, ali so vse opravljene spremembe pravilne.

Nato končno znova zaženite Nginx, da uveljavite vse narejene spremembe.

$ sudo systemctl restart nginx

In preverite, ali Nginx deluje po pričakovanjih.

$ sudo systemctl status nginx

7. korak: Prenesite OWASP Corerule Set

Da ModSecurity zaščiti vaše spletne aplikacije, morate določiti pravila, ki bodo zaznala sumljive dejavnosti in jih blokirala. Za začetek je bolje namestiti obstoječe nabore pravil, ki vam bodo pomagali pri učenju vrvi.

Osnovni nabor pravil OWASP (CRS) je brezplačen, odprtokoden in skupnostno vzdrževan nabor pravil, ki zagotavlja pravila za preprečevanje pogostih vektorjev napadov, kot so injekcija SQL, skriptiranje na več mestih (XSS).

Prenesite nabor osnovnih pravil OWASP iz Githuba, kot je prikazano z ukazom wget.

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

Ekstrahirajte stisnjeno datoteko.

$ tar xvf v3.3.0.tar.gz

Prepričajte se, da ste premaknili nestisnjen imenik na pot /etc/nginx/modsec/.

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

Nato preimenujte datoteko crs-setup.conf.example v 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

Ponovno se vrnite na konfiguracijsko datoteko ModSecurity.

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

In dodajte naslednje vrstice.

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

Datoteka naj ima zdaj 3 vrstice:

Shranite datoteko in znova zaženite Nginx.

$ sudo systemctl restart nginx

8. korak: Testiranje ModSecurity

Končno bomo izvedli test ModSecurity in potrdili, da lahko zazna in blokira sumljiv promet HTTP.

Uredili bomo konfiguracijsko datoteko ModSecurity in ustvarili pravilo za blokiranje, ki bo blokiralo dostop do določenega URL-ja, ko do njega dostopa spletni brskalnik.

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

Dodajte to vrstico tik pod direktivo SecRuleEngine On

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

Oznaki id in msg lahko nastavite na želene vrednosti.

Shranite spremembe in znova zaženite Nginx.

$ sudo systemctl restart nginx

Zdaj zaženite brskalnik in obiščite spodnji URL s pripono ?testparam=test

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

Dobiti bi morali napako 403 »Prepovedano«. To pomeni, da poskušate dostopati do prepovedanega vira na spletnem strežniku.

Poleg tega lahko preverite dnevnike napak Nginx in potrdite, da je bil odjemalec blokiran

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

[ Morda vam bo všeč tudi: Kako nastaviti ModSecurity z Apache na Debian/Ubuntu ]

To je bil pregled, kako lahko nastavite Modsecurity z Nginxom v Debianu in Ubuntuju. Upamo, da je bilo to koristno.