私が開発しているFlaskアプリケーションは、外部のWebサイトの相互作用に大きく依存しており、エンドユーザーによって開始されます。帯域幅の制御やレート制限を一切行わずにアプリケーションをそのままにしておくと、悪意のある攻撃者によってこのアプリケーションが悪用される可能性があります。
私の目標は、かなりシンプルな2段階のアプローチです。
個々のIPソースが
x
1分あたりの接続数を超えて実行するのをレート制限します。これはで簡単に実現できますiptables
。 ここに私の目標に似た例があります:iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 \ --connlimit-mask 32 -j REJECT --reject-with tcp-reset
URLあたり
x
のルックアップの数を超えるアプリケーションの能力をレート制限します。例:APP ---- 10 pps ---> stackexchange.com PERMIT APP ---- 25 pps ---> google.com DENY / 15 SECOND BACKOFF
私が知る限り、iptables
個別のURLを追跡する方法はありません。これらの接続全体をレート制限することしかできません。それも、私が達成しようとしていることに対する唯一の制限のようではありません。iptables
この方法でセットアップする方法があった場合、これらの要求はユーザーが開始するため、私のWebアプリケーションに問題が発生する可能性があります。
私はFlaskを使用しています。実行可能なオプションは、before_request
フックを使用して、Redisなどのデータストアでこれらの宛先を手動で追跡することです。ただし、これは、スタックでこのように接続を処理するためにかなり上位にあります。私が本当に必要とする(またはそう思う)のは、特定のブレークポイントに達したときにカスタムの方法で要求を分析し、接続を閉じることができるインテリジェントなファイアウォールアプリケーションです。
私がやろうとしていることを達成する方法はありますか?
もしそうなら、どうですか?