Com instal·lar ModSecurity per a Nginx a Debian/Ubuntu


El desig de tots els desenvolupadors és desplegar aplicacions web segures que estiguin fora de perill de les amenaces. En la majoria de les ocasions, això es fa sense esforç. La freqüència dels llocs web piratejats segueix augmentant a mesura que els pirates informàtics continuen explotant tots els vectors d'atac a la seva disposició.

La seguretat d'aplicacions web pot ser un gran repte, especialment amb la prevalença d'eines malicioses com ara rootkits, escàners, robots i altres programes maliciosos. Tot i que la violació pot semblar una qüestió de quan, si no si, és prudent implementar algunes mesures de seguretat dignes per protegir les vostres aplicacions web.

[També us pot agradar: 5 eines per escanejar un servidor Linux per trobar programari maliciós i rootkits]

Una de les eines que pot proporcionar un nivell de seguretat decent contra atacs s'anomena ModSecurity. Es tracta d'un tallafoc d'aplicacions web (WAF) gratuït i de codi obert que protegeix les vostres aplicacions web d'una gran varietat d'atacs de capa 7, com ara scripting entre llocs (XSS), injecció SQL, segrest de sessions i molts més.

En aquesta guia, us mostrarem com instal·lar i configurar ModSecurity per treballar amb Nginx en distribucions Linux basades en Debian com Ubuntu.

Pas 1: instal·leu les dependències

Per començar la instal·lació, calen una sèrie de dependències de programari perquè la instal·lació tingui èxit. Però primer, actualitzeu les llistes de paquets i actualitzeu els dipòsits de la manera següent.

$ sudo apt update

A continuació, instal·leu les dependències de la manera següent.

$ 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

Pas 2: instal·leu la darrera versió de Nginx


El següent pas serà instal·lar el navegador web Nginx. Per instal·lar la darrera versió, l'instal·larem des de l'ondrej/nginx-mainline PPA w que actualment està sent mantingut per un desenvolupador de Debian des de l'any 2000.

Per afegir el PPA al vostre sistema Ubuntu local, executeu l'ordre:

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

A continuació, actualitzeu les llistes de paquets i instal·leu la darrera versió de Nginx de la següent manera

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

Normalment, només el repositori predeterminat està habilitat. És prudent habilitar el dipòsit de codi font perquè pugueu, més endavant, descarregar el codi font de Nginx al pas següent.

Per aconseguir-ho, modifiqueu el fitxer del repositori Nginx.

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

Localitzeu i descomenteu aquesta línia per habilitar el dipòsit de codi font:

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

Ara el fitxer hauria d'aparèixer tal com es mostra.

Deseu els canvis i sortiu.

A continuació, actualitzeu l'índex del paquet.

$ sudo apt update

Pas 3: descarregueu el paquet font de Nginx

Per compilar el mòdul dinàmic ModSecurity, hem de descarregar el paquet de codi font Nginx. Per fer-ho, primer, crearem un directori Nginx a la ruta /usr/local/src/ per allotjar el fitxer del paquet de codi font de Nginx.

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

A continuació, assigneu els permisos del directori tal com es mostra. Assegureu-vos de substituir el nom d'usuari pel vostre nom d'usuari sudo real.

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

A continuació, navegueu al directori font de Nginx:

$ cd /usr/local/src/nginx 

Continueu i descarregueu els paquets de fitxers font de Nginx:

$ sudo apt source nginx

El més probable és que entris en el següent error:

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)

Això no és res per fer-te treballar. Per tant, simplement ignoreu l'error.

Podeu fer una ullada al fitxer font mitjançant l'ordre ls.

$ ls -l

Assegureu-vos que la versió del codi font coincideixi amb la versió de Nginx instal·lada.

$ nginx -v

Pas 4: instal·leu la biblioteca Libmodsecurity3

Libmodesecurity és una biblioteca de Modsecurity que gestiona el filtratge HTTP per a les vostres aplicacions. Hi ha dues maneres d'instal·lar-lo. Podeu utilitzar el gestor de paquets apt tal com es mostra

$ sudo apt install libmodsecurity3

L'altre enfocament és instal·lar-lo des d'una font que és preferible ja que us proporciona la darrera versió. Per iniciar la instal·lació de Libmodsecurity des de la font, cloneu el repositori git tal com es mostra:

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

Navegueu al directori clonat:

$ cd /usr/local/src/ModSecurity/

Feu un punt per instal·lar els submòduls

$ sudo git submodule init
$ sudo git submodule update

Després, creeu l'entorn amb les ordres següents.

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

Una vegada més, ignoreu l'error que es mostra a continuació.

fatal: No names found, cannot describe anything.

A continuació, compileu el codi font i instal·leu altres utilitats mitjançant la següent comanda make. Això triga uns 25 minuts i cal una mica de paciència.

$ sudo make -j4

Un cop finalitzat, instal·leu les biblioteques.

$ sudo make install

Pas 5: Baixeu i compileu el connector Nginx de ModSecurity v3

El següent pas és descarregar i compilar el connector ModSecurity Nginx. El connector, com el seu nom indica, enllaça la biblioteca Libmodsecurity amb el servidor web Nginx. Per descarregar el connector Modsecurity, cloneu-lo des del dipòsit de GitHub de la següent manera.

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

Navegueu al directori clonat.

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

Continueu i instal·leu dependències de construcció

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

A continuació, compileu el mòdul del connector ModSecurity Nginx amb la marca --with-compat. L'opció --with-compat fa que el mòdul del connector Nginx de ModSecurity sigui compatible binari amb la biblioteca Nginx actual.

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

Un cop fet això, creeu el mòdul del connector Nginx de ModSecurity mitjançant l'ordre make.

$ sudo make modules

El mòdul es desa com a objs/ngx_http_modsecurity_module.so. Heu de copiar aquest mòdul al directori /usr/share/nginx/modules/ de la manera següent.

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

Pas 6: Carregueu el mòdul de connector ModSecurity Nginx

Per carregar el mòdul del connector Nginx, primer, accediu al fitxer de configuració principal de Nginx.

$ sudo vim /etc/nginx/nginx.conf

Afegiu la línia següent just a sota de les primeres línies

load_module modules/ngx_http_modsecurity_module.so;

A més, afegiu les línies següents a la secció http {...}. Això habilita ModSecurity per a tots els amfitrions virtuals Nginx.

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

Deseu els canvis i sortiu del fitxer.

A continuació, creeu el directori /etc/nginx/modsec/ que emmagatzemarà la configuració de ModSecurity.

$ sudo mkdir /etc/nginx/modsec/

A continuació, copieu el fitxer de configuració de ModSecurity de la manera següent.

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

A continuació, obriu el fitxer de configuració.

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

Localitzeu la línia que comença amb la directiva SecRuleEngine.

SecRuleEngine DetectionOnly

Aquesta línia indica a ModSecurity que només registri les transaccions HTTP, però no faci cap acció davant un atac d'aplicacions web. Heu de canviar-ho perquè Modsecurity no només detecti, sinó que també bloquegi els atacs web.

Canvia la línia a la línia de sota

SecRuleEngine On

Deseu els canvis i sortiu del fitxer.

A continuació, creeu el fitxer /etc/nginx/modsec/main.conf.

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

Afegiu aquesta línia per fer referència al fitxer de configuració /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Deseu els canvis i sortiu del fitxer.

A més, copieu el fitxer de mapes Unicode.

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

A continuació, proveu la configuració de Nginx.

$ sudo nginx -t

La prova ha de tenir èxit. Si no, torneu enrere i comproveu si tots els canvis realitzats són correctes.

Aleshores, finalment, reinicieu Nginx per aplicar tots els canvis realitzats.

$ sudo systemctl restart nginx

I comproveu que Nginx s'està executant com s'esperava.

$ sudo systemctl status nginx

Pas 7: descarregueu el conjunt de regles principals d'OWASP

Perquè ModSecurity protegeixi les vostres aplicacions web, heu d'especificar regles que detectaran activitats sospitoses i les bloquejaran. Per començar, és preferible instal·lar conjunts de regles existents que us ajudaran a aprendre les cordes.

El conjunt de regles bàsiques d'OWASP (CRS) és un conjunt de regles gratuït, de codi obert i mantingut per la comunitat que proporciona regles per evitar vectors d'atac comuns com ara la injecció SQL, Cross-site scripting (XSS).

Baixeu el conjunt de regles bàsiques OWASP de Github tal com es mostra amb l'ordre wget.

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

Extraieu el fitxer comprimit.

$ tar xvf v3.3.0.tar.gz

Assegureu-vos de moure el directori sense comprimir a la ruta /etc/nginx/modsec/.

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

A continuació, canvieu el nom del fitxer crs-setup.conf.example per 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

De nou, torneu al fitxer de configuració de ModSecurity.

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

I afegiu les línies següents.

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

Ara el fitxer hauria de tenir 3 línies:

Deseu el fitxer i, una vegada més, reinicieu Nginx.

$ sudo systemctl restart nginx

Pas 8: provant ModSecurity

Finalment, farem una prova de ModSecurity i confirmarem que pot detectar i bloquejar trànsit HTTP sospitós.

Editarem el fitxer de configuració de ModSecurity i crearem una regla de bloqueig que bloquejarà l'accés a un URL determinat quan hi accedeixi un navegador web.

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

Afegiu aquesta línia just a sota de la directiva SecRuleEngine On

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

Podeu configurar les etiquetes id i msg als vostres valors preferits.

Deseu els canvis i reinicieu Nginx.

$ sudo systemctl restart nginx

Ara inicieu el vostre navegador i visiteu l'URL següent amb el sufix ?testparam=test

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

Hauríeu d'obtenir un error 403 Prohibit. Això indica que esteu intentant accedir a un recurs prohibit al servidor web.

A més, podeu comprovar els registres d'errors de Nginx per confirmar que el client estava bloquejat

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

[ També us pot agradar: Com configurar ModSecurity amb Apache a Debian/Ubuntu ]

Aquesta va ser una visió general de com podeu configurar Modsecurity amb Nginx a Debian i Ubuntu. Esperem que això hagi estat profitós.