Jinsi ya kufunga ModSecurity kwa Nginx kwenye Debian/Ubuntu


Ni hamu ya kila msanidi kupeleka programu salama za wavuti ambazo ni salama dhidi ya vitisho. Mara nyingi, hii ni rahisi kusema kuliko kufanywa. Mara kwa mara tovuti zinazodukuliwa zinaendelea kuongezeka huku wadukuzi wakiendelea kunyonya wasambazaji wote wa mashambulizi walio nao.

Usalama wa WebApp unaweza kuwa changamoto kubwa hasa kwa kuenea kwa zana hasidi kama vile rootkits, scanners, roboti na programu nyingine hasidi. Ingawa kukiukwa kunaweza kuonekana kuwa ni suala la lini ikiwa sivyo, ni busara kutekeleza baadhi ya hatua za usalama ili kulinda programu zako za wavuti.

[ Unaweza pia kupenda: Zana 5 za Kuchanganua Seva ya Linux kwa Malware na Rootkits ]

Moja ya zana zinazoweza kutoa kiwango cha usalama dhidi ya mashambulizi inaitwa ModSecurity. Hii ni Firewall ya Programu ya Wavuti isiyolipishwa na ya chanzo huria (WAF) ambayo hulinda programu zako za wavuti kutokana na safu kubwa ya mashambulizi ya safu ya 7 kama vile uandishi wa tovuti tofauti (XSS), sindano ya SQL, utekaji nyara wa kipindi, na mengine mengi.

Katika mwongozo huu, tutakuonyesha jinsi ya kusakinisha na kusanidi ModSecurity kufanya kazi na Nginx kwenye ugawaji wa Linux unaotegemea Debian kama vile Ubuntu.

Hatua ya 1: Sakinisha Vitegemezi

Ili kuanza usakinishaji, idadi ya utegemezi wa programu inahitajika ili usakinishaji ufanikiwe. Lakini kwanza, sasisha orodha za kifurushi na uonyeshe upya hazina kama ifuatavyo.

$ sudo apt update

Ifuatayo, sasisha utegemezi kama ifuatavyo.

$ 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

Hatua ya 2: Sakinisha Toleo la Hivi Punde la Nginx


Hatua inayofuata itakuwa kusakinisha kivinjari cha wavuti cha Nginx. Ili kusakinisha toleo jipya zaidi, tutalisakinisha kutoka kwa ondrej/nginx-mainline PPA w ambayo kwa sasa inadumishwa na msanidi wa Debian tangu 2000.

Ili kuongeza PPA kwenye mfumo wako wa ndani wa Ubuntu tekeleza amri:

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

Ifuatayo, sasisha orodha za vifurushi na usakinishe toleo la hivi karibuni la Nginx kama ifuatavyo

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

Kwa kawaida, hifadhi chaguomsingi pekee ndiyo imewezeshwa. Ni busara kuwezesha hazina ya msimbo wa chanzo ili uweze, baadaye, kupakua msimbo wa chanzo wa Nginx katika hatua inayofuata.

Ili kufanikisha hili, rekebisha faili ya hazina ya Nginx.

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

Tafuta na uondoe maoni kwenye laini hii ili kuwezesha hazina ya msimbo wa chanzo:

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

Faili sasa inapaswa kuonekana kama inavyoonyeshwa.

Hifadhi mabadiliko na uondoke.

Kisha sasisha faharasa ya kifurushi.

$ sudo apt update

Hatua ya 3: Pakua Kifurushi cha Chanzo cha Nginx

Ili kukusanya moduli inayobadilika ya ModSecurity, tunahitaji kupakua kifurushi cha msimbo wa chanzo cha Nginx. Ili kufanya hivyo, kwanza, tutaunda saraka ya Nginx kwenye /usr/local/src/ njia ili kushughulikia faili ya kifurushi cha msimbo wa chanzo cha Nginx.

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

Ifuatayo, toa ruhusa za saraka kama inavyoonyeshwa. Hakikisha unabadilisha jina la mtumiaji na jina lako la mtumiaji halisi la sudo.

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

Baada ya hapo, nenda kwenye saraka ya chanzo cha Nginx:

$ cd /usr/local/src/nginx 

Endelea na upakue vifurushi vya faili ya chanzo cha Nginx:

$ sudo apt source nginx

Uwezekano mkubwa zaidi utaingia kwenye makosa yafuatayo:

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)

Hili si jambo la kukufanyia kazi. Kwa hivyo, tu kupuuza kosa.

Unaweza kutazama faili ya chanzo kwa kutumia ls amri.

$ ls -l

Hakikisha kuwa toleo la msimbo wa chanzo linalingana na toleo la Nginx iliyosakinishwa.

$ nginx -v

Hatua ya 4: Sakinisha Maktaba ya Libmodsecurity3

Libmodesecurity ni maktaba ya Modsecurity ambayo hushughulikia uchujaji wa HTTP kwa programu zako. Kuna njia mbili za kuiweka. Unaweza kutumia kidhibiti cha kifurushi cha apt kama inavyoonyeshwa

$ sudo apt install libmodsecurity3

Njia nyingine ni kuisakinisha kutoka kwa chanzo ambacho ni bora kwani hukupa toleo jipya zaidi. Ili kuanza usakinishaji wa Libmodsecurity kutoka kwa chanzo, linganisha hazina ya git kama inavyoonyeshwa:

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

Nenda kwenye saraka iliyobuniwa:

$ cd /usr/local/src/ModSecurity/

Fanya hatua ya kusakinisha moduli ndogo

$ sudo git submodule init
$ sudo git submodule update

Baadaye, jenga mazingira kwa kutumia amri zilizo hapa chini.

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

Kwa mara nyingine tena, puuza hitilafu iliyoonyeshwa hapa chini.

fatal: No names found, cannot describe anything.

Kisha kusanya nambari ya chanzo na usakinishe huduma zingine kwa kutumia amri ifuatayo. Hii inachukua kama dakika 25, na uvumilivu fulani unahitajika.

$ sudo make -j4

Mara baada ya kukamilika, sakinisha maktaba.

$ sudo make install

Hatua ya 5: Pakua na Unda Kiunganishi cha ModSecurity v3 Nginx

Hatua inayofuata ni kupakua na kukusanya kiunganishi cha ModSecurity Nginx. Kiunganishi, kama jina linavyopendekeza, huunganisha maktaba ya Libmodsecurity na seva ya wavuti ya Nginx. Ili kupakua kiunganishi cha Modsecurity, Kitengeneze kutoka kwa hazina ya GitHub kama ifuatavyo.

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

Nenda kwenye saraka iliyobuniwa.

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

Endelea na usakinishe vitegemezi vya kujenga

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

Kisha, kusanya moduli ya Kiunganishi cha ModSecurity Nginx na alama ya --with-compat. Chaguo la --with-compat hufanya moduli ya ModSecurity Nginx Connector iendane na maktaba ya sasa ya Nginx.

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

Mara tu hilo likifanywa, jenga moduli ya Kiunganishi cha ModSecurity Nginx kwa kutumia make amri.

$ sudo make modules

Moduli imehifadhiwa kama objs/ngx_http_modsecurity_module.so. Unahitaji kunakili moduli hii kwa /usr/share/nginx/modules/ saraka kama ifuatavyo.

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

Hatua ya 6: Pakia Moduli ya Kiunganishi cha ModSecurity Nginx

Ili kupakia moduli ya kiunganishi cha Nginx, Kwanza, fikia faili kuu ya usanidi wa Nginx.

$ sudo vim /etc/nginx/nginx.conf

Ongeza mstari ufuatao chini ya mistari michache ya kwanza

load_module modules/ngx_http_modsecurity_module.so;

Kwa kuongeza, weka mistari ifuatayo katika sehemu ya http {...}. Hii huwezesha ModSecurity kwa wapangishi wote pepe wa Nginx.

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

Hifadhi mabadiliko na uondoke kwenye faili.

Ifuatayo, unda saraka /etc/nginx/modsec/ ambayo itahifadhi usanidi wa ModSecurity.

$ sudo mkdir /etc/nginx/modsec/

Ifuatayo, nakili faili ya usanidi wa ModSecurity kama ifuatavyo.

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

Kisha fungua faili ya usanidi.

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

Tafuta mstari unaoanza na maagizo ya SecRuleEngine.

SecRuleEngine DetectionOnly

Laini hii inaelekeza ModSecurity kuweka tu miamala ya HTTP lakini haichukui hatua yoyote kukabili mashambulizi ya programu ya wavuti. Unahitaji kubadilisha hii ili Modsecurity si tu kugundua lakini pia kuzuia mashambulizi ya mtandao.

Badilisha mstari kwa mstari ulio hapa chini

SecRuleEngine On

Hifadhi mabadiliko na uondoke kwenye faili.

Ifuatayo, unda faili /etc/nginx/modsec/main.conf.

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

Weka mstari huu kurejelea faili ya usanidi /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Hifadhi mabadiliko na uondoke kwenye faili.

Zaidi ya hayo, nakili faili ya ramani ya Unicode.

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

Kisha jaribu usanidi wa Nginx.

$ sudo nginx -t

Mtihani unapaswa kufanikiwa. Ikiwa sivyo, rudi nyuma na uangalie ikiwa mabadiliko yote yaliyofanywa ni sahihi.

Kisha mwishowe, anza tena Nginx ili kutumia mabadiliko yote yaliyofanywa.

$ sudo systemctl restart nginx

Na uhakikishe kuwa Nginx inafanya kazi kama inavyotarajiwa.

$ sudo systemctl status nginx

Hatua ya 7: Pakua OWASP Corerule Set

Ili ModSecurity ilinde programu zako za wavuti, unahitaji kubainisha sheria ambazo zitagundua shughuli za kutiliwa shaka na kuzizuia. Ili kuanza, ni vyema kusakinisha seti zilizopo za sheria ambazo zitakusaidia kujifunza kamba.

Seti ya Kanuni ya Msingi ya OWASP (CRS) ni sheria isiyolipishwa, chanzo huria na iliyodumishwa na jumuiya ambayo hutoa sheria za kuzuia vekta za mashambulizi ya kawaida kama vile sindano ya SQL, uandishi wa tovuti mbalimbali (XSS).

Pakua Seti ya Msingi ya OWASP kutoka Github kama inavyoonyeshwa kwa kutumia amri ya wget.

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

Toa faili iliyoshinikizwa.

$ tar xvf v3.3.0.tar.gz

Hakikisha kuhamisha saraka ambayo haijashinikizwa hadi /etc/nginx/modsec/ path.

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

Kisha ubadilishe jina la faili ya crs-setup.conf.example hadi 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

Tena, rudi kwenye faili ya usanidi wa ModSecurity.

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

Na weka mistari ifuatayo.

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

Faili sasa inapaswa kuwa na mistari 3:

Hifadhi faili na, kwa mara nyingine tena, anza tena Nginx.

$ sudo systemctl restart nginx

Hatua ya 8: Kujaribu ModSecurity

Hatimaye, Tutafanya mtihani wa ModSecurity na kuthibitisha kuwa inaweza kutambua na kuzuia trafiki ya HTTP inayoshukiwa.

Tutahariri faili ya usanidi wa ModSecurity na kuunda sheria ya kuzuia ambayo itazuia ufikiaji wa URL fulani inapofikiwa na kivinjari cha wavuti.

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

Ongeza laini hii chini ya maagizo ya SecRuleEngine On

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

Unaweza kuweka vitambulisho vya 'id' na 'msg' kwa maadili unayopendelea.

Hifadhi mabadiliko na uanze tena Nginx.

$ sudo systemctl restart nginx

Sasa zindua kivinjari chako na utembelee URL iliyo hapa chini kwa kiambishi tamati ?testparam=test

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

Unapaswa kupata hitilafu ya 403 'Iliyokatazwa'. Hii inaonyesha kuwa unajaribu kufikia rasilimali iliyokatazwa kwenye seva ya wavuti.

Zaidi ya hayo, unaweza kuangalia kumbukumbu za makosa ya Nginx ili kuthibitisha kuwa mteja alizuiwa

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

[Unaweza pia kupenda: Jinsi ya Kusanidi ModSecurity na Apache kwenye Debian/Ubuntu]

Huo ulikuwa muhtasari wa jinsi unavyoweza kusanidi Modsecurity na Nginx kwenye Debian na Ubuntu. Tunatumahi kuwa hii imekuwa na faida.