WAF

Vamos a configurar un nodo para los WAF, esta configuración solo la tendremos que replicar con tantos nodos como queramos y añadirlos al HAProxy en la sección bk_waf para que la granja crezca según nuestras necesidades.

Instalamos apache

apt install apache2

Instalamos ModSecurity

apt install libapache2-mod-security2

Reiniciamos apache para cargar el modulo

service apache2 restart

Comprobamos que el modulo se cargo correctamente

apachectl -M | grep security

Y deberíamos que obtener el siguiente resultado

security2_module (shared)

Ahora que ya tenemos tanto apache como modsecurity instalado y cargado vamos a proceder a configurarlo.

cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Editamos la configuración recomendada para que en vez de detectar nos pare los ataques.

vim /etc/modsecurity/modsecurity.conf

Cambiado el valor SecRuleEngine de DetectionOnly a On

SecRuleEngine = On

ModSecurity tiene un conjunto de reglas predeterminado ubicado en el directorio /usr/share/modsecurity-crs . Sin embargo, nosotros vamos a cargar las reglas de OWASP

Hacemos copia de seguridad de las reglas

mv /usr/share/modsecurity-crs /usr/share/modsecurity-crs.bk

Descargamos las nuevas reglas

git clone https://github.com/coreruleset/coreruleset.git /usr/share/modsecurity-crs

Copiamos la configuración por defecto de las reglas descargas

cp /usr/share/modsecurity-crs/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf

Para que las reglas funcionen tenemos que editar el fichero

vim /etc/apache2/mods-enabled/security2.conf

Y añadir las dos siguientes lineas

IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/rules/*.conf

Estamos cargando un monto de reglas por defecto que seguramente no necesitaremos por lo que ahora tendríamos que adaptarlos a las aplicaciones que vayan a correr en nuestro cluster.

Una vez que que tenemos nuestro WAF vamos a configurarlo para que funcione como proxy reverso y escuche las peticiones de los HAPRoxys y se las devuelva.

Lo primero que hacemos es cambiar el puerto en el que escuchamos del 80 al 81

vim /etc/apache2/ports.conf

y dejamos el Listen de la siguiente manera

Listen 81

Activamos el módulos de proxy de apache

a2enmod proxy
a2enmod proxy_http

Ahora vamos a configurar el VirtualHost por defecto para que haga de proxy reverso

vim /etc/apache2/sites-enabled/000-default.conf

Quedando de la siguiente manera, poniendo en IP_WAF la ip interna de dicho servidor en el VRack y en XXX.XXX.XXX.XXX la ip flotante interna que configuramos en el keepalived

<VirtualHost IP_WAF:81>

        ServerAlias *
        AddDefaultCharset UTF-8

        ProxyPreserveHost On
        ProxyRequests off
        ProxyVia Off
        ProxyPass / http://XXX.XXX.XXX.XXX:82/
        ProxyPass /server-status !
        ProxyPassReverse / http://XXX.XXX.XXX.XXX:82/

</VirtualHost>

Eliminar el banner de la versión del servidor

Apache por defecto nos muestra en las peticiones su versión y el sistema operativo en el que esta corriendo.

Vamos a ocultar las versiones y el sistema operativo de nuestro servidor para dar la menor información posible a los atacantes, para ello editamos el siguiente fichero

vim /etc/apache2/conf-available/security.conf

Dejando los siguiente valores de esta manera

ServerTokens Prod

ServerSignature Off

Healthchecks para HAProxy

Ahora tenemos que agregar una regla personalizada para que el HAProxy sepa que nuestros WAF están vivos, para ello creamos el fichero

vim /usr/share/modsecurity-crs/rules/aloha.conf

con el siguiente contenido

SecRule REQUEST_FILENAME "/waf_health_check" "phase:2,id:9999,deny,nolog,noauditlog,ctl:auditEngine=Off"

Ya solo nos queda reiniciar apache para cargar todos los cambios y nuestro primer WAF de la granja estaría listo

systemctl restart apache2

Para que la gente no se pueda conectar por la ip publica al puerto 81, dado que al no tener dominio luego no sabría donde ir.

iptables -A INPUT -i {interface} -p tcp --destination-port 81 -j DROP

Como las iptables si se reinicia el equipo se pierden y no queremos estar agregándolas manualmente vamos a instalar el paquete iptables-persistent

apt install iptables-persistent

Las configuraciones se guardan en estos dos ficheros

/etc/iptables/rules.v4

/etc/iptables/rules.v6

Si hacemos algún cambio a las iptables nos tenemos que acordar de guardarlas

iptables-save > /etc/iptables/rules.v4

iptables-save > /etc/iptables/rules.v6

Última actualización