Estas son 20 recomendaciones para optimizar la seguridad en tu servidor Apache.
Del mismo modo debes tener en cuenta que algunas de estas recomendaciones pueden disminuir el rendimiento de tu servidor dependiendo de tu configuración y de las especificaciones del sistema.
Primero, cerciorate de tener instalado los últimos parches de seguridad
No tiene sentido poner una cerradura mas resistente a tu puerta si dejas la ventana abierta.Del mismo modo si no tenemos los ultimos parches de seguridad instalado no tendría sentido continuar con la optimización de seguridad.
Restringir acceso por IP
Si tienes un recurso al que deba solamente tener acceso alguna red, o IP en concreto puedes configurarlo en Apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente 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
Oculta la versión y otra información delicada
Por defecto muchas instalaciones de Apache muestran el número de versión que está funcionando, el sistema operativo y un informe de módulos de Apache están instalados en el servidor. Los usuario maliciosos pueden utilizar esta información para atacar tu servidor.
Hay dos directivas que necesitas agregar, o corregir en tu archivo de httpd.conf:
ServerSignature Off
ServerTokens Prod
El ServerSignature aparece en la parte inferior de las páginas generadas por apache tales como los famosos errores 404.
La directiva ServerTokens se utiliza para determinarse lo que pondrá Apache en la cabecera de la respuesta HTTP del servidor.
Apache debe funcionar bajo su propia cuenta y grupo de usuario
Algunas versiones de Apache corren bajo el usuario nobody, esto compromete mucho su seguridad por lo tanto haz lo siguiente:
User apache
Group apache
Utiliza el mod_security
El mod_security es un módulo estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security de O'Reilly.
Esta es una lista de cosas que puedes hacer con mod_security:
Apache viene por defecto instalado con un serie de módulos.Debes echarle un vistazo a la documentación de Apache y ver para que sirve cada uno de ellos, y de esta manera te darás cuenta de que hay algunos que no son útiles en tu servidor.
Busca en httpd.conf las lineas que contengan LoadModule. Para deshabilitar el módulo debes agregar un # al principio de la línea, para que de esta forma pase a ser un comentario. Para buscar los módulos prueba con:
grep LoadModule httpd.conf
Aquí están algunos módulos que se instalan por defecto pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.
Asegurarte de que los archivos a los que se accede son los deseados
No deseamos que se pueda acceder a los directorios que no tengan permisos para ello, supongamos que el directorio raiz para nuestras webs es /web, la configuración óptima debera ser la siguiente:
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Order Allow,Deny
Allow from all
Desactiva las opciones para explorar directorios
Esto lo puedes hacer con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o indexes.
Options -Indexes
Desactiva los includes del lado servidor
Esto también se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o include.
Options -Includes
Desactiva la ejecución de CGI
Si no necesitas la ejecución de CGI por algún motivo en concreto desacrivalos se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o ExecCGI.
Options -ExecCGI
No permitir que apache siga enlaces simbólicos
De nuevo se configura con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o FollowSymLinks.
Options -FollowSymLinks
Desactivar todas las opciones
Si deseas desactivar el uso de todas las opciones simplemente:
Options None
Si solamente deseas desactivar algunas en concreto, separalas con un espacio en las opciones de directiva:
Options -ExecCGI -FollowSymLinks -Indexes
Desactivar la ayuda para los archivos .htaccess
Esto esta ya hecho pero con la directiva AllowOverride. Cámbialo a none.
AllowOverride None
Otra opción interesante sería bloquear la descarga de todos los archivos que comienzen con .ht por ejemplo, se haría de la siguiente manera:
AccessFileName .httpdoverride
Order allow,deny
Deny from all
Satisfy All
Disminuye el valor máximo de tiempo de espera
Por el defecto el tiempo de espera es de 300 segundos. Puedes disminuirlo por seguridad para prevenir ataques de esta manera:
Timeout 45
Limitar el tamaño maximo de peticiones
Apache tiene varias directivas que permiten que limites el tamaño de una petición, esto puede ser muy útil.
Una buena manera de comenzar es con la directiva LimitRequestBody. Esta directiva esta fijada a ilimitado por defecto. Si estás permitiendo uploads de archivos que no sean mayores a 1MB, podrías fijar este ajuste a algo parecido a esto:
LimitRequestBody 1048576
Si no estás permitiendo uploads de archivos puedes fijarlo incluso a un tamaño más pequeño.
Algunos otras directivas a mirar son LimitRequestFields, LimitRequestFieldSize y LimitRequestLine.
Conclusión
Espero que estas recomendaciones os hayan sido útiles y recuerda que el uso que le tienes que dar depende en gran medida de los recursos que necesitas y de las caracteristicas de tu servidor, antes de hacer cualquier cambio si no estas seguro documéntate y utiliza este artículo unicamente como una referencía que te lleve a la solución más idonea.
Fuente en ingles: www.petefreitag.com
Primero, cerciorate de tener instalado los últimos parches de seguridad
No tiene sentido poner una cerradura mas resistente a tu puerta si dejas la ventana abierta.Del mismo modo si no tenemos los ultimos parches de seguridad instalado no tendría sentido continuar con la optimización de seguridad.
Restringir acceso por IP
Si tienes un recurso al que deba solamente tener acceso alguna red, o IP en concreto puedes configurarlo en Apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente 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
Oculta la versión y otra información delicada
Por defecto muchas instalaciones de Apache muestran el número de versión que está funcionando, el sistema operativo y un informe de módulos de Apache están instalados en el servidor. Los usuario maliciosos pueden utilizar esta información para atacar tu servidor.
Hay dos directivas que necesitas agregar, o corregir en tu archivo de httpd.conf:
ServerSignature Off
ServerTokens Prod
El ServerSignature aparece en la parte inferior de las páginas generadas por apache tales como los famosos errores 404.
La directiva ServerTokens se utiliza para determinarse lo que pondrá Apache en la cabecera de la respuesta HTTP del servidor.
Apache debe funcionar bajo su propia cuenta y grupo de usuario
Algunas versiones de Apache corren bajo el usuario nobody, esto compromete mucho su seguridad por lo tanto haz lo siguiente:
User apache
Group apache
Utiliza el mod_security
El mod_security es un módulo estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security de O'Reilly.
Esta es una lista de cosas que puedes hacer con mod_security:
- Filtración simple
- Filtración basada en expresiónes regular
- Validación de codificación de la URL
- Validación de codificación Unicode
- Auditing
- Prevención del ataque NULL Byte
- Límitar la memoria de subida
- Enmascarar la identidad del servidor
- Y más
Apache viene por defecto instalado con un serie de módulos.Debes echarle un vistazo a la documentación de Apache y ver para que sirve cada uno de ellos, y de esta manera te darás cuenta de que hay algunos que no son útiles en tu servidor.
Busca en httpd.conf las lineas que contengan LoadModule. Para deshabilitar el módulo debes agregar un # al principio de la línea, para que de esta forma pase a ser un comentario. Para buscar los módulos prueba con:
grep LoadModule httpd.conf
Aquí están algunos módulos que se instalan por defecto pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.
Asegurarte de que los archivos a los que se accede son los deseados
No deseamos que se pueda acceder a los directorios que no tengan permisos para ello, supongamos que el directorio raiz para nuestras webs es /web, la configuración óptima debera ser la siguiente:
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Order Allow,Deny
Allow from all
Desactiva las opciones para explorar directorios
Esto lo puedes hacer con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o indexes.
Options -Indexes
Desactiva los includes del lado servidor
Esto también se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o include.
Options -Includes
Desactiva la ejecución de CGI
Si no necesitas la ejecución de CGI por algún motivo en concreto desacrivalos se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o ExecCGI.
Options -ExecCGI
No permitir que apache siga enlaces simbólicos
De nuevo se configura con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o FollowSymLinks.
Options -FollowSymLinks
Desactivar todas las opciones
Si deseas desactivar el uso de todas las opciones simplemente:
Options None
Si solamente deseas desactivar algunas en concreto, separalas con un espacio en las opciones de directiva:
Options -ExecCGI -FollowSymLinks -Indexes
Desactivar la ayuda para los archivos .htaccess
Esto esta ya hecho pero con la directiva AllowOverride. Cámbialo a none.
AllowOverride None
Otra opción interesante sería bloquear la descarga de todos los archivos que comienzen con .ht por ejemplo, se haría de la siguiente manera:
AccessFileName .httpdoverride
Order allow,deny
Deny from all
Satisfy All
Disminuye el valor máximo de tiempo de espera
Por el defecto el tiempo de espera es de 300 segundos. Puedes disminuirlo por seguridad para prevenir ataques de esta manera:
Timeout 45
Limitar el tamaño maximo de peticiones
Apache tiene varias directivas que permiten que limites el tamaño de una petición, esto puede ser muy útil.
Una buena manera de comenzar es con la directiva LimitRequestBody. Esta directiva esta fijada a ilimitado por defecto. Si estás permitiendo uploads de archivos que no sean mayores a 1MB, podrías fijar este ajuste a algo parecido a esto:
LimitRequestBody 1048576
Si no estás permitiendo uploads de archivos puedes fijarlo incluso a un tamaño más pequeño.
Algunos otras directivas a mirar son LimitRequestFields, LimitRequestFieldSize y LimitRequestLine.
Conclusión
Espero que estas recomendaciones os hayan sido útiles y recuerda que el uso que le tienes que dar depende en gran medida de los recursos que necesitas y de las caracteristicas de tu servidor, antes de hacer cualquier cambio si no estas seguro documéntate y utiliza este artículo unicamente como una referencía que te lleve a la solución más idonea.
Fuente en ingles: www.petefreitag.com
Manu Gutierrez