解決策 1:
フェイル2バン。 Linux プラットフォームでのこの問題に対するゴールド スタンダード/デフォルト ソリューション。
解決策 2:
PHP でこれを行うことは避けてください。 PHP が関与するときには、すでに手遅れです。メモリはすでに割り当てられています。
どの層でも IP アドレスを禁止することができますが、使用するリソースの量が最も少ない最下位レベルが、使用したいルートです。これは通常、ファイアウォールです。少なくとも、iptables (Linux ファイアウォール) は使用したいものです。これを自動化できる Fail2Ban など、他の人が言及したツールがあります。外部ファイアウォールの方がよいでしょう。
問題のある IP アドレスを禁止するだけでなく、リソースをより有効に活用するように努める必要があります。リクエストに必要なリソースが少ない場合、攻撃が有効になるまでの時間が長くなります。
Apache も多くのメモリを使用します。 mod_php を使用している場合、PHP はすべての Apache 子プロセス内にロードされるため、さらに悪いことになります。これは、静的コンテンツ (css/js/images) へのリクエストでさえ、PHP が使用されていない場合でも PHP をロードしていることを意味します。代わりに FastCGI を使用することで、この問題を解決できます。 mod_fcgid は良いオプションです。
リソース効率の高い他の Web サーバーもあります。 Nginxは私のお気に入りです。 Lighttpd もあります。多くの人が Litespeed を気に入っています (Apache の代わりにドロップインしてください)。
Apache を使い続けたい場合は、できる限りチューニングすることを検討してください。 .htaccess を無効にすることを検討してください。理由は次のとおりです。
解決策 3:
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
ossec は、syslog に基づいて、この種のことを自動的かつ透過的に行うことができます。
解決策 4:
http トラフィックを制御またはブロックするには、次を使用できます:
- Apache モジュール。
- iptable
- HopelessN0ob がここで述べたように、fail2ban
ただし、これらのツールは webspider をブロック/遅くする可能性があるため、SEO に影響を与える可能性があることに注意してください。