Si es administrador de sistemas, debe proteger su servidor web Apache siguiendo los 10 consejos mencionados en este artículo.
1. Deshabilitar módulos innecesarios
Si planea instalar apache desde la fuente, debe deshabilitar los siguientes módulos. Si hace ./configure –help, verá todos los módulos disponibles que puede deshabilitar/habilitar.
- userdir:asignación de solicitudes a directorios específicos del usuario. es decir, ~el nombre de usuario en la URL se traducirá a un directorio en el servidor
- autoindex:muestra una lista de directorios cuando no hay un archivo index.html presente
- estado:muestra las estadísticas del servidor
- env:borrado/configuración de variables ENV
- setenvif:colocar variables ENV en los encabezados
- cgi:secuencias de comandos CGI
- acciones:activación de acciones en solicitudes
- negociación:negociación de contenido
- alias:asignación de solicitudes a diferentes partes del sistema de archivos
- incluir:el lado del servidor incluye
- filtro:filtrado inteligente de solicitudes
- versión:manejo de la información de la versión en los archivos de configuración mediante IfVersion
- tal cual:tipos de archivo tal cual
Deshabilite todos los módulos anteriores como se muestra a continuación cuando haga ./configure
./configure \ --enable-ssl \ --enable-so \ --disable-userdir \ --disable-autoindex \ --disable-status \ --disable-env \ --disable-setenvif \ --disable-cgi \ --disable-actions \ --disable-negotiation \ --disable-alias \ --disable-include \ --disable-filter \ --disable-version \ --disable-asis
Si habilita SSL y deshabilita mod_setenv, obtendrá el siguiente error.
- Error :Error de sintaxis en la línea 223 de /usr/local/apache2/conf/extra/httpd-ssl.conf:Comando no válido 'BrowserMatch', quizás mal escrito o definido por un módulo no incluido en la configuración del servidor
- Solución :Si usa ssl, no deshabilite setenvif. O, comente el BrowserMatch en su httpd-ssl.conf, si deshabilita mod_setenvif.
Después de la instalación, cuando haga httpd -l , verá todos los módulos instalados.
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_log_config.c mod_ssl.c prefork.c http_core.c mod_mime.c mod_dir.c mod_so.c
En este ejemplo, tenemos instalados los siguientes módulos de apache.
- core.c:módulo central de Apache
- mod_auth*:para varios módulos de autenticación
- mod_log_config.c:registra la solicitud del cliente. proporciona flexibilidades de registro adicionales.
- mod_ssl.c:para SSL
- prefork.c:para el módulo MPM (Módulo de procesamiento múltiple)
- httpd_core.c:módulo central de Apache
- mod_mime.c:para configurar tipos MIME de documentos
- mod_dir.c:para redirección de barra diagonal final en rutas de directorio. si especifica url/test/, va a url/test/index.html
- mod_so.c:para cargar módulos durante el inicio o el reinicio
2. Ejecute Apache como usuario y grupo separados
De forma predeterminada, apache puede ejecutarse como nadie o como demonio. Es bueno ejecutar apache en su propia cuenta sin privilegios. Por ejemplo:apache.
Crear un grupo y un usuario de apache.
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
Modifique httpd.conf y configure Usuario y Grupo de manera adecuada.
# vi httpd.conf User apache Group apache
Después de esto, si reinicia apache y ejecuta ps -ef, verá que apache se ejecuta como "apache" (excepto el primer proceso httpd, que siempre se ejecutará como root).
# ps -ef | grep -i http | awk '{print $1}' root apache apache apache apache apache
3. Restringir el acceso al directorio raíz (Usar Permitir y Denegar)
Proteja el directorio raíz configurando lo siguiente en httpd.conf
<Directory /> Options None Order deny,allow Deny from all </Directory>
En lo anterior:
- Opciones Ninguna – Configure esto en Ninguno, lo que no habilitará ninguna función adicional opcional.
- Pedido denegado, permitido – Este es el orden en el que se deben procesar las directivas "Denegar" y "Permitir". Esto procesa "denegar" primero y "permitir" a continuación.
- Denegar de todos – Esto niega la solicitud de todos al directorio raíz. No hay una directiva Permitir para el directorio raíz. Entonces, nadie puede acceder a él.
4. Establezca los permisos apropiados para el directorio conf y bin
Los directorios bin y conf solo deben ser vistos por usuarios autorizados. Es una buena idea crear un grupo y agregar todos los usuarios que pueden ver/modificar los archivos de configuración de Apache a este grupo.
Llamemos a este grupo:apacheadmin
Crea el grupo.
groupadd apacheadmin
Permitir el acceso al directorio bin para este grupo.
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
Permita el acceso al directorio conf para este grupo.
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
Agregue los miembros apropiados a este grupo. En este ejemplo, tanto ramesh como john son parte de apacheadmin
# vi /etc/group apacheadmin:x:1121:ramesh,john
5. Deshabilitar la exploración de directorios
Si no hace esto, los usuarios podrán ver todos los archivos (y directorios) bajo su raíz (o cualquier subdirectorio).
Por ejemplo, si van a http://{your-ip}/images/ y no tiene un index.html debajo de imágenes, verán todos los archivos de imagen (y los subdirectorios) enumerados en el navegador (al igual que una salida ls -1). Desde aquí, pueden hacer clic en el archivo de imagen individual para verlo o hacer clic en un subdirectorio para ver su contenido.
Para deshabilitar la exploración de directorios, puede establecer el valor de la directiva Opciones en "Ninguno" o "-Índices" . A:delante del nombre de la opción, se eliminará de la lista actual de opciones aplicadas para ese directorio.
Los índices mostrarán una lista de archivos y subdirectorios disponibles dentro de un directorio en el navegador (solo cuando no hay index.html dentro de esa carpeta). Por lo tanto, los índices no deberían permitirse.
<Directory /> Options None Order allow,deny Allow from all </Directory> (or) <Directory /> Options -Indexes Order allow,deny Allow from all </Directory>
6. No permitir .htaccess
Usando el archivo .htaccess dentro de un subdirectorio específico bajo htdocs (o en cualquier lugar fuera), los usuarios pueden sobrescribir las directivas de apache predeterminadas. En ciertas situaciones, esto no es bueno y debe evitarse. Debería desactivar esta función.
No debe permitir que los usuarios usen el archivo .htaccess y anulen las directivas de Apache. Para hacer esto, configure “AllowOverride None ” en el directorio raíz.
<Directory /> Options None AllowOverride None Order allow,deny Allow from all </Directory>
7. Deshabilitar otras opciones
Los siguientes son los valores disponibles para la directiva Opciones:
- Opciones Todas – Todas las opciones están habilitadas (excepto MultiViews). Si no especifica la directiva Opciones, este es el valor predeterminado.
- Opciones ExecCGI – Ejecutar scripts CGI (usa mod_cgi)
- Opciones FollowSymLinks – Si tiene enlaces simbólicos en este directorio, se seguirá.
- Opciones incluidas – Permitir inclusiones del lado del servidor (usa mod_include)
- Las opciones incluyen NOEXEC – Permitir inclusiones del lado del servidor sin la capacidad de ejecutar un comando o cgi.
- Índices de opciones – Deshabilitar la lista de directorios
- Opciones MultiVistas – Permitir vistas múltiples negociadas de contenido (usa mod_negotiation)
- Opciones SymLinksIfOwnerMatch – Similar a FollowSymLinks. Pero, esto seguirá solo cuando el propietario sea el mismo entre el enlace y el directorio original al que está vinculado.
Nunca especifique 'Opciones Todas'. Siempre especifique una (o más) de las opciones mencionadas anteriormente. Puede combinar múltiples opciones en una línea como se muestra a continuación.
Options Includes FollowSymLinks
Los + y – delante de un valor de opción son útiles cuando tiene directorios anidados y desea sobrescribir una opción de la directiva principal del Directorio.
En este ejemplo, para el directorio /sitio, tiene tanto inclusiones como índices:
<Directory /site> Options Includes Indexes AllowOverride None Order allow,deny Allow from all </Directory>
Para el directorio /sitio/en, si solo necesita índices de /sitio (y no los incluidos), y si desea seguir los enlaces simbólicos solo a este directorio, haga lo siguiente.
<Directory /site/en> Options -Includes +FollowSymLink AllowOverride None Order allow,deny Allow from all </Directory>
- /sitio tendrá inclusiones e índices
- /site/en tendrá índices y FollowSymLink
8. Eliminar módulos DSO no deseados
Si ha cargado módulos de objetos compartidos dinámicos en Apache, estarán presentes dentro de httpd.conf en la directiva "LoadModule".
Tenga en cuenta que los módulos de apache compilados estáticamente no se enumerarán como directiva "LoadModule".
Comente cualquier “LoadModules” no deseado en el httpd.conf
grep LoadModule /usr/local/apache2/conf/httpd.conf
9. Restrinja el acceso a una red específica (o dirección IP)
Si desea que su sitio sea visto solo por una dirección IP o red específica, haga lo siguiente:
Para permitir que una red específica acceda a su sitio, proporcione la dirección de la red en la directiva Permitir.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.0.0/24 </Directory>
Para permitir que una dirección IP específica acceda a su sitio, proporcione la dirección IP en la directiva Permitir.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.1.21 </Directory>
10. No mostrar ni enviar la versión de Apache (establecer tokens de servidor)
De forma predeterminada, el encabezado de respuesta HTTP del servidor contendrá la versión de apache y php. Algo similar a lo siguiente. Esto es perjudicial, ya que no queremos que un atacante conozca el número de versión específico.
Server: Apache/2.2.17 (Unix) PHP/5.3.5
Para evitar esto, establezca ServerTokens en Prod en httpd.conf. Esto mostrará "Servidor:Apache" sin ninguna información de versión.
# vi httpd.conf ServerTokens Prod
Los siguientes son posibles valores de ServerTokens:
- Producción de tokens de servidor muestra "Servidor:Apache"
- ServerTokens principales muestra "Servidor:Apache/2"
- ServerTokens menores muestra "Servidor:Apache/2.2"
- Mínimo de tokens de servidor muestra "Servidor:Apache/2.2.17"
- SO ServerTokens muestra "Servidor:Apache/2.2.17 (Unix)"
- Tokens de servidor llenos muestra "Servidor:Apache/2.2.17 (Unix) PHP/5.3.5" (si no especifica ningún valor de ServerTokens, este es el valor predeterminado)
Además de los 10 consejos anteriores, asegúrese de asegurar su sistema operativo UNIX/Linux. No tiene sentido proteger su apache si su sistema operativo no es seguro. Además, mantenga siempre actualizada su versión de apache. La última versión de Apache contiene correcciones para todos los problemas de seguridad conocidos. Asegúrese de revisar sus archivos de registro de apache con frecuencia.
Lecturas adicionales sobre apache
- Cómo instalar Apache 2 con SSL en Linux (con mod_ssl, openssl)
- 9 consejos para usar Apachectl y Httpd como un usuario avanzado
- XAMPP:fácil instalación de Apache, MySQL, PHP, Perl
- Cómo instalar o actualizar la pila LAMP usando Yum