Menjaga service tetap hidup saat trafik berubah menjadi senjata: memahami pola serangan DDoS, rate limiting yang benar, peran WAF, dan strategi menahan lonjakan trafik — dibuktikan dengan praktik melindungi endpoint kritis dari serangan dan traffic spike

Semua kemampuan SRE kalian mengasumsikan satu hal: pengguna datang dengan niat baik. Tetapi terkadang pengguna tidak datang — sesuatu yang lain datang, dengan volume yang dirancang untuk membuat service kalian menyerah. DDoS (Distributed Denial of Service) mengubah lawan dari kegagalan acak menjadi serangan terorganisir, dan alasan kenapa ini masuk urusan SRE sederhana: targetnya bukan data, melainkan availability — metrik yang selama ini kalian jaga dengan SLO.
Yang perlu dipahami sejak awal: serangan DDoS tidak selalu bisa dimenangkan sendirian, dan menang tidak selalu berarti menolak semuanya. Episode 20 membahas pola serangan, rate limiting yang benar, peran WAF, dan strategi bertahan yang berlapis.
DDoS bukan satu hal, melainkan spektrum dengan tiga lapisan serangan yang berbeda — dan lapisan yang diserang menentukan strategi yang relevan:
| Lapisan | Contoh serangan | Sinyal yang terlihat |
|---|---|---|
| L3/L4 (network/transport) | UDP flood, SYN flood, amplification | Volume paket/koneksi melonjak |
| L7 (application) | HTTP flood, slowloris, request berat | Request masuk tapi resource menipis |
| Bantuan (infra lain) | DNS amplification, refleksi | Trafik keluar tak wajar, dependency ikut jatuh |
Pola L7 adalah yang paling berbahaya bagi SRE karena ia terlihat seperti trafik normal: request sah tapi berlebihan. Di situlah rate limiting dan proteksi aplikasi bekerja — sementara serangan volume besar (L3/L4) biasanya membutuhkan penyedia dengan kapasitas jaringan raksasa (CDN/cloud scrubbing).
Rate limiting adalah aturan: berapa banyak request yang boleh masuk per identitas per satuan waktu. Ini melindungi layanan dari overload sekaligus memberi batas yang jelas bagi klien yang baik.
Identitas pembatas harus dipilih dengan hati-hati. Rate limit per IP memblokir pengguna yang berbagi satu IP korporat; rate limit per API key / user lebih adil, tapi bisa disalahgunakan penyerang yang membuat banyak akun. Kombinasi keduanya adalah praktik umum.
rate_limits:
- identity: user_id # adil untuk pengguna nyata
limit: 120
per: 60s
response: 429 + Retry-After
- identity: ip # jaring pengaman saat akun dibajak
limit: 3000
per: 60s
response: 429Important
Rate limiting bukan hanya soal menolak, tapi soal memberi sinyal yang benar: response 429 wajib menyertakan header Retry-After agar klien yang patuh tahu kapan boleh mencoba lagi. Klien yang baik akan menyesuaikan diri; penyerang yang tetap menyerang justru semakin mudah teridentifikasi.
Web Application Firewall (WAF) berdiri di depan aplikasi dan menyaring request berdasarkan pola serangan yang dikenal: SQL injection, XSS, path traversal, dan manipulasi lainnya. WAF adalah teman, bukan pengganti, dari keamanan aplikasi (episode 19) — ia menangkap yang sudah dikenal di gerbang, sementara aplikasi melindungi dirinya dari yang baru.
Yang perlu dipahami SRE tentang WAF:
{
"name": "block-known-bot-login",
"priority": 1,
"statement": {
"notStatement": {
"statement": {
"byteMatchStatement": {
"fieldToMatch": { "header": { "name": "user-agent" } },
"searchString": "Mozilla",
"positionalConstraint": "CONTAINS"
}
}
},
"fieldToMatch": { "uriPath": { "path": "/login" } }
},
"action": "BLOCK"
}Strategi pertahanan yang sehat tidak bergantung pada satu lapisan — ia berlapis dan tiap lapisan punya tugas:
Prinsip kuncinya: semakin dekat ke pengguna, semakin murah untuk menahan. Menolak serangan di CDN biayanya nyaris nol; menahan serangan di server aplikasi biayanya CPU, koneksi, dan stres.
Terapkan pada endpoint /login dan /checkout di lab kalian:
429 + Retry-After.Tip
Definisi sukses menahan DDoS jarang "menerima semua request". Sukses yang realistis adalah pengguna sah tetap terlayani — SLO availability tidak dihitung dari semua request, melainkan dari request yang diizinkan masuk. Dapatkan keseimbangan itu sejak latihan, bukan saat serangan nyata.
Pada episode 20 ini, kalian telah belajar menahan trafik yang berubah menjadi senjata.
Inti yang harus dibawa pulang:
Retry-After yang benar.Di episode 21 selanjutnya, kita masuk ke jantung sistem modern: distributed systems reliability — konsistensi, partitioning, retry/backoff, circuit breaker, dan idempotency dalam kode. Sampai jumpa di episode 21!