Anfragen in lighttpd mit HTTP / 1.0 blockieren und nur HTTP / 1.1 zulassen

568
Striezel

Ich habe einen lighttpd-Webserver, der von PHP generierte Webseiten liefert. Dieser Server hat zurzeit aufgrund eines DDoS-Bot-Angriffs viel Datenverkehr, und ich suche nach einer Möglichkeit, einige davon zu blockieren oder abzuschwächen.

Lighttpd bietet meines Wissens die Möglichkeit, Anfragen per Remote-IP-Adresse zu blockieren, zB durch Put

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

In würden lighttpd.confalle Anforderungen, die aus dem IP-Bereich 12.34.56.0 - 12.34.56.255 stammen, blockiert.

Aufgrund der Natur von DDoS ist es jedoch nicht möglich, einzelne IP-Adressen oder Bereiche zu blockieren, da sich diese häufig ändern.

Bei der Untersuchung des Zugriffsprotokolls stellte ich fest, dass die meisten Anforderungen von Bots scheinbar das ältere HTTP / 1.0-Protokoll verwenden, während die meisten legitimen Datenverkehr HTTP / 1.1 verwendet.

Meine Frage ist also: Gibt es eine Möglichkeit, alle Anfragen, die über HTTP / 1.0 eingehen (und diese über HTTP / 1.1) in lighttpd zulassen, zu blockieren / zu verweigern?

Eine solche Möglichkeit konnte ich in der offiziellen Konfigurationsdokumentation von lighttpd nicht finden .

Anmerkungen:

  • Ich bin mir bewusst, dass legitimer Datenverkehr möglicherweise auch HTTP / 1.0 verwendet, es wäre jedoch in Ordnung, auch diese zu blockieren.
  • Die Bot-Anforderungen scheinen kein allgemeines Muster für Benutzeragenten oder HTTP-Referrer zu verwenden. Die Verwendung von Mustern mit einem regulären Ausdrucksmuster scheint daher keine Option zu sein.
1

1 Antwort auf die Frage

1
Alex

Anstatt eine Lösung zu geben lighttpd, würde ich empfehlen, fail2ban zu verwenden, das auf allen Unix-basierten Systemen vorhanden ist. Es überwacht die Änderungen in Protokolldateien und analysiert sie gemäß den Regeln für reguläre Ausdrücke. Im Fall eines übereinstimmenden Musters (in Ihrem Fall HTTP / 1.0) wird es auf Firewall-Ebene des Systems blockiert, wodurch unerwünschte Verbindungen wirksamer blockiert werden.

Wenn anormaler Datenverkehr auftritt, bei dem mehr böswillige Anforderungen als bei normalen Anforderungen angezeigt werden, können Sie die folgenden Firewall-Regeln hinzufügen, um den DDoS-Angriff zu verlangsamen

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

Wenn Sie immer noch HTTP / 1.0 auf der lighttpdEbene blockieren möchten, versuchen Sie, das HTTP-Protokoll folgendermaßen anzupassen:

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

(Die Lösung wurde nicht getestet, seit ich vor nginxlanger Zeit gewechselt habe, aber AFAIR könnte es funktionieren.)