GNU/Linux >> Tutoriales Linux >  >> Linux

10 consejos para proteger su servidor web Apache en UNIX/Linux

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

Linux
  1. Cómo configurar un servidor web Apache

  2. 7 pasos para asegurar su servidor Linux

  3. Encuentre las 10 principales direcciones IP que acceden a su servidor web Apache

  4. Instale el servidor web Apache en Linux Mint 13 / Linux Mint 14

  5. Migración de Unix a Linux

Cómo instalar el servidor web Apache en Linux

Cómo alojar un sitio web en un servidor web Apache

Cómo instalar el servidor web Apache en Alpine Linux

Proteja su servidor web Apache Mejores prácticas

10 consejos prácticos de fortalecimiento de SSH para proteger su servidor Linux

Protección de su servidor web Apache con Mod Security