iPhone OS 11_3 http接続フラッド

iPhone OS 11_3 http接続フラッド

私は、同じ IP からのサーバーのポート 80 への TCP 接続の最大数を制限しようとしています。このタスクには 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 で接続をリセットします。

問題は、ログに記録され (24 並列 http 接続ルールのオーバーフラッディング)、Apache のアクセス ログで見つかったすべての IP が、Google からの紹介を持つ正規のユーザーであり、Vodafone などの標準のモバイル ISP からアクセスしているように見えることです。これらすべてに共通するのはユーザー エージェントです。

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

新しい OS/ブラウザの制限が標準の 6 つの並列接続よりも高い場合、Web サイトにあるリンクを何らかの方法で事前にロードして追加の接続を生成するのか、それとも UA を偽装する何らかのクローラーなのか疑問に思いました。

合法である場合、安全な接続数の制限として何をお勧めしますか? 50、100 でしょうか?

答え1

ウェブを調整してHTTP/2(最終的にはHTTPS)を使用してみませんか?

どちらも、HTTP1.x の複数の接続の代わりに、単一の多重接続を使用します。ドメイン シャーディング技術はもう必要ありません。

答え2

解決しました。ただし、答えは最善の解決策とは異なります。最善の解決策は prosti による回答です。

何が起こっているかというと、前述の Safari/iOS がキープアライブ接続を再利用しないということです。これには多くの理由が考えられ、インターネットにはこのトピックに関するさまざまな回答があふれています。最新バージョンでは廃止された機能である可能性もあります。Apple フォーラムはこのトピックに関して役に立ちませんでした。

したがって、Web サイトから読み込む必要があるすべてのアセットに対して新しい接続が生成されますが、サーバーが接続を X 秒間維持すると、最終的に iptables ルールのしきい値に達します。

私にとって役立った解決策は、すべての iPhone/iPod デバイスに一致し、それらのキープアライブ サポートをオフにする BrowserMatch ディレクティブを httpd.conf に追加することでした。

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

関連情報