Giunsa ang Pag-install sa ModSecurity alang sa Nginx sa Debian/Ubuntu


Ang tinguha sa matag developer nga mag-deploy og luwas nga mga aplikasyon sa web nga luwas gikan sa mga hulga. Sa kadaghanan nga mga okasyon, kini wala’y mahimo nga gisulti kaysa nahimo. Ang kasubsob sa mga website nga gi-hack nagpadayon sa pagtaas samtang ang mga hacker nagpadayon sa pagpahimulos sa tanan nga mga vector sa pag-atake nga ilang magamit.

Ang seguridad sa WebApp mahimong usa ka dako nga hagit labi na sa pagkaylap sa mga makadaot nga himan sama sa mga rootkit, scanner, bot, ug uban pang malware. Bisan kung ang pagkalapas mahimo’g usa ka butang kung kanus-a kung dili kung, mabinantayon nga ipatuman ang pipila nga mga disente nga lakang sa seguridad aron mapanalipdan ang imong mga aplikasyon sa web.

[ Tingali ganahan ka usab: 5 Mga Himan sa Pag-scan sa Linux Server alang sa Malware ug Rootkits ]

Usa sa mga himan nga makahatag usa ka desente nga lebel sa seguridad batok sa mga pag-atake gitawag nga ModSecurity. Kini usa ka libre ug bukas nga gigikanan nga Web Application Firewall (WAF) nga nanalipod sa imong mga aplikasyon sa web gikan sa daghang mga pag-atake sa layer 7 sama sa cross-site scripting (XSS), SQL injection, session hijacking, ug daghan pa.

Sa kini nga giya, ipakita namon kanimo kung giunsa ang pag-install ug pag-configure sa ModSecurity aron magtrabaho kauban ang Nginx sa mga distribusyon sa Linux nga nakabase sa Debian sama sa Ubuntu.

Lakang 1: I-install ang Dependencies

Aron masugdan ang pag-instalar, gikinahanglan ang daghang mga dependency sa software aron magmalampuson ang pag-instalar. Apan una, i-update ang mga lista sa package ug i-refresh ang mga repository sama sa mosunod.

$ sudo apt update

Sunod, i-install ang mga dependency sama sa mosunod.

$ 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

Lakang 2: I-install ang Pinakabag-ong Bersyon sa Nginx


Ang sunod nga lakang mao ang pag-install sa Nginx web browser. Aron ma-install ang pinakabag-o nga bersyon, among i-install kini gikan sa ondrej/nginx-mainline PPA w nga karon gipadayon sa usa ka developer sa Debian sukad 2000.

Aron idugang ang PPA sa imong lokal nga sistema sa Ubuntu ipatuman ang mando:

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

Sunod, i-update ang mga lista sa package ug i-install ang pinakabag-o nga bersyon sa Nginx sama sa mosunod

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

Kasagaran, ang default repository lamang ang gipagana. Maalamon nga mahimo ang repository sa source code aron mahimo nimo, sa ulahi, i-download ang Nginx source code sa sunod nga lakang.

Aron makab-ot kini, usba ang Nginx repository file.

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

Pangitaa ug i-uncomment kini nga linya aron mahimo ang source code repository:

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

Ang file kinahanglan nga makita karon sama sa gipakita.

I-save ang mga pagbag-o ug paggawas.

Dayon i-update ang package index.

$ sudo apt update

Lakang 3: Pag-download sa Nginx Source Package

Aron ma-compile ang dinamikong module sa ModSecurity, kinahanglan namon nga i-download ang Nginx source code package. Aron mahimo kini, una, maghimo kami usa ka direktoryo sa Nginx sa/usr/local/src/nga agianan aron ma-accommodate ang Nginx source code package file.

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

Sunod, itudlo ang mga permiso sa direktoryo sama sa gipakita. Siguroha nga ilisan ang username sa imong aktuwal nga sudo username.

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

Pagkahuman, pag-navigate sa direktoryo sa gigikanan sa Nginx:

$ cd /usr/local/src/nginx 

Ipadayon ug i-download ang Nginx source file packages:

$ sudo apt source nginx

Lagmit makasulod ka sa mosunod nga sayop:

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)

Kini walay bisan unsa aron ikaw motrabaho. Busa, ibaliwala lang ang sayop.

Mahimo nimong tan-awon ang source file gamit ang ls command.

$ ls -l

Siguroha nga ang bersyon sa source code motakdo sa bersyon sa Nginx nga na-install.

$ nginx -v

Lakang 4: I-install ang Libmodsecurity3 Library

Ang Libmodesecurity usa ka librarya sa Modsecurity nga nagdumala sa pagsala sa HTTP alang sa imong mga aplikasyon. Adunay duha ka paagi sa pag-instalar niini. Mahimo nimong gamiton ang apt package manager sama sa gipakita

$ sudo apt install libmodsecurity3

Ang uban nga pamaagi mao ang pag-instalar niini gikan sa usa ka tinubdan nga mas maayo tungod kay kini naghatag kanimo sa pinakabag-o nga bersyon. Aron masugdan ang pag-install sa Libmodsecurity gikan sa gigikanan, i-clone ang git repository sama sa gipakita:

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

Pag-navigate sa gi-clone nga direktoryo:

$ cd /usr/local/src/ModSecurity/

Paghimo usa ka punto aron i-install ang mga submodules

$ sudo git submodule init
$ sudo git submodule update

Pagkahuman, paghimo sa palibot gamit ang mga mando sa ubos.

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

Sa makausa pa, ibaliwala ang sayup nga gipakita sa ubos.

fatal: No names found, cannot describe anything.

Dayon i-compile ang source code ug i-install ang ubang mga utilities gamit ang mosunod nga make command. Nagkinahanglan kini og mga 25 minutos, ug gikinahanglan ang pipila ka pailub.

$ sudo make -j4

Kung nahuman na, i-install ang mga librarya.

$ sudo make install

Lakang 5: Pag-download ug Pag-compile sa ModSecurity v3 Nginx Connector

Ang sunod nga lakang mao ang pag-download ug pag-compile sa ModSecurity Nginx connector. Ang connector, sumala sa gisugyot sa ngalan, nagsumpay sa Libmodsecurity library ngadto sa Nginx webserver. Aron ma-download ang Modsecurity connector, I-clone kini gikan sa GitHub repository sama sa mosunod.

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

Pagdala ngadto sa cloned nga direktoryo.

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

Ipadayon ug i-install ang mga dependency sa pagtukod

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

Sunod, i-compile ang ModSecurity Nginx Connector module nga adunay --with-compat nga bandera. Ang --with-compat nga opsyon naghimo sa ModSecurity Nginx Connector module nga binary-compatible sa kasamtangan nga Nginx library.

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

Kung nahuman na kana, paghimo sa ModSecurity Nginx Connector module gamit ang make command.

$ sudo make modules

Ang module gitipigan isip objs/ngx_http_modsecurity_module.so. Kinahanglan nimong kopyahon kini nga module sa /usr/share/nginx/modules/ directory sama sa mosunod.

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

Lakang 6: I-load ang ModSecurity Nginx Connector Module

Aron ma-load ang Nginx connector module, Una, i-access ang main Nginx configuration file.

$ sudo vim /etc/nginx/nginx.conf

Idugang ang mosunod nga linya ubos lang sa unang pipila ka linya

load_module modules/ngx_http_modsecurity_module.so;

Dugang pa, idugang ang mosunod nga mga linya sa http {...} nga seksyon. Gitugotan niini ang ModSecurity alang sa tanan nga mga virtual host sa Nginx.

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

I-save ang mga pagbag-o ug paggawas sa file.

Sunod, paghimo sa/etc/nginx/modsec/direktoryo nga magtipig ModSecurity configuration.

$ sudo mkdir /etc/nginx/modsec/

Sunod, kopyaha ang ModSecurity configuration file sama sa mosunod.

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

Unya ablihi ang configuration file.

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

Pangitaa ang linya nga nagsugod sa SecRuleEngine nga direktiba.

SecRuleEngine DetectionOnly

Kini nga linya nagtudlo sa ModSecurity sa pag-log lamang sa mga transaksyon sa HTTP apan walay aksyon atubangan sa pag-atake sa web app. Kinahanglan nimo nga usbon kini aron ang Modsecurity dili lamang makamatikod apan makapugong usab sa mga pag-atake sa web.

Usba ang linya sa linya sa ubos

SecRuleEngine On

I-save ang mga pagbag-o ug paggawas sa file.

Sunod, paghimo sa /etc/nginx/modsec/main.conf file.

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

Idugang kini nga linya sa paghisgot sa /etc/nginx/modsec/modsecurity.conf configuration file.

Include /etc/nginx/modsec/modsecurity.conf

I-save ang mga pagbag-o ug paggawas sa file.

Dugang pa, kopyaha ang Unicode mapping file.

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

Dayon sulayi ang configuration sa Nginx.

$ sudo nginx -t

Ang pagsulay kinahanglan nga malampuson. Kung dili, balik ug susiha kung husto ba ang tanan nga mga pagbag-o nga gihimo.

Unya sa katapusan, i-restart ang Nginx aron magamit ang tanan nga mga pagbag-o nga gihimo.

$ sudo systemctl restart nginx

Ug pamatud-i nga ang Nginx nagdagan sama sa gipaabut.

$ sudo systemctl status nginx

Lakang 7: I-download ang OWASP Corerule Set

Aron mapanalipdan sa ModSecurity ang imong mga aplikasyon sa web, kinahanglan nimong itakda ang mga lagda nga makit-an ang mga kadudahang kalihokan ug babagan kini. Aron makasugod, mas maayo nga i-install ang naglungtad nga mga set sa lagda nga makatabang kanimo nga makat-on sa mga pisi.

Ang OWASP Core Rule Set (CRS) kay usa ka libre, open-source, ug community-maintained rule set nga naghatag ug mga lagda aron likayan ang mga common attack vectors sama sa SQL injection, Cross-site scripting (XSS).

I-download ang OWASP Core Rule Set gikan sa Github sama sa gipakita gamit ang wget command.

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

Kuhaa ang compressed file.

$ tar xvf v3.3.0.tar.gz

Siguruha nga ibalhin ang wala ma-compress nga direktoryo sa /etc/nginx/modsec/ path.

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

Unya ilisan ang ngalan sa crs-setup.conf.example file ngadto sa 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

Pag-usab, balik sa ModSecurity configuration file.

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

Ug idugang ang mosunod nga mga linya.

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

Ang file kinahanglan nga adunay 3 ka linya:

I-save ang file ug, sa makausa pa, i-restart ang Nginx.

$ sudo systemctl restart nginx

Lakang 8: Pagsulay sa ModSecurity

Sa katapusan, Maghimo kami usa ka pagsulay nga ModSecurity ug kumpirmahon nga kini makamatikod ug makapugong sa kadudahang trapiko sa HTTP.

Atong usbon ang ModSecurity configuration file ug maghimo ug blocking rule nga mobabag sa access sa usa ka URL kung ma-access sa web browser.

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

Idugang kini nga linya ubos lang sa SecRuleEngine On direktiba

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

Mahimo nimong itakda ang mga tag nga 'id' ug 'msg' sa imong gusto nga mga kantidad.

I-save ang mga pagbag-o ug i-restart ang Nginx.

$ sudo systemctl restart nginx

Karon ilunsad ang imong browser ug bisitaha ang URL sa ubos gamit ang ?testparam=test suffix

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

Kinahanglan nga makakuha ka usa ka 403 nga 'Gidili' nga sayup. Kini nagpakita nga ikaw naningkamot sa pag-access sa usa ka gidili nga kapanguhaan sa webserver.

Dugang pa, mahimo nimong susihon ang mga log sa sayup sa Nginx aron makumpirma nga gibabagan ang kliyente

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

[ Tingali ganahan ka usab: Giunsa ang Pag-set Up sa ModSecurity sa Apache sa Debian/Ubuntu]

Kana usa ka kinatibuk-an nga pagtan-aw kung giunsa nimo ma-set up ang Modsecurity sa Nginx sa Debian ug Ubuntu. Kami nanghinaut nga kini nakabenepisyo.