Apache WebサーバーでのDoS攻撃の防止


1

これは、使用しているバージョンのApacheです-httpd-2.2.15-39.el6.centos.x86_64

最近、DoS攻撃のためにWebサイトがダウンしたため、iptablesの調査を開始し、DoS攻撃を防ぐためにそれを使用する方法を調べました。いくつかのフォーラムに出くわし、今理解しようとしている十分なルールがあります。単一のIPから作成される接続の数に上限を設けるために、クライアント(Webブラウザー)とサーバー(Webサーバー-httpd)間の通信を理解したかったのです。たとえば、Google Chromeで「www.mywebsite.com」にアクセスしてから、Webサイトのさまざまなページを調べ始めました。これで、クライアントとWebサーバー間でいくつの接続が確立されましたか。ウェブサーバーでnetstatを実行して確認しました。IP(chrome web browser)との接続が1つしか表示されません。いつもそうですか?クライアントとWebサーバー間で1つの接続のみが確立され、この1つの接続のみで通信が行われますか?この接続はどれくらい長く続きますか?

以下のルールを使用しても安全ですか?

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 10 -j DROP

上記の2つのルールは、自分のマシンからWebサーバーへの接続が非常に多くなるというシナリオのリスクを完全に排除します(1分あたり10接続を正当と見なしませんか?)。

次に、以下の2つのルールを検討します

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

さて、上記のルールは何をしますか?私はすでに以下の質問でこれを尋ねましたが、まだこれについての全体像を得ることができませんでした。

最初のルールでは、1分あたり50の接続のみが受け入れられ、最大200までバーストできます。1分あたり200の接続が受け入れられると、連続した1分で50のみが受け入れられます。

制限バーストに関しては、200個のトークンで始まります。つまり、この1分間にWebサーバーが200のリクエストを受信したとすると、トークンカウントは50になり、次の1分間は50の接続のみが受け入れられます。さて、3分で何が起こるでしょう、それは再び200のリクエストを許可しますか?前の分と同様に、接続数は50以下でしたか?私の理解は正しいですか?

そして最後のルールは何と言っていますか?どの時点でも、確立できる接続は50のみですか?

上記の2つのルールにより、正当なトラフィックがドロップされる可能性はありますか?

他のiptablesルールがあり、DoS攻撃を防ぐことをお勧めしますが、一般的にはWebサーバーに対してですか?

回答:


2

クライアントとWebサーバーの間で行われている接続の数。

通常、ブラウザはWebサーバーへの6〜10 TCP接続を行います。
私はクロムでテストし、これは私が見るものです。私は通常、迅速に要求を行うエンドツーエンドのテストランナーでテストするため、セットアップまたはnetstatコマンドの調整が必要になる場合がありますnetstat -plunt
同じURLにアクセスしていて、ブラウザがキャッシュしているため、表示が少なくなっている可能性があります。別のページをリクエストしてください。

接続はどれくらいの間存続しますか?

これはkeepalive、Apacheのディレクティブで設定されます-通常は、Apacheのバージョンに応じて約5〜10秒に設定されます。パフォーマンス上の理由から、設定が低い場合やオフの場合もありますが、サーバーを管理しているのが自分だけである場合は、このことを知っているでしょう。
ゼロになった場合、netstatコマンドが接続を取得しない理由は、netstatが報告する前に接続が解放されるためです。

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50 / minute --limit-burst 200 -j ACCEPT

まず、このルールが追加されます -既存のルールセットの最後に追加されます。つまり、その前に他のルールが一致する場合、このルールは考慮されません。
これは、数学にトークンバケットの概念を使用するnetfilter limitモジュールからのものです。この場合、200個のトークンがバケットに入れられ、すべてのトークンが消費されるまで、つまりバケットが空になるまでルールが一致します。
しかし、バケットは毎分50の割合で絶えず補充されています。
したがって、基本的な考え方は 1分あたり平均 50回のマッチングを行い、1日あたり1分あたり50件のリクエストのマッチングを続けたいということです。
誰かがすべてのバーストで120個の要求を行いますが、その後、次の3分間何の要求も行いません場合はまあ何?よく、彼らはあなたの定義の中に技術的に毎分50回-平均
そのため、これをカバーするためにバケットに追加のトークンをいくつか入れる必要があります。

詳細については、netfilterのドキュメントを参照してください


0

DoS攻撃を防ぐには、ネットワーク層を掘り下げる必要があります。「DoS attack Linux」を検索し、ディストリビューションのネットワーキングガイドを参照してください。ほとんどの緩和策は、iptablesを使用してトラフィックを制限することで機能します。


0

ディレクティブMaxRequestWorkersを最適化して、リソースが使い果たされる同時接続の最大数を定義します。ApachePerformance Tuningも参照してください。

スレッド化されたmpmモジュールを使用すると、同時接続の利点を処理できるため、DoS攻撃の影響を最小限に抑えることができます。将来、mpm Moduleイベントは、各接続にスレッドを専用にしないように非同期処理を使用します。OpenSSLライブラリの性質上、mpmモジュールイベントは現在、モジュールmod_sslおよびその他の入力フィルターと互換性がありません。これらの場合、それらの動作はモジュールmpm workerの動作に低減されます。

List_of_Apache_modulesには多くのサードパーティモジュールがあり、一部の顧客の動作を縮小し、DoSの問題を最小限に抑えることができます。

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