Debian/Ubuntu-da Nginx üçin ModSecurity-i nädip gurmaly


Howpsuzlykdan goraýan ygtybarly web programmalaryny ýerleşdirmek her bir döredijiniň islegi. Köplenç muny ýerine ýetirmekden has köp aýdylýar. Hakerleriň ygtyýaryndaky ähli hüjüm wektorlaryny ulanmagy dowam etdirýändigi sebäpli döwülýän web sahypalarynyň ýygylygy ýokarlanýar.

WebApp howpsuzlygy, esasanam kök kökleri, skanerler, botlar we beýleki zyýanly programmalar ýaly zyýanly gurallaryň ýaýramagy bilen uly kynçylyk bolup biler. Düzgün bozulmak meselesi haçan bolup biljekdigi ýa-da ýoklugy bilen baglanyşykly bolup görünse-de, web programmalaryňyzy goramak üçin käbir mynasyp howpsuzlyk çärelerini durmuşa geçirmek paýhaslydyr.

[Şeýle hem halamagyňyz mümkin: Zyýanly programma üpjünçiligi we Rootkits üçin Linux serwerini skanirlemek üçin 5 gural]

Hüjümlerden gorag derejesini üpjün edip biljek gurallaryň birine ModSecurity diýilýär. Bu mugt we açyk çeşmeli Web Programma Firewall (WAF), web programmalaryňyzy saýt skriptleri (XSS), SQL sanjym, sessiýa ogurlamak we başgalar ýaly 7 gatly hüjümlerden goraýar.

Bu gollanmada, Ubuntu ýaly Debian esasly Linux paýlamalarynda Nginx bilen işlemek üçin ModSecurity-i nädip gurmalydygyny we sazlamalydygyny görkezeris.

1-nji ädim: baglylyklary guruň

Gurmagy başlamak üçin, gurnamagyň üstünlikli bolmagy üçin birnäçe programma üpjünçiligine baglylyk talap edilýär. Firstöne ilki bilen paket sanawlaryny täzeläň we ammarlary aşakdaky ýaly täzeläň.

$ sudo apt update

Ondan soň garaşlylygy aşakdaky ýaly guruň.

$ 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-nji ädim: Iň soňky Nginx wersiýasyny guruň


Indiki ädim Nginx web brauzerini gurmak bolar. Iň soňky wersiýasyny gurmak üçin, häzirki wagtda 2000-nji ýyldan bäri Debian döredijisi tarapyndan goldanylýan ondrej/nginx-mainline PPA w-dan gurnarys.

Uberli Ubuntu ulgamyňyza PPA goşmak üçin buýrugy ýerine ýetiriň:

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

Ondan soň, paket sanawlaryny täzeläň we Nginx-iň iň soňky wersiýasyny aşakdaky ýaly guruň

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

Adatça, diňe deslapky ammar işleýär. Indiki ädimde Nginx deslapky kody göçürip alyp bilersiňiz, deslapky kod ammaryny işletmek paýhasly.

Muňa ýetmek üçin Nginx ammar faýlyny üýtgediň.

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

Çeşme kody ammaryny işletmek üçin bu setiri tapyň we açmaň:

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

Faýl indi görkezilişi ýaly görünmeli.

Üýtgeşmeleri ýazdyryň we çykyň.

Soňra paket indeksini täzeläň.

$ sudo apt update

3-nji ädim: Nginx çeşme paketini göçürip alyň

ModSecurity dinamiki modulyny düzmek üçin Nginx deslapky kod paketini göçürip almaly. Munuň üçin ilki bilen Nginx deslapky kod paket faýlyny ýerleşdirmek üçin/usr/local/src/ýolda Nginx katalogyny dörederis.

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

Ondan soň, görkezilişi ýaly katalog rugsatlaryny belläň. Ulanyjy adyny hakyky sudo ulanyjy adyňyz bilen çalyşyň.

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

Ondan soň, Nginx çeşme katalogyna geçiň:

$ cd /usr/local/src/nginx 

Nginx çeşme faýl paketlerini dowam etdiriň we göçürip alyň:

$ sudo apt source nginx

Aşakdaky ýalňyşlyga girip bilersiňiz:

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)

Bu sizi işletmek üçin hiç zat däl. Şonuň üçin ýalňyşlygy äsgermezlik ediň.

Ls buýrugyny ulanyp, çeşme faýlyna göz aýlap bilersiňiz.

$ ls -l

Çeşme kody wersiýasynyň gurnalan Nginx wersiýasyna gabat gelýändigine göz ýetiriň.

$ nginx -v

4-nji ädim: Libmodsecurity3 kitaphanasyny guruň

Libmodesecurity, programmalaryňyz üçin HTTP süzgüçini dolandyrýan Modsecurity kitaphanasydyr. Ony gurmagyň iki usuly bar. Görkezilişi ýaly apt paket dolandyryjysyny ulanyp bilersiňiz

$ sudo apt install libmodsecurity3

Beýleki çemeleşme, ony iň soňky wersiýasy bilen üpjün edýändigi üçin has amatly çeşmeden gurmakdyr. Libmodsecurity-i gurnamaga başlamak üçin git ammaryny görkezilişi ýaly klonlaň:

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

Klonlaşdyrylan kataloga geçiň:

$ cd /usr/local/src/ModSecurity/

Submodullary gurmak üçin bir nokat goýuň

$ sudo git submodule init
$ sudo git submodule update

Ondan soň aşakdaky buýruklary ulanyp daşky gurşawy guruň.

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

Aşakda görkezilen ýalňyşlygy ýene bir gezek äsgermezlik ediň.

fatal: No names found, cannot describe anything.

Soňra deslapky kody düzüň we aşakdaky make buýrugyny ulanyp beýleki kömekçi enjamlary guruň. Bu 25 minut töweregi wagt alýar we biraz sabyr gerek.

$ sudo make -j4

Gurlansoň, kitaphanalary guruň.

$ sudo make install

5-nji ädim: ModSecurity v3 Nginx birleşdirijisini göçürip alyň

Indiki ädim ModSecurity Nginx birleşdirijisini göçürip almak we düzmek. Birikdiriji, adyndan görnüşi ýaly, Libmodsecurity kitaphanasyny Nginx web serweri bilen baglanyşdyrýar. Modsecurity birleşdirijisini göçürip almak üçin ony GitHub ammaryndan aşakdaky ýaly klonlaň.

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

Klonlaşdyrylan kataloga geçiň.

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

Gurmak baglylyklaryny dowam etdiriň we guruň

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

Ondan soň, ModSecurity Nginx Connector modulyny --with-compat baýdagy bilen düzüň. --with-compat opsiýasy ModSecurity Nginx Connector modulyny häzirki Nginx kitaphanasy bilen ikili utgaşdyrýar.

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

Doneerine ýetirilenden soň, make buýrugyny ulanyp, ModSecurity Nginx Connector modulyny guruň.

$ sudo make modules

Modul objs/ngx_http_modsecurity_module.so görnüşinde saklanýar. Bu moduly aşakdaky ýaly/usr/share/nginx/modules/katalogyna göçürmeli.

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

6-njy ädim: ModSecurity Nginx birleşdiriji modulyny ýükläň

Nginx birleşdiriji modulyny ýüklemek üçin Ilki bilen esasy Nginx konfigurasiýa faýlyna giriň.

$ sudo vim /etc/nginx/nginx.conf

Aşakdaky setiri ilkinji setirleriň aşagynda goşuň

load_module modules/ngx_http_modsecurity_module.so;

Mundan başga-da, http {...} bölüminde aşakdaky setirleri goşuň. Bu, ähli Nginx wirtual öý eýeleri üçin ModSecurity-i üpjün edýär.

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

Üýtgeşmeleri ýazdyryň we faýldan çykyň.

Ondan soň, ModSecurity konfigurasiýasyny saklaýan/etc/nginx/modsec/katalogy dörediň.

$ sudo mkdir /etc/nginx/modsec/

Ondan soň, ModSecurity konfigurasiýa faýlyny aşakdaky ýaly göçüriň.

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

Soňra konfigurasiýa faýly açyň.

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

“SecRuleEngine” direktiwasy bilen başlaýan setiri tapyň.

SecRuleEngine DetectionOnly

Bu setir ModSecurity-e diňe HTTP amallaryny hasaba almagy tabşyrýar, ýöne web programmasy hüjümi sebäpli hiç hili çäre görmeýär. Modsecurity diňe bir web hüjümlerini ýüze çykarmaz ýaly, muny üýtgetmeli.

Setiri aşakdaky setire üýtgediň

SecRuleEngine On

Üýtgeşmeleri ýazdyryň we faýldan çykyň.

Ondan soň /etc/nginx/modsec/main.conf faýly dörediň.

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

Bu setiri /etc/nginx/modsec/modsecurity.conf konfigurasiýa faýlyna salgylanmak üçin goşuň.

Include /etc/nginx/modsec/modsecurity.conf

Üýtgeşmeleri ýazdyryň we faýldan çykyň.

Mundan başga-da, “Unicode” karta faýlyny göçüriň.

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

Soňra Nginx konfigurasiýasyny barlaň.

$ sudo nginx -t

Synag üstünlikli bolmaly. Notok bolsa, yza gaýdyp, edilen üýtgeşmeleriň dogrudygyny barlaň.

Soň bolsa, edilen ähli üýtgeşmeleri ulanmak üçin Nginx-i täzeden açyň.

$ sudo systemctl restart nginx

Nginx-iň garaşylyşy ýaly işleýändigini barlaň.

$ sudo systemctl status nginx

7-nji ädim: OWASP Corerule toplumyny göçürip alyň

ModSecurity web programmalaryňyzy goramak üçin şübheli çäreleri ýüze çykarjak we olary blokirlemeli düzgünleri görkezmeli. Başlamak üçin, arkanlary öwrenmäge kömek etjek bar bolan düzgün toplumlaryny gurmak has gowudyr.

OWASP esasy düzgünler toplumy (CRS) erkin, açyk çeşme we jemgyýet tarapyndan dolandyrylýan düzgünler toplumy, SQL sanjym, saýt skriptleri (XSS) ýaly umumy hüjüm wektorlaryndan goranmak düzgünlerini üpjün edýär.

WW buýrugyny ulanyp görkezilişi ýaly Github-dan OWASP esasy düzgün toplumyny göçürip alyň.

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

Gysylan faýly çykaryň.

$ tar xvf v3.3.0.tar.gz

Dykylmadyk katalogy/etc/nginx/modsec/ýoluna geçirmegi üpjün ediň.

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

Soňra crs-setup.conf.example faýlynyň adyny crs-setup.conf diýip üýtgediň.

$ sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Againene-de ModSecurity konfigurasiýa faýlyna dolan.

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

Aşakdaky setirleri goşuň.

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

Faýlda indi 3 setir bolmaly:

Faýly ýazdyryň we Nginx-i täzeden açyň.

$ sudo systemctl restart nginx

8-nji ädim: ModSecurity-i barlamak

Netijede, ModSecurity synagyny geçireris we şübheli HTTP traffigini tapyp we blokirläp biljekdigini tassyklarys.

ModSecurity konfigurasiýa faýlyny redaktirlemeli we web brauzeri gireninde belli bir URL-e girmegini bökdeýän blokirleme düzgünini dörederis.

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

Bu setiri SecRuleEngine On direktiwasynyň aşagynda goşuň

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

Id we msg belliklerini islän bahalaryňyza düzüp bilersiňiz.

Üýtgeşmeleri ýazdyryň we Nginx-i täzeden açyň.

$ sudo systemctl restart nginx

Indi brauzeriňizi işe giriziň we ? Testparam=test goşulmasy bilen aşakdaky URL-e giriň

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

403 sany Gadagan ýalňyşlyk almaly. Bu, web serwerinde gadagan çeşmä girmäge synanyşýandygyňyzy görkezýär.

Mundan başga-da, müşderiniň petiklenendigini tassyklamak üçin Nginx säwlik ýazgylaryny barlap bilersiňiz

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

[Şeýle hem halap bilersiňiz: Debian/Ubuntu-da Apache bilen ModSecurity-i nädip sazlamaly]

Bu, Debian we Ubuntu-da Nginx bilen Modsecurity-i nädip gurup boljakdygyna syn. Munuň peýdaly bolandygyna umyt edýäris.