iPhone OS 11_3 HTTP-Verbindungsflut

iPhone OS 11_3 HTTP-Verbindungsflut

Ich habe versucht, die maximale Anzahl an TCP-Verbindungen von derselben IP-Adresse zum Port 80 meines Servers zu begrenzen. Dazu habe ich iptables verwendet:

-A INPUT -p tcp --dport 80 -m conntrack --ctstate ESTABLISHED -m connlimit --connlimit-above 24 --connlimit-mask 32 -j LOG_THROT

Die Regel sendet Pakete an meine LOG_THROT-Kette, wo ich sie protokolliere und die Verbindung per TCP zurücksetze.

Das Problem besteht darin, dass alle IPs, die protokolliert werden (Überlastungsregel für 24 parallele HTTP-Verbindungen) und in den Zugriffsprotokollen von Apache gefunden werden, legitime Benutzer mit Verweisen von Google zu sein scheinen, die von Standard-Mobilfunk-ISPs wie Vodafone usw. stammen. Allen ist der User Agent gemeinsam, und dieser lautet:

Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 wie Mac OS X) AppleWebKit/605.1.15 (KHTML, wie Gecko) Version/ 11.0 Mobile/15E148 Safari/604.1

Ich habe mich gefragt, ob das neue Betriebssystem/der neue Browser ein höheres Limit als die standardmäßigen 6 parallelen Verbindungen hat. Verwendet es vielleicht eine Art Vorladen der auf der Website gefundenen Links und erzeugt zusätzliche Verbindungen oder handelt es sich um eine Art Crawler, der die UA vortäuscht?

Wenn es legitim ist, was schlagen Sie als sicheres Verbindungslimit vor? 50, 100?

Antwort1

Warum optimieren Sie Ihr Web nicht und verwenden HTTP/2 (eventuell HTTPS)

Sie verwenden beide eine einzelne Multiplex-Verbindung anstelle von Mehrfachverbindungen in HTTP1.x. Domänen-Sharding-Techniken werden nicht mehr benötigt.

Antwort2

Habe das gelöst. Die Antwort unterscheidet sich jedoch von der besten Lösung. Die beste Lösung ist die Antwort von Prosti.

Was passiert, ist, dass das oben erwähnte Safari/iOS die Keep-Alive-Verbindung nicht wiederverwendet. Die Gründe dafür können vielfältig sein und im Internet gibt es viele unterschiedliche Antworten zu diesem Thema. Es könnte sogar sein, dass es sich um eine veraltete Funktion in den neuesten Versionen handelt. Apple-Foren waren zu diesem Thema nutzlos.

Für jedes Asset, das von der Website geladen werden muss, wird eine neue Verbindung hergestellt. Der Server hält die Verbindungen jedoch für X Sekunden aufrecht, und irgendwann erreicht er den Grenzwert der iptables-Regel.

Die Lösung, die mir geholfen hat, bestand darin, die BrowserMatch-Direktive in httpd.conf hinzuzufügen, die alle iPhone-/iPod-Geräte abgleicht und die Keepalive-Unterstützung für sie deaktiviert.

BrowserMatch "iPhone|iPad|iPod" nokeepalive

was die maximale Anzahl an Verbindungen betrifft, die Safari herstellen kann, habe ich dokumentiert gefunden, dass sie in manchen fehlerhaften Situationen bis zu 15.000 betragen kann !! (https://www.wiktorzychla.com/2017/06/http2-keep-alive-and-safari-browsers.html). Aber unter normalen Umständen werden die Werte eher bei 4-8 pro Domäne oder 15-30 Sharding liegen, wenn man diese Statistik zugrunde legt:http://www.browserscope.org/?category=network&ua=Safari*&v=3

verwandte Informationen