20 consejillos que nos ayudaran a tener nuestro servidor web preferido un poco más seguro.
1.- Instalar los ultimos parches de seguridad: No hay sentido en poner cerraduras en las ventanas, si tu puerta está abierta de par en par.
2.- Ocultar el número de versión de Apache, y otra información sensible: Por
defecto muchas instalaciones de Apache dicen qué versión de Apache está
funcionando, qué sistema operativo, y los módulos de Apache que están
instalados en el servidor. Los atacantes pueden utilizar esta
información a su ventaja al realizar un ataque. Hay dos directorios que
necesitas agregar, o corregir en tu archivo de ¨httpd.conf¨:
ServerSignature Off ServerTokens Prod
El ServerSignature aparece en las páginas generadas por Apache, tal como ¨error 404¨, ¨listados del directorio¨, etc.
El directorio de ServerTokens se utiliza para determinar lo que pondrá Apache en el servidor en respuesta del HTTP header.
3.-Cerciorarse de que Apache esté funcionando bajo tu cuenta y grupo de usuario: Varias
instalaciones de Apache hacen que funcione como usuario a ¨Nobody¨.
Suponer un Apache, y con el servidor de correo funcionando como nobody
puede permitir un ataque, a través de Apache, comprometiendo tu
servidor de correo también:
User apache Group apache
4.- Asegurarse de que los archivos fuera de web root no estén servidos: No
quisiéramos que Apache pudiera tener acceso a ningún de los archivos
fuera de la raíz. Si se asume que tu sitio web se coloca bajo un
directorio (llamaremos a este /web), se debe instalar como sigue:
Observamos
que fijamos Options None y AllowOverride None. Esto pondra off a todas
las opciones y se eliminan para el servidor. Ahora tienes que
agregarlas explícitamente para cada directorio que requiera una opción
o una invalidación.
5.- Poner Off a la navegación de directorios:
Puedes hacer esto con las opcionesde directivas dentro de una etiqueta
del directorio.Fijar las ¨Options¨ a ¨None¨ o -¨Indexes¨.
Options -Indexes
6.- Poner a Off Server Side Includes: Tambien
puedes hacer esto con las opciones de directivas dentro de una etiqueta
del directorio. Fijar las ¨Options¨ a ¨None¨ o ¨-Includes¨.
Options -Includes
7.- Poner a Off la ejecucion de CGI: Fijar las ¨Options¨ a ¨None¨ o ¨-ExecCGI¨
Options -ExecCGI
8.- No permitir que Apache siga enlaces simbólicos: Fijar las ¨Options¨ a ¨None¨ o ¨-FollowSymLinks¨
Opciones - FollowSymLinks
9.- Poner a Off multiples opciones: Si deseas apagar a todas las opciones simplemente usa:
Options None
Si solo deseas poner a Off algunas opciones, solo pon un espacio en el directorio:
Options -ExecCGI -FollowSymLinks -Indexes
10.- Poner a Off la ayuda para los archivos de .htaccess: Esto se hace en una etiqueta del directorio, pero con el directorio de ¨AllowOverride¨. Fijarlo a ¨None¨.
AllowOverride None
Si
deseas asegurarte de que no pueden ser descargados, y/o eliminados
cambias el nombre por algo con excepción de .htaccess. Por ejemplo
podríamos cambiarlo a .httpdoverride, y bloqueamos todos los archivos
que comienzan con .ht de ser descargados, de la siguiente forma:
11.- Ejecutar mod_security:mod_security es un módulo práctico y estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security desde O'Reilly press.
Puedes hacer lo siguiente con mod_security:
* Filtración simple * Filtración basada expresión regular * Validación de codificación del URL * Validación de Unicode Encoding * Auditoria * Prevención del ataque de Null byte * Upload memory limits * Enmascarar la identidad del servidor * Built in Chroot support * Y más
12.- Inhabilitar cualquier módulo innecesario: Apache viene típicamente con varios módulos instalados. Estudia la documentación de los módulos de Apache y aprenderas lo que hace cada módulo. Muchas veces encontrarás que no necesitas tener activados algunos modulos.
Buscar
las líneas en tus ¨httpd.conf¨ que contengan ¨LoadModule¨. Para
inhabilitar el módulo solo debes agregar un # al principio de la línea.
Para buscar los módulos que estan funcionando:
grep LoadModule httpd.conf
Aquí están algunos módulos que se instalan típicamente pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.
13.- Cerciorarte de que solamente Root tenga acceso a los config y a los binarios de Apache: Esto se puede hacer si asumimos que la instalación de tu Apache está situada en ¨/usr/local/apache¨ como sigue:
14.- Bajar el valor del time out: Por
defecto el directorio del ¨Timeout¨ es fijado a 300 segundos. Puedes
disminuirlo ayudando a atenúar los efectos potenciales de un ataque
Denial of Service.
Timeout 45
15.- Limitación de peticiones grandes: Apache
tiene varios directorios que permiten que limites el tamaño de una
petición. Esto puede también ser útil para atenuar los efectos de un
ataque Denial of Service.
Un
buen lugar a comenzar es el directorio de ¨LimitRequestBody¨. Este
directorio está fijado a ilimitado por defecto. Si estás permitiendo
subidas de archivos de no más de 1MB, podrías fijar este ajuste en algo
como:
LimitRequestBody 1048576
Algunos
otros directorios a mirar son ¨LimitRequestFields¨,
¨LimitRequestFieldSize¨ y ¨LimitRequestLine¨. Estos directorios se
fijan a algo razonable para la mayoría de los servidores, pero puedes
desear limitarlos para adaptarlos lo mejor posible a tus necesidades.
16.- Limitación del tamaño de XML Body:
Si estás ejecutando el ¨mod_dav¨, entonces puedes desear limitar el
tamaño máximo de un cuerpo de la petición de XML. El directorio de
¨LimitXMLRequestBody¨ está solamente disponible en Apache 2, y su valor
prefijado es 1 millón de octetos (aproximadamente 1 Mb). Muchos
tutoriales tendrán fijado este valor a 0, lo que significa que los
archivos de cualquier tamaño pueden ser subidos; lo que puede ser
necesario si estás utilizando WebDAV para subir archivos grandes, pero
si lo estás utilizando simplemente para el control del source, puedes
fijar un límite superior, tal como 10 Mb:
LimitXMLRequestBody 10485760
17.- Limitación de concurrencia: Apache
tiene varios ajustes de la configuración que se pueden utilizar para
ajustar la dirección de peticiones concurrentes. El ¨MaxClients¨ es el
número máximo de los pequeños procesos que serán creados para servir
peticiones. Esto se puede fijar demasiado alto si tu servidor no tiene
bastante memoria para manejar una gran cantidad de peticiones de
concurrentes.
Otros
directorios tales como ¨MaxSpareServers¨, ¨MaxRequestsPerChild¨, y
sobre Apache2 ¨ThreadsPerChild¨, ¨ServerLimit¨, y ¨MaxSpareThreads¨ son
importantes de ajustar para emparejar tu sistema operativo, y el
hardware.
18.- Acceso de restricción por el IP: Si
tienes un recurso que deba ser accesado por cierta red, o dirección IP
puedes hacer cumplir esto en tu configuración de Apache. Por ejemplo si
deseas restringir el acceso a tu Intranet para permitir solamente la
red 176.16.x.x:
Order Deny,Allow Deny from all Allow from 176.16.0.0/16
O por IP:
Order Deny,Allow Deny from all Allow from 127.0.0.1
19.- Ajustando la configuracion de KeepAlive: KeepAlive
es activado por defecto y debes dejarlo encendido, pero puedes
considerar el cambiar¨MaxKeepAliveRequests¨ que por defecto está fijado
en 100, y ¨KeepAliveTimeout¨ que por defecto está en 15. Analizando tus
ficheros a diario podrás determinar los valores apropiados.
20.- Hacer Funcionar Apache en un ambiente de Chroot:¨el chroot¨
permite que ejecutes un programa en su propio ambiente aislado. Esto
evita que un defecto dentro en un servicio pueda afectar todo lo demás
en el servidor.
mod_security
se ha construido en ayuda del chroot. Hace el proceso tan simple como
agregar un directorio del mod_security a tu configuración: