Verschieben Sie Grinch-Bots mit Hilfe von erweiterten Sicherheitsdaten und unserer Edge-Cloud-Plattform in die Penalty Box.
In einem früheren Beitrag habe ich beschrieben, wie Sie erweiterte Request-Daten von unserer Edge-Cloud-Plattform auf Ihrem Origin-Server nutzen können. Ihre zentrale Cloud oder Ihr Origin, die über eine Vielzahl von Funktionen und zentralisierten Daten verfügen, war nur ein Beispiel dafür, wie Sie all diese Informationen für eine bessere Sichtbarkeit nutzen können. Aber wäre es nicht auch großartig, Sicherheitsentscheidungen von Ihrem Origin-Server auf der Fastly Edge teilen zu können?
In diesem Beitrag werde ich erläutern, wie Sie die Informationen aus einer Origin-Antwort nutzen können, um eine kompromittierte IP-Adresse zu sanktionieren und in die sogenannte Penalty Box zu verschieben.Wir preisen stets unser Sicherheitsversprechen für die Edge an und dieses hier ist nur ein Beispiel von vielen.Los geht‘s.
Es ist die Zeit der „Grinch Bots“, bei denen verschiedene Tools den Bestand überprüfen und ihn aufkaufen, bevor der einzelne Verbraucher überhaupt eine Chance hat, diese Ware zu erwerben. Das ist nicht nur schade für den Endnutzer, der die nicht mehr verfügbare Ware kaufen möchte, sondern kann sich auch negativ auf Ihr Unternehmen auswirken, da „Grinch-Bot“-Tools eine große Anzahl von Anfragen senden, um den Bestand kontinuierlich zu überprüfen. Solche Anfragen gehen oft an Ihren Origin, auf dem der verfügbare Bestand über einen langen Zeitraum hinweg zentral erfasst ist.
Es gibt mehrere Möglichkeiten, wie Sie mit dieser Art von Trafficproblemen auf Ihrem Origin umgehen können, beispielsweise indem Sie den Bestand auf der Edge cachen und den Cache nur dann bereinigen, wenn eine Bestandsaktualisierung erforderlich ist. Eine andere Möglichkeit ist, diesen Traffic zu blockieren. Dazu muss Ihr Origin lediglich ein unerwünschtes Verhalten einer bestimmte IP-Adresse feststellen, einen nutzerdefinierten Antwortcode wie 406 mit unserer Next-Gen-WAF zurücksenden und dann die Fastly Edge diese IP-Adresse für eine konfigurierbare Dauer blockieren lassen.
Edge Rate Limiting und Penalty Box
Edge Rate Limiting ist derzeit nur eingeschränkt verfügbar. Die Dokumentation zu den Konzepten, die wir im weiteren Verlauf dieses Beitrags verwenden, finden Sie in unserem Developer Hub.
Und so funktioniert es: Wenn die Edge eine 406- oder 206-Antwort (diese ist individuell anpassbar) erhält, wird die client.ip
der Penalty Box hinzugefügt.Wenn weitere Anfragen von dieser IP-Adresse bei Edge-Knoten eingehen, wird die IP-Adresse mit einer 429-Antwort auf der Edge blockiert. Zwischen dem Zeitpunkt, an dem die client.ip
zur Penalty Box hinzugefügt wird, und dem Zeitpunkt, an dem die Edge-Knoten beginnen, auf die Anfrage zu reagieren, muss mit einer kurzen Verzögerung gerechnet werden. Weitere Einzelheiten zu diesem Verhalten finden Sie in unserer Dokumentation über Rate Limiting.
Auch wenn wir die native Edge-Rate-Limiting-Funktion zum Zählen von Anfragen verwenden können, gibt es viele Fälle, für die wir uns eine genauere Zählung der Client-Anfragen wünschen würden, bevor wir eine Aktion wie beispielsweise eine Blockierung durchführen. Dies lässt sich mit unserer Next-Gen WAF, die auf Ihrem Origin-Server installiert wird, leicht bewerkstelligen. Oder Sie verwenden die vorhandene Origin-Logik, um die Zählung durchzuführen und den Statuscode „Blockieren“ zurückzugeben.
Dies geschieht durch die Verwendung der Funktionen ratelimit.penaltybox_add und ratelimit.penaltybox_has. Die beanstandete IP-Adresse wird mit ratelimit.penaltybox_add zur Penalty Box hinzugefügt. Die folgenden Anfragen werden auf einen Eintrag in der Penalty Box mit ratelimit.penaltybox_has überprüft.Wenn ein Edge-Knoten den Penalty-Box-Eintrag entdeckt, wird die Anfrage blockiert.
Das vollständige Snippet ist unten zu sehen. Dieses Snippet wurde in die Init-Position eingefügt. Bevor Sie dieses Snippet in die Produktionsumgebung implementieren, sollten Sie einen Test durchführen, um sicherzustellen, dass Ihre Anwendung auch wie erwartet funktioniert.
# Snippet rate-limiter-v1-origin_waf_response-init-init : 100
# Begin rate-limiter Fastly Edge Rate Limiting
penaltybox rl_origin_waf_response_pb {}
ratecounter rl_origin_waf_response_rc {}
table rl_origin_waf_response_methods {
"GET": "true",
"PUT": "true",
"TRACE": "true",
"POST": "true",
"HEAD": "true",
"DELETE": "true",
"PATCH": "true",
"OPTIONS": "true",
}
# Start rate-limiter Fastly Edge Rate Limiting
sub vcl_recv {
# call rl_origin_waf_response_process;
if (req.restarts == 0 && fastly.ff.visits_this_service == 0
&& table.contains(rl_origin_waf_response_methods, req.method)
) {
if (ratelimit.penaltybox_has(rl_origin_waf_response_pb, client.ip)) {
error 829 "Rate limiter: Too many requests for origin_waf_response";
}
}
}
# End rate-limiter Fastly Edge Rate Limiting
# Start check backend response status code
sub vcl_fetch {
# perform check based on the origin response. 206 status makes for easier testing and reporting
if (beresp.status == 406 || beresp.status == 206) {
log "406 or 206 response";
ratelimit.penaltybox_add(rl_origin_waf_response_pb, client.ip, 10m);
}
}
# End check backend response status code
# Start useful troubleshooting based on the response
sub vcl_deliver {
if (req.http.fastly-debug == "1"){
set resp.http.X-ERL-PenaltyBox-has = ratelimit.penaltybox_has(rl_origin_waf_response_pb, client.ip);
}
}
# End useful troubleshooting based on the response
sub vcl_error {
# Snippet rate-limiter-v1-origin_waf_response-error-error : 100
# Begin rate-limiter Fastly Edge Rate Limiting - default edge rate limiting error - origin_waf_response
if (obj.status == 829 && obj.response == "Rate limiter: Too many requests for origin_waf_response") {
set obj.status = 429;
set obj.response = "Too Many Requests";
set obj.http.Content-Type = "text/html";
synthetic.base64 "PGh0bWw+Cgk8aGVhZD4KCQk8dGl0bGU+VG9vIE1hbnkgUmVxdWVzdHM8L3RpdGxlPgoJPC9oZWFkPgoJPGJvZHk+CgkJPHA+VG9vIE1hbnkgUmVxdWVzdHMgdG8gdGhlIHNpdGUgLSBGYXN0bHkgRWRnZSBSYXRlIExpbWl0aW5nPC9wPgoJPC9ib2R5Pgo8L2h0bWw+Cg==";
return(deliver);
}
# End rate-limiter Fastly Edge Rate Limiting - default edge rate limiting error - origin_waf_response
}
Wo finde ich eine Demo?
Eines meiner Lieblingstools zur Loadgenerierung ist Siege, das ich im folgenden Beispiel verwendet habe. Der unten zu sehende Befehl ist ein Beispiel dafür, wie eine 206-Antwort an die Fastly Edge zurückgesendet wird, die dann meine IP-Adresse in die Penalty Box einfügt, sobald ich die Funktion implementiert habe. Sie müssen den Befehl mit Ihrer Domain aktualisieren und die Edge-Rate-Limiting-Funktion für Ihr Account aktiviert haben. Wie bereits erwähnt, ist damit zu rechnen, dass eine Reihe von Anfragen an den Origin durchgelassen werden, wenn die Knoten beginnen, die Penalty Box auf den Eintrag zu überprüfen.
! siege https://[yourdomain.foo.bar]/206 -t 15s
** SIEGE 4.1.1
** Preparing 25 concurrent users for battle.
The server is now under siege...
HTTP/1.1 206 0.17 secs: 19 bytes ==> GET /206
HTTP/1.1 206 0.17 secs: 19 bytes ==> GET /206
HTTP/1.1 206 0.17 secs: 19 bytes ==> GET /206
#### Removed for brevity ####
HTTP/1.1 429 0.09 secs: 151 bytes ==> GET /206
HTTP/1.1 429 0.08 secs: 151 bytes ==> GET /206
HTTP/1.1 429 0.09 secs: 151 bytes ==> GET /206
HTTP/1.1 429 0.08 secs: 151 bytes ==> GET /206
Lifting the server siege...
Transactions: 3797 hits
Availability: 100.00 %
Elapsed time: 14.58 secs
Data transferred: 0.50 MB
Response time: 0.09 secs
Transaction rate: 260.43 trans/sec
Throughput: 0.03 MB/sec
Concurrency: 22.65
Successful transactions: 386
Failed transactions: 0
Longest transaction: 0.54
Shortest transaction: 0.06
Probieren Sie es aus
Grinch-Bots sind nur ein Anwendungsfall von vielen, aber die Penalty Box kann auf jede beliebige Kennung zugreifen. Es gibt also noch eine Reihe von anderen Anwendungsmöglichkeiten für Situationen dieser Art, beispielsweise:
Hohes Aufkommen von Anfragen verdächtiger autonomer Systemnummern (ASNs), die keine Einnahmen generieren.
Große Anzahl von kompromittierten Anmeldedaten, die an Anmeldeendpunkten benutzt werden.
Hohes Aufkommen von Anfragen, die 400er- oder 500er-Antwortcodes verursachen.
Dies ist nur ein Beispiel dafür, was Sie mit Request Enrichment auf Fastly erreichen können. Haben Sie weitere Beispiele für uns? Twittern Sie uns!Und bleiben Sie dran – weitere Beispiele für die leistungsstarke Sicherheit auf der Edge werden folgen.