- AdminCP
- #1
Temel Mantık (Kısaca)
- Aynı IP / kullanıcı çok kısa sürede çok fazla istek atarsa ⇒ istekleri yavaşlat / engelle
- Amaç:
- Bot / flood / basit DDoS’ları hafifletmek
- API’yı korumak
- Kaynak tüketimini sınırlamak
Temel Rate Limit Kurulumu (express-rate-limit)
Bash:
npm install express express-rate-limit
js
Kodu kopyala
JavaScript:
// app.js veya main server dosyan
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Global rate limit (örn: 15 dakikada 100 istek)
const globalLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 dakika
max: 100, // 15 dk'da max 100 istek
standardHeaders: true, // Rate limit headerlarını ekler
legacyHeaders: false, // X-RateLimit-* kapatır
message: {
status: 429,
error: 'Çok fazla istek gönderdiniz. Lütfen daha sonra tekrar deneyin.'
}
});
// Tüm API için uygula
app.use('/api/', globalLimiter);
app.get('/api/test', (req, res) => {
res.json({ ok: true });
});
app.listen(3000, () => console.log('API 3000 portunda.'));
Seviyeli Koruma Tablosu (Burst + Normal Trafik)
| Seviye | Kapsam | Limit | Kullanım Senaryosu |
|---|---|---|---|
| Level 1 | Global API | 15 dk’da 100 istek | Genel DDoS / flood azaltma |
| Level 2 | Kritik endpoint (/login) | 5 dk’da 10 istek | Brute-force / deneme saldırılarını azaltma |
| Level 3 | Public endpoint (örn /search) | 1 dk’da 30 istek | Arama / filtreleme suistimaline karşı |
Login için daha sıkı limit örneği:
JavaScript:
const loginLimiter = rateLimit({
windowMs: 5 * 60 * 1000, // 5 dakika
max: 10, // 5 dk'da max 10 deneme
message: {
status: 429,
error: 'Çok fazla giriş denemesi yapıldı. Lütfen birkaç dakika sonra tekrar deneyin.'
}
});
app.post('/api/login', loginLimiter, (req, res) => {
// login işlemleri
});
IP Bazlı Rate Limit + Proxy Arkasında Çalışma
Eğer Cloudflare / Nginx arkası kullanıyorsan, gerçek IP’yi alman lazım:
JavaScript:
app.set('trust proxy', 1); // 1 veya true (Cloudflare / reverse proxy için)
// Sonra rate limiter IP’yi doğru görür
app.use('/api/', globalLimiter);
Daha Güçlü Sistem: Dağıtık (Redis) Rate Limit Mantığı
Gerçek bir DDoS’e karşı tek sunucu yeterli olmayabilir.Bir üst seviye için Redis tabanlı storage kullanılır (aynı limit birden fazla node’da paylaşılır).
Mantık tablosu:
| Bileşen | Görev |
|---|---|
| Express | API sunucusu |
| express-rate-limit | Middleware (limit mantığı) |
| Redis | Sayaçları depolar, cluster ortamında paylaştırır |
| Proxy (Nginx/CF) | İlk savunma hattı, IP’yi iletir |
Güvenlik Notları (Forumda altına yazmalık)
- Bu sistem saldırı yapmaz, sadece saldırı / flood’u frenler
- Tamamen Blue Team / savunma amaçlıdır
- DDoS’u tamamen yok etmez ama küçük / orta ölçekli floodlar için çok etkilidir
- Özellikle:
/api/login,/api/register,/search,/reset-passwordgibi endpoint’lerde mutlaka kullanılmalı