diff --git a/dd-ctl b/dd-ctl index d374967..4ed3207 100755 --- a/dd-ctl +++ b/dd-ctl @@ -880,6 +880,15 @@ enable_waf() { 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-enabled/000-default.conf' + echo "Done" + echo "Restart Apache - ModSecurity" + docker restart dd-waf-apache + echo "Done" +} push_images() { # @@ -995,9 +1004,12 @@ case "$OPERATION" in securize) securize ;; - waf) + enable-waf) enable_waf ;; + disable-waf) + disable_waf + ;; setconf) setconf "$@" ;; diff --git a/dd-waf/README.md b/dd-waf/README.md index e69de29..341084c 100644 --- a/dd-waf/README.md +++ b/dd-waf/README.md @@ -0,0 +1,54 @@ +# DD - Apache2 ModSecurity + HAProxy + +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. + + +-----------+ ----------- +-------------+ ---------- +-----------------+\ + | Browser | <-https-> | HA proxy | <-http-> | ModSecurity |\ + +-----------+ ----------- +-------------+ ---------- +-----------------+ + +## HAProxy + +Podemos encontrar la configuración del servicio en [dd-waf/haproxy](dd-waf/harpoxy) + +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. + +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 + + +## Apache - ModSecurity + +Podemos encontrar la configuración del servicio en [dd-waf/haproxy](dd-waf/harpoxy) + +Tenemos diferentes ficheros para configurar este servicio + +* En el fichero 000-default.conf tendremos la configuración del servidor web Apache2. +* En el fichero crs-setup.conf configuramos OWASP ModSecurity Core Rule Set ver.3.2.0 +* En el fichero modsec_rules.conf incluimos los ficheros necesarios del owasp servicio de Apache2 +* En el fichero rules_apps.conf se configuran los falsos positivos, de las diferentes aplicaciones, que se tienen idenficados hasta el momento. + + +## 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, + +### 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/modsecurity/Dockerfile b/dd-waf/docker/modsecurity/Dockerfile index b8f3b8b..5c933c1 100644 --- a/dd-waf/docker/modsecurity/Dockerfile +++ b/dd-waf/docker/modsecurity/Dockerfile @@ -1,38 +1,32 @@ # Install Modsecurity in a Docker container FROM ubuntu:20.04 as production ARG DEBIAN_FRONTEND=noninteractive -# update/upgrade your system -RUN apt-get update -y +# update/upgrade your system # Install Required Dependencies -RUN apt-get install -y g++ flex bison curl apache2-dev \ +RUN apt-get update && apt-get install -y \ + g++ flex bison curl apache2-dev \ doxygen libyajl-dev ssdeep liblua5.2-dev \ libgeoip-dev libtool dh-autoreconf \ libcurl4-gnutls-dev libxml2 libpcre++-dev \ - libxml2-dev git wget tar apache2 -# certbot python3-certbot-apache + libxml2-dev git wget tar apache2 \ + && rm -rf /var/lib/apt/lists/* -# Download LibModsecurity -RUN wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.8/modsecurity-v3.0.8.tar.gz - -# Extract the Downloaded File -RUN tar xzf modsecurity-v3.0.8.tar.gz && rm -rf modsecurity-v3.0.8.tar.gz - -# Compile and Install LibModsecurity -RUN cd modsecurity-v3.0.8 && \ +# Download LibModsecurity. Extract the Downloaded File. Compile and Install LibModsecurity +RUN wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.8/modsecurity-v3.0.8.tar.gz \ + && tar xzf modsecurity-v3.0.8.tar.gz && rm -rf modsecurity-v3.0.8.tar.gz \ + && cd modsecurity-v3.0.8 && \ ./build.sh && ./configure && \ make && make install # Install ModSecurity-Apache Connector -RUN cd ~ && git clone https://github.com/SpiderLabs/ModSecurity-apache - -RUN cd ~/ModSecurity-apache && \ +RUN cd ~ && git clone https://github.com/SpiderLabs/ModSecurity-apache \ + && cd ~/ModSecurity-apache && \ ./autogen.sh && \ ./configure --with-libmodsecurity=/usr/local/modsecurity/ && \ make && \ make install - # logs should go to stdout / stderr RUN set -ex \ && ln -sfT /dev/stderr /var/log/apache2/error.log \ @@ -47,10 +41,11 @@ RUN mkdir -p /etc/apache2/modsecurity.d/dd-rules && \ cp modsecurity-v3.0.8/modsecurity.conf-recommended /etc/apache2/modsecurity.d/modsecurity.conf && \ cp modsecurity-v3.0.8/unicode.mapping /etc/apache2/modsecurity.d/ && \ sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/apache2/modsecurity.d/modsecurity.conf + ADD modsec_rules.conf /etc/apache2/modsecurity.d/ # Install OWASP ModSecurity Core Rule Set (CRS) on Ubuntu -RUN git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs +RUN git clone --depth=1 https://github.com/SpiderLabs/owasp-modsecurity-crs.git /etc/apache2/modsecurity.d/owasp-crs ADD crs-setup.conf /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf # Activate ModSecurity