Linuxでwebappを実行するためにApache Tomcat 7を使用しています。 Acunetixでスキャンしたところ、私のWebアプリケーションが「遅いHTTPサービス拒否攻撃」に対して脆弱であることがわかりました。どうすればそれを保護できますか?
Acunetixは私に here を推奨していますが、それはTomcatではなくApacheを保護することです。
CVEは、Apache Tomcatに適用されるため、特にこの問題に割り当てられています: CVE-2012-5568 。あなたが与えられたものよりも適切な参照があります。
Tomcat開発者 これを脆弱性と見なさないでください 、および修正する予定はありません。
可能な解決策:
ファイアウォールルールを使用して、単一のホストからの接続が多すぎないようにします。これにより、ありふれたサービス拒否攻撃は軽減されますが、分散型攻撃(DDoS)は軽減されません。
単一のクライアントホストからポート80に確立できる同時接続の数を制限するために使用できるiptablesコマンドの例を次に示します。
# iptables -A INPUT -p tcp --syn --dport 80
-m connlimit --connlimit-above 50 -j REJECT
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2007-675
ただし、これは、多くのユーザーが単一のIP(メガプロキシなど)から正当に接続している場合に副作用が生じるため、予想されるトラフィックに応じて、接続数を適切に調整する必要があります。
残念ながら、最良のオプションは、ApacheなどのHTTP接続をより適切に処理できるWebサーバーの下流にTomcatサービスを配置することです。次に、mod_reqtimeoutやmod_antilorisなどのApacheソリューションを使用します。
"slowloris"攻撃を検出(および試行)するためにいくつかのヒューリスティックを適用するApacheモジュールがあります。いわゆる - mod_antiloris
(これはモジュールですforApache、モジュールではありませんfromApache Software Foundation )。詳細は this answer を参照してください。
すべての サービス拒否攻撃 と同様に、解決策はなく、mitigations。
TomcatはApache Foundationの一部であるため、技術的にはApache Tomcatと呼ばれています。ただし、従来のApache Webサーバー(正式には「Apache HTTPサーバープロジェクト」と呼ばれています)は、しばしば単にApacheと呼ばれます。以下の「Apache」は、Apache HTTPサーバーを指し、Tomcatを指しません。
Tomcatは通常、Webサーバーとしては実行されず、アプリケーションサーバーとして実行されます。 Tomcatがインターネットに直接公開されている場合(Apacheとチーム化されていない場合)、ソリューションは次のいずれかになります。
Nginx、Lighttpd、ApacheなどのTomcatの前にリバースプロキシサーバーを設定します。
ApacheとTomcatを一緒に 伝統的に設定されている として設定します。
ソリューションでApacheを使用する場合、またスローロリス緩和戦略を使用する必要があります。あなたがリンクした記事で説明されているようにあなたのためにそれをするmod_antilorisがあります。また、 mod_reqtimeout もあります。これは、Apache Coreの一部であるdepsiteが、デフォルトでApacheインストールに含まれていないことがよくあります。
mod_antiloris
は、特定のIPが作成できる同時接続の数を制限することで機能します。mod_reqtimeout
は、単一のリクエストがアイドル状態を維持できる時間を制限することで機能します。
どちらも自分の立場にあり、優れた防御策はおそらく両方を採用するでしょう。
また、 mpm_event Apacheワーカー構成は、Nginx、Cherokee、lighttpdなどの他のサーバーと同じように機能し、Slowloris攻撃の影響を受けません。これはほとんどの最新のインストールで使用できますが、「実験的」とマークされています。具体的には、接続ごとのスレッドの概念に依存している一部の古いモジュールと互換性がない場合があります。よく引用される例はmod_php
、ただし新しいバージョンには適用されない場合があります。
tomcatの前にApache(ウェブサーバー)がありますか?もしそうなら->アップグレード。 Apacheは2.2.16 IIRC以降、slowlorisに対して脆弱ではありません。2.2.16には、Debian squeezeが同梱されています。これは古い安定版です。
tomcatの前にリバースプロキシがない場合は、適切なワニスまたはnginxを使用してください。
リバースプロキシを使用する理由については、 この回答@ serverfault を参照してください
これが解決策です。これはプロキシを使用している人には影響しません。 Apache Tomcatチームは、これをTomcatの脆弱性とは見なしておらず、パッチのリリースも計画していません。このコードは、他のddos攻撃方法も停止します。 PS私はこれを書きませんでした。
ブラックリスト= cat /usr/local/AS/etc/blacklist.txt
$ BLACKLISTのfor i; do iptables -A INPUT -p tcp -m tcp --dport http -s $ i -j DROP完了
-#拒否されないIP-パートナーホスト
ホワイトリスト= ****永続的なホワイトリストを挿入IPSここ******
$ WHITELISTのfor i; do iptables -A INPUT -p tcp -m tcp --dport http -s $ i -j ACCEPT done
-#下げすぎない-ブラウザーが複数の接続を開く
OVERLIM_NEW = 500
-#新しい接続の1秒あたりの全体的な制限
INDILIM_NEW = 30
-#個々のIPの制限、1秒あたりの新しい接続-フラッドを防止
INDILIM_CURRENT = 200
-#個々のIPの制限、合計接続-過剰使用を防止
CURRENT_EVAL_INTERVAL = 300
-#IP使用評価の間隔の長さ
iptables -N LIMIT_INDIVIDUAL_NEW
iptables -N LIMIT_INDIVIDUAL_CURRENT
iptables -N LIMIT_OVERALL_NEW
iptables -A INPUT -p tcp --dport 80 -m state --state ESTABLISHED -j LIMIT_INDIVIDUAL_CURRENT
iptables -A INPUT -p tcp --dport 80 --syn -m state --state NEW -j LIMIT_INDIVIDUAL_NEW
iptables -A LIMIT_INDIVIDUAL_CURRENT -m最近--set
iptables -A LIMIT_INDIVIDUAL_CURRENT -p tcp --tcp-flags FIN FIN -m latest --remove
iptables -A LIMIT_INDIVIDUAL_CURRENT -m最近--update --seconds $ CURRENT_EVAL_INTERVAL --hitcount $ INDILIM_CURRENT -j DROP
iptables -A LIMIT_INDIVIDUAL_CURRENT -j ACCEPT
iptables -A LIMIT_INDIVIDUAL_NEW -m最近の--set
iptables -A LIMIT_INDIVIDUAL_NEW -m Recent --update --seconds 1 --hitcount $ INDILIM_NEW -j DROP
iptables -A LIMIT_INDIVIDUAL_NEW -j LIMIT_OVERALL_NEW
iptables -A LIMIT_OVERALL_NEW -m limit --limit $ OVERLIM_NEW/second -j ACCEPT
iptables -A LIMIT_OVERALL_NEW -j DROP