Búsqueda de sitios web

18 consejos de seguridad y refuerzo del servidor web Apache


El servidor web Apache es uno de los servidores web más populares y utilizados para alojar archivos y sitios web. Es fácil de instalar y configurar para satisfacer sus necesidades de alojamiento. Sin embargo, la configuración predeterminada no es segura para ofrecer la protección que tanto necesita su sitio.

En esta guía, analizamos algunos de los consejos y trucos para reforzar el servidor Apache que puede implementar para fortalecer la seguridad de su servidor web.

1. Cómo ocultar la versión de Apache y la información del sistema operativo

De forma predeterminada, el servidor web Apache muestra su versión en caso de que navegue por la URL incorrecta de un sitio web. A continuación se muestra un ejemplo de una página de error que indica que no se puede encontrar la página en el sitio. La última línea indica la versión de Apache, el sistema operativo host, la dirección IP y el puerto en el que escucha.

Nunca es una buena idea mostrar la información de su servidor web, ya que puede ser un buen regalo para los piratas informáticos en su misión de reconocimiento. Para agregar una capa de seguridad y ponérselo más difícil a los piratas informáticos, se recomienda ocultar la información del servidor web.

Para hacer esto, abra el archivo de configuración predeterminado de Apache en distribuciones basadas en Debian.

sudo vim /etc/apache2/apache2.conf

Para sistemas basados en RHEL como RHEL, Fedora, CentOS, Rocky y AlmaLinux fuerte>.

sudo vim /etc/httpd/conf/httpd.conf

Agregue las siguientes líneas al final del archivo.

ServerTokens Prod
ServerSignature Off

Guarde los cambios y reinicie el servidor web Apache.

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Ahora vuelva a cargar el sitio y, esta vez, no se mostrará la información del servidor web.

2. Deshabilitar el listado de directorios en Apache

De forma predeterminada, Apache permite la lista de directorios y los visitantes pueden ver los archivos o directorios que pueda tener en su directorio Document Root.

Para demostrar esto, crearemos un directorio llamado prueba.

sudo mkdir -p /var/www/html/test

A continuación, navegaremos hasta el directorio y crearemos algunos archivos.

cd /var/www/html/test
sudo touch app.py main.py

Ahora, si accedemos a la URL, http://localhost/test podremos ver el listado del directorio.

Para deshabilitar la lista de directorios, diríjase al archivo de configuración principal de Apache y busque el atributo 'Directorio'. Establezca el parámetro 'Opciones' en '-Indexes' como se muestra.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Vuelva a cargar Apache y esta vez, cuando visite la URL, los directorios ya no se mostrarán.

3. Actualice Apache periódicamente

Siempre se recomienda mantener todas sus aplicaciones actualizadas, ya que las últimas aplicaciones vienen con correcciones de errores y parches de seguridad que abordan las vulnerabilidades subyacentes presentes en versiones de software anteriores.

Como tal, se recomienda actualizar periódicamente sus aplicaciones a sus últimas versiones.

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Utilice el cifrado HTTPS en Apache

Apache, de forma predeterminada, utiliza el protocolo HTTP, que es un protocolo débil e inseguro que es propenso a escuchas ilegales. Para mejorar la seguridad de su sitio y, más aún, mejorar su clasificación SEO en Google, considere cifrar su sitio mediante un certificado SSL.

Al hacerlo, cambia el protocolo HTTP predeterminado a HTTPS, lo que dificulta que cualquiera pueda interceptar y descifrar la comunicación que se envía y recibe desde el servidor.

Vea cómo proteger el servidor web Apache usando Let's Encrypt SSL en Linux.

  • Cómo proteger Apache con el certificado SSL Let's Encrypt en RHEL
  • Cómo proteger Apache con el certificado SSL gratuito Let's Encrypt en Ubuntu y Debian

5. Habilite la seguridad de transporte estricta HTTP (HSTS) para Apache

Además de cifrar su sitio web con un certificado TLS/SSL, considere implementar el mecanismo de seguridad web HSTS además de HTTPS.

HTTP Strict Transport Security (HSTS) es un mecanismo de política que protege los sitios web de ataques de intermediarios y secuestro de cookies. Esto sucede cuando los atacantes degradan el protocolo HTTPS al protocolo HTTP inseguro.

HSTS permite al servidor web declarar estrictamente que los navegadores web solo deben interactuar con él a través de HTTPS y nunca a través del protocolo HTTP.

Para habilitar HSTS, asegúrese de que su sitio web ejecute HTTPS y tenga un certificado TLS/SSL válido.

A continuación, habilite el módulo de encabezados para Apache:

sudo a2enmod headers

Luego recarga Apache para aplicar los cambios.

sudo systemctl restart apache2

A continuación, acceda al archivo de configuración del host virtual de su dominio.

sudo vim /etc/apache2/sites-available/mydomain.conf

A continuación, agregue esta línea dentro del bloque :

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Esto se ve de la siguiente manera.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

El parámetro max-age indica a los navegadores web que accedan a su sitio únicamente mediante HTTPS durante el próximo año (31536000=1 año).

Finalmente, reinicie Apache para que la política HSTS entre en vigor.

sudo systemctl restart apache2

6. Habilite HTTP/2 en Apache

En 2015 se lanzó HTTP/2, que es una nueva versión del protocolo HTTP que busca abordar o resolver múltiples problemas que los creadores de HTTP/1.1 no previeron.

Si bien HTTP/1.1 todavía se usa ampliamente, está asociado con problemas de rendimiento asociados con el uso de múltiples conexiones TCP para procesar múltiples solicitudes desde el navegador, lo que genera una gran sobrecarga de recursos en el lado del cliente. lo que lleva a un rendimiento degradado de la red.

A medida que las aplicaciones crecieron en complejidad y funcionalidad, se creó HTTP/2 para resolver las deficiencias de HTTP/1.1, que incluyen encabezados HTTP largos, velocidades de carga de páginas web lentas y rendimiento general. degradación.

HTTP/2 proporciona más protección y privacidad que su predecesor. Igualmente importante es el rendimiento mejorado mediante el uso de flujos de datos multiplexados. Con HTTP/2 una única conexión TCP garantiza una utilización efectiva del ancho de banda, incluso cuando se transmiten múltiples flujos de datos.

Vea cómo habilitar HTTP/2 en el servidor web Apache usando:

  • Cómo habilitar HTTP/2 en Apache en Ubuntu

7. Restringir el acceso a directorios confidenciales en Apache

Otra medida de seguridad que podría tomar es limitar el acceso a directorios que puedan contener información confidencial, como datos de usuario, registros y archivos de configuración.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

En la configuración anterior, Requerir todo denegado niega el acceso a cualquiera que intente acceder a archivos en /directorio_sensitivo.

Guarde los cambios y salga del archivo. Luego reinicie Apache para que los cambios entren en vigor.

8. Deshabilite la directiva ServerSignature en Apache

La directiva ServerSignature en el archivo de configuración de Apache agrega un pie de página a los documentos generados por el servidor que contienen información sobre la configuración de su servidor web, como la versión y el sistema operativo en el que se ejecuta. Exponer detalles cruciales sobre su servidor web a actores maliciosos aumentará significativamente las posibilidades de un ataque.

Para evitar la exposición de dicha información, debe desactivar esta directiva en el archivo de configuración de Apache:

ServerSignature Off

Guarde los cambios y reinicie Apache una vez más para que los cambios entren en vigor.

sudo systemctl restart apache2

9. Establezca la directiva 'ServerTokens' en 'Prod'

La directiva 'ServerTokens' controla qué información envía el servidor, incluida la versión de Apache (versión principal y secundaria), el sistema operativo y el tipo de servidor web que se está ejecutando.

La menor cantidad de información que le gustaría exponer al público es que el servidor web es Apache. Cualquier otra cosa sólo expondría su servidor a posibles ataques. Por lo tanto, se recomienda establecer la directiva 'ServerTokens' en el archivo de configuración de Apache en 'prod'.

ServerTokens Off

Como siempre guarde los cambios y asegúrese de reiniciar Apache.

10. Asegure Apache con Fail2ban

Fail2ban es una aplicación de prevención de intrusiones de código abierto que protege los sistemas Linux de amenazas externas, incluidos DoS y ataques de fuerza bruta. Funciona monitoreando constantemente los registros de los sistemas en busca de actividades nefastas y prohibiendo los hosts que coinciden con patrones que imitan el comportamiento de ataque.

Fail2ban se puede configurar para proteger Apache de ataques DoS monitoreando constantemente los registros de Apache en busca de intentos fallidos de inicio de sesión y prohibiendo temporalmente las IP ofensivas.

Vea cómo instalar Fail2ban en Linux usando:

  • Cómo utilizar Fail2ban para proteger su servidor Linux

11. Deshabilite los módulos innecesarios

Los módulos de Apache son simplemente programas que se cargan para ampliar la funcionalidad del servidor web. Las funciones extendidas por los módulos incluyen autenticación básica, almacenamiento en caché de contenido, cifrado, seguridad, etc.

Siempre se recomienda desactivar todos aquellos módulos que no estén en uso actualmente para minimizar las posibilidades de ser víctima de un ataque.

Para ver todos los módulos habilitados, ejecute el comando

apache2ctl -M

Para comprobar si un módulo específico está habilitado, por ejemplo, el módulo de reescritura, ejecute el comando.

apache2ctl -M | grep rewrite

Para deshabilitar el módulo, ejecute el comando:

sudo a2dismod rewrite 

12. Utilice los módulos mod_security y mod_evasive para proteger Apache

Puede habilitar los módulos mod_security y mod_evasive para proteger Apache contra ataques de fuerza bruta o ataques DDoS.

  • El módulo mod_security actúa como un firewall de aplicaciones web (WAF) y bloquea el tráfico sospechoso y no deseado a su sitio.
  • El módulo mod_evasive protege su servidor de fuerza bruta y ataques de denegación de servicio (DoS).

Lea más sobre cómo proteger Apache usando los módulos mod_security y mod_evasive.

13. Servicios no deseados restringidos en Apache

Para proteger aún más Apache, considere deshabilitar ciertos servicios, como enlaces simbólicos y ejecución CGI, si no son necesarios actualmente. De forma predeterminada, Apache sigue enlaces simbólicos, podemos desactivar esta función, así como la función -Includes y CGI en una línea.

Para hacer esto, agregue la línea '-ExecCGI -FollowSymLinks -Includes' para la directiva ‘Opciones’ en la sección ‘Directorio‘.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Esto también se puede lograr a nivel de directorio. Por ejemplo, aquí desactivamos las ejecuciones de archivos Incluye y Cgi para el directorio “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Guarde los cambios y reinicie Apache.

14. Limitar el tamaño de carga de archivos en Apache

Otra forma de proteger su servidor web es limitar el tamaño total del cuerpo de la solicitud HTTP enviada al servidor web desde un cliente. Puede configurarlo en el contexto de servidor, por directorio, por archivo o por ubicación.

Por ejemplo, si desea permitir la carga de archivos a un directorio específico, diga el directorio /var/www/domain.com/wp-uploads y restrinja el tamaño del archivo cargado a 4M.=4194304Bytes, agregue la siguiente directiva a su archivo de configuración de Apache o archivo .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Guarde los cambios y recuerde reiniciar Apache.

Puede configurarlo en el contexto de servidor, por directorio, por archivo o por ubicación. La directiva evita un comportamiento anormal de solicitudes de clientes que a veces puede ser una forma de ataque de denegación de servicio (DoS).

15. Habilite el inicio de sesión en Apache

El registro proporciona todos los detalles sobre las solicitudes de los clientes y cualquier otra información relacionada con el rendimiento de su servidor web. Esto proporciona información útil en caso de que algo salga mal. Habilitar los registros de Apache, especialmente en archivos de host virtual, le permite identificar un problema en caso de que algo salga mal con el servidor web.

Para habilitar el registro, debe incluir el módulo mod_log_config, que proporciona dos directivas de registro principales.

  • ErrorLog: especifica la ruta del archivo de registro de errores.
  • CustomLog: crea y formatea un archivo de registro.

Puede utilizar estos atributos en un archivo de host virtual en la sección de host virtual para habilitar el registro.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

La directiva {APACHE_LOG_DIR} en los sistemas Debian se define como ruta /var/log/apache2.

16. Ejecute Apache como usuario y grupo separados

Ejecutar Apache como usuario y grupo independiente es una práctica de seguridad común. Al hacerlo, puede aislar el proceso del servidor web de otros procesos del sistema y minimizar el daño potencial si el servidor web se ve comprometido.

Primero, querrás crear un nuevo usuario y grupo específicamente para Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

A continuación, deberá editar el archivo de configuración de Apache para especificar el nuevo usuario y grupo.

User apacheuser
Group apachegroup

Dado que está cambiando el usuario y el grupo que ejecuta Apache, es posible que necesite actualizar la propiedad de los directorios web y los archivos para garantizar que Apache aún pueda leerlos.

sudo chown -R apacheuser:apachegroup /var/www/html

Después de realizar estos cambios, reinicie Apache para aplicarlos:

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. Proteja los ataques DDOS y el endurecimiento

Bueno, es cierto que no puedes proteger completamente tu sitio web de ataques DDoS. Sin embargo, aquí hay algunas pautas que pueden ayudarlo a mitigarlos y gestionarlos.

  • TimeOut: esta directiva le permite especificar el tiempo que el servidor esperará a que se completen ciertos eventos antes de devolver un error. El valor predeterminado es 300 segundos. Para sitios susceptibles a ataques DDoS, es recomendable mantener este valor bajo. Sin embargo, la configuración adecuada depende en gran medida de la naturaleza de las solicitudes que recibe su sitio web. Nota: Un tiempo de espera bajo puede causar problemas con algunos scripts CGI.
  • MaxClients: esta directiva establece el límite en la cantidad de conexiones que se pueden atender simultáneamente. Cualquier conexión nueva que supere este límite se pondrá en cola. Está disponible en los modelos Prefork y Worker MPM. El valor predeterminado es 256.
  • KeepAliveTimeout: esta directiva especifica el tiempo que el servidor esperará una solicitud posterior antes de cerrar la conexión. El valor predeterminado es 5 segundos.
  • LimitRequestFields: esta directiva establece un límite en la cantidad de campos de encabezado de solicitud HTTP aceptados por los clientes. El valor predeterminado es 100. Si se producen ataques DDoS debido a una cantidad excesiva de encabezados de solicitud HTTP, se recomienda reducir este valor.
  • LimitRequestFieldSize: esta directiva establece un límite de tamaño para el encabezado de solicitud HTTP.

18. Realice análisis de vulnerabilidad periódicos

Otra forma de proteger su servidor web es realizar pruebas periódicas de escaneo de vulnerabilidades. Esto ayuda a identificar posibles lagunas de seguridad que los piratas informáticos podrían aprovechar para obtener acceso a archivos confidenciales o inyectar malware.

Las herramientas de escaneo de vulnerabilidades también ayudan a señalar configuraciones inseguras y ayudan en la auditoría del cumplimiento. Las herramientas populares de escaneo de vulnerabilidades incluyen Acutenix, Nessus, Nexpose, Sucuri y muchas más.

Conclusión

Estos son algunos de los consejos para reforzar Apache que puede implementar en su servidor web para proporcionar una capa adicional de protección y mantener a raya las intrusiones.