Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

Mod Security: Más seguridad en tu web

Mod Security es un módulo para Apache que se encarga de proporcionarle un nivel de seguridad adicional a nuestro servidor web muy potente y personalizable.

Mod Security es un módulo para Apache que se encarga de proporcionarle un nivel de seguridad adicional a nuestro servidor web muy potente y personalizable.

Funciona como una barrera entre la red (y/o Internet) y nuestro servidor web, donde mediante un conjunto de reglas podemos establecer una serie de acciones (bloquear, informar en un registro, ignorar, etc...) para eventos de todo tipo.

Es especialmente potente, por tres razones:

  • Posee un nivel de personalización muy amplio.
  • Funciona en una capa previa al servidor web, bloqueando los accesos antes de llegar a procesarse en el servidor web.
  • Permite el uso de expresiones regulares en su conjunto de reglas.

Preparación y compilación de mod_security


Antes de comenzar, tenemos que asegurarnos de estar utilizando Apache en su versión 2.x o superior, ya que mod_security2 funciona bajo estas versiones.

  1. Instalar libxml2: Si no está instalado, necesitaremos este paquete, ya que mod_security lo utiliza para el procesamiento de ficheros XML. En la versión 2.1 de mod_security es opcional, pero recomiendan instalar el paquete, ya que en el futuro será necesario de forma obligatoria.
  2. Descargar mod_security2: Nos descargamos los fuentes de mod_security2 y el conjunto de reglas por defecto. Verificar en la página de descarga la versión más nueva de la rama 2.1.x.
  3. Configurar Makefile: Descomprimimos el paquete mod_security y hacemos un cat Makefile | grep "top_dir " para comprobar si en esta ruta se encuentran los módulos y los scripts build. Si no es así, editamos el Makefile y cambiamos la ruta por la nuestra (/usr/lib/httpd, /usr/share/apache2, ...).
  4. Compilación: Escribiendo make dentro de apache2, comenzamos a compilar. Esperamos a que termine el proceso, fijandonos que no ocurra ningún error.

Instalación y configuración de modsecurity


Listo. Ya tenemos el ModSecurity eficientemente compilado para nuestra máquina. Sólo nos queda instalarlo.

  1. Instalación del módulo: Ahora toca detener el Apache para permitirnos hacer la instalación del módulo, usualmente basta con escribir /etc/init.d/apache stop. Entonces escribimos make install. Se habrá creado un módulo en la carpeta modules de la ruta top_dir del punto 3, llamado mod_security2.so.
  2. Configuración del apache: Ahora solo tenemos que cargar los módulos en nuestro servidor web. Para ello vamos al fichero de configuración (generalmente se encuentra en /etc/httpd o /etc/apache2 con el nombre httpd.conf o apache2.conf) y buscamos las lineas con las instrucciones LoadModule. Si hemos instalado el libxml2 añadimos la linea LoadFile /usr/lib/libxml2.so y posteriormente la linea LoadModule security2_module modules/mod_security2.so.
  3. Comprobar mod_unique_id: ModSecurity también necesita tener cargado el módulo mod_unique_id, que en muchos casos viene instalado pero no activo. Para ello también añadimos (si no está) la linea LoadModule unique_id_module modules/mod_unique_id.so antes de las anteriores.
  4. Conjunto de reglas: En la ruta donde se encuentra el fichero httpd.conf (o apache2.conf) hacemos un mkdir modsecurity y editamos de nuevo el fichero httpd.conf, para incluir al final la linea: Include modsecurity/*.conf. Sólo haría falta copiar los ficheros de reglas deseados (o crearlos) dentro de modsecurity.

Es bastante importante seguir las instrucciones anteriores para evitar mensajes de errores como "Invalid command 'SecRuleEngine', perhaps mis-spelled or defined by a module not included in the server configuration" o similares.

Arrancamos de nuevo el servidor Apache con un /etc/init.d/httpd start. Notar que en el paquete de conjunto de reglas de mod_security vienen varios: (configuración base, violaciones de protocolo, políticas HTTP, inyecciones SQL, inyecciones XSS, robots scrappers, etc...), incluir los que el administrador considere necesario, ya que hemos incluído todos los ficheros .conf que tengamos en la carpeta.

Reglas para ModSecurity


Las reglas de este programa son muy potentes y haría falta otro artículo para explicar como construirlas, pero un ejemplo muy básico sería el siguiente:

SecRule REQUEST_HEADERS:User-Agent "larbin_2.6.3" "log,drop"

La directiva SecRule crea una regla que examina las cabeceras, más concretamente la ID del navegador (el User Agent) para comprobar si casa con larbin_2.6.3 (¡Ojo! Esto es una expresión regular). Si es así, avisamos al módulo para que informe en el registro (log) y descarte el acceso (drop).

Por último, si estás interesado en crear tu propio conjunto de reglas, añado algunos enlaces de referencia, ya que si estabas manejando la posibilidad de basarte en los conjuntos de reglas por defecto, aviso que las expresiones regulares que utilizan tienen un nivel un poco sofisticado:

Enlaces de interés:

Escrito por Manz, el , en webmasters. Comentarios recibidos: 7.

7 comentarios de lectores
Biktor
Biktor
1

Uffffff Excelente tutorial, maravilloso me cae como anillo al dedo la otra semana que creo que debo montar un servidor. Gracias Gracias!!!!!

aca463
aca463
2

El tuto está bastante completo. Me funcionó de lujo. Muchas gracias!

alexav8
alexav8
3

Hola, instalaste el mlogc?? para crear un servidor de log fuera de tu server apache.....trae un mlogc.defaul.conf de ejemplo, tengo que copiarlo en esa ubiocacion?? gracias

Angel
Angel
4

hola Manz, quería saber si sabes cómo evitar ataques de HTML injection de aquellos que te pegan un justo en la parte de abajo de tus archivos o antes de la etiqueta de cierre del . Me ha pasado hoy y ya me ha pasado alguna vez y he tenido que cerrar la cuenta del sitio y volverla a crear. La verdad es que este ataque va más allá de los formularios porque esos sí que los tengo protegidos.. no se si es a través del navegador poniendo una URL maliciosa o qué cosa pero me vendría bien un tip. Talvez algo con htaccess sea la clave. De momento no cuento con accesso a la Shell ya que cuento solo con un servidor Reseller. Si te metes a mi sitio, aunque he logrado dejar comentado el ataque, se logra ver al final del sourcecode el código que te digo

Angel
Angel
5

No me salió en el anterior el tag pero básicamente te pegan un javascript en el código antes del cierre del body!

james
james
6

hola angel, esta estraño pues el javasript esta del lado del cliente, si es cierto que se modifica pero en el servidor nunca, entonces ya que tu lo dices, me gustaria ver, asi buscar una solucion ya que ahora todos mundo esta publciando todo este tipo de codigos... jamesjara..arroba..gmail.com

desarrollo web
desarrollo web
7

Excelente tutorial. El mod_security junto con algún otro mod de apache además del mod_rewrite... son mis imprescindibles. Un saludo, Alejandro Arco

Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.