IPアドレスを自動的に一時的にブロックして、短期間でサーバー上で大量のヒットを発生させる方法


21

私のLAMPサーバーの1つは、悪用を探しているスクリプトボットの種類によって最近停止されました。一見すると、1秒に非常に多くの要求が行われたため、サーバーのRAMが過負荷になり、サイト全体が1時間ダウンしました。その「attacK」はすべて単一のIPアドレスからのものです。

それでは、IPアドレスを自動的かつ一時的にブロックして、LAMPサーバーで短期間のうちに多くのヒットを発生させることができますか?仕事に最適なツールは何ですか?オペレーティングシステムレベルまたはPHPでこれを解決する必要がありますか?

回答:


25

Fail2Ban。Linuxプラットフォームでのこの問題に対するゴールドスタンダード/デフォルトソリューション。


興味深い、ありがとう。これは、GoogleなどのWebクローラーにどのように対処し、影響しますか?
ProgrammerGirl

1
@Programmerモノの設定方法に依存しますが、Webクローラーが不正なパスワードを入力したり、エクスプロイトを検索したり、明確なしきい値をトリガーするのに十分なヒットを獲得したりすることは期待できません。しきい値を何で定義するか。
HopelessN00b

5

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を無効にすることを検討してください。理由は次のとおりです。


2

httpトラフィックを制御またはブロックするには、次を使用できます。

ただし、これらのツールはウェブスパイダーをブロック/低速化する可能性があるため、SEOに影響を与える可能性があることに注意してください。


2
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に基づいてこのタイプのことを自動的かつ透過的に実行できます。


1
コードの最初の行が何をするのか、正確に説明してもらえますか?また、ossecはfail2banと比較してどうですか?ありがとう。
ProgrammerGirl

2
これはiptablesルールです。新しい接続の試行回数をカウントし、60秒以内に4回の試行を超えるとそれらをドロップすると考えています。man iptables各フラグの意味と、それらがどのように連携するかを確認することをお勧めします。
ルーク

-3

NoooBS、

---洪水---

iptables -N logdrop iptables -A logdrop -m recent --set --nameブラックリスト

iptables -A logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefix "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos​​ iptables -A ddos​​ -m recent --rcheck --name blacklist --seconds 300 --hitcount 1 -j logdrop iptables -A ddos​​ -m recent --set --name again iptables -A ddos​​ -m recent --update --name再度--seconds 60 --hitcount 2 -j logdrop iptables -A ddos​​ -j RETURN

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.