回答:
Apache 2.0の場合はbw_mod、Apache 1.3の場合はmod_bandwidthの純粋なApacheソリューションが必要な場合。サーバーの帯域幅を調整して、帯域幅の使用を制限できます。
mod_limitipconnもあります。これは、1人のユーザーがサーバーに大量に接続するのを防ぎます。mod_cbandは別のオプションですが、使用したことがありません。
Apacheのインストールを台無しにしたくない場合は、Apacheの前にsquidプロキシを配置できます。また、スロットルをより詳細に制御できます。
ただし、ほとんどの場合、問題はIPごとの帯域幅を制限したい場合のいくつかの大きなオブジェクトであり、ユーザーが大量のデータをプルしてブロックした場合に正気のエラーメッセージを表示します。その場合、PHPスクリプトを記述し、データベースの一時テーブルにアクセス情報を保存する方が簡単かもしれません。
これは、この種の問題に対する私のiptablesソリューションです。--seconds
--hitcount
必要に応じて調整し、iptablesテーブルも調整します。
iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
説明:
iptables
ソースIPが/ proc / net / ipt_recent / ATACKファイルに600秒間隔で5回以上リストされているかどうか、およびそれが新しい要求であるかどうかを確認します。そうである場合、拒否します。そうしないと
iptables
要求の宛先がポート80であるかどうかを確認します。その場合、IPとタイムスタンプを/ proc / net / ipt_recent / ATACKに出力してパケットを転送します。
私のニーズに合わせてうまく機能しています。
試すmod_dosevasive
かmod_security
mod_dosevasive
指定された時間枠で指定された数またはページがサイトにリクエストした後にIPを禁止するように構成できます。