속도 제한은 DDoS 공격을 완화하는 가장 효과적인 기술 중 하나입니다. 다양한 변형 중에서 IP당 속도 제한은 목표 접근 방식이 눈에 띕니다. 즉, IP 주소를 기반으로 각 클라이언트에 대해 개별적으로 요청 제한을 적용합니다. 이를 통해 단일 사용자가 서버를 압도하는 것을 방지하는 동시에 합법적인 사용자에게 공정한 액세스 수준을 유지합니다.
이 기사에서는 IP당 속도 제한이 어떻게 작동하는지, 이것이 DDoS 공격을 막는 최고의 전략 중 하나인 이유, 속도 패키지를 사용하여 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.")`
}
func main() {
`http.HandleFunc("/", rateLimitedHandler)` `fmt.Println("Starting server on :8080")` `http.ListenAndServe(":8080", nil)`
}
Go의 IP당 속도 제한은 애플리케이션 수준에서 DDoS 공격을 완화하는 탁월한 방법입니다. 트래픽을 정밀하게 제어하여 악의적인 사용자가 효과적으로 제한되는 동안 합법적인 사용자가 귀하의 서비스에 액세스할 수 있도록 보장합니다.
이 접근 방식은 합법적인 사용자에게 영향을 주지 않고 악의적인 IP를 효율적으로 제한하여 DDoS 공격을 완화하기 위한 확장 가능하고 메모리 효율적인 솔루션을 제공합니다.
위 내용은 속도 제한을 사용하여 Go에서 DDoS 공격을 중지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!