Maison >développement back-end >Golang >Comment arrêter les attaques DDoS en Go avec la limitation de débit
La limitation de débit est l'une des techniques les plus efficaces pour atténuer les attaques DDoS. Parmi ses variantes, la limitation du débit par IP se distingue par son approche ciblée : elle applique les limites de requêtes individuellement pour chaque client, en fonction de son adresse IP. Cela empêche un utilisateur unique de surcharger le serveur tout en maintenant un niveau d'accès équitable pour les utilisateurs légitimes.
Dans cet article, nous expliquerons comment fonctionne la limitation de débit par IP, pourquoi il s'agit de l'une des meilleures stratégies pour arrêter les attaques DDoS et comment la mettre en œuvre dans Go à l'aide du package tarifaire.
La limitation de débit est largement utilisée car elle équilibre sécurité et convivialité. Voici pourquoi c’est une approche privilégiée :
Dans la limitation de débit par IP, un limiteur distinct est maintenu pour chaque IP client. Voici comment l'implémenter à l'aide du package golang.org/x/time/rate.
Le forfait tarifaire fait partie des modules étendus de Go. Installez-le avec :
bash
allez chercher golang.org/x/time/rate
aller
paquet principal
importer (
`"fmt"` `"net/http"` `"sync"` `"time"` `"golang.org/x/time/rate"`
)
var (
`mu sync.Mutex` `visitors = make(map[string]*rate.Limiter)`
)
// getVisitor récupère le limiteur de débit pour une IP donnée, en en créant un s'il n'existe pas.
func getVisitor(chaîne ip) *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 applique la limite de débit par IP
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)`
}
La limitation du débit par IP dans Go est un excellent moyen d'atténuer les attaques DDoS au niveau des applications. Il offre un contrôle précis du trafic, garantissant que les utilisateurs légitimes peuvent accéder à votre service tandis que les utilisateurs malveillants sont efficacement limités.
Cette approche limite efficacement les adresses IP abusives sans affecter les utilisateurs légitimes, offrant ainsi une solution évolutive et économe en mémoire pour atténuer les attaques DDoS.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!