Technologieaustausch

Apache Anti-Leeching, Webseitenkomprimierung, Webseiten-Caching

2024-07-12

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

Inhaltsverzeichnis

Komprimierung von Webseiten

Typ

Beispiel

Fügen Sie Modulbetriebsschritte dynamisch hinzu

Schritte zur Neuinstallation von Apache

Web-Cache

Beispiel

Schritte

Versionsinformationen ausblenden

Schritte

Apache-Anti-Blutegel

Definition

Prinzip

Konfigurieren Sie die experimentelle Anti-Hotlink-Umgebung

Laborumgebung

Beispiel für lokales Bild-Hotlinking

Schritte

Beispiel für Anti-Hotlink

Schritte


Komprimierung von Webseiten

Die Zugriffsgeschwindigkeit einer Website wird von mehreren Faktoren bestimmt, darunter der Reaktionsgeschwindigkeit der Anwendung, der Netzwerkbandbreite, der Serverleistung, der Netzwerkübertragungsgeschwindigkeit mit dem Client usw. Einer der wichtigsten Faktoren ist die Reaktionsfähigkeit von Apache selbst. Mithilfe der Webkomprimierung können Sie die Geschwindigkeit Ihrer Anwendung erhöhen. Noch wichtiger ist, dass es überhaupt nichts kostet und die CPU-Auslastung des Servers nur geringfügig um ein oder zwei Prozentpunkte oder weniger erhöht.

Typ

  • gzip
    • Hohe Komprimierungseffizienz, hohe CPU-Auslastung
  • Luft ablassen
    • Die Komprimierungseffizienz ist nicht so hoch wie bei gzip und es verbraucht weniger CPU.

Beispiel

Webseitenkomprimierung durch Deflate-Modul

Wenn Sie Apache bereits über das Quellcodepaket installiert haben und das Quellcodepaket weiterhin behalten, können Sie es neu konfigurieren, kompilieren und installieren. Eine Neuinstallation von Apache hat keine Auswirkungen auf die vorherigen Parameter.

Oder wenn Sie bei der letzten Installation die Funktion zum dynamischen Laden von Modulen konfiguriert haben, können Sie mit den Apxs-Tools Module dynamisch hinzufügen, ohne sie neu zu installieren.

Fügen Sie Modulbetriebsschritte dynamisch hinzu

Fügen Sie das Deflate-Modul dynamisch hinzu, ohne Apache neu zu installieren

cd an den Apache-HTTP-Server, um Modulcode für Filter zu speichern

Verwenden Sie zum Betrieb das Apxs-Tool

  • -i: Modul installieren. Installieren Sie das kompilierte Modul auf dem Apache-Server.
  • -c: Modul kompilieren. Kompilieren Sie die Quellcodedatei (hier mod_deflate.c) in eine gemeinsam genutzte Objektdatei (.so-Datei).
  • -a: Modul automatisch aktivieren. Nach dem Kompilieren und Installieren des Moduls können Sie es sofort aktivieren, ohne dass die Konfigurationsdatei manuell bearbeitet werden muss.

Verwenden Sie abschließend den Befehl apachectl mit Pipes und grep, um zu überprüfen, ob das Deflate-Modul erfolgreich geladen wurde.

  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)

Aktivieren Sie das Modul mod_deflate in der httpd-Konfigurationsdatei

  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>

Schritte zur Neuinstallation von Apache

Fügen Sie das Deflate-Modul hinzu, indem Sie Apache direkt neu installieren

Zuerst verwendenapachectl -t -D DUMP_MODULES | grep deflateBefehl zum Überprüfen, ob Apache derzeit über ein Deflate-Modul verfügt

Wenn Apache aktiviert ist, verwenden Siesystemctl stoppt httpdEnger Service

Geben Sie das Dekomprimierungsverzeichnis des Quellcodepakets ein, geben Sie das Installationsverzeichnis an und aktivieren Sie einige Funktionen. Das Deflate-Modul wird für die Webseitenkomprimierung verwendet.

./konfigurierenNach der Verarbeitung verwendenmachen && machen installierenBefehl zum Kompilieren und Installieren

  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

Überprüfen Sie mit dem Befehl ll, ob das Deflate-Modul aktiviert ist. Sie können sehen, dass die Datei mod_deflate.so vorhanden ist.

  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

Aber nutzenapachectl -t -D DUMP_MODULES | grep deflateDer Befehl kann nicht abgefragt werden, da er in der Apache-Konfigurationsdatei nicht aktiviert ist.

Bearbeiten Sie die Hauptkonfigurationsdatei von httpd. Ungefähr in Zeile 143 können Sie sehen, dass es viele gibtLademodulAnweisungen hinzufügen, werden wir unterhalb dieser LoadModules neue Anweisungen zum Laden von Modulen hinzufügen.

Im zweiten Teil der Modulladeanweisung können Sie einen absoluten Pfad oder einen relativen Pfad verwenden. Da bei der Installation von Apache die Präfixregel (Präfix) über das Skript ./configure definiert wird, möchten Sie einen bestimmten Pfad angeben die Apache-Konfigurationsdatei. Der Pfad zur Datei, der Präfixpfad kann weggelassen werden

Das IfModule-Tag wird zum bedingten Laden der Modulkonfiguration verwendet. Seine Funktion besteht darin, zu überprüfen, ob das angegebene Modul in der aktuellen Apache-Umgebung geladen ist. Nur wenn das Modul geladen wird, werden die im IfModule-Tag enthaltenen Konfigurationsanweisungen wirksam.

  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>

Speichern und beenden, Sie können es verwendenhttpd -tUm zu erkennen, ob Syntaxfehler in der Konfigurationsdatei vorhanden sind, bedeutet dies, dass keine Fehler vorliegen.

Da httpd die geänderte Konfigurationsdatei neu laden muss, damit die neu hinzugefügte Konfiguration wirksam wird, starten Sie den Dienst neu.

Greifen Sie zu diesem Zeitpunkt im Browser auf den Webserver zu, drücken Sie F12 auf der Tastatur, um die Entwicklertools zu öffnen, wählen Sie die IP-Adresse des Webservers aus und Sie können im Antwortheader sehen, dass die Komprimierungstechnologie gzip ist

Das Experiment endet


Web-Cache

Beim Zwischenspeichern von Webseiten werden einige Seiten zwischengespeichert, die sich häufig nicht oder nur selten ändern. Wenn der Browser das nächste Mal auf diese Seiten zugreift, ist es nicht erforderlich, diese Seiten erneut herunterzuladen, wodurch die Zugriffsgeschwindigkeit des Benutzers verbessert wird. Das Modul mod_expires von Apache generiert automatisch das Expires-Tag und das Cache-Control-Tag in den Seitenkopfinformationen. Basierend auf den Tags entscheidet der Client-Browser, die Seite für den nächsten Besuch im Cache des lokalen Computers abzurufen, ohne eine weitere Anfrage zu stellen Reduzieren Sie die Häufigkeit und Anzahl der Clientzugriffe, um unnötigen Datenverkehr zu reduzieren und die Zugriffsgeschwindigkeit zu erhöhen.

Beispiel

Implementieren Sie das Caching von Webseiten

Schritte

Öffnen Sie die httpd-Hauptkonfigurationsdatei, aktivieren Sie das Ablaufmodul, fügen Sie es hinzu und starten Sie den Dienst neu.

  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

Rufen Sie nach dem Neustart des Dienstes den Browser auf, um auf den Webserver zuzugreifen. Sie können sehen, dass der Antwortheader zwei weitere Informationszeilen enthält.


Versionsinformationen ausblenden

Die Schwachstelleninformationen der Software beziehen sich auf eine bestimmte Version, daher ist die Versionsnummer für Angreifer sehr nützlich. In den Entwicklertools im Browser können Sie die Versionsinformationen von Apache im Serverelement im Antwortheader sehen.

Erlangt ein Netzwerkangreifer die Versionsinformationen von Apache, führt er gezielte Angriffe durch und verursacht Verluste auf der Website. Daher sollte in der tatsächlichen Produktionsumgebung die Versionsnummer von Apache ausgeblendet werden, um das Risiko von Angriffen zu verringern.

Schritte

  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

Speichern und beenden, die Datei httpd.default öffnen

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

Sie können sehen, dass die Optionen in den Kommentaren bereitgestellt werden:Auf einen der folgenden Werte einstellen: Full | OS | Minor | Minimal | Major | Prod

Optionen

veranschaulichen

ServerTokens voll

Gibt die detailliertesten Serverinformationen zurück, einschließlich Betriebssystemtyp und kompilierter Modulliste.

Zum Beispiel: Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11

ServerTokens OS

Es wird nur der Betriebssystemtyp zurückgegeben.

Beispiel: Apache/2.4.41 (Unix)

ServerTokens Minor

Gibt die Haupt- und Nebenversionsnummern zurück.

Beispiel: Apache/2.4

ServerTokens Minimal

Gibt die Hauptversionsnummer zurück.

Beispiel: Apache/2

ServerTokens Major

Es wird nur die Hauptversionsnummer zurückgegeben.

Beispiel: Apache/2

ServerTokens Prod

Gibt minimale Informationen zurück und zeigt nur Apache an, ohne die Versionsnummer.

Zum Beispiel: Apache

Speichern und beenden Sie den Dienst und starten Sie ihn neu.Auf den Webserver zugreifen

Sie können sehen, dass die Versionsinformationen nur einen Apache anzeigen


Apache-Anti-Blutegel

Apache-Hotlinking ist eine Schutzmaßnahme, die verhindert, dass andere Websites oder unbefugte Dritte direkt auf Bilder, Videos, Audios oder andere Ressourcen auf Ihrer Website verlinken.

Wenn eine Website Ressourcen direkt von Ihrer Website nutzt, verbrauchen sie tatsächlich Ihre Bandbreite und Serverressourcen, möglicherweise ohne Ihre Erlaubnis.

Definition

  • Anti-Hotlinking bezieht sich darauf, externen Websites oder unbefugten Dritten durch die Serverkonfiguration die direkte Nutzung von Ressourcenlinks auf Ihrer Website zu verbieten. Wenn jemand versucht, Ihren Ressourcenlink direkt auf seiner Seite zu verwenden, wird den Besuchern auf dieser Seite ein Problem angezeigt, bei dem die Ressource nicht geladen werden kann oder alternative Inhalte angezeigt werden.

Prinzip

  • HTTP-Referer-Prüfung: Der Server ermittelt die Quelle der Ressourcenanforderung, indem er den Referer-Header in der HTTP-Anfrage überprüft. Wenn sich herausstellt, dass der Referrer nicht von einer von Ihnen zugelassenen Quelle stammt (z. B. Ihrer eigenen Website), kann der Server die Bereitstellung der Ressource verweigern oder alternative Inhalte zurückgeben.
  • Rewrite-Regeln: Verwenden Sie die Rewrite-Regeln von Apache, um Anfragen neu zu schreiben, den Referrer-Header zu überprüfen und dann basierend auf den Einstellungen zu entscheiden, ob Ressourcen bereitgestellt oder die Anfrage abgelehnt werden sollen.

Konfigurieren Sie die experimentelle Anti-Hotlink-Umgebung

CPU-Name

Domainname

IP Adresse

Betriebssystem

Hauptsoftware und Versionen

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

httpd-2.4.25.tar.gz oder Yum-Installation

Klient

Windows 10

Browser

Laborumgebung

Klonen Sie den ersten Server direkt oder verwenden Sie yum -y install httpd, um httpd zu installieren, und ändern Sie die IP-Adresse in 192.168.10.102

Ändern Sie die Hostnamen der beiden Server

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

Ändern Sie die Hosts-Dateien der beiden Webserver so, dass sie die entsprechenden Domänennamen auflösen können.

Führen Sie die folgenden Schritte aus, um den 201-Host zu ändern

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

Doppelklicken Sie für die Hosts-Datei des Win10-Client-Hosts unter C:WindowsSystem32driversetc auf die Hosts-Datei, um sie mit Notepad zu öffnen.

Schalten Sie die Firewall und den Kernel-Sicherheitsmechanismus der beiden Webserver aus, aktivieren Sie den httpd-Dienst und prüfen Sie, ob Sie auf dem Client-Host auf die beiden Webserver zugreifen können.

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

Beispiel für lokales Bild-Hotlinking

101 Host ist meine Website und ich muss die Bilder auf dem 201 Host-Webserver stehlen.

Das heißt, www.e1.com stiehlt den Bildlink von www.e2.com

Schritte

Kommen Sie zu 201 Gastgeber

Geben Sie das Verzeichnis ein, in dem httpd Webseitendateien speichert, ziehen Sie ein Bild hinein und bearbeiten Sie die Datei 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>

Speichern und beenden Sie zu diesem Zeitpunkt den Browser, um www.e2.com auf dem Host-Computer zu besuchen, und Sie können sehen, dass auf der Webseite Bilder vorhanden sind.

Wenn Sie Bilder von anderen Websites stehlen möchten, benötigen Sie einen Link zum Bild. Klicken Sie mit der rechten Maustaste auf das Bild im Browser und wählen Sie Bildlink kopieren.

Kommen Sie zu 101 Host

Fügen Sie einen Link zum Bild auf der Homepage des 101Web-Servers hinzu

  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>

Speichern und beenden Sie, gehen Sie zum Client-Win10-Host und besuchen Sie die beiden URLs www.e1.com und www.e2.com

Verwenden Sie F12, um die Entwicklertools zu öffnen. Im Netzwerk können Sie sehen, dass die Anforderungs-URL und die Bildlinks von www.e2.com von www.e2.com stammen.

Die Anforderungs-URL von www.e1.com lautet www.e1.com, aber die Bildanforderung ist die IP des www.e2.com-Hosts + Bildlink

Bisher wurde ein einfaches lokales Bild-Hotlinking realisiert.

Beispiel für Anti-Hotlink

Wenn ein anderer Host den Bildlink des 201-Hosts stiehlt, wird anstelle des Bildes, das die andere Partei stehlen möchte, nur das feste Bild angezeigt.

Schritte

Importieren Sie ein weiteres Bild (error.jpg) in das htdocs-Verzeichnis des 201-Hosts (www.e2.com), der das Originalbild für Anti-Leeching-Experimente bereitstellt.

Bearbeiten Sie dann die Konfigurationsdatei von httpd und aktivieren Sie das Rewrite-Modul (Adressumschreibung). Der Zweck des Rewrite besteht darin, die Anfrage an error.jpg umzuleiten, wenn jemand mein logo.jpg anfordert.

Mit der Adressumschreibungsfunktion kann die Anfrage überprüft und beurteilt werden. Wenn der Anfrage das Präfix www.e2.com vorangestellt ist, wird der Zugriff erlaubt nicht erlaubt sein.

  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

Parameter

veranschaulichen

AllowOverride ALL

RewriteEngine und andere Rewrite-Regeln in .htaccess-Dateien zulassen.

ALL: Ermöglicht das Überschreiben aller Arten von Rewrite-Anweisungen durch Regeln in der .htaccess-Datei.

Keine: Verbietet die Verwendung von .htaccess-Dateien in diesem Verzeichnis zum Überschreiben der Serverkonfiguration

RewriteEngine aktiviert

Umschreiben aktivieren. Dies ist der erste Schritt zum Aktivieren von Umschreibregeln

UmschreibenCond

Definieren Sie Umschreibebedingungen

%{HTTP_REFERER}

Es handelt sich um eine integrierte Variable von Apache. Diese Variable kann die URL in den Header-Informationen der Anforderungsnachricht abrufen, wenn der Benutzer darauf zugreift.

Passen Sie den Referrer-Wert in der Anfrage an

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

Jede Datei unter der URL (.*: entspricht einem oder mehreren beliebigen Zeichen)

Zeigt an, dass es nicht mit einer Zeichenfolge übereinstimmt, die mit http://www.e2.com/ beginnt und mit einem oder mehreren Zeichen endet

[NC]

Beim Filtern wird die Groß-/Kleinschreibung nicht beachtet

Regel neu schreiben

Definieren Sie Rewrite-Regeln

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

Wenn die vorherige Umschreibebedingung übereinstimmt und die angeforderte URL mit .gif, .jpg oder .swf endet

Anschließend wird die Anfrage an http://www.e2.com/error.png weitergeleitet

.*: entspricht einer beliebigen Anzahl beliebiger Zeichen

.: Der Punkt wird durch das Escape-Zeichen maskiert. Hier ist die Bedeutung eines einfachen Punktes

Speichern und beenden Sie den Dienst und starten Sie ihn neu.

Schließlich kamen wir zum Client-Host (Win10), um zu testen, ob das Bild vom Browser zwischengespeichert wird. Verwenden Sie daher die Tastenkombinationen Strg + Umschalt + Entf, um den Browser-Cache zu leeren.

Dann besuchen Sie www.e2.com und alles funktioniert einwandfrei

Beim Besuch von www.e1.com wird der gestohlene Bildlink zum umgeleiteten error.png-Bild.