Как защититься от DDoS атак стандартными инструментами сервера

«Как защититься от DDoS атак стандартными инструментами сервера» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для защиты от DDoS в Go можно использовать:

  1. Rate Limiting - ограничение запросов с одного IP:
import "golang.org/x/time/rate"

limiter := rate.NewLimiter(100, 200) // 100 запросов/сек, burst до 200
if !limiter.Allow() {
    http.Error(w, "Too many requests", 429)
    return
}
  1. Таймауты - защита от медленных соединений:
srv := &http.Server{
    ReadTimeout:  5 * time.Second,
    WriteTimeout: 10 * time.Second,
    IdleTimeout:  120 * time.Second,
}
  1. Connection Limiting - ограничение одновременных соединений:
sem := make(chan struct{}, 100) // макс 100 соединений

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    sem <- struct{}{}
    defer func() { <-sem }()
    // обработка запроса
})

Дополнительно стоит настроить:

  • Firewall (iptables/nftables)
  • Reverse Proxy (nginx/haproxy)
  • Cloudflare или аналоги

Для сложных атак лучше использовать специализированные решения.