From e6325c9618bf8449904c469dfa4393cc249093d9 Mon Sep 17 00:00:00 2001 From: Manuel Caballero Date: Tue, 22 Nov 2022 22:05:54 +0000 Subject: [PATCH] enable and disable modsecurity env_var --- dd-ctl | 28 -------- dd-waf/README.md | 64 ++++++++++--------- dd-waf/docker-compose-parts/modsecurity.yml | 4 +- .../modsecurity/{vhosts => }/000-default.conf | 0 dd-waf/docker/modsecurity/Dockerfile | 14 ++-- .../docker/modsecurity/docker-entrypoint.sh | 10 +++ dd-waf/docker/modsecurity/modsec_rules.conf | 1 - dd.conf.sample | 3 + 8 files changed, 56 insertions(+), 68 deletions(-) rename dd-waf/docker/modsecurity/{vhosts => }/000-default.conf (100%) create mode 100644 dd-waf/docker/modsecurity/docker-entrypoint.sh diff --git a/dd-ctl b/dd-ctl index bfd1d1b..3907528 100755 --- a/dd-ctl +++ b/dd-ctl @@ -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 "$@" ;; diff --git a/dd-waf/README.md b/dd-waf/README.md index 1bc16f9..cb4f6d0 100644 --- a/dd-waf/README.md +++ b/dd-waf/README.md @@ -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 -``` diff --git a/dd-waf/docker-compose-parts/modsecurity.yml b/dd-waf/docker-compose-parts/modsecurity.yml index e8bc814..aac51d7 100644 --- a/dd-waf/docker-compose-parts/modsecurity.yml +++ b/dd-waf/docker-compose-parts/modsecurity.yml @@ -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 diff --git a/dd-waf/docker/modsecurity/vhosts/000-default.conf b/dd-waf/docker/modsecurity/000-default.conf similarity index 100% rename from dd-waf/docker/modsecurity/vhosts/000-default.conf rename to dd-waf/docker/modsecurity/000-default.conf diff --git a/dd-waf/docker/modsecurity/Dockerfile b/dd-waf/docker/modsecurity/Dockerfile index fd4203e..48c4a79 100644 --- a/dd-waf/docker/modsecurity/Dockerfile +++ b/dd-waf/docker/modsecurity/Dockerfile @@ -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:///index.php?exec=/bin/bash - -# TODO -# Juntas capas y reducir peso -# user no root - diff --git a/dd-waf/docker/modsecurity/docker-entrypoint.sh b/dd-waf/docker/modsecurity/docker-entrypoint.sh new file mode 100644 index 0000000..3014e5b --- /dev/null +++ b/dd-waf/docker/modsecurity/docker-entrypoint.sh @@ -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 diff --git a/dd-waf/docker/modsecurity/modsec_rules.conf b/dd-waf/docker/modsecurity/modsec_rules.conf index cc36a54..51d7cf6 100644 --- a/dd-waf/docker/modsecurity/modsec_rules.conf +++ b/dd-waf/docker/modsecurity/modsec_rules.conf @@ -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" diff --git a/dd.conf.sample b/dd.conf.sample index c5c7c98..b938757 100644 --- a/dd.conf.sample +++ b/dd.conf.sample @@ -149,6 +149,9 @@ IPA_ADMIN_PWD=freeipafreeipa ## WORKS BEHIND PROXY BEHIND_PROXY=false +## MODSECURITY +DISABLE_WAF=true + # SOURCES & SYSTEM VARS ## MOODLE