iPhone OS 11_3 inundación de conexión http

iPhone OS 11_3 inundación de conexión http

He estado intentando limitar el máximo de conexiones TCP al puerto 80 de mi servidor provenientes de la misma IP. He usado iptables para esta tarea:

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

La regla envía paquetes a mi cadena LOG_THROT donde los registro y tcp restablece la conexión.

El problema es que todas las IP que se registran (sobreinundando la regla de conexión HTTP paralela de 24) y se encuentran en los registros de acceso de Apache parecen usuarios legítimos con referencias de Google, provenientes de ISP móviles estándar como Vodafone, etc. Lo que todos tienen en común es Usuario. agente y es:

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

Me preguntaba si el nuevo sistema operativo/navegador tiene un límite más alto que las 6 conexiones paralelas estándar, ¿tal vez utiliza algún tipo de precarga de los enlaces que se encuentran en el sitio web y genera conexiones adicionales o es un rastreador de algún tipo que falsifica la UA?

Si es legítimo, ¿qué sugiere para un límite de recuento de conexiones seguras? 50, 100?

Respuesta1

¿Por qué no sintonizas tu web y usas HTTP/2 (eventualmente HTTPS)?

Ambos utilizan una conexión única y multiplexada, en lugar de múltiples conexiones en HTTP1.x. Las técnicas de fragmentación de dominios ya no son necesarias.

Respuesta2

Esto se resolvió. Sin embargo, la respuesta difiere de la mejor solución. La mejor solución es la respuesta de prosti.

Lo que sucede es que el Safari/iOS antes mencionado no reutiliza la conexión keep-alive. Las razones para esto pueden ser muchas e Internet está plagado de diferentes respuestas sobre este tema, incluso podría ser una característica obsoleta en sus últimas versiones. Los foros de Apple fueron inútiles sobre este tema.

Entonces, por cada activo que tiene que cargar desde el sitio web, genera una nueva conexión, pero el servidor que mantiene activas las conexiones durante X cantidad de segundos finalmente alcanza el umbral de la regla iptables.

La solución que me ayudó fue agregar la directiva BrowserMatch en httpd.conf, que coincide con todos los dispositivos iPhone/ipod y desactiva la compatibilidad con Keepalive para ellos.

BrowserMatch "iPhone|iPad|iPod" nokeepalive

En cuanto al máximo de conexiones que Safari puede generar, ¡he encontrado documentado que en alguna situación errónea llegará hasta 15000! (https://www.wiktorzychla.com/2017/06/http2-keep-alive-and-safari-browsers.html). Pero en circunstancias normales estará más en los valores 4-8 por dominio o 15-30 fragmentación a juzgar por estas estadísticas:http://www.browserscope.org/?category=network&ua=Safari*&v=3

información relacionada