Este artículo describe algunas recomendaciones para optimizar la seguridad en tu servidor Apache.
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.
Hacer que Apache arranque con un usuario que no sea root. Lo ideal es crear un usuario exclusivo:
# groupadd www
# useradd -g www www
Luego editamos el fichero de configuración y definimos el usuario/grupo:
User www
Group www
No permitir que los usuarios configuren archivos .htaccess los cuales pueden anular los sistemas de seguridad configurados:
<Directory />
AllowOverride None
Options None
Allow from all
</Directory>
Si queremos usar un .htaccess en algún directorio simplemente definimos el directorio con la opción:
<Directory "/ruta_del_directorio">
Options FollowSymLinks
AllowOverride Authconfig
Order allow,deny
Allow from all
</Directory>
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. Esto evita que se muestre un mensaje del estilo:
Apache/1.3.19 Server at www.midominio.com Port 80
La directiva ServerTokens se utiliza para determinarse lo que pondrá Apache en la cabecera de la respuesta HTTP del servidor. los valores posibles son: Minimal|ProductOnly|OS|Full.
Ejemplos de resultado según estas directivas son:
ServerTokens Prod[uctOnly]
Server sends (e.g.): Server: Apache
ServerTokens Major
Server sends (e.g.): Server: Apache/2
ServerTokens Minor
Server sends (e.g.): Server: Apache/2.0
ServerTokens Minimal
Server sends (e.g.): Server: Apache/2.0.41
ServerTokens OS
Server sends (e.g.): Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified)
Server sends (e.g.): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
Para comprobar la información que ofrece nuestro webserver hacemos un telnet al puerto 80 del host local:
telnet localhost 80
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.1 302 Found
Date: Thu, 17 Feb 2005 05:17:07 GMT
Server: Apache
Set-Cookie: [...]
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://www.midominio.com/modules/news/
Content-Length: 0
Connection: close
Content-Type: text/html
Connection closed by foreign host.
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
Deshabilitar cualquier módulo innecesario
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.confAquí 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 NoneOrder Allow,Deny
Allow from alll
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
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 1048576Si 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.
Comentarios recientes
8 weeks 1 day ago
22 weeks 2 days ago
27 weeks 5 days ago
36 weeks 3 days ago
44 weeks 2 days ago
51 weeks 5 days ago
1 year 3 days ago
1 year 12 weeks ago
1 year 12 weeks ago
1 year 15 weeks ago