Heim >Backend-Entwicklung >Golang >So stoppen Sie DDoS-Angriffe in Go mit Ratenbegrenzung
Ratenbegrenzung ist eine der effektivsten Techniken zur Abwehr von DDoS-Angriffen. Unter seinen Variationen zeichnet sich das Per-IP-Rate-Limiting durch seinen zielgerichteten Ansatz aus: Es erzwingt die Anforderungslimits individuell für jeden Client, basierend auf seiner IP-Adresse. Dadurch wird verhindert, dass ein einzelner Benutzer den Server überlastet, während gleichzeitig ein faires Zugriffsniveau für legitime Benutzer gewährleistet wird.
In diesem Artikel besprechen wir, wie die Ratenbegrenzung pro IP funktioniert, warum sie eine der besten Strategien zum Stoppen von DDoS-Angriffen ist und wie man sie in Go mithilfe des Ratenpakets implementiert.
Ratenbegrenzung wird häufig verwendet, weil sie Sicherheit und Benutzerfreundlichkeit in Einklang bringt. Hier erfahren Sie, warum dies ein bevorzugter Ansatz ist:
Bei der Ratenbegrenzung pro IP wird für jede Client-IP ein separater Begrenzer verwaltet. So implementieren Sie es mit dem Paket golang.org/x/time/rate.
Das Tarifpaket ist Teil der erweiterten Module von Go. Installieren Sie es mit:
Bash
Holen Sie sich golang.org/x/time/rate
Los
Pakethauptseite
importieren (
`"fmt"` `"net/http"` `"sync"` `"time"` `"golang.org/x/time/rate"`
)
var (
`mu sync.Mutex` `visitors = make(map[string]*rate.Limiter)`
)
// getVisitor ruft den Ratenbegrenzer für eine bestimmte IP ab und erstellt einen, falls dieser nicht vorhanden ist.
func getVisitor(ip string) *rate.Limiter {
`mu.Lock()` `defer mu.Unlock()` `limiter, exists := visitors[ip]` `if !exists {` `limiter = rate.NewLimiter(1, 5) // 1 request/second, burst of 5` `visitors[ip] = limiter` `// Clean up limiter after 1 minute of inactivity` `go func() {` `time.Sleep(1 * time.Minute)` `mu.Lock()` `delete(visitors, ip)` `mu.Unlock()` `}()` `}` `return limiter`
}
// rateLimitedHandler wendet die Ratenbegrenzung pro IP an
func rateLimitedHandler(w http.ResponseWriter, r *http.Request) {
`ip := r.RemoteAddr` `limiter := getVisitor(ip)` `if !limiter.Allow() {` `http.Error(w, "Too many requests. Please try again later.", http.StatusTooManyRequests)` `return` `}` `fmt.Fprintln(w, "Request successful.")`
}
func main() {
`http.HandleFunc("/", rateLimitedHandler)` `fmt.Println("Starting server on :8080")` `http.ListenAndServe(":8080", nil)`
}
Die Ratenbegrenzung pro IP in Go ist eine hervorragende Möglichkeit, DDoS-Angriffe auf Anwendungsebene abzuwehren. Es ermöglicht eine präzise Kontrolle des Datenverkehrs und stellt sicher, dass legitime Benutzer auf Ihren Dienst zugreifen können, während böswillige Benutzer effektiv gedrosselt werden.
Dieser Ansatz drosselt missbräuchliche IPs effizient, ohne legitime Benutzer zu beeinträchtigen, und bietet eine skalierbare und speichereffiziente Lösung zur Abwehr von DDoS-Angriffen.
Das obige ist der detaillierte Inhalt vonSo stoppen Sie DDoS-Angriffe in Go mit Ratenbegrenzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!