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.