web-dev-qa-db-ja.com

HTTP / 1.0で作成されたlighttpdでリクエストをブロックし、HTTP /1.1のみを許可します

PHPで生成されたWebページを配信するlighttpdWebサーバーがあります。このサーバーは現在、DDoSボット攻撃のために大量のトラフィックに直面しており、それらのいくつかをブロックまたは軽減する方法を探しています。

私の知る限り、lighttpdはリモートIPアドレスを介してリクエストをブロックする可能性を提供します。置くことによって

$HTTP["remoteip"] == "12.34.56.0/24" {
  url.access-deny = ( "" )
}

lighttpd.conf、IP範囲12.34.56.0〜12.34.56.255からのすべてのリクエストがブロックされます。

ただし、DDoSの性質上、単一のIPアドレスまたは範囲は頻繁に変更されるため、それらをブロックすることはできません。

アクセスログを調べると、ボットからのリクエストのほとんどが古いHTTP/1.0プロトコルを使用しているように見えますが、正当なトラフィックのほとんどはHTTP /1.1を使用していることがわかりました。

だから私の質問は:lighttpdでHTTP/1.0経由で入ってくるすべてのリクエストをブロック/拒否する(そしてHTTP/1.1経由でそれらを許可する)方法はありますか?

公式 lighttpd設定ドキュメント でそのような可能性を見つけることができませんでした。

ノート:

  • 一部の正当なトラフィックもHTTP/1.0を使用している可能性があることは承知していますが、それらをブロックしても問題ありません。
  • ボットリクエストは、ユーザーエージェントやHTTPリファラーに共通のパターンを使用していないようです。そのため、正規表現パターンでそれらを使用することはオプションではないようです。
1
Striezel

lighttpdの解決策を提供する代わりに、すべてのUnixベースのシステムに存在する fail2ban を使用することをお勧めします。ログファイルの変更を監視し、正規表現ルールに従って解析します。パターンが一致する場合(この場合はHTTP/1.0)、システムのファイアウォールレベルでブロックします。これにより、不要な接続をより効果的にブロックできます。

また、通常のリクエストよりも悪意のあるリクエストが多い異常なトラフィックが発生している場合は、次のファイアウォールルールを追加してDDoS攻撃を遅らせることができます

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT

それでもlighttpdレベルでHTTP/1.0をブロックしたい場合は、次のようにHTTPプロトコルを一致させてみてください。

env.SERVER_PROTOCOL == "HTTP/1.0" {
  url.access-deny = ( "" )
} 

(ずっと前にnginxに切り替えたので、ソリューションはテストされていませんが、AFAIRでは機能する可能性があります。)

1
Alex