レート制限は、DDoS 攻撃を軽減するための最も効果的な手法の 1 つです。そのバリエーションの中でも、IP ごとのレート制限 は、ターゲットを絞ったアプローチで際立っています。IP アドレスに基づいて、クライアントごとにリクエスト制限を個別に適用します。これにより、正当なユーザーに対する公平なレベルのアクセスを維持しながら、単一のユーザーがサーバーに負荷をかけることを防ぎます。
この記事では、IP ごとのレート制限がどのように機能するか、それが DDoS 攻撃を阻止するための最良の戦略の 1 つである理由、レート パッケージを使用して Go に実装する方法について説明します。
レート制限は、セキュリティと使いやすさのバランスをとるため、広く使用されています。これが推奨されるアプローチである理由は次のとおりです:
IP ごとのレート制限では、クライアント IP ごとに個別のリミッターが維持されます。 golang.org/x/time/rate パッケージを使用して実装する方法は次のとおりです。
料金パッケージは Go の拡張モジュールの一部です。次のコマンドでインストールします:
バッシュ
golang.org/x/time/rate を取得してください
行きます
パッケージメイン
インポート (
)`"fmt"` `"net/http"` `"sync"` `"time"` `"golang.org/x/time/rate"`
)
var (
`mu sync.Mutex` `visitors = make(map[string]*rate.Limiter)`
)
// getVisitor は指定された IP のレート リミッターを取得し、存在しない場合はレート リミッターを作成します。
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 は 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.")`
}
関数 main() {
`http.HandleFunc("/", rateLimitedHandler)` `fmt.Println("Starting server on :8080")` `http.ListenAndServe(":8080", nil)`
}
Go の IP ごとのレート制限は、アプリケーション レベルで DDoS 攻撃を軽減する優れた方法です。トラフィックを正確に制御し、悪意のあるユーザーを効果的に抑制しながら、正規のユーザーがサービスにアクセスできるようにします。
このアプローチは、正規のユーザーに影響を与えることなく不正な IP を効率的に抑制し、DDoS 攻撃を軽減するためのスケーラブルでメモリ効率の高いソリューションを提供します。
以上がレート制限を使用して Go で DDoS 攻撃を阻止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。