Kako instalirati ModSecurity za Nginx na Debian/Ubuntu


Želja svakog programera je da implementira sigurne web aplikacije koje su sigurne od prijetnji. U većini slučajeva, ovo je bez napora rečeno nego učinjeno. Učestalost hakovanih web stranica raste jer hakeri nastavljaju da iskorištavaju sve vektore napada koji su im na raspolaganju.

Sigurnost WebApp-a može biti veliki izazov, posebno s obzirom na rasprostranjenost zlonamjernih alata kao što su rootkiti, skeneri, botovi i drugi zlonamjerni softver. Iako se provaljivanje može činiti pitanjem kada ako ne ako, razumno je primijeniti neke pristojne sigurnosne mjere kako biste zaštitili svoje web aplikacije.

Jedan od alata koji može pružiti pristojan nivo sigurnosti od napada zove se ModSecurity. Ovo je besplatni i otvorenog koda Zaštitni zid za web aplikacije (WAF) koji štiti vaše web aplikacije od širokog niza napada sloja 7, kao što je skriptiranje na više lokacija (XSS), SQL injekcija, otmica sesije i još mnogo toga.

U ovom vodiču ćemo vam pokazati kako instalirati i konfigurirati ModSecurity za rad s Nginxom na Debian-baziranim Linux distribucijama kao što je Ubuntu.

Korak 1: Instalirajte ovisnosti

Da biste započeli instalaciju, potrebno je nekoliko ovisnosti o softveru da bi instalacija bila uspješna. Ali prvo, ažurirajte liste paketa i osvježite spremišta na sljedeći način.

sudo apt update

Zatim instalirajte ovisnosti na sljedeći način.

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

Korak 2: Instalirajte najnoviju verziju Nginxa


Sljedeći korak će biti instaliranje Nginx web pretraživača. Da bismo instalirali najnoviju verziju, instalirat ćemo je s
ondrej/nginx-mainline PPA w koji trenutno održava Debian programer od 2000. godine.

Da dodate PPA u vaš lokalni Ubuntu sistem, izvršite naredbu:

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

Zatim ažurirajte liste paketa i instalirajte najnoviju verziju Nginxa na sljedeći način

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

Obično je omogućeno samo podrazumevano spremište. Razborito je omogućiti spremište izvornog koda kako biste kasnije mogli preuzeti Nginx izvorni kod u sljedećem koraku.

Da biste to postigli, izmijenite datoteku spremišta Nginx.

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

Pronađite i dekomentirajte ovu liniju da omogućite spremište izvornog koda:

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

Datoteka bi se sada trebala pojaviti kao što je prikazano.

Sačuvajte promjene i izađite.

Zatim ažurirajte indeks paketa.

sudo apt update

Korak 3: Preuzmite Nginx izvorni paket

Za kompajliranje ModSecurity dinamičkog modula, moramo preuzeti Nginx paket izvornog koda. Da bismo to učinili, prvo ćemo kreirati Nginx direktorij na putu /usr/local/src/ za smještaj datoteke paketa Nginx izvornog koda.

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

Zatim dodijelite dozvole direktorija kao što je prikazano. Obavezno zamijenite korisničko ime svojim stvarnim sudo korisničkim imenom.

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

Nakon toga idite u Nginx izvorni direktorij:

cd /usr/local/src/nginx 

Nastavite i preuzmite Nginx izvorne pakete fajlova:

sudo apt source nginx

Najvjerovatnije ćete upasti u sljedeću grešku:

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)

Ovo nije ništa što bi vas uzbudilo. Dakle, jednostavno zanemarite grešku.

Možete zaviriti u izvorni fajl koristeći komandu ls.

ls -l

Uvjerite se da se verzija izvornog koda podudara s verzijom instaliranog Nginxa.

nginx -v

Korak 4: Instalirajte biblioteku Libmodsecurity3

Libmodesecurity je Modsecurity biblioteka koja upravlja HTTP filtriranjem za vaše aplikacije. Postoje dva načina da ga instalirate. Možete koristiti apt menadžer paketa kao što je prikazano

sudo apt install libmodsecurity3

Drugi pristup je da ga instalirate iz izvora koji je poželjniji jer vam pruža najnoviju verziju. Da biste pokrenuli instalaciju Libmodsecurity iz izvora, klonirajte git spremište kao što je prikazano:

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

Idite u klonirani direktorij:

cd /usr/local/src/ModSecurity/

Odredite točku za instaliranje podmodula

sudo git submodule init
sudo git submodule update

Nakon toga, izgradite okruženje koristeći naredbe ispod.

sudo ./build.sh 
sudo ./configure

Još jednom, zanemarite grešku prikazanu ispod.

fatal: No names found, cannot describe anything.

Zatim kompajlirajte izvorni kod i instalirajte druge uslužne programe koristeći sljedeću naredbu make. Ovo traje oko 25 minuta i potrebno je malo strpljenja.

sudo make -j4

Kada završite, instalirajte biblioteke.

sudo make install

Korak 5: Preuzmite i kompajlirajte ModSecurity v3 Nginx konektor

Sljedeći korak je preuzimanje i kompajliranje ModSecurity Nginx konektora. Konektor, kao što ime govori, povezuje biblioteku Libmodsecurity sa Nginx web serverom. Da biste preuzeli Modsecurity konektor, klonirajte ga iz GitHub spremišta na sljedeći način.

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

Idite u klonirani direktorij.

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

Nastavite i instalirajte ovisnosti o izgradnji

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

Zatim kompajlirajte modul ModSecurity Nginx Connector sa oznakom --with-compat. Opcija --with-compat čini modul ModSecurity Nginx konektora binarno kompatibilnim sa trenutnom Nginx bibliotekom.

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

Nakon što to učinite, napravite modul ModSecurity Nginx konektora koristeći naredbu make.

sudo make modules

Modul je sačuvan kao objs/ngx_http_modsecurity_module.so. Morate kopirati ovaj modul u /usr/share/nginx/modules/ direktorij na sljedeći način.

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

Korak 6: Učitajte modul ModSecurity Nginx konektora

Da učitate Nginx modul konektora, prvo pristupite glavnoj Nginx konfiguracijskoj datoteci.

sudo vim /etc/nginx/nginx.conf

Dodajte sljedeći red odmah ispod prvih nekoliko redova

load_module modules/ngx_http_modsecurity_module.so;

Dodatno, dodajte sljedeće redove u odjeljak http {...}. Ovo omogućava ModSecurity za sve Nginx virtuelne hostove.

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

Sačuvajte promjene i izađite iz datoteke.

Sljedeće, kreirajte /etc/nginx/modsec/ direktorij koji će pohraniti ModSecurity konfiguraciju.

sudo mkdir /etc/nginx/modsec/

Zatim kopirajte konfiguracijsku datoteku ModSecurity na sljedeći način.

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

Zatim otvorite konfiguracionu datoteku.

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

Pronađite red koji počinje SecRuleEngine direktivom.

SecRuleEngine DetectionOnly

Ova linija nalaže ModSecurity da evidentira samo HTTP transakcije, ali ne poduzima nikakve radnje u slučaju napada web aplikacije. Morate ovo promijeniti tako da Modsecurity ne samo da otkriva, već i blokira web napade.

Promijenite liniju u liniju ispod

SecRuleEngine On

Sačuvajte promjene i izađite iz datoteke.

Zatim kreirajte datoteku /etc/nginx/modsec/main.conf.

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

Dodajte ovaj red da biste referencirali /etc/nginx/modsec/modsecurity.conf konfiguracijski fajl.

Include /etc/nginx/modsec/modsecurity.conf

Sačuvajte promjene i izađite iz datoteke.

Osim toga, kopirajte Unicode datoteku za mapiranje.

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

Zatim testirajte Nginx konfiguraciju.

sudo nginx -t

Test bi trebao biti uspješan. Ako ne, vratite se i provjerite jesu li sve unesene promjene tačne.

Zatim, konačno, ponovo pokrenite Nginx da biste primijenili sve napravljene promjene.

sudo systemctl restart nginx

I provjerite da li Nginx radi kako se očekuje.

sudo systemctl status nginx

Korak 7: Preuzmite OWASP Corerule set

Da bi ModSecurity zaštitio vaše web aplikacije, morate navesti pravila koja će otkriti sumnjive aktivnosti i blokirati ih. Za početak, poželjno je instalirati postojeće skupove pravila koji će vam pomoći da naučite konopce.

OWASP osnovni skup pravila (CRS) je besplatan skup pravila otvorenog koda i održavan od zajednice koji obezbjeđuje pravila za sprječavanje uobičajenih vektora napada kao što je SQL injekcija, Cross-site scripting (XSS).

Preuzmite OWASP osnovni skup pravila sa Githuba kao što je prikazano pomoću naredbe wget.

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

Izvucite komprimiranu datoteku.

tar xvf v3.3.0.tar.gz

Obavezno premjestite nekomprimirani direktorij na stazu /etc/nginx/modsec/.

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

Zatim preimenujte datoteku crs-setup.conf.example u 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

Opet, vratite se na ModSecurity konfiguracijski fajl.

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

I dodajte sljedeće redove.

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

Fajl sada treba da ima 3 reda:

Sačuvajte datoteku i ponovo pokrenite Nginx.

sudo systemctl restart nginx

Korak 8: Testiranje ModSecurity

Konačno, izvršit ćemo test ModSecurity i potvrditi da može otkriti i blokirati sumnjivi HTTP promet.

Uredit ćemo konfiguracijsku datoteku ModSecurity i kreirati pravilo blokiranja koje će blokirati pristup određenom URL-u kada mu pristupi web pretraživač.

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

Dodajte ovaj red odmah ispod SecRuleEngine On direktive

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

Možete postaviti oznake ‘id’ i ‘msg’ na željene vrijednosti.

Sačuvajte promene i ponovo pokrenite Nginx.

sudo systemctl restart nginx

Sada pokrenite svoj pretraživač i posjetite URL ispod sa sufiksom ?testparam=test

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

Trebali biste dobiti grešku 403 ‘Zabranjeno’. Ovo ukazuje da pokušavate pristupiti zabranjenom resursu na web serveru.

Osim toga, možete provjeriti Nginx dnevnike grešaka kako biste potvrdili da je klijent blokiran

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

To je bio pregled kako možete postaviti Modsecurity sa Nginxom na Debian i Ubuntu. Nadamo se da je ovo bilo od koristi.