Partage de technologie

Anti-sangsue Apache, compression de pages Web, mise en cache de pages Web

2024-07-12

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

Table des matières

Compression de pages Web

taper

Exemple

Ajouter dynamiquement les étapes de fonctionnement du module

Étapes pour réinstaller Apache

cache Web

Exemple

Pas

Masquer les informations de version

Pas

Apache anti-sangsue

définition

principe

Configurer l'environnement expérimental anti-hotlink

environnement de laboratoire

Exemple de hotlinking d'images locales

Pas

Exemple d'anti-hotlink

Pas


Compression de pages Web

La vitesse d'accès d'un site Web est déterminée par plusieurs facteurs, notamment la vitesse de réponse de l'application, la bande passante du réseau, les performances du serveur, la vitesse de transmission du réseau avec le client, etc. L'un des facteurs les plus importants est la réactivité d'Apache lui-même. Vous pouvez utiliser la compression Web pour augmenter la vitesse de votre application. Plus important encore, cela ne coûte rien du tout et n’augmentera que légèrement l’utilisation du processeur du serveur d’un ou deux points de pourcentage ou moins.

taper

  • gzip
    • Efficacité de compression élevée, utilisation élevée du processeur
  • dégonfler
    • L'efficacité de la compression n'est pas aussi élevée que celle de gzip et consomme moins de CPU.

Exemple

Compression de pages Web via le module deflate

Si vous avez déjà installé Apache via le package de code source, si vous conservez toujours le package de code source, vous pouvez le reconfigurer, le compiler et l'installer. La réinstallation d'Apache n'affectera pas les paramètres précédents.

Ou si vous avez configuré la fonction de chargement dynamique des modules lors de la dernière installation, vous pouvez utiliser les outils apxs pour ajouter dynamiquement des modules sans réinstaller.

Ajouter dynamiquement les étapes de fonctionnement du module

Ajoutez dynamiquement le module deflate sans réinstaller Apache

cd sur le serveur HTTP Apache pour stocker le code du module lié aux filtres

Utilisez l'outil apxs pour fonctionner

  • -i : installe le module. Installez le module compilé sur le serveur Apache.
  • -c : module de compilation. Compilez le fichier de code source (ici mod_deflate.c) dans un fichier objet partagé (fichier .so).
  • -a : Activer automatiquement le module. Après avoir compilé et installé le module, activez-le immédiatement, pas besoin de modifier manuellement le fichier de configuration.

Enfin, utilisez la commande apachectl avec pipes et grep pour vérifier si le module deflate est chargé avec succès.

  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)

Activer le module mod_deflate dans le fichier de configuration 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>

Étapes pour réinstaller Apache

Ajoutez le module deflate en réinstallant directement Apache

Utiliser en premierapachectl -t -D DUMP_MODULES | grep deflateCommande pour vérifier si Apache a actuellement le module deflate

Si Apache est activé, utilisezsystemctl arrête httpdFermer le service

Entrez le répertoire de décompression du package de code source, spécifiez le répertoire d'installation et activez certaines fonctions. Le module deflate est utilisé pour la compression des pages Web.

./configurerAprès traitement, utilisezfaire && faire installerCommande pour compiler et installer

  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

Utilisez la commande ll pour vérifier si le module deflate est activé. Vous pouvez voir que le fichier 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

Mais utiliseapachectl -t -D DUMP_MODULES | grep deflateLa commande ne peut pas être interrogée car elle n'est pas activée dans le fichier de configuration Apache.

Modifiez le fichier de configuration principal de httpd Vers la ligne 143, vous pouvez voir qu'il y en a beaucoup.Module de chargement, nous ajouterons de nouvelles instructions de chargement de module sous ces LoadModules.

Dans la deuxième partie de l'instruction de chargement du module, vous pouvez utiliser un chemin absolu ou un chemin relatif. Parce que lors de l'installation d'Apache, la règle de préfixe (préfixe) est définie via le script ./configure, vous souhaitez donc en spécifier une certaine. le fichier de configuration Apache Le chemin d'accès au fichier, le chemin du préfixe peut être omis.

La balise IfModule est utilisée pour charger conditionnellement la configuration du module. Sa fonction est de vérifier si le module spécifié est chargé dans l'environnement Apache actuel. Ce n'est que lorsque le module est chargé que les instructions de configuration enveloppées dans la balise IfModule prendront effet.

  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>

Enregistrez et quittez, vous pouvez utiliserhttpd -tPour détecter s'il y a des erreurs de syntaxe dans le fichier de configuration. S'il demande Syntaxe OK, cela signifie qu'il n'y a aucune erreur.

Étant donné que httpd doit recharger le fichier de configuration modifié pour que la configuration nouvellement ajoutée prenne effet, redémarrez le service.

À ce stade, accédez au serveur Web dans le navigateur, appuyez sur F12 sur le clavier pour ouvrir les outils de développement, sélectionnez l'adresse IP du serveur Web et vous pourrez voir dans l'en-tête de réponse que la technologie de compression est gzip.

Fin du test


cache Web

La mise en cache des pages Web consiste à mettre en cache certaines pages qui ne changent souvent pas ou changent rarement la prochaine fois que le navigateur accède à nouveau à ces pages, il n'est pas nécessaire de télécharger à nouveau ces pages, améliorant ainsi la vitesse d'accès de l'utilisateur. Le module mod_expires d'Apache générera automatiquement la balise Expires et la balise Cache-Control dans les informations d'en-tête de la page. En fonction des balises, le navigateur client décide d'obtenir la page dans le cache de la machine locale pour la prochaine visite, sans faire une autre demande. le serveur. Réduisez la fréquence et le nombre d’accès clients pour atteindre l’objectif de réduire le trafic inutile et d’augmenter la vitesse d’accès.

Exemple

Implémenter la mise en cache des pages Web

Pas

Ouvrez le fichier de configuration principal httpd, activez le module expire, ajoutez-le, puis redémarrez le service.

  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

Après avoir redémarré le service, accédez au navigateur pour accéder au serveur Web et vous pouvez voir qu'il y a deux autres lignes d'informations dans l'en-tête de réponse.


Masquer les informations de version

Les informations de vulnérabilité du logiciel sont liées à une version spécifique, le numéro de version est donc très utile pour les attaquants. Dans les outils de développement du navigateur, vous pouvez voir les informations de version d'Apache dans l'élément serveur dans l'en-tête de réponse.

Si un attaquant du réseau obtient les informations de version d'Apache, il mènera des attaques ciblées et causera des pertes au site Web. Par conséquent, dans l’environnement de production actuel, le numéro de version d’Apache doit être masqué pour réduire le risque d’attaques.

Pas

  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

Enregistrez et quittez, ouvrez le fichier httpd.default

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

Vous pouvez voir que les options sont proposées dans les commentaires :Définir sur l'un des éléments suivants : Complet | Système d'exploitation | Mineur | Minimal | Majeur | Prod

Possibilités

illustrer

Jetons de serveur complets

Renvoie les informations les plus détaillées sur le serveur, y compris le type de système d'exploitation et la liste des modules compilés.

Par exemple : Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11

Système d'exploitation ServerTokens

Seul le type de système d'exploitation est renvoyé.

Par exemple : Apache/2.4.41 (Unix)

Jetons de serveur mineurs

Renvoie les numéros de version majeure et mineure.

Par exemple : Apache/2.4

Jetons de serveur minimaux

Renvoie le numéro de version majeure.

Par exemple : Apache/2

Jetons de serveur majeurs

Seul le numéro de version majeure est renvoyé.

Par exemple : Apache/2

Production de jetons de serveur

Renvoie des informations minimales, affichant uniquement Apache, en omettant le numéro de version.

Par exemple : Apache

Enregistrez et quittez, redémarrez le service.Accéder au serveur Web

Vous pouvez voir que les informations de version n'affichent qu'un seul Apache


Apache anti-sangsue

Le hotlinking Apache est une mesure de protection qui empêche d'autres sites Web ou des tiers non autorisés de créer des liens directs vers des images, des vidéos, des audios ou d'autres ressources de votre site Web.

Lorsqu'un site Web utilise des ressources directement à partir de votre site, il consomme en réalité votre bande passante et les ressources de votre serveur, éventuellement sans votre autorisation.

définition

  • L'anti-hotlinking fait référence à l'interdiction de sites Web externes ou de tiers non autorisés d'utiliser directement les liens de ressources sur votre site Web via la configuration du serveur. Si quelqu'un essaie d'utiliser le lien de votre ressource directement dans sa page, les visiteurs verront un problème sur cette page où la ressource ne peut pas être chargée, ou un contenu alternatif apparaîtra.

principe

  • Vérification du référent HTTP : le serveur détermine la source de la demande de ressource en vérifiant l'en-tête Referer dans la requête HTTP. S'il s'avère que le référent ne provient pas d'une source que vous autorisez (telle que votre propre site Web), le serveur peut refuser de fournir la ressource ou renvoyer un contenu alternatif.
  • Règles de réécriture : utilisez les règles de réécriture d'Apache pour réécrire les demandes, vérifiez l'en-tête Referer, puis décidez si vous souhaitez fournir des ressources ou rejeter la demande en fonction des paramètres.

Configurer l'environnement expérimental anti-hotlink

Nom du processeur

nom de domaine

adresse IP

système opérateur

Principaux logiciels et versions

apache1

www.e1.com

192.168.10.101

CentOS 7.9

httpd-2.4.25.tar.gz

apache2

www.e2.com

192.168.10.201

CentOS 7.9

httpd-2.4.25.tar.gz ou installation miam

client

Windows 10

Navigateur

environnement de laboratoire

Clonez directement le premier serveur ou utilisez yum -y install httpd pour installer httpd et modifiez l'adresse IP en 192.168.10.102

Modifier les noms d'hôtes des deux serveurs

  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 ~]#

Modifiez les fichiers hosts des deux serveurs web afin qu'ils puissent résoudre les noms de domaine correspondants.

Suivez les mêmes étapes ci-dessous pour modifier l'hôte 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

Pour le fichier hosts de l'hôte client Win10, sous C:WindowsSystem32driversetc, double-cliquez sur le fichier hosts pour l'ouvrir avec le Bloc-notes.

Désactivez le mécanisme de sécurité du pare-feu et du noyau des deux serveurs Web, activez le service httpd et essayez de voir si vous pouvez accéder aux deux serveurs Web sur l'hôte client.

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

Exemple de hotlinking d'images locales

L'hôte 101 est mon site et je dois voler les images sur le serveur Web hôte 201.

Autrement dit, www.e1.com vole le lien image de www.e2.com

Pas

Venez chez l'hôte 201

Entrez le répertoire dans lequel httpd stocke les fichiers de pages Web, faites glisser une image et modifiez le fichier 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>

Enregistrez et quittez. À ce moment, utilisez le navigateur pour visiter www.e2.com sur la machine hôte et vous pourrez voir qu'il y a des images sur la page Web.

Si vous souhaitez voler des images d'autres sites Web, vous avez besoin d'un lien vers l'image. Cliquez avec le bouton droit sur l'image dans le navigateur et sélectionnez Copier le lien de l'image.

Venez chez 101 Hôte

Ajouter un lien vers l'image sur la page d'accueil du serveur 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>

Enregistrez et quittez, accédez à l'hôte client Win10 et visitez les deux URL www.e1.com et www.e2.com

Utilisez F12 pour ouvrir les outils de développement. Vous pouvez voir sur le réseau que l'URL de requête et les liens d'image de www.e2.com appartiennent à www.e2.com.

L'URL de requête de www.e1.com est www.e1.com, mais la demande d'image est l'IP de l'hôte www.e2.com + lien image

Jusqu’à présent, un simple hotlinking d’images locales a été réalisé.

Exemple d'anti-hotlink

Si un autre hôte vole le lien d'image de l'hôte 201, seule l'image fixe sera affichée à la place de l'image que l'autre partie souhaite voler.

Pas

Importez une autre image (error.jpg) dans le répertoire htdocs de l'hôte 201 (www.e2.com) qui fournit l'image originale pour les expériences anti-sangsues.

Modifiez ensuite le fichier de configuration de httpd et activez le module de réécriture (réécriture d'adresse). Le but de la réécriture est que si quelqu'un demande mon logo.jpg, redirigez la demande vers error.jpg.

Avec la fonction de réécriture d'adresse, la demande peut être examinée et jugée. Si la demande est préfixée par www.e2.com, l'accès sera autorisé. Si le préfixe de la demande n'est pas www.e2.com, l'accès à l'image sera autorisé. ne soit pas autorisé.

  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

paramètre

illustrer

AutoriserRemplacer TOUT

Autoriser RewriteEngine et d'autres règles de réécriture dans les fichiers .htaccess.

ALL : permet à tous les types de directives de réécriture d'être remplacées par les règles du fichier .htaccess.

Aucun : interdit l'utilisation de fichiers .htaccess dans ce répertoire pour remplacer la configuration du serveur

Moteur de réécriture activé

Activer la réécriture, c'est la première étape pour activer les règles de réécriture

RéécrireCond

Définir les conditions de réécriture

%{Référencement_HTTP}

Il s'agit d'une variable intégrée d'Apache. Cette variable peut obtenir l'URL dans les informations d'en-tête du message de requête lorsque l'utilisateur y accède.

Faites correspondre la valeur du référent dans la demande

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

Tout fichier sous l'URL (.* : correspond à un ou plusieurs caractères)

Indique qu'il ne correspond pas à une chaîne commençant par http://www.e2.com/ et se terminant par un ou plusieurs caractères.

[NC]

Le filtrage n'est pas sensible à la casse

Règle de réécriture

Définir des règles de réécriture

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

Lorsque la condition de réécriture précédente correspond, si l'URL demandée se termine par .gif, .jpg ou .swf

Ensuite la requête sera redirigée vers http://www.e2.com/error.png

.* : correspond à n'importe quel nombre de caractères

.: Le point échappé par le caractère d'échappement, voici la signification du point simple

Enregistrez et quittez, redémarrez le service.

Enfin, nous sommes venus chez l'hôte client (Win10) pour tester afin d'éviter que l'image ne soit mise en cache par le navigateur, utilisez donc les touches de raccourci Ctrl + Maj + Suppr pour vider le cache du navigateur.

Alors visitez www.e2.com et tout fonctionne bien

Lors de la visite de www.e1.com, le lien de l’image volée devient l’image error.png redirigée.