Compartir tecnología

Apache anti-leeching, compresión de páginas web, almacenamiento en caché de páginas web

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabla de contenido

Compresión de páginas web

tipo

Ejemplo

Agregar dinámicamente pasos de operación del módulo

Pasos para reinstalar Apache

caché web

Ejemplo

Pasos

Ocultar información de versión

Pasos

Apache anti-sanguijuelas

definición

principio

Configurar el entorno experimental anti-hotlink

ambiente de laboratorio

Ejemplo de enlace directo de imágenes locales

Pasos

Ejemplo anti-vínculos

Pasos


Compresión de páginas web

La velocidad de acceso a un sitio web está determinada por múltiples factores, entre ellos la velocidad de respuesta de la aplicación, el ancho de banda de la red, el rendimiento del servidor, la velocidad de transmisión de la red con el cliente, etc. Uno de los factores más importantes es la capacidad de respuesta del propio Apache. Puede utilizar la compresión web para aumentar la velocidad de su aplicación. Más importante aún, no cuesta nada en absoluto y sólo aumentará ligeramente el uso de la CPU del servidor en uno o dos puntos porcentuales o menos.

tipo

  • Comprimir
    • Alta eficiencia de compresión, alto uso de CPU
  • desinflar
    • La eficiencia de la compresión no es tan alta como la de gzip y consume menos CPU.

Ejemplo

Compresión de páginas web mediante módulo deflate.

Si ya instaló Apache a través del paquete de código fuente, si aún conserva el paquete de código fuente, puede reconfigurarlo, compilarlo e instalarlo. La reinstalación de Apache no afectará los parámetros anteriores.

O si ha configurado la función de cargar módulos dinámicamente durante la última instalación, puede usar las herramientas apxs para agregar módulos dinámicamente sin reinstalarlos.

Agregar dinámicamente pasos de operación del módulo

Agregue dinámicamente el módulo deflate sin reinstalar Apache

cd al servidor HTTP Apache para almacenar el código del módulo relacionado con los filtros

Utilice la herramienta apxs para operar

  • -i: instalar el módulo. Instale el módulo compilado en el servidor Apache.
  • -c: compilar módulo. Compile el archivo de código fuente (aquí mod_deflate.c) en un archivo de objeto compartido (archivo .so).
  • -a: Activa automáticamente el módulo. Después de compilar e instalar el módulo, habilítelo inmediatamente, no es necesario editar manualmente el archivo de configuración.

Finalmente, use el comando apachectl con pipes y grep para verificar si el módulo deflate se cargó exitosamente.

  1. [root@localhost filters]# cd /root/httpd-2.4.25/modules/filters/
  2. [root@localhost filters]# apxs -i -c -a mod_deflate.c
  3. [root@localhost filters]# apachectl -t -D DUMP_MODULES | grep deflate
  4. deflate_module (shared)

Habilite el módulo mod_deflate en el archivo de configuración httpd

  1. [root@localhost filters]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/deflate
  3. LoadModule deflate_module modules/mod_deflate.so # 去掉开头注释
  4. <IfModule mod_deflate.c>
  5. # 对指定的类型应用deflat进行压缩(文本、样式表、图像)
  6. AddOutputFilterByType DEFLATE text/html text/css text/jpg text/png text/gif
  7. DeflateCompressionLevel 9 # 指定了压缩级别为9,表示最高级别的压缩(压缩比最高,但消耗CPU资源较多)
  8. SetOutputFilter DEFLATE # 指定默认的输出过滤器为deflate进行输出内容的压缩
  9. </IfModule>

Pasos para reinstalar Apache

Agregue el módulo deflate reinstalando Apache directamente

Usar primeroapachectl -t -D MÓDULOS_DE_VOLCADO | grep deflateComando para verificar si Apache tiene actualmente un módulo desinflado

Si Apache está habilitado, usesystemctl detiene httpdCerrar servicio

Ingrese al directorio de descompresión del paquete de código fuente, especifique el directorio de instalación y habilite algunas funciones. El módulo deflate se utiliza para la compresión de páginas web.

./configurarDespués del procesamiento, usehacer && hacer instalarComando para compilar e instalar

  1. [root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
  2. [root@localhost httpd-2.4.25]# make && make install

Utilice el comando ll para comprobar si el módulo deflate está habilitado. Puede ver que el archivo mod_deflate.so existe.

  1. [root@localhost httpd-2.4.25]# ll /usr/local/httpd/modules/mod_deflate.so
  2. -rwxr-xr-x 1 root root 53096 7月 10 20:43 /usr/local/httpd/modules/mod_deflate.so

pero usaapachectl -t -D MÓDULOS_DE_VOLCADO | grep deflateEl comando no se puede consultar porque no está habilitado en el archivo de configuración de Apache.

Edite el archivo de configuración principal de httpd. Aproximadamente en la línea 143, puede ver que hay muchos.Módulo de cargadeclaraciones, agregaremos nuevas declaraciones de carga de módulos debajo de estos LoadModules.

En la segunda parte de la declaración de carga del módulo, puede usar una ruta absoluta o una ruta relativa. Porque al instalar Apache, la regla de prefijo (prefijo) se define a través del script ./configure, por lo que desea especificar una determinada en. el archivo de configuración de Apache. La ruta al archivo, la ruta del prefijo se puede omitir.

La etiqueta IfModule se utiliza para cargar condicionalmente la configuración del módulo. Su función es verificar si el módulo especificado está cargado en el entorno Apache actual. Solo cuando el módulo esté cargado, las instrucciones de configuración incluidas en la etiqueta IfModule tendrán efecto.

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. LoadModule deflate_module modules/mod_deflate.so
  3. <IfModule mod_deflate.c> # 只有当 mod_deflate 模块加载时才会执行下面的配置
  4. DeflateCompressionLevel 6 # 压缩级别,数字越大压缩比就越大
  5. SetOutputFilter DEFLATE # 启用deflate模块
  6. # 告诉服务器对哪些文件进行压缩,如果是已经压缩过的,就不再压缩
  7. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/json
  8. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
  9. SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
  10. SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
  11. AddOutputFilterByType DEFLATE text/*
  12. AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
  13. AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
  14. </IfModule>

Guardar y salir, puedes usarhttpd-tPara detectar si hay errores de sintaxis en el archivo de configuración. Si indica Sintaxis OK, significa que no hay errores.

Debido a que httpd necesita recargar el archivo de configuración modificado para que la configuración recién agregada surta efecto, reinicie el servicio.

En este momento, acceda al servidor web en el navegador, presione F12 en el teclado para abrir las herramientas de desarrollador, seleccione la dirección IP del servidor web y podrá ver en el encabezado de respuesta que la tecnología de compresión es gzip.

El experimento termina


caché web

El almacenamiento en caché de páginas web consiste en almacenar en caché algunas páginas que a menudo no cambian o rara vez cambian. La próxima vez que el navegador acceda a estas páginas, no es necesario volver a descargarlas, lo que mejora la velocidad de acceso del usuario. El módulo mod_expires de Apache generará automáticamente la etiqueta Expires y la etiqueta Cache-Control en la información del encabezado de la página. En función de las etiquetas, el navegador del cliente decide obtener la página en el caché de la máquina local para la próxima visita, sin realizar otra solicitud. el servidor Reducir la frecuencia y el número de accesos de clientes para lograr el propósito de reducir el tráfico innecesario y aumentar la velocidad de acceso.

Ejemplo

Implementar el almacenamiento en caché de páginas web

Pasos

Abra el archivo de configuración principal httpd, habilite el módulo de caducidad, agréguelo y reinicie el servicio.

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式搜索:/expires_module
  3. 将前面的注释去掉,开启expires模块
  4. LoadModule expires_module modules/mod_expires.so
  5. <IfModule mod_expires.c>
  6. ExpiresActive On # 开启缓存功能
  7. ExpiresDefault "access plus 60 seconds" # 缓存时间设置为60秒
  8. </IfModule>
  9. 检测语法正确性,重启服务
  10. [root@localhost httpd-2.4.25]# httpd -t
  11. Syntax OK
  12. [root@localhost httpd-2.4.25]# systemctl restart httpd

Después de reiniciar el servicio, vaya al navegador para acceder al servidor web y podrá ver que hay dos líneas más de información en el encabezado de respuesta.


Ocultar información de versión

La información de vulnerabilidad del software está relacionada con una versión específica, por lo que el número de versión es muy útil para los atacantes. En las herramientas de desarrollo del navegador, puede ver la información de la versión de Apache en el elemento del servidor en el encabezado de respuesta.

Si un atacante de la red obtiene la información de la versión de Apache, llevará a cabo ataques dirigidos y provocará pérdidas en el sitio web. Por lo tanto, en el entorno de producción real, el número de versión de Apache debe ocultarse para reducir el riesgo de ataques.

Pasos

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/httpd-default
  3. 将Include语句前的注释去掉,表示包含Include语句后面指定的文件在当前文件中(相当于把指定文件的内容复制粘贴到当前文件的当前Include语句的位置)
  4. # Various default settings
  5. Include conf/extra/httpd-default.conf

Guarde y salga, abra el archivo httpd.default

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/extra/httpd-default.conf
  2. 在第55行就可以设置隐藏版本信息,这里改为Prod
  3. ServerTokens Prod

Puede ver que las opciones se proporcionan en los comentarios:Establezca uno de los siguientes valores: Completo | SO | Menor | Mínimo | Mayor | Prod

Opciones

ilustrar

Tokens de servidor completos

Devuelve la información más detallada del servidor, incluido el tipo de sistema operativo y la lista de módulos compilados.

Por ejemplo: Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11

Sistema operativo ServerTokens

Sólo se devuelve el tipo de sistema operativo.

Por ejemplo: Apache/2.4.41 (Unix)

ServerTokens Menor

Devuelve los números de versión mayor y menor.

Por ejemplo: Apache/2.4

Tokens de servidor mínimos

Devuelve el número de versión principal.

Por ejemplo: Apache/2

ServerTokens Mayor

Sólo se devuelve el número de versión principal.

Por ejemplo: Apache/2

Producto de ServerTokens

Devuelve información mínima, mostrando solo Apache, omitiendo el número de versión.

Por ejemplo: apache

Guarde y salga, reinicie el servicio.Acceder al servidor web

Puedes ver que la información de la versión solo muestra un Apache.


Apache anti-sanguijuelas

Apache hotlinking es una medida de protección que evita que otros sitios web o terceros no autorizados se vinculen directamente a imágenes, videos, audios u otros recursos en su sitio web.

Cuando un sitio web utiliza recursos directamente de su sitio, en realidad está consumiendo su ancho de banda y recursos del servidor, posiblemente sin su permiso.

definición

  • Anti-hotlinking se refiere a prohibir que sitios web externos o terceros no autorizados utilicen directamente enlaces de recursos en su sitio web a través de la configuración del servidor. Si alguien intenta utilizar el enlace de su recurso directamente en su página, los visitantes verán un problema en esa página donde no se puede cargar el recurso o aparecerá contenido alternativo.

principio

  • Comprobación de referencia HTTP: el servidor determina el origen de la solicitud de recurso comprobando el encabezado de referencia en la solicitud HTTP. Si se descubre que el Referer no proviene de una fuente que usted permita (como su propio sitio web), el servidor puede negarse a proporcionar el recurso o devolver contenido alternativo.
  • Reglas de reescritura: utilice las reglas de reescritura de Apache para reescribir solicitudes, verifique el encabezado del Referer y luego decida si proporciona recursos o rechaza la solicitud según la configuración.

Configurar el entorno experimental anti-hotlink

nombre de la CPU

nombre de dominio

dirección IP

Sistema operativo

Principales software y versiones.

apache1

www.e1.com

192.168.10.101

CentOS7.9

httpd-2.4.25.tar.gz

apache2

www.e2.com

192.168.10.201

CentOS7.9

Instalación httpd-2.4.25.tar.gz o yum

cliente

Ventanas 10

Navegador

ambiente de laboratorio

Clone el primer servidor directamente o use yum -y install httpd para instalar httpd y cambie la dirección IP a 192.168.10.102

Modificar los nombres de host de los dos servidores.

  1. 101主机
  2. [root@localhost ~]# hostname apache1
  3. [root@localhost ~]# bash
  4. [root@apache1 ~]#
  5. 201主机
  6. [root@localhost ~]# hostname apache2
  7. [root@localhost ~]# bash
  8. [root@apache2 ~]#

Modifique los archivos de hosts de los dos servidores web para que puedan resolver los nombres de dominio correspondientes.

Siga los mismos pasos a continuación para modificar el host 201

  1. [root@apache1 ~]# vim /etc/hosts
  2. 在hosts文件末尾追加
  3. 192.168.10.101 www.e1.com
  4. 192.168.10.201 www.e2.com

Para el archivo de hosts del host del cliente Win10, en C:WindowsSystem32driversetc, haga doble clic en el archivo de hosts para abrirlo con el Bloc de notas.

Apague el firewall y el mecanismo de seguridad del kernel de los dos servidores web, habilite el servicio httpd e intente ver si puede acceder a los dos servidores web en el host del cliente.

  1. 在两个Web服务器操作
  2. [root@apache1 ~]# systemctl start httpd
  3. [root@apache1 ~]# setenforce 0

Ejemplo de enlace directo de imágenes locales

101 host es mi sitio y necesito robar las imágenes en el servidor web 201 host.

Es decir, www.e1.com roba el enlace de la imagen de www.e2.com.

Pasos

Ven al anfitrión 201

Ingrese al directorio donde httpd almacena los archivos de la página web, arrastre una imagen y edite el archivo index.html.

  1. [root@apache2 ~]# cd /usr/local/httpd/htdocs/
  2. 在该目录下从宿主机拖入一张图片
  3. [root@apache2 htdocs]# vim index.html
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>标题</title>
  8. </head>
  9. <body>
  10. <h1>原图网站</h1>
  11. <img src="logo.jpg" /> # 如果图片文件是在网页文件同一目录下,可以不用加路径
  12. </body>
  13. </html>

Guarde y salga. En este momento, use el navegador para visitar www.e2.com en la máquina host y podrá ver que hay imágenes en la página web.

Si desea robar imágenes de otros sitios web, necesita un enlace a la imagen. Haga clic derecho en la imagen en el navegador y seleccione Copiar enlace de imagen.

Ven a 101 anfitrión

Agregue un enlace a la imagen en la página de inicio del servidor 101Web

  1. [root@apache1 ~]# cd /var/www/html # 使用yum安装httpd的存放网页文件的目录
  2. [root@apache1 html]# vim index.html
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>标题</title>
  7. </head>
  8. <body>
  9. <h1>盗图网站</h1>
  10. <img src="http://www.e2.com/logo.jpg" />
  11. </body>
  12. </html>

Guarde y salga, vaya al host del cliente Win10 y visite las dos URL www.e1.com y www.e2.com

Utilice F12 para abrir las herramientas de desarrollador. Puede ver en la red que la URL de solicitud y los enlaces de imágenes de www.e2.com son propios de www.e2.com.

La URL de solicitud de www.e1.com es www.e1.com, pero la solicitud de imagen es la IP del host www.e2.com + enlace de imagen

Hasta ahora, se ha implementado un enlace directo de imágenes local simple.

Ejemplo anti-vínculos

Si otro host roba el enlace de la imagen del host 201, solo se mostrará la imagen fija en lugar de la imagen que la otra parte quiere robar.

Pasos

Importe otra imagen (error.jpg) al directorio htdocs del host 201 (www.e2.com) que proporciona la imagen original para experimentos anti-sanguijuelas.

Luego edite el archivo de configuración de httpd y habilite el módulo de reescritura (reescritura de direcciones). El propósito de la reescritura es que si alguien solicita mi logo.jpg, redirija la solicitud a error.jpg.

Con la función de reescritura de dirección, la solicitud se puede revisar y juzgar. Si la solicitud tiene el prefijo www.e2.com, se permitirá el acceso. Si el prefijo de la solicitud no es www.e2.com, se permitirá el acceso a la imagen. no estar permitido.

  1. [root@apache2 htdocs]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/rewrite
  3. LoadModule rewrite_module modules/mod_rewrite.so # 将开头注释去掉,启用rewrite模块
  4. 在末行模式下搜索:/htdocs
  5. 在<Directory "/usr/local/httpd/htdocs">标签内往下翻
  6. 找到AllowOverride参数的行,修改内容为下方内容
  7. AllowOverride None
  8. RewriteEngine On
  9. RewriteCond %{HTTP_REFERER} !^http://e2.com$ [NC]
  10. RewriteCond %{HTTP_REFERER} !^http://e2.com/.*$ [NC]
  11. RewriteCond %{HTTP_REFERER} !^http://www.e2.com$ [NC]
  12. RewriteCond %{HTTP_REFERER} !^http://www.e2.com/.*$ [NC]
  13. RewriteRule .*.(gif|jpg|swf)$ http://www.e2.com/error.png

parámetro

ilustrar

Permitir anular TODO

Permita RewriteEngine y otras reglas de reescritura en archivos .htaccess.

TODOS: permite que todos los tipos de directivas de reescritura sean anuladas por reglas en el archivo .htaccess.

Ninguno: no permite el uso de archivos .htaccess en este directorio para anular la configuración del servidor.

RewriteEngine activado

Habilitar la reescritura, este es el primer paso para habilitar las reglas de reescritura

ReescrituraCond

Definir condiciones de reescritura

%{REFERENCIA HTTP}

Es una variable incorporada de Apache. Esta variable puede obtener la URL en la información del encabezado del mensaje de solicitud cuando el usuario accede.

Haga coincidir el valor del Referer en la solicitud

!^http://www.e2.com/.*$

Cualquier archivo bajo la URL (.*: coincide con uno o varios caracteres)

Indica que no coincide con una cadena que comienza con http://www.e2.com/ y termina con uno o varios caracteres.

[CAROLINA DEL NORTE]

El filtrado no distingue entre mayúsculas y minúsculas

Regla de reescritura

Definir reglas de reescritura

.*.(gif|jpg|swf)$ http://www.e2.com/error.png

Cuando la condición de reescritura anterior coincide, si la URL solicitada termina en .gif, .jpg o .swf

Luego la solicitud será redirigida a http://www.e2.com/error.png

.*: coincide con cualquier número de caracteres

.: El punto escapado por el carácter de escape, aquí está el significado de punto simple

Guarde y salga, reinicie el servicio.

Finalmente, llegamos al host del cliente (Win10) para probar y evitar que el navegador almacene en caché la imagen, así que use las teclas de acceso directo Ctrl + Shift + Eliminar para borrar el caché del navegador.

Luego visite www.e2.com y todo funciona bien.

Al visitar www.e1.com, el enlace de la imagen robada se convierte en la imagen error.png redirigida.