Table of Contents
13 Consejos de seguridad y refuerzo del servidor web Apache
Todos estamos muy familiarizados con el servidor web Apache. es un servidor web muy popular para alojar sus archivos web o su sitio web en la web. Aquí hay algunos enlaces que pueden ayudarlo a configurar el servidor web Apache en su caja Linux.
Consejos de seguridad y refuerzo de Apache
- Instale el servidor web Apache
- Configure su sitio web en su caja Linux
Aquí, en este tutorial, cubriré algunos consejos principales para proteger su web servidor. Antes de aplicar estos cambios en su servidor web, debe tener algunos conceptos básicos del servidor Apache.
- Directorio raíz del documento: /var/www/html. o /var/www.
- Archivo de configuración principal: /etc/httpd/conf/httpd.conf. (RHEL/CentOS/Fedora) y /etc/apache2/apache2.conf. (Debian/Ubuntu).
- Puerto HTTP predeterminado: 80. TCP
- Puerto HTTPS predeterminado: 443. TCP
- Pruebe la sintaxis y la configuración del archivo de configuración: httpd-t.
- Archivos de registro de acceso del servidor web: /var/log/httpd/access_log.
- Archivos de registro de errores del servidor web: /var/log/httpd/error_log”
1. Cómo ocultar la versión de Apache y la identidad del sistema operativo de los errores
Cuando instala Apache. con código fuente o cualquier otro instalador de paquetes como yum. muestra el versión de su servidor web Apache. instalada en su servidor con el nombre del sistema operativo. de su servidor en Errores. También muestra la información sobre los módulos Apache instalados. en su servidor.
Mostrar versión de Apache
En la imagen de arriba, puede ver que Apache. muestra su versión. con el SO instalado. en su servidor. Esto puede ser una gran amenaza para la seguridad de su servidor web y también de su sistema Linux. Para evitar que Apache. no muestre esta información al mundo, necesitamos realizar algunos cambios en el archivo de configuración principal de Apache.
Abra el archivo de configuración con el editor vim y busque “ ServerSignature. “, está activado de forma predeterminada. Necesitamos Apagar. esta firma del servidor y la segunda línea “ ServerTokens Prod. le dice a Apache que devuelva solo Apache como producto en el encabezado de respuesta del servidor en cada solicitud de página. Suprime el sistema operativo, la información de la versión principal y secundaria.
# vim/etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) # vim/etc/apache2/apache2.conf (Debian/Ubuntu) ServerSignature Off ServerTokens Prod # service httpd restart (RHEL/CentOS/Fedora) # service apache2 restart (Debian/Ubuntu)
Ocultar la versión de Apache
2. Desactivar el listado de directorios
freestar.config.enabled_slots.push
De forma predeterminada, Apache enumera todo el contenido. de la raíz del documento. directorio en ausencia de archivo de índice. Consulte la imagen a continuación.
Apache Dir Listado de directorios
Podemos desactivar. el listado de directorios usando la directiva Opciones. en el archivo de configuración para un directorio específico. Para eso necesitamos hacer una entrada en el archivo httpd.conf. o apache2.conf.
Ocultar listado de directorios de Apache
3. Siga actualizando Apache con regularidad
La comunidad de desarrolladores de Apache trabaja continuamente en problemas de seguridad. y lanza su versión actualizada. con nuevas opciones de seguridad. . Por lo tanto, siempre se recomienda utilizar la última versión. de Apache. como servidor web.
Para comprobar la versión de Apache. Puede verificar su versión actual con el comando httpd-v.
# httpd-v Versión del servidor: Apache/2.2.15 (Unix) Servidor construido: 13 de agosto de 2013 17:29:28
Puede actualizar su versión con el siguiente comando.
# yum update httpd # apt-get install apache2
También se recomienda mantener su Kernel. y OS. actualizado a las últimas versiones estables si no está ejecutando ninguna aplicación específica que funcione solo en un sistema operativo o kernel específico.
4. Deshabilite los módulos innecesarios
Siempre es bueno reducir las posibilidades de ser víctima de cualquier ataque web. Por lo que se recomienda inhabilitar todos los módulos. que no están en uso actualmente. Puede enumerar todos los módulos compilados del servidor web, utilizando el siguiente comando.
# grep LoadModule/etc/httpd/conf/httpd.conf # tiene que colocar las líneas correspondientes de `LoadModule ‘en esta ubicación para que los # LoadModule foo_module/mod_foo.so LoadModule auth_basic_module módulos/mod_auth_basic.so LoadModule auth_digest_module módulos/mod_auth_digest.so LoadModule authn_file_module módulos/mod_authn_file.so LoadModule authn_alias_module módulos/mod_authn_alias.so LoadModule authn_anon_module módulos/mod_authn_anon.so LoadModule authn_dbm_module módulos/mod_authn_dbm.so LoadModule authn_default_module módulos/mod_authn_default.so LoadModule authz_host_module módulos/mod_authz_host.so LoadModule authz_user_module módulos/mod_authz_user.so LoadModule authz_owner_module módulos/mod_authz_owner.so LoadModule authz_groupfile_module módulos/mod_authz_groupfile.so LoadModule authz_dbm_module módulos/mod_authz_dbm.so LoadModule authz_default_module módulos/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_lemodule modules/mod_log_config.so LoadModule logio_module_module. …
Arriba está la lista de módulos que están habilitados de forma predeterminada pero que a menudo no son necesarios: mod_imap. mod_include. mod_info. mod_userdir. mod_autoindex. Para deshabilitar el módulo en particular, puede insertar un “ #. al comienzo de esa línea y reiniciar el servicio.
5. Ejecute Apache como usuario y grupo separados
Con una instalación predeterminada, Apache. ejecuta su proceso con el usuario nadie. o daemon. Por razones de seguridad, se recomienda ejecutar Apache. en su propia cuenta sin privilegios. Por ejemplo: http-web.
Cree un usuario y grupo de Apache # groupadd http-web # useradd-d/var/www/-g http-web-s/bin/nologin http-web
Ahora necesita decirle a Apache. que se ejecute con este nuevo usuario y para hacerlo, necesitamos hacer una entrada en /etc/httpd/conf/httpd.conf y reinicie el servicio.
Abra /etc/httpd/conf/httpd.conf. con vim editor y busque la palabra clave “ Usuario. y “ Grupo. y allí deberá especificar el nombre de usuario. y el nombre de grupo. que se utilizarán.
Usuario http-web Grupo http-web
6. Utilice Permitir y Denegar para restringir el acceso a los directorios
Podemos restringir el acceso a los directorios con las opciones “ Permitir. y “ Denegar. en httpd archivo .conf. Aquí, en este ejemplo, aseguraremos el directorio raíz. para eso, configuraremos lo siguiente en el archivo httpd.conf.
- Opciones “Ninguno”. esta opción no permitirá a los usuarios habilitar ninguna función opcional.
- Orden denegar, permitir. este es el orden en el que se procesarán las directivas “ Denegar. y “ Permitir. . Aquí “ denegar. primero y “ permitir. a continuación.
- Denegar a todos. esto denegará la solicitud de todos al directorio raíz. nadie podrá acceder al directorio raíz.
7. Utilice módulos mod_security y mod_evasive para proteger Apache
Estos dos módulos “ mod_security. y “ mod_evasive. son módulos muy populares de Apache en términos de seguridad.
Mod_security
Donde mod_security. funciona como firewall. para nuestras aplicaciones web y nos permite monitorear el tráfico. en tiempo real . También nos ayuda a proteger nuestros sitios web o servidor web de ataques de fuerza bruta. Simplemente puede instalar mod_security. en su servidor con la ayuda de sus instaladores de paquetes predeterminados.
Instalar mod_security en Ubuntu/Debian $ sudo apt-get install libapache2-modsecurity $ sudo a2enmod mod-security $ sudo/etc/init.d/apache2 force-reload Instalar mod_security en RHEL/CentOS/Fedora/# yum install mod_security #/etc/init.d/httpd restart Mod_evasive
mod_evasive. funciona de manera muy eficiente, se necesita una solicitud para procesarla y la procesa muy bien. Evita que los ataques DDOS. hagan tanto daño. Esta característica de mod_evasive. le permite manejar la fuerza bruta HTTP. y el ataque Dos. o DDos. Este módulo detecta ataques con tres métodos.
- Si tantas solicitudes llegan a la misma página en unas pocas veces por segundo.
- Si algún proceso secundario intenta hacer más de 50. solicitudes simultáneas.
- Si alguna IP. aún intenta realizar nuevas solicitudes cuando está temporalmente en la lista negra.
mod_evasive. se puede instalar directamente desde la fuente. Aquí, tenemos una guía de instalación y configuración de estos módulos que lo ayudará a configurar estos módulos de Apache en su caja de Linux.
- Proteja Apache usando Mod_Security y Mod_evasive
8. Desactivar el seguimiento de enlaces simbólicos de Apache
De forma predeterminada, Apache. sigue enlaces simbólicos. podemos desactivar. esta función con FollowSymLinks. con la directiva Opciones. Y para ello necesitamos realizar la siguiente entrada en el archivo de configuración principal.
Opciones-FollowSymLinks
Y, si algún usuario. o sitio web. en particular necesita Activar FollowSymLinks. simplemente podemos escribir una regla en el archivo “ .htaccess. de ese sitio web.
# Activar enlaces simbólicos Opciones + FollowSymLinks
Nota :. Para habilitar las reglas de reescritura dentro de “ .htaccess. , el archivo “ AllowOverride All. debe estar presente en la configuración principal globalmente.
9 . Desactivar las inclusiones del lado del servidor y la ejecución CGI
Podemos desactivar. las inclusiones del lado del servidor ( mod_include. y la ejecución de CGI. si no es necesario y para hacerlo necesitamos modificar el archivo de configuración principal.
Opciones-Incluye opciones-ExecCGI
También podemos hacer esto para un directorio en particular con la etiqueta Directory. Aquí En este ejemplo, estamos desactivando. las inclusiones y ejecuciones de archivos Cgi para el directorio “/var/www/html/web1. .
Aquí hay algunos otros valores que se pueden activar. o desactivar. con la directiva Opciones.
- Opciones todas. para habilitar todas las opciones a la vez. Este es el valor predeterminado, si no desea especificar ningún valor explícitamente en el archivo de configuración de Apache o .htaccess.
- Las opciones incluyen NOEXEC. esta opción permite las inclusiones del lado del servidor sin ejecutar permiso para un comando o archivos cgi.
- Opciones MultiViews. permite el contenido negociado multiviews con el módulo mod_negotiation.
- Opciones SymLinksIfOwnerMatch. Es similar a FollowSymLinks. Pero, esto seguirá solo cuando el propietario sea el mismo entre el enlace y el directorio original al que está vinculado.
10. Limitar el tamaño de la solicitud
De forma predeterminada, Apache. no tiene límite en el tamaño total de la solicitud HTTP, es decir, ilimitada y cuando permite solicitudes grandes en un servidor web, es posible que pueda ser un víctima de ataques de denegación de servicio. Podemos limitar el tamaño de las solicitudes de una directiva de Apache “ LimitRequestBody. con la etiqueta de directorio.
Puede establecer el valor en bytes desde 0. ( ilimitado. a 2147483647. ( 2 GB. que están permitidos en el cuerpo de una solicitud. Puede establecer este límite de acuerdo con las necesidades de su sitio. Suponga que tiene un sitio donde permite cargas y desea limitar el tamaño de carga para un directorio en particular.
Aquí en este ejemplo, user_uploads. es un directorio que contiene archivos cargados por usuarios. Estamos poniendo un límite de 500K. para esto.
11. Proteja el endurecimiento y los ataques DDOS
Bueno, es cierto que no puede proteger completamente su sitio web de los ataques DDos. Aquí hay algunas directivas que pueden ayudarlo a controlarlo.
- TimeOut. esta directiva le permite establecer la cantidad de tiempo que el servidor esperará a que se completen ciertos eventos antes de que falle. Su valor predeterminado es 300 segundos. Es bueno mantener este valor bajo en aquellos sitios que están sujetos a ataques DDOS. Este valor depende totalmente del tipo de solicitud que reciba en su sitio web. Nota. podría plantear problemas con las secuencias de comandos CGI. que vienen.
- MaxClients. esta directiva le permite establecer el límite en conexiones que serán atendidas simultáneamente. Cada nueva conexión se pondrá en cola después de este límite. Está disponible con Prefork. y Worker. ambos MPM. El valor predeterminado es 256.
- KeepAliveTimeout. es la cantidad de tiempo que el servidor esperará una solicitud posterior antes de cerrar la conexión. El valor predeterminado es 5 segundos.
- LimitRequestFields. nos ayuda a establecer un límite en la cantidad de campos de encabezado de solicitud HTTP que se aceptarán desde el clientela. Su valor predeterminado es 100. Se recomienda reducir este valor si se producen ataques DDos. como resultado de tantos encabezados de solicitud http.
- LimitRequestFieldSize. nos ayuda a establecer un límite de tamaño en el encabezado de solicitud HTTP.
12. Habilite el registro de Apache
Apache le permite iniciar sesión independientemente del registro de su sistema operativo. Es aconsejable habilitar el registro de Apache, ya que proporciona más información, como los comandos introducidos por los usuarios que han interactuado con su servidor web.
Para hacerlo, debe incluir mod_log_config módulo. Hay tres directivas principales relacionadas con el registro disponibles con Apache.
- TransferLog. creación de un archivo de registro.
- LogFormat. Especificar un formato personalizado.
- CustomLog. crear y formatear un archivo de registro.
También puede usarlos para un sitio web en particular lo estás haciendo Alojamiento virtual. y para eso necesitas especificarlo en la sección de alojamiento virtual. Por ejemplo, aquí está la configuración del host virtual de mi sitio web con el registro habilitado.
13. Protección de Apache con certificados SSL
Por último, pero no menos importante, certificados SSL. puede proteger todas sus comunicaciones de forma cifrada a través de Internet con certificado SSL. Supongamos que tiene un sitio web en el que las personas inician sesión probando sus credenciales de inicio de sesión o tiene un sitio web de comercio electrónico donde las personas proporcionan sus datos bancarios. o débito. crédito. detalles de la tarjeta para comprar productos, de manera predeterminada, su servidor web envía estos detalles en formato de texto sin formato, pero cuando usa certificados SSL. en sus sitios web, Apache. envía todo esto información en texto cifrado.
Puede comprar certificados SSl. de tantos proveedores SSL diferentes como namecheap.com. Si tiene una empresa web muy pequeña y no está dispuesto a comprar un certificado SSL. aún puede asignar un certificado autofirmado. a su sitio web. Apache. utiliza el módulo mod_ssl. para admitir el certificado SSL.
# openssl genrsa-des3-out example.com.key 1024 # openssl req-new-key example.com.key-out exmaple.csr # openssl x509-req-days 365-in example.com.com.csr-signkey example.com.com.key-out example.com.com.crt
Una vez que se haya creado y firmado su certificado. Ahora necesita agregar esto en la configuración de Apache. Abra el archivo de configuración principal con el editor vim y agregue las siguientes líneas y reinicie el servicio.
Abra su navegador, escriba https://example.com. y podrá ver el nuevo certificado autofirmado.