enable and disable modsecurity env_var

GON-3874-DD-moodle
Manuel Caballero 2022-11-22 22:05:54 +00:00 committed by Evilham
parent 8050fb4fe4
commit e6325c9618
No known key found for this signature in database
GPG Key ID: AE3EE30D970886BF
8 changed files with 56 additions and 68 deletions

28
dd-ctl
View File

@ -75,8 +75,6 @@ Generate .orig and .patch files to compare with upstream: ./dd-ctl genpatches
Start the project when stopped: ./dd-ctl up
Upgrade plugins: ./dd-ctl upgrade-plugins
Regenerate docker-compose.yml from conf: ./dd-ctl yml
Regenerate docker-compose.yml from conf: ./dd-ctl disable-waf
Regenerate docker-compose.yml from conf: ./dd-ctl enable-waf
EOF
}
@ -874,26 +872,6 @@ special_image_tags() {
done
}
enable_waf() {
# Enable waf
echo "Enable rules ModSecurity"
docker exec dd-waf-apache bash -c 'sed -i.orig -e "s/modsecurity Off/modsecurity On/" /etc/apache2/sites-available/000-default.conf'
echo "Done"
echo "Restart Apache - ModSecurity"
docker restart dd-waf-apache
echo "Done"
}
disable_waf() {
# Enable waf
echo "Disable rules ModSecurity"
docker exec dd-waf-apache bash -c 'sed -i.orig -e "s/modsecurity On/modsecurity Off/" /etc/apache2/sites-available/000-default.conf'
echo "Done"
echo "Restart Apache - ModSecurity"
docker restart dd-waf-apache
echo "Done"
}
push_images() {
#
# Note this requires docker login on the registry
@ -1008,12 +986,6 @@ case "$OPERATION" in
securize)
securize
;;
enable-waf)
enable_waf
;;
disable-waf)
disable_waf
;;
setconf)
setconf "$@"
;;

View File

@ -4,6 +4,9 @@ Instalación de los servicios Apache2 ModSecurity y HAProxy.
* En el servicio de Apache2 con ModSecurity V3 se incluyen las reglas OWASP
* En servicio HAProxy actua de frontend de la aplicación, gestiona y negocia el certificado del dominio a través de letsencrypt.
* En la instalación el ModSecurity se encuentra deshabilitado para no interferir en el proceso de setup inicial del DD.
* La instalación se puede realizar con o sin la parte WAF.
* Si tenemos instalado el WAF podemos tenerlo activo o en modo bypass
## HAProxy
@ -13,11 +16,11 @@ Podemos encontrar la configuración del servicio en [dd-waf/haproxy](dd-waf/harp
La versión por defecto que se usara en HAProxy es `haproxy:2.4.12-alpine3.15` pero podemos definir usar otra versión
definiendo el valor de la variable `HAPROXY_IMG` en nuestro fichero dd.conf
La configuración del servicio se encuentra en fichero haproxy.cfg. El fichero ya esta configurado
para enrutar todo el tráfico a través del servicio Apache2-ModSecurity.
La configuración del servicio se encuentra en fichero haproxy.cfg. Todo el tráfico que pasa por el haproxy se enruta al Apache2-ModSecurity.
El servicio de HAProxy se encarga de negociar y configurar el certicado del dominio de instalación
La comunicación externa es cifrada, pero internamente la comunción usa el protocolo http
La comunicación desde fuera del stack de la aplicación es cifrada pero internamente la comunción usa el protocolo http
## Apache - ModSecurity
@ -32,40 +35,43 @@ Tenemos diferentes ficheros para configurar este servicio
* En el fichero rules_apps.conf se configuran los falsos positivos, de las diferentes aplicaciones, que se tienen idenficados hasta el momento.
## Instalación
## Instalación WAF
Para la instalación del haproxy + modsecurity debemos que definir a `true` la variable `BEHIND_PROXY` en el fichero `dd.conf`
Podemos hacer la intalación del proyecto con o sin servico waf.
### Instalación
Para la instalación del haproxy + modsecurity debemos definir a `true` la variable `BEHIND_PROXY` en el fichero `dd.conf`
* Instalación del servicio WAF
```
BEHIND_PROXY=true
```
* No se instala el servicio WAF
```
BEHIND_PROXY=true
```
### Enable/Disable
Si tenemos instalado la parte del WAF en nuestro proyecto podemos tenerlo activo o desactivado.
* HAProxy activado
```
DISABLE_WAF=false
```
* HAProxy desactivado
```
DISABLE_WAF=true
```
### Configuración
Ahora tenemos que desplegar el modsecurity + haproxy ejecutando el comando `update` del `dd-ctl`
```
./dd-ctl update
```
## Configuración
En la instalación el ModSecurity se encuentra deshabilitado para no interferir en el proceso de setup inicial del DD.
Una vez finalizada la parte de setup, podemos activarlo o desactivarlo según necesitemos,
Se configuran los siguientes directorios como volumen para persistir la configuración.
* En el directorio [dd-waf/haproxy](dd-waf/modsecurity/rules) podemos añadir las reglas que necesitemos para excluir los falsos positivos que nos da el modsecurity. El nombre de los ficheros debe terminar en `.conf`
i* En del directorio [dd-waf/haproxy](dd-waf/modsecurity/vhosts) se encuentra el fichero de configuración del Virtual Host del Apache2
### Activar ModSecurity con las reglas OWASP
```
./dd-ctl enable_waf
```
### Desactivar ModSecurity con las reglas OWASP
```
./dd-ctl disable_waf
```

View File

@ -7,10 +7,10 @@ services:
dockerfile: Dockerfile
target: production
container_name: dd-waf-apache
env_file:
- .env
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- ${BUILD_WAF_ROOT_PATH}/docker/modsecurity/rules:/etc/apache2/modsecurity.d/dd-rules:rw
- ${BUILD_WAF_ROOT_PATH}/docker/modsecurity/vhosts:/etc/apache2/sites-available:rw
networks:
- dd_net

View File

@ -50,20 +50,18 @@ ADD crs-setup.conf /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf
# Activate ModSecurity
RUN mv /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.old
#ADD 000-default.conf /etc/apache2/sites-available/
#ADD rules_apps.conf /etc/apache2/modsecurity.d/owasp-crs/rules/000-dd-apps.conf
ADD 000-default.conf /etc/apache2/sites-available/
ADD rules_apps.conf /etc/apache2/modsecurity.d/owasp-crs/rules/000-dd-apps.conf
RUN a2enmod proxy_http
#EXPOSE 80
#USER www-data
#HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost || exit 1
CMD apachectl -D FOREGROUND
# Set and run a custom entrypoint
COPY docker-entrypoint.sh /
RUN chmod 777 /docker-entrypoint.sh && chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
# Testing ModSecurity
#curl http://<SERVER-IP/DOMAIN>/index.php?exec=/bin/bash
# TODO
# Juntas capas y reducir peso
# user no root

View File

@ -0,0 +1,10 @@
#!/bin/bash -e
set -e
if [ "$DISABLE_WAF" == "true" ]; then
sed -i.orig -e "s/modsecurity On/modsecurity Off/" /etc/apache2/sites-available/000-default.conf
else
sed -i.orig -e "s/modsecurity Off/modsecurity On/" /etc/apache2/sites-available/000-default.conf
fi
apachectl -D FOREGROUND

View File

@ -1,4 +1,3 @@
Include "/etc/apache2/modsecurity.d/modsecurity.conf"
Include "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf"
#Include "/etc/apache2/modsecurity.d/dd-rules/*.conf"
Include "/etc/apache2/modsecurity.d/owasp-crs/rules/*.conf"

View File

@ -149,6 +149,9 @@ IPA_ADMIN_PWD=freeipafreeipa
## WORKS BEHIND PROXY
BEHIND_PROXY=false
## MODSECURITY
DISABLE_WAF=true
# SOURCES & SYSTEM VARS
## MOODLE