Назад | Перейти на главную страницу

iPhone OS 11_3 наводнение http-соединения

Я пытался ограничить максимальное количество TCP-соединений до порта 80 моего сервера, поступающего с того же IP-адреса. Я использовал iptables для этой задачи:

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

Правило отправляет пакеты в мою цепочку LOG_THROT, где я их регистрирую, и tcp сбрасывает соединение.

Проблема в том, что все IP-адреса, которые регистрируются (переполнение 24 правила параллельного HTTP-соединения) и обнаруживаются в журналах доступа apache, кажутся законными пользователями с рефералами из Google, исходящими от стандартных мобильных интернет-провайдеров, таких как vodafone и т. Д. Общим для них является User агент и это:

Mozilla / 5.0 (iPhone; CPU iPhone OS 11_3, например Mac OS X) AppleWebKit / 605.1.15 (KHTML, например Gecko) Версия / 11.0 Mobile / 15E148 Safari / 604.1

Мне было интересно, имеет ли новая ОС / браузер более высокий лимит, чем стандартные 6 параллельных подключений, может ли он использовать какую-то предварительную загрузку ссылок, найденных на веб-сайте, и порождает дополнительные подключения, или это какой-то поисковый робот, подделывающий UA?

Если это допустимо, что вы предлагаете для ограничения количества безопасных подключений? 50, 100?

Получил это решено. Однако ответ отличается от лучшего решения. Лучшее решение - это ответ от простей.

Что происходит, так это то, что вышеупомянутый Safari / iOS не использует повторно соединение keep-alive. Причин для этого может быть много, и в Интернете полно разных ответов на эту тему, возможно, даже это устаревшая функция в их последних версиях. Форумы Apple по этой теме были бесполезны.

Таким образом, для каждого актива, который он должен загрузить с веб-сайта, он порождает новое соединение, но сервер, поддерживающий соединения в течение X секунд, в конечном итоге достигает порога из правила iptables.

Решение, которое помогло мне, заключалось в добавлении директивы BrowserMatch в httpd.conf, которая соответствует всем устройствам iphone / ipod и отключает для них поддержку keepalive.

BrowserMatch "iPhone|iPad|iPod" nokeepalive

Что касается максимального количества подключений, которое может появиться в Safari, я обнаружил документально подтвержденное, что в некоторых случаях с ошибками оно достигает 15000 !! ( https://www.wiktorzychla.com/2017/06/http2-keep-alive-and-safari-browsers.html ). Но в нормальных условиях это будет больше значений 4-8 на домен или 15-30 сегментов, судя по этой статистике: http://www.browserscope.org/?category=network&ua=Safari* & v = 3

Почему бы вам не настроить свой Интернет и не использовать HTTP / 2 (возможно HTTPS)

Оба они используют одно мультиплексное соединение, а не несколько соединений в HTTP1.x. Методы сегментирования домена больше не нужны.