Es seguro tu Apache?

Shalauras

Bueno, aqui os paso unas 20 recomendaciones para comprobar si tu apache es seguro de cara a posibles intrusos.

==En primer lugar, asegúrese de que ha instalado los últimos parches de seguridad==

No tiene sentido poner cerraduras en las ventanas, si su puerta está abierta de par en par. Como tal, si su servidor no está parcheado no tiene realmente mucho sentido continuar por más tiempo leyendo este documento. Vaya por delante y añada a marcadores esta página para que puedas volver más tarde, y revisar su servidor.

==Ocultar el número de version y otra información sensible de Apache.==

Por defecto muchas instalaciones de Apache exponen al mundo qué versión de Apache que se está ejecutando, qué sistema operativo y versión esta ejecutando, y los módulos de Apache instalados en el servidor. Los atacantes pueden usar esta información para realizar un ataque. También envía el mensaje con la mayoria de los valores predeterminados por sí solo.

Hay dos directivas que usted necesita añadir o editar en su archivo httpd.conf:

ServerSignature Off
ServerTokens Prod

El ServerSignature aparece en la parte inferior de las páginas generadas por apache por ejemplo,páginas de errores 404, listados de directorios, etc

La directiva ServerTokens se utiliza para determinar qué pondrá Apache en la respuesta cabecera HTTP del servidor. Para establecer que Prod establece la cabecera de respuesta HTTP como sigue:

Server: Apache

Si es super paranoico usted podría cambiar esta situación a algo distinto de "Apache" editando el código fuente, o usando mod_security (véase más adelante).

==Asegúrese de que Apache se está ejecutando bajo su propia cuenta de usuario y de grupo==

Muchas instalaciones de apache se ejecutan como el usuario nobody. Así que supongo que si tanto Apache, y su servidor de correo se ejecutan como nobody a través de un ataque Apache puede permitir que el servidor de correo también se vea comprometido y viceversa.

User apache
Group apache

==Asegurese de que los archivos fuera del directorio raíz no sean accesibles==

No queremos apache pueda acceder a cualquier tipo de archivos fuera de su directorio raíz. Por lo tanto, suponiendo que todos sus sitios web se encuentran bajo un directorio (vamos a llamar a este /web), se establecería de la manera siguiente:

<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>

Tenga en cuenta que ya hemos fijado 'Options None y 'AllowOverride None esto denegará todas las opciones y redefiniciones para el servidor. Usted ahora tiene que agregar en forma explícita para cada directorio que requiere una opción o sobrescribir.

==Desactive la opción de listar el directorio==

Puede hacer esto con una directiva Options dentro de una etiqueta Directory. Establezca Options a None o -Indexes

Options -Indexes

==Desactive los includes del lado del servidor==

Esto también se hace con la directiva Options dentro de una etiqueta Directory. Establecer Options None o -Includes

Options -Includes

==Desactive la ejecución de CGIs==

Si no está utilizando CGI, desactivelo con la directiva Options dentro de una etiqueta Directory. Establecer Options a None o -ExecCGI

Options -ExecCGI

==No permita que apache siga enlaces simbólicos==

Esto de nuevo se puede hacer usando la directiva Options dentro de una etiqueta Directory. Establecer Options a None o -FollowSymLinks.

Options -FollowSymLinks

==Desactiva las opciones múltiples==

Si desea desactivar todas las opciones sólo tiene que utilizar:

Options None

Si sólo desea desactivar algunos separado cada una de las opciones con un espacio en su directiva Options:

Options -ExecCGI -FollowSymLinks -Indexes

==Desactive el soporte de archivos .htaccess==

Esto se hace en una etiqueta Directory pero con la directiva AllowOverride, la establecemos a ninguno:

AllowOverride None

Si necesita Override asegurese de que no pueden ser descargados, y/o cambie el nombre a algo distinto de .htaccess. Por ejemplo, podríamos cambiarlo .httpdoverride, y bloquear todos los archivos que comiencen con .ht de ser descargado de la siguiente manera:

AccessFileName .httpdoverride
<Files ~ ".ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

==Ejecutar mod_security==

mod_security es un super práctico módulo de Apache escrito por Ivan Ristic, el autor de Seguridad de Apache de O'Reilly.

Usted puede realizar las siguientes operaciones con mod_security:

  • Filtrado simple
  • Expresiones Regulares basadas en filtrado
  • URL Encoding Validation
  • Unicode Encoding Validation
  • Auditoría
  • Null byte attack prevention
  • Subir los límites de memoria
  • Ocultación de identidad del servidor
  • Construido en soporte chroot
  • y mas...

==Desactiva algunos módulos innecesarios==

Apache normalmente viene con varios módulos instalados. Ir a la documentacion de Apache y compruebe lo que cada módulo realmente hace. Muchas veces encontrará que no necesita tener dicho módulo habilitado.

Puedes buscar las líneas en su httpd.conf que contienen LoadModule. Para desactivar el módulo normalmente sólo tiene que añadir un # al comienzo de la línea. Para buscar los módulos ejecute:

grep LoadModule httpd.conf

Aquí hay algunos módulos que suelen estar habilitados, pero a menudo no se necesitan: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

==Asegúrese de que sólo root tiene acceso de lectura a la configuración de apache y los binarios==

Esto puede hacerse asumiendo que la instalación de Apache está situado en /usr/local/apache de la siguiente manera:

chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

==Bajar el valor del Timeout==

Por defecto la directiva Timeout está ajustado a 300 segundos, reducirla puede ayudar a mitigar los posibles efectos de un ataque de denegación de servicio.

Timeout 45

==Limitar las grandes peticiones==

Apache tiene varias directivas que le permiten limitar el tamaño de una solicitud, esto también puede ser útil para mitigar los efectos de un ataque de denegación de servicio.

Un buen lugar para comenzar es la directiva LimitRequestBody . Esta directiva está configurada como unlimited por defecto. Si está permitiendo de envío de ficheros de un tamaño inferior a 1 MB, se puede establecer esta configuración a algo así como:

==LimitRequestBody== 1048576

Si no estás permitiendo de envío de archivos se puede establecer aún menor.

Otras directivas para ver son: LimitRequestFields , LimitRequestFieldSize y LimitRequestLine. Estas directivas se fijan a un valor razonable por defecto para la mayoría de los servidores, pero puede que quiera ajustarlo mejor para adaptarlo a sus necesidades. Consulte la documentación para obtener más información.

==La limitación del tamaño de un Body XML==

Si está corriendo mod_dav (por lo general se usa con Subversión), entonces es posible que desee limitar el tamaño máximo de una petición Body XML. La directiva LimitXMLRequestBody sólo está disponible en Apache 2, y su valor por defecto es de 1 millón de bytes (aprox. 1 MB).En muchos tutoriales aconsejarán establecer este valor a 0, lo que significa que archivos de cualquier tamaño pueden ser cargados, puede ser necesaria si utiliza WebDAV para subir archivos de gran tamaño, pero si está simplemente utilizando para el control de la fuente, probablemente funcione con la fijación de un límite superior, como los 10 MB:

LimitXMLRequestBody 10485760

==Limitar Concurrencia==

Apache tiene varias opciones de configuración que pueden ser usadas para ajustar el manejo de peticiones concurrentes. El MaxClients es el número máximo de procesos hijos que se creará para servir peticiones. Esto puede ser demasiado alto si su servidor no tiene suficiente memoria para manejar un gran número de peticiones concurrentes.

Otras directivas, como MaxSpareServers, MaxRequestsPerChild, y en Apache2 ThreadsPerChild, ServerLimit, y MaxSpareThreads son importantes ajustar para que concuerden con su sistema operativo y hardware.

==Acceso Restringido por IP==

Si usted tiene un recurso que sólo debe de acceder a una determinada red o a una dirección IP, se puede aplicar esto en su configuración de Apache. Por ejemplo, si usted desea restringir el acceso a su intranet para permitir sólo la red 176.16:

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

==Ajuste de la configuración de KeepAlive==

De acuerdo con la documentación usando KeepAlive de Apache el cliente puede mejorar el rendimiento de hasta un 50%, así que ten cuidado antes de cambiar estas configuraciones, usted desarrollará una actividad comercial con una ligera mitigación de la denegación de servicio.

==Ejecutar Apache en un entorno chroot==

chroot te permite ejecutar un programa aislado en su propia jaula. Esto evita una interrupción en el servicio con la que puedan efectuar cualquier otra cosa en el servidor.

Puede ser bastante complicado, lo configuran usando chroot debido a dependencias de la biblioteca. Como he mencionado más arriba el módulo mod_security se ha construido con soporte chroot. Es tan simple como añadir una directiva mod_security para su configuración:

SecChrootDir /chroot/apache

Un saludo! y espero que os sea útil!

20 días después
G3rm4n

Muy bueno ;)

Usuarios habituales

  • G3rm4n
  • Shalauras