En este tutorial, le mostraré cómo compilar la última versión de Nginx con libmodsecurity (Modsecurity 3.x) que NO debe confundirse con Modsecurity 2.9. También integraremos el conjunto de reglas básicas (CRS) ModSecurity de OWASP.
Libmodsecurity es una reescritura importante de ModSecurity que ofrece un rendimiento y una estabilidad mejorados. Aunque Modsecurity 2.9.x se ofreció para diferentes plataformas, realmente favorecía la implementación con Apache y la implementación con otras plataformas requería varias dependencias de terceros a costa del rendimiento. Libmodsecurity cambia todo eso al ser una reescritura desde cero. Puede encontrar más información sobre Libmodsecurity aquí.
Esta guía asume que ya tiene una nueva instancia actualizada de Ubuntu 16.04 de 64 bits.
1. Requisitos previos de instalación
Instalar requisitos previos
apt-get install apache2-dev autoconf automake build-essential bzip2 checkinstall devscripts flex g++ gcc git graphicsmagick-imagemagick-compat graphicsmagick-libmagick-dev-compat libaio-dev libaio1 libass-dev libatomic-ops-dev libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libbz2-dev libcdio-cdda1 libcdio-paranoia1 libcdio13 libcurl4-openssl-dev libfaac-dev libfreetype6-dev libgd-dev libgeoip-dev libgeoip1 libgif-dev libgpac-dev libgsm1-dev libjack-jackd2-dev libjpeg-dev libjpeg-progs libjpeg8-dev liblmdb-dev libmp3lame-dev libncurses5-dev libopencore-amrnb-dev libopencore-amrwb-dev libpam0g-dev libpcre3 libpcre3-dev libperl-dev libpng12-dev libpng12-0 libpng12-dev libreadline-dev librtmp-dev libsdl1.2-dev libssl-dev libssl1.0.0 libswscale-dev libtheora-dev libtiff5-dev libtool libva-dev libvdpau-dev libvorbis-dev libxml2-dev libxslt-dev libxslt1-dev libxslt1.1 libxvidcore-dev libxvidcore4 libyajl-dev make openssl perl pkg-config tar texi2html unzip zip zlib1g-dev
2. Descargar ModSecurity
Clonar Git Modsecurity, pagar y compilar libmodsecurity
cd /opt/
git clone https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git checkout -b v3/master origin/v3/master
sh build.sh
git submodule init
git submodule update
./configure
make
make install
Git clona el conector Modsecurity-nginx
cd /opt/
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Ahora debería tener el siguiente directorio que contiene el conector Modsecurity-nginx
/opt/ModSecurity-nginx
3. Descargar Nginx
Descargue la última fuente estable de Nginx
Vaya a http://nginx.org/en/download.html y obtenga el enlace a la última versión estable de Nginx. En el momento de escribir este artículo, la última versión estable era nginx-1.12.0.tar.gz. Ajuste las instrucciones a continuación para su versión específica. Descargar y extraer
cd /opt
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxf nginx-1.12.0.tar.gz
cd nginx-1.12.0
4. Configurar e instalar Nginx
Configure Nginx con el conector Modsecurity-nginx e instale
./configure --user=www-data --group=www-data --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx
make
make install
El código fuente de ModSecurity que descargamos anteriormente incluye un archivo modsecurity.conf de muestra con algunas configuraciones recomendadas. Copie este archivo a la carpeta con los archivos de configuración de Nginx
cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
Cree un enlace simbólico de /usr/local/nginx/sbin/nginx a /bin/nginx
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Cree los siguientes directorios:
mkdir /usr/local/nginx/conf/sites-available
mkdir /usr/local/nginx/conf/sites-enabled
mkdir /usr/local/nginx/conf/ssl
mkdir /etc/nginx
Cree un enlace simbólico a /usr/local/nginx/conf/ssl /etc/nginx/ssl
ln -s /usr/local/nginx/conf/ssl /etc/nginx/ssl
Haga una copia de seguridad del archivo conf/nginx.conf
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.bak
Configure el archivo /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
Localice y elimine todas las entradas que comiencen con "servidor {" y terminen con la penúltima llave de cierre "}". En otras palabras, deje intacta la última llave.
Justo encima de la última llave, inserte lo siguiente. Esto le indicará a Nginx que busque las configuraciones de nuestro sitio en el directorio "/usr/local/nginx/conf/sites-enabled"
include /usr/local/nginx/conf/sites-enabled/*;
Entonces, el final del archivo debería verse como a continuación (asegúrese de que el cierre } esté presente):
include /usr/local/nginx/conf/sites-enabled/*;
}
Habilite la directiva "usuario" eliminando el prefijo "#" si está deshabilitado y asegúrese de que esté configurado para el usuario "www-data" en lugar del predeterminado "nadie" para que se vea como a continuación:
user www-data;
Guarde el archivo.
Descargue el script de inicio Nginx de Jason Giedymin para administrar el servicio nginx y configurarlo como un servicio
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults
Este script proporciona las siguientes opciones para administrar el servicio Nginx:
# service nginx start|stop|restart|force-reload|reload|status|configtest|quietupgrade|terminate|destroy
5. Instale el conjunto de reglas básicas de OWASP ModSecuirty
Git clona y copia la versión actual del conjunto de reglas y la configuración de OWASP en Nginx
cd /opt/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs/
cp -R rules/ /usr/local/nginx/conf/
cp /opt/owasp-modsecurity-crs/crs-setup.conf.example /usr/local/nginx/conf/crs-setup.conf
Configurar Nginx con OWASP ModSecuirty Core Rule Set
Edite /usr/local/nginx/conf/modsecurity.conf
vi /usr/local/nginx/conf/modsecurity.conf
Al final del archivo, pegue lo siguiente:
#Load OWASP Config
Include crs-setup.conf
#Load all other Rules
Include rules/*.conf
#Disable rule by ID from error message
#SecRuleRemoveById 920350
En su archivo modsecurity.conf de Nginx o en los archivos conf de su servidor individual, ingrese lo siguiente en los bloques de servidor o ubicación. El siguiente ejemplo muestra una combinación de agregar las entradas tanto en el servidor como en los bloques de ubicación:
server {
.....
modsecurity on;
location / {
modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
.....
}
}
Pruebe su configuración de Nginx
service nginx configtest
Si no hay errores, vuelva a cargar o reinicie su Nginx
service nginx reload
Ahora puede ver /var/log/modsec_audit.log para cualquier evento de ModSecurity
tail -f /var/log/modsec_audit.log
Si está satisfecho, edite el archivo /usr/local/nginx/conf/modsecurity.conf y configure "SecRuleEngine" de "DetectionOnly" a "On" como se muestra a continuación
SecRuleEngine On
Esto concluye esta guía.
Sobre el autor
Dino Edwards es un profesional de TI con más de 20 años de experiencia en el sector federal, estatal y privado. También se sabe que incursiona en la programación.
Tiende a escribir guías o instructivos después de terminar un proyecto en particular principalmente porque su memoria apesta y no quiere volver a inventar la rueda si tiene que hacer el mismo proyecto nuevamente.
Ponte en contacto
Sitio web del autor Seguir Correo electrónico