DDoS saldırıları, herhangi bir web hizmetinin çalışmasını birkaç dakika içinde felç edebilir. Saldırganlar, farklı IP adreslerinden binlerce istek göndererek sunucuyu aşırı yükler ve gerçek kullanıcılar için erişilemez hale getirir. Proxy sunucuları, kötü niyetli trafiği filtrelemek, yükü dağıtmak ve sunucunuzun gerçek IP adresini gizlemek için etkili bir koruma aracıdır.
Bu kılavuzda, DDoS'tan korunmak için proxy nasıl ayarlanır, hangi proxy türlerinin kullanılacağı ve çok katmanlı bir güvenlik sistemi nasıl oluşturulacağı ele alınacaktır. Materyal, sistem yöneticileri, web hizmeti sahipleri ve DevOps uzmanlarına yöneliktir.
DDoS saldırıları nasıl çalışır ve neden proxy yardımcı olur
DDoS (Dağıtılmış Hizmet Reddi) saldırısı, hizmetin reddine yönelik dağıtılmış bir saldırıdır. Saldırgan, binlerce enfekte cihazdan oluşan bir botnet kullanarak aynı anda sunucunuza istek gönderir. Amaç, sunucunun kaynaklarını (işlemci, bellek, bant genişliği) tüketmek ve onu meşru kullanıcılar için erişilemez hale getirmektir.
DDoS saldırılarının temel türleri:
- Hacimsel saldırılar (Volumetric attacks) — bağlantı kanalını büyük miktarda trafikle doldurur (DNS amplifikasyonu, UDP seli)
- Protokol saldırıları (Protocol attacks) — ağ protokollerindeki zayıflıkları kullanır (SYN seli, Ping of Death)
- Uygulama katmanı saldırıları (Application layer attacks) — web uygulamasına meşru istekleri taklit eder (HTTP seli, Slowloris)
Proxy sunucuları, DDoS'tan korunmaya birkaç şekilde yardımcı olur:
- Sunucunun gerçek IP adresinin gizlenmesi — saldırganlar yalnızca proxy'nin IP'sini görür, ana sunucunuzun IP'sini değil
- Kötü niyetli trafiğin filtrelenmesi — proxy, istekleri analiz eder ve şüpheli olanları engeller
- Yük dağıtımı — birden fazla proxy sunucusu, trafiği backend sunucuları arasında dağıtır
- Rate limiting — bir IP adresinden gelen istek sayısının sınırlandırılması
- Statik içeriğin önbelleğe alınması — ana sunucu üzerindeki yükü azaltır
Proxy'nin tüm DDoS türlerine karşı bir panzehir olmadığını anlamak önemlidir. Güçlü hacimsel saldırılar, proxy sunucusuna giden bağlantı kanalını doldurabilir. Bu nedenle, proxy'ler diğer koruma yöntemleriyle birlikte etkili bir şekilde kullanılmalıdır: CDN, bulut tabanlı anti-DDoS hizmetleri (Cloudflare, AWS Shield), güvenlik duvarları.
DDoS'tan korunmak için proxy türleri: ters vs doğrudan
DDoS'tan korunmak için iki ana proxy sunucu türü kullanılır:
Ters Proxy (Reverse Proxy)
Ters proxy, web sunucunuzun önünde bulunur ve müşterilerden gelen tüm gelen istekleri kabul eder. Müşteriler yalnızca proxy ile etkileşimde bulunur, sunucunuzun gerçek IP adresini bilmezler. Bu, DDoS'tan korunmak için temel bir araçtır.
Ters proxy için popüler çözümler:
- Nginx — ters proxy işlevleriyle hızlı ve hafif bir web sunucusu
- HAProxy — güçlü filtreleme yeteneklerine sahip özel bir yük dengeleyici
- Apache mod_proxy — Apache için bir modül, Nginx'ten daha az verimlidir
- Varnish — önbelleğe alma üzerine odaklanmış bir HTTP hızlandırıcı
Doğrudan Proxy (Forward Proxy)
Doğrudan proxy, istemci tarafında çıkış istekleri için kullanılır. DDoS'tan korunma bağlamında daha az kullanılır, ancak aşağıdaki durumlarda faydalı olabilir:
- Dış API'lere erişirken sunucularınızın IP adreslerini gizlemek
- Çıkış trafiğini birden fazla IP adresi üzerinden dağıtmak
- Potansiyel saldırılar hakkında bilgi toplarken engelleri aşmak
Bu görevler için konut proxy'leri uygundur — gerçek ev kullanıcılarının IP adreslerine sahiptirler ve normal trafik gibi görünürler, bu da tespit ve engellemeyi zorlaştırır.
| Proxy Türü | DDoS Koruma Uygulaması | Avantajlar |
|---|---|---|
| Ters Proxy (Nginx, HAProxy) | Gelen trafiği alma, filtreleme, yük dağıtımı | Sunucunun gerçek IP'sini gizler, saldırıları filtreler, içeriği önbelleğe alır |
| Konut Proxy'leri | Altyapıyı gizleme, tehdit izleme | Gerçek IP'ler, engellemesi zor |
| Veri Merkezi Proxy'leri | Ek koruma katmanı, hızlı işlem | Yüksek hız, düşük maliyet |
Sunucuyu korumak için Nginx'te ters proxy ayarı
Nginx, ters proxy oluşturmak için en popüler araçlardan biridir. Gelen istekleri hızlı bir şekilde işler, rate limiting destekler ve şüpheli trafiği filtreleyebilir.
Ters proxy için temel ayar
Nginx'i tüm gelen trafiği kabul edecek ayrı bir sunucuya kurun. Gerçek web sunucusu, proxy'nin arkasında gizlenmeli ve yalnızca ondan gelen istekleri kabul etmelidir.
# /etc/nginx/nginx.conf
http {
# Bir IP'den gelen bağlantı sayısının sınırlandırılması
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 10;
# İstek sayısının sınırlandırılması (rate limiting)
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_req zone=req_limit burst=20 nodelay;
# Slowloris'ten korunmak için zaman aşımı
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 5s 5s;
send_timeout 10s;
upstream backend {
# Gerçek web sunucunuzun IP'si
server 192.168.1.100:80;
# Yük dengelemesi için birden fazla sunucu eklenebilir
# server 192.168.1.101:80;
}
server {
listen 80;
server_name example.com;
location / {
# İstekleri backend'e iletme
proxy_pass http://backend;
# Müşterinin gerçek IP'sini iletme
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
# Proxy için zaman aşımı
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
}
}
Şüpheli User-Agent'ları engelleme
Birçok DDoS saldırısı, belirgin User-Agent'lara sahip botlar kullanır. Engelleme kuralları ekleyin:
# Bilinen botları engelleme
map $http_user_agent $bad_bot {
default 0;
~*bot 1;
~*crawler 1;
~*spider 1;
~*scraper 1;
"" 1; # Boş User-Agent
}
server {
listen 80;
server_name example.com;
if ($bad_bot) {
return 403;
}
location / {
proxy_pass http://backend;
}
}
İstenmeyen ülkeleri coğrafi olarak engelleme
Eğer hizmetiniz yalnızca belirli ülkeler için çalışıyorsa, GeoIP modülü ile diğer bölgelerden gelen trafiği engelleyebilirsiniz:
# GeoIP modülünün kurulumu
# apt-get install nginx-module-geoip
load_module modules/ngx_http_geoip_module.so;
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
# Sadece Rusya ve Ukrayna'dan gelen trafiğe izin ver
map $geoip_country_code $allowed_country {
default no;
RU yes;
UA yes;
}
server {
listen 80;
server_name example.com;
if ($allowed_country = no) {
return 403;
}
location / {
proxy_pass http://backend;
}
}
}
Yük dengeleme ve trafik filtreleme için HAProxy
HAProxy, gelişmiş trafik filtreleme yeteneklerine sahip güçlü bir yük dengeleyicidir. Uygulama katmanı saldırılarını engellemek için karmaşık ACL'leri (Erişim Kontrol Listeleri) destekler.
HAProxy için temel yapılandırma
# /etc/haproxy/haproxy.cfg
global
maxconn 50000
# Günlükleme
log /dev/log local0
log /dev/log local1 notice
defaults
mode http
log global
option httplog
option dontlognull
# Zaman aşımı
timeout connect 5s
timeout client 30s
timeout server 30s
# İstek boyutu sınırlandırması (POST flood'a karşı koruma)
maxconn 3000
frontend http_front
bind *:80
# Rate limiting: bir IP'den 10 saniyede maksimum 100 istek
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny if { sc_http_req_rate(0) gt 100 }
# Host başlığı olmayan istekleri engelleme
acl has_host hdr(host) -m found
http-request deny if !has_host
# Şüpheli User-Agent'ları engelleme
acl bad_bot hdr_sub(User-Agent) -i bot crawler spider scraper
http-request deny if bad_bot
# Backend'e iletme
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /health
# Backend sunucularının listesi
server web1 192.168.1.100:80 check
server web2 192.168.1.101:80 check
server web3 192.168.1.102:80 check
HTTP Flood'a karşı ACL ile koruma
HTTP Flood, saldırganın çok sayıda meşru HTTP isteği göndermesiyle gerçekleşen bir saldırıdır. HAProxy, bunları tespit etmek için karmaşık kurallar oluşturmanıza olanak tanır:
frontend http_front
bind *:80
# Bir IP'den gelen istek sayısını izleme
stick-table type ip size 100k expire 30s store http_req_rate(10s),conn_cur
http-request track-sc0 src
# Limitlerin aşılması durumunda engelleme
acl too_many_requests sc_http_req_rate(0) gt 50
acl too_many_connections sc_conn_cur(0) gt 10
http-request deny deny_status 429 if too_many_requests
http-request deny deny_status 429 if too_many_connections
# Mevcut olmayan yollara yapılan istekleri engelleme (tarama)
acl valid_path path_beg /api /static /login /
http-request deny if !valid_path
default_backend web_servers
Güvenilir IP adresleri için beyaz liste oluşturma
Güvenilir IP'ler (örneğin, ofis adresleriniz veya ortaklarınız) için bir beyaz liste oluşturun; bu IP'ler rate limiting'e tabi olmayacaktır:
frontend http_front
bind *:80
# Güvenilir IP'ler için beyaz liste
acl whitelist src 203.0.113.0/24 198.51.100.50
# Rate limiting sadece beyaz liste dışındaki IP'ler için
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src if !whitelist
http-request deny if { sc_http_req_rate(0) gt 100 } !whitelist
default_backend web_servers
Altyapıyı gizlemek için konut proxy kullanımı
Sunucunuzun önünde ters proxy'lerin yanı sıra, altyapıyı korumak için konut proxy'leri de kullanabilirsiniz. Bu, özellikle aşağıdaki durumlarda önemlidir:
- Gözetim sunucularınızın IP adreslerini gizlemek — DDoS saldırılarını izliyorsanız veya tehdit bilgisi topluyorsanız, konut proxy'leri eylemlerinizi gizlemenize yardımcı olur
- Altyapıyı açığa çıkarmadan dış API'lere erişmek — sunucularınız, konut proxy'leri aracılığıyla isteklerde bulunabilir, bu da tespit edilmesini zorlaştırır
- DDoS korumasını test etmek — filtrelerinizin etkinliğini kontrol etmek için farklı IP adreslerinden saldırılar taklit etmek
Konut proxy'leri, gerçek ev kullanıcılarının IP adreslerine sahiptir, bu da onları normal trafikten ayırt edilmez hale getirir. Bu, engellemeyi zorlaştırır ve coğrafi kısıtlamaları aşmanıza olanak tanır.
Örnek: Konut proxy'leri aracılığıyla tehdit izleme
Diyelim ki, hizmetinize saldırabilecek botnetlerin aktivitelerini izlemek istiyorsunuz. Konut proxy'lerini kullanarak, sunucularınızın IP adreslerini açığa çıkarmadan bilgi toplayabilirsiniz:
import requests
# Konut proxy ayarı
proxies = {
'http': 'http://username:password@residential-proxy.com:8080',
'https': 'http://username:password@residential-proxy.com:8080'
}
# Potansiyel tehditler hakkında bilgi toplama
threat_sources = [
'http://suspicious-site1.com',
'http://suspicious-site2.com'
]
for source in threat_sources:
try:
response = requests.get(source, proxies=proxies, timeout=5)
# Saldırı kalıplarını tespit etmek için yanıtı analiz etme
print(f"Durum: {response.status_code}, IP: {response.headers.get('X-Your-IP')}")
except Exception as e:
print(f"{source} erişim hatası: {e}")
Filtreleme kuralları: saldırıyı meşru trafikten ayırt etme
DDoS'tan korunmanın en büyük zorluğu, kötü niyetli trafiği meşru olandan ayırt etmektir. Modern saldırılar, gerçek kullanıcıların davranışlarını taklit eder, bu da tespit etmeyi zorlaştırır.
DDoS saldırısı belirtileri
- İstek sayısında ani artış — kısa bir süre içinde normalden 2-10 kat daha fazla
- Aynı User-Agent ile gelen istekler — botlar genellikle aynı User-Agent'ı kullanır
- Referer yokluğu — diğer sayfalardan geçiş olmadan doğrudan istekler
- Benzer istekler — minimum varyasyonlarla aynı URL'ye yapılan istekler
- JavaScript yokluğu — botlar sayfadaki JS kodunu çalıştırmaz
- Sayfada düşük süre — botlar yanıt aldıktan hemen sonra bağlantıyı kapatır
- Şüpheli IP aralıkları — bir alt ağdan gelen toplu istekler
Çok katmanlı filtreleme
Etkili koruma, birden fazla filtreleme katmanı kullanır:
Seviye 1: IP itibar kontrolü
Bilinen botnetlerin, proxy sunucularının, VPN'lerin veritabanlarına göre IP adresinin kontrol edilmesi. Kötü itibar sahibi IP'lerin engellenmesi.
Seviye 2: Rate Limiting
Bir IP'den gelen istek sayısının sınırlandırılması. Örneğin, normal kullanıcılar için dakikada 50 istekten fazla olmaması.
Seviye 3: Davranış analizi
User-Agent, Referer, çerezlerin kontrolü, JavaScript'in çalıştırılması. Bu parametreler olmadan gelen isteklerin engellenmesi.
Seviye 4: CAPTCHA
Şüpheli trafik için CAPTCHA gösterilir. Botlar bunu geçemez, meşru kullanıcılar bir kez geçer.
Örnek: Nginx'te JavaScript Challenge
Botları filtrelemenin basit bir yolu, çerez ayarlamak için JavaScript'in çalıştırılmasını talep etmektir:
server {
listen 80;
server_name example.com;
# Çerezin varlığını kontrol etme
set $has_cookie 0;
if ($http_cookie ~* "verified=true") {
set $has_cookie 1;
}
# Eğer çerez yoksa, JS challenge göster
location / {
if ($has_cookie = 0) {
return 200 '
<html>
<head><title>Doğrulama</title></head>
<body>
<script>
document.cookie = "verified=true; path=/";
window.location.reload();
</script>
<noscript>Lütfen JavaScript'i etkinleştirin</noscript>
</body>
</html>
';
}
proxy_pass http://backend;
}
}
Gerçek zamanlı DDoS izleme ve yanıt verme
DDoS'tan etkili bir şekilde korunmak, trafik izleme ve anormalliklere hızlı yanıt verme gerektirir. Anahtar metrikleri izleyen bir izleme sistemi ayarlayın:
- Saniyedeki istek sayısı — ani bir artış, saldırıyı gösterebilir
- Özgün IP adresi sayısı — DDoS genellikle birçok IP'den gelir
- 4xx/5xx hata yüzdesi — hata artışı, aşırı yüklenme belirtisi olabilir
- Sunucu yanıt süresi — gecikmenin artması sorunları gösterir
- Kaynak tüketimi — CPU, bellek, ağ trafiği
İzleme araçları
| Araç | Amaç | Özellikler |
|---|---|---|
| Prometheus + Grafana | Metrik toplama ve görselleştirme | Esnek uyarı ayarları, güzel panolar |
| ELK Stack (Elasticsearch, Logstash, Kibana) | Gerçek zamanlı günlük analizi | Güçlü günlük arama, kalıpların tespiti |
| Netdata | Sistem kaynaklarının izlenmesi | Kolay kurulum, gerçek zamanlı metrikler |
| Fail2ban | IP'lerin otomatik olarak engellenmesi | Günlükleri analiz eder ve şüpheli IP'leri engeller |
Prometheus'ta uyarı ayarları
Anormallikler tespit edildiğinde otomatik bildirim için kurallar oluşturun:
# prometheus_alerts.yml
groups:
- name: ddos_detection
interval: 10s
rules:
# İstek sayısında ani artış için uyarı
- alert: HighRequestRate
expr: rate(nginx_http_requests_total[1m]) > 1000
for: 1m
labels:
severity: warning
annotations:
summary: "Yüksek istek oranı tespit edildi"
description: "İstek oranı {{ $value }} req/s"
# 5xx hata oranında artış için uyarı
- alert: HighErrorRate
expr: rate(nginx_http_requests_total{status=~"5.."}[5m]) > 10
for: 2m
labels:
severity: critical
annotations:
summary: "Yüksek 5xx hata oranı"
description: "5xx hataları: {{ $value }} req/s"
# Yüksek CPU kullanımı için uyarı
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Yüksek CPU kullanımı"
description: "CPU kullanımı {{ $value }}%"
Fail2ban ile otomatik yanıt verme
Fail2ban, günlükleri analiz eder ve istek limitlerini aşan IP adreslerini otomatik olarak engeller:
# /etc/fail2ban/jail.local
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
# /etc/fail2ban/filter.d/nginx-req-limit.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"
ignoreregex =
Çok katmanlı koruma: proxy'leri diğer yöntemlerle birleştirme
Proxy sunucuları, DDoS'tan korunmanın önemli bir parçasıdır, ancak diğer yöntemlerle birlikte en etkili şekilde çalışırlar. Çok katmanlı koruma mimarisini inceleyelim:
Seviye 1: Ağ koruması (L3/L4)
- Bulut tabanlı anti-DDoS hizmetleri — Cloudflare, AWS Shield, Google Cloud Armor, trafiği sunucularınıza ulaşmadan filtreler
- Donanım güvenlik duvarları — ağ trafiğini filtrelemek için özel donanım
- BGP blackholing — kötü niyetli trafiği sağlayıcı düzeyinde "kara delik"e yönlendirme
Seviye 2: CDN ve önbellekleme
- CDN (İçerik Dağıtım Ağı) — statik içeriği birçok sunucuya dağıtarak ana sunucu üzerindeki yükü azaltır
- Proxy üzerinde önbellekleme — Varnish, Nginx popüler sayfaları önbelleğe alır ve bunları backend'e başvurmadan sunar
- İçerik optimizasyonu — CSS/JS'nin küçültülmesi, resimlerin sıkıştırılması, trafik hacmini azaltır
Seviye 3: Proxy ve yük dengeleme (L7)
- Ters proxy'ler — Nginx, HAProxy, uygulama katmanında istekleri filtreler
- Yük dengeleme — birden fazla backend sunucusu arasında yük dağıtımı
- Rate limiting — bir IP'den gelen istek sayısının sınırlandırılması
- WAF (Web Uygulama Güvenlik Duvarı) — ModSecurity, AWS WAF, web uygulamalarına yönelik saldırıları engeller
Seviye 4: Backend optimizasyonu
- Veritabanı optimizasyonu — indeksler, isteklerin önbelleğe alınması, okuma kopyaları
- Asenkron işleme — ağır görevler arka planda kuyruklar aracılığıyla gerçekleştirilir (RabbitMQ, Redis)
- Yatay ölçekleme — yük arttıkça yeni sunucular eklenir
Mimari örneği
Müşteri
↓
Cloudflare (anti-DDoS L3/L4, CDN)
↓
Nginx ters proxy (rate limiting, filtreleme)
↓
HAProxy (yük dengeleme)
↓
Backend sunucuları (web uygulaması)
↓
Veritabanı (replikasyon ile)
Bu mimari, tüm seviyelerde koruma sağlar: ağ, taşıma, uygulama. Saldırı bir seviyeyi geçse bile, bir sonraki onu durduracaktır.
Ek bir katman için veri merkezi proxy kullanımı
Bazı durumlarda, CDN ile sunucularınız arasında bir ara katman olarak veri merkezi proxy'leri eklemek mantıklı olabilir. Yüksek işlem hızı sağlarlar ve ek trafik filtrelemesi yapabilirler. Veri merkezi proxy'leri, konut ve mobil proxy'lerden daha ucuzdur, bu da büyük trafik hacimlerinin işlenmesi için ekonomik bir çözüm sunar.
Sonuç
Proxy sunucuları ile DDoS saldırılarından korunmak, kötü niyetli trafiği filtrelemek, sunucuların gerçek IP adreslerini gizlemek ve yük dağıtmak için etkili bir yöntemdir. Nginx veya HAProxy tabanlı ters proxy'ler, filtreleme kurallarının esnek ayarlarını, rate limiting ve şüpheli isteklerin engellenmesini sağlar.
İncelediğimiz ana noktalar:
- Ters proxy'ler (Nginx, HAProxy) — uygulama katmanında (L7) korumanın temel aracı
- Rate limiting ve User-Agent, IP itibarı filtrelemesi, çoğu saldırıyı dışarıda bırakmaya yardımcı olur
- Konut proxy'leri, izleme altyapısını gizlemek ve tehdit bilgisi toplamak için faydalıdır
- Çok katmanlı koruma (CDN + proxy + WAF + backend optimizasyonu) maksimum dayanıklılığı sağlar
- İzleme ve otomatik yanıt verme, saldırıların hızlı tespiti ve engellenmesi için kritik öneme sahiptir
DDoS saldırılarının sürekli evrim geçirdiğini unutmayın, bu nedenle koruma sistemi düzenli olarak güncellenmeli ve test edilmelidir. Yük testleri yapın, günlükleri analiz edin, filtreleme kurallarını güncelleyin ve yeni saldırı yöntemlerini takip edin.
Eğer proxy kullanarak çok katmanlı bir koruma sistemi inşa etmeyi planlıyorsanız, kritik altyapıyı gizlemek için konut proxy'lerini ve büyük trafik hacimlerini yüksek hızda işlemek için veri merkezi proxy'lerini düşünmenizi öneririz. Farklı proxy türlerinin kombinasyonu, güvenlik, performans ve maliyet arasında optimal bir denge sağlar.