DDoS saldırısı (Distributed Denial of Service — Dağıtık Hizmet Engelleme), binlerce farklı cihazdan aynı anda gönderilen sahte trafikle bir sunucunun bant genişliğini, bağlantı tablosunu ya da işlemci gücünü tüketerek gerçek kullanıcılara hizmet veremez hale getirme saldırısıdır. Amaç veri çalmak değil, erişimi kesmektir: site açılmaz, oyun sunucusuna girilemez, uygulama yanıt vermez.
Tek bir kaynaktan yapılan DoS saldırısıyla arasındaki fark kritiktir. DoS’ta saldıran tek bir IP adresidir ve engellemek kolaydır. DDoS’ta trafik binlerce farklı adresten gelir; bunların çoğu, sahiplerinin haberi olmadan ele geçirilmiş kameralar, modemler, sunucular ve IoT cihazlarıdır. Tek bir adresi engellemek hiçbir işe yaramaz.
Bu rehber saldırının nasıl çalıştığını, hangi katmanlarda hangi türlerin bulunduğunu, saldırı altında olup olmadığınızı nasıl anlayacağınızı, sunucu tarafında hangi önlemlerin işe yarayıp hangilerinin yaramadığını ve saldırı anında adım adım ne yapmanız gerektiğini anlatıyor.
DDoS Saldırısı Nasıl Çalışır?#
Saldırının arkasında genellikle bir botnet vardır: kötü amaçlı yazılımla ele geçirilmiş, merkezî bir komuta sunucusundan yönetilen cihaz ağı. Saldırgan komutu verdiğinde bu cihazların hepsi aynı anda hedefe trafik göndermeye başlar.
Botnet üyelerinin çoğu bilgisayar değildir. Varsayılan parolası değiştirilmemiş IP kameralar, ev modemleri, dijital video kaydediciler ve akıllı cihazlar en büyük havuzu oluşturur. Bu cihazlar hem sayıca çok fazladır hem de sahipleri saldırıya katıldıklarının farkına varmaz.
Saldırganın hedefi üç kaynaktan birini tüketmektir:
- Bant genişliği
- Hattınızın kapasitesini doldurmak. 1 Gbit hattınıza 10 Gbit trafik gelirse gerçek istekler zaten içeri giremez. Bu noktada sunucunuzun ne kadar güçlü olduğunun hiçbir önemi yoktur.
- Bağlantı tablosu
- İşletim sisteminin eşzamanlı bağlantı kapasitesini doldurmak. Sunucu boşta görünür ama yeni bağlantı kabul edemez.
- Uygulama kaynakları
- En pahalı işlemleri (veritabanı sorgusu, arama, giriş denemesi) tekrar tekrar tetikleyerek CPU ve belleği tüketmek. Az trafikle çok zarar veren en sinsi yöntemdir.
Saldırı Katmanları: L3, L4 ve L7#
DDoS saldırıları OSI modelinin hangi katmanını hedef aldığına göre sınıflandırılır. Savunma yöntemi de tamamen buna göre değişir.
| Katman | Saldırı türü | Ölçü birimi | Nerede durdurulur |
|---|---|---|---|
| L3 — Ağ | ICMP flood, IP fragment | Gbps / Mpps | Sunucuda durdurulamaz |
| L4 — Taşıma | SYN flood, UDP flood, amplifikasyon | Gbps / pps | Ağ kenarında filtrelenmeli |
| L7 — Uygulama | HTTP flood, slowloris, login flood | İstek/saniye | Sunucuda önemli ölçüde durdurulabilir |
L3/L4 — Hacimsel saldırılar#
Bu saldırıların mantığı basittir: hattı doldur. En yaygın biçimleri şunlardır:
- UDP flood: Rastgele portlara devasa miktarda UDP paketi gönderilir. Sunucu her paket için “port kapalı” yanıtı üretmeye çalışırken tükenir. Bedrock sunucuları UDP kullandığı için bu saldırıya özellikle açıktır.
- SYN flood: TCP el sıkışmasının ilk adımı gönderilir ama üçüncü adım hiç tamamlanmaz. Sunucu her yarım açık bağlantı için kaynak ayırır ve bağlantı tablosu dolar.
- Amplifikasyon: Saldırgan, kaynak adresi kurbanın IP’si gibi görünen küçük bir istek yollar. Açık DNS, NTP veya memcached sunucusu bu isteğe kat kat büyük bir yanıt üretir ve yanıt kurbana gider. Saldırgan böylece kendi hattının çok üzerinde trafik yaratır.
- Reflection: Amplifikasyonun kardeşi; yanıtın kaynağını gizleyerek saldırganın izini kaybettirir.
L7 — Uygulama katmanı saldırıları#
Bu saldırılar “meşru” görünür: normal HTTP istekleri gönderirler, ancak sayfanın en pahalı kısımlarını hedef alırlar.
- HTTP flood: Saniyede binlerce istek. Özellikle arama sayfası, filtreleme sorguları ve giriş formu gibi veritabanına yük bindiren adresler seçilir.
- Slowloris: Çok sayıda bağlantı açılır ve her biri isteği hiç tamamlamadan yavaş yavaş açık tutulur. Az bant genişliğiyle web sunucusunun tüm iş parçacıklarını meşgul eder.
- Cache-busting: Her isteğe rastgele bir sorgu parametresi eklenerek önbellek atlatılır ve her istek sunucuya kadar iner.
- Oyun protokolü saldırıları: Minecraft sunucularında sürekli sunucu listesi sorgusu (ping/status) veya bağlantı kurup hemen kapatan sahte oyuncu akını.
Saldırı Altında Olduğunuzu Nasıl Anlarsınız?#
Sunucunun yavaşlamasının onlarca sebebi olabilir. Saldırıyı normal yük artışından ayırmak için şu kontrolleri sırayla yapın:
# 1. Bağlantı durumlarının özeti
ss -s
# Örnek çıktı (SYN flood belirtisi: synrecv sayısı çok yüksek):
# Total: 18432
# TCP: 17980 (estab 214, closed 132, orphaned 0, timewait 118)
# synrecv 17493
# 2. Hangi IP'lerden kaç bağlantı geliyor?
ss -ntu state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# Örnek çıktı:
# 4312 185.220.101.44
# 3980 45.153.160.12
# 221 88.230.14.7
# 3. Arayüzdeki anlık paket ve bant genişliği
sudo iftop -i eth0 -P
# 4. Saniyedeki paket sayısı (pps) - hacimsel saldırıda fırlar
sudo sar -n DEV 1 5
Web sunucusu loglarından L7 saldırısını ayırt etmek için:
# En çok istek yapan 20 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# En çok istenen adresler (hangi sayfa hedefleniyor?)
awk -F'"' '{print $2}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# Son bir dakikadaki istek sayısı
tail -20000 /var/log/nginx/access.log | grep "$(date -d '1 minute ago' '+%d/%b/%Y:%H:%M')" | wc -l
# Şüpheli user-agent dağılımı
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Tek bir IP’den binlerce istek geliyorsa bu büyük ihtimalle bir tarayıcı botu ya da yanlış yapılandırılmış bir istemcidir. Binlerce farklı IP’den birer ikişer istek geliyor ve hepsi aynı adresi hedefliyorsa, bir DDoS ile karşı karşıyasınız demektir. Bu komutların temelini Linux temel komutları sayfasında bulabilirsiniz.
Sunucu Tarafında Alınabilecek Önlemler#
Hacimsel saldırıları sunucunuzda durduramazsınız, ama L7 saldırılarına ve orta ölçekli L4 denemelerine karşı ciddi bir savunma kurabilirsiniz.
Çekirdek (kernel) sıkılaştırma#
# /etc/sysctl.d/99-ddos.conf
sudo tee /etc/sysctl.d/99-ddos.conf > /dev/null <<'EOF'
# SYN flood koruması
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
# Yarım açık ve bekleyen bağlantıları hızlı temizle
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
# Bağlantı kuyruğu
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 16384
# Sahte kaynak adresli paketleri reddet
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# ICMP yönlendirmelerini yok say
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
EOF
sudo sysctl --system
Bağlantı ve hız sınırı (nftables / iptables)#
# Tek IP'den eşzamanlı bağlantı sayısını sınırla (web için 40)
sudo iptables -A INPUT -p tcp --dport 443 -m connlimit \
--connlimit-above 40 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
# Yeni bağlantı hızını sınırla
sudo iptables -A INPUT -p tcp --dport 443 -m state --state NEW \
-m limit --limit 60/second --limit-burst 120 -j ACCEPT
# Geçersiz paketleri düşür
sudo iptables -A INPUT -m state --state INVALID -j DROP
# Minecraft portu için bağlantı sınırı
sudo iptables -A INPUT -p tcp --dport 25565 -m connlimit \
--connlimit-above 6 --connlimit-mask 32 -j DROP
# Kuralları kalıcı yap
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
Nginx tarafında hız sınırı#
http {
# IP başına istek hızı bölgesi
limit_req_zone $binary_remote_addr zone=genel:20m rate=15r/s;
limit_req_zone $binary_remote_addr zone=giris:10m rate=2r/m;
limit_conn_zone $binary_remote_addr zone=baglanti:10m;
# Yavaş istemcilere karşı zaman aşımları
client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 10s;
keepalive_timeout 30s;
client_max_body_size 16m;
server {
location / {
limit_req zone=genel burst=30 nodelay;
limit_conn baglanti 20;
}
# Giriş sayfası çok daha sıkı
location /wp-login.php {
limit_req zone=giris burst=3 nodelay;
}
}
}
client_body_timeout ve client_header_timeout değerlerini kısaltmak, slowloris saldırısını neredeyse tamamen etkisiz kılar. Güvenlik duvarı kurallarının genel yönetimi için firewall yapılandırması sayfasına bakın.
Fail2Ban ile otomatik engelleme#
# /etc/fail2ban/jail.d/http-flood.conf
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/nginx/access.log
maxretry = 300
findtime = 60
bantime = 3600
action = iptables-multiport[name=HTTP, port="http,https", protocol=tcp]
Fail2Ban, tek bir kaynaktan gelen yoğun isteklere karşı etkilidir. Binlerce farklı IP’den gelen dağıtık bir saldırıda ise engelleme listesi hızla şişer ve fayda sağlamaz; bu yüzden tek başına bir DDoS çözümü değildir.
limit_req değeri, tek bir sayfada onlarca kaynak yükleyen normal ziyaretçileri de engeller ve siteyi kendi elinizle çökertirsiniz. Önce limit_req_log_level warn ile günlüğe yazdırıp gerçek trafiği gözlemleyin, sonra devreye alın.Ağ Kenarında Filtreleme: Asıl Çözüm#
Hattınıza kapasitesinin üzerinde trafik geldiğinde sunucudaki hiçbir kural işe yaramaz; paketler zaten hattı doldurmuştur. Bu yüzden ciddi saldırılar sunucudan önce, sağlayıcının omurga tarafındaki filtreleme merkezlerinde durdurulur.
İşleyiş şöyledir: gelen trafik sürekli izlenir, olağandışı bir örüntü tespit edildiğinde trafik temizleme merkezine yönlendirilir, orada saldırı paketleri ayıklanır ve yalnızca meşru trafik sunucunuza iletilir. Bu işlem saniyeler içinde otomatik gerçekleşir.
| Yöntem | Etkili olduğu saldırı | Sınırı |
|---|---|---|
| Hat üzeri filtreleme (sağlayıcı) | L3, L4, çoğu L7 | Sağlayıcının kapasitesi kadar |
| Ters vekil / WAF | L7 HTTP flood | Yalnızca web trafiği; oyun portlarını kapsamaz |
| Sunucu güvenlik duvarı | Küçük L4, orta L7 | Hat dolduğunda işe yaramaz |
| Fail2Ban | Tek kaynaklı yoğunluk | Dağıtık saldırıda yetersiz |
| Null route (blackhole) | Son çare | Saldırganın amacına hizmet eder: IP tamamen kapanır |
Gerçek IP Adresinizi Gizleme#
Bir koruma katmanının arkasına geçtiyseniz, saldırganın işi sunucunuzun gerçek IP adresini bulmaktır. Bulursa katmanı tamamen atlar ve doğrudan sunucuya vurur. Gerçek IP en sık şu yollardan sızar:
- Eski DNS kayıtları. Bir alt alan adı (
eski.site.com,test.site.com,ftp.site.com) hâlâ gerçek IP’yi gösteriyor olabilir. Geçmiş DNS kayıtları arşivlenir ve aranabilir. - E-posta başlıkları. Sunucudan gönderilen bir posta, başlıklarında gerçek IP’yi taşır. Posta gönderimini ayrı bir sunucu veya servis üzerinden yapın.
- Hata sayfaları ve durum sayfaları. Yapılandırma hatası veren bir sayfa IP’yi yazabilir.
- SSL sertifikası şeffaflık kayıtları. Sertifika aldığınız alt alan adları herkese açık kayıtlarda görünür.
- Doğrudan IP ile erişim. Sunucunuz IP üzerinden istek kabul ediyorsa, tarama yapan saldırgan sitenizi bulabilir.
Son maddeyi kapatmak için varsayılan sunucu bloğunu reddedecek şekilde yapılandırın:
# IP ile gelen veya tanımsız Host başlıklı istekleri reddet
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
ssl_reject_handshake on;
return 444;
}
Saldırı Anında Acil Eylem Planı#
-
Panik yapmadan doğrulayın#
Sunucu gerçekten saldırı altında mı, yoksa bir yapılandırma hatası ya da normal trafik artışı mı?
ss -s,iftopve web sunucusu logları bunu 60 saniyede söyler. Yanlış teşhisle yapılan müdahale çoğu zaman durumu kötüleştirir. -
Saldırı tipini belirleyin#
Bant genişliği mi doldu (L3/L4), yoksa istek sayısı mı fırladı (L7)? İkisinin çözümü tamamen farklıdır. Paket sayısı yüksek ama istek sayısı normalse hacimsel; tersi ise uygulama katmanı.
-
Sağlayıcınıza haber verin#
Hacimsel bir saldırıysa çözüm sizde değil ağ tarafındadır. Destek talebi açarken şunları ekleyin: saldırının başlangıç saati, hedef IP ve port, örnek log satırları, gözlemlediğiniz paket/istek oranı.
-
Geçici sıkılaştırma uygulayın#
L7 saldırısında hız sınırlarını daraltın, pahalı adresleri (arama, filtre, giriş) geçici olarak devre dışı bırakın, agresif önbellek açın. Oyun sunucusunda beyaz liste modunu geçici olarak etkinleştirmek saldırganın bağlantı denemelerini anlamsız kılar.
-
Coğrafi ya da ASN bazlı filtre değerlendirin#
Trafiğin tamamı hizmet vermediğiniz ülkelerden geliyorsa geçici bir coğrafi filtre uygulanabilir. Bunu kalıcı çözüm olarak görmeyin; meşru kullanıcıları da engeller.
-
Log toplayın ve saklayın#
Saldırı sürerken logları ayrı bir dosyaya kopyalayın. Log döngüsü (logrotate) kanıtları silmeden önce arşivleyin. Bu kayıtlar hem kural yazmak hem de gerekirse hukuki süreç için gerekir.
-
İletişim kurun#
Kullanıcılarınıza durumu duyurun. Bir oyun sunucusunda Discord üzerinden yapılan kısa bir bilgilendirme, sessiz kalıp oyuncu kaybetmekten çok daha iyidir.
Saldırı Sonrası: Kalıcı Sıkılaştırma#
Saldırı bittiğinde iş bitmez. Bir kez hedef olan sunucu genellikle tekrar hedef olur. Şu adımları uygulayın:
- Logları analiz edin. Saldırı hangi porta, hangi adrese, hangi user-agent ile geldi? Bu imza, gelecekteki kuralınızın temelidir.
- IP’nizi değiştirmeyi değerlendirin. Gerçek IP sızdıysa yeni bir IP alıp koruma katmanının arkasına geçin ve eski kayıtları temizleyin.
- Kaynak tüketen uç noktaları önbelleğe alın. Saldırının hedeflediği sayfa muhtemelen sitenizin en pahalı sayfasıdır; onu hızlandırmak hem normal zamanda hem saldırıda işinize yarar. Yöntemler site hızlandırma rehberinde.
- İzleme ve uyarı kurun. Bir sonraki saldırıyı kullanıcılardan önce siz fark edin. Kurulum adımları sunucu izleme rehberinde.
- Yedeklerinizi doğrulayın. DDoS veri kaybettirmez ama sıklıkla başka saldırılarla birlikte gelir. Geri dönüş testinizi yapın: 3-2-1 yedekleme kuralı.
- Kuralları kalıcılaştırın. Acil durumda uyguladığınız iptables kurallarını kaydetmezseniz ilk yeniden başlatmada kaybolur.
Oyun Sunucularına Özel Notlar#
Oyun sunucuları, web sitelerinden farklı bir tehdit profiline sahiptir. Gecikmeye çok daha duyarlıdırlar: 200 ms gecikme bir web sitesinde fark edilmez, bir PvP sunucusunda oyunu oynanamaz hale getirir.
- Bedrock sunucuları UDP kullanır (19132/UDP) ve UDP flood’a yapısal olarak daha açıktır. Java Edition TCP (25565) üzerinden çalışır ve SYN flood hedefidir.
- Sunucu listesi sorgusu (status ping) ucuzdur ama bedavadır. Saniyede binlerce ping isteği, sunucuyu oyuncu bağlantısı kabul edemez hale getirebilir. Bağlantı hız sınırı bunu büyük ölçüde çözer.
- Proxy kullanıyorsanız (BungeeCord, Velocity) arka uç sunucuların yalnızca proxy IP’sinden bağlantı kabul ettiğinden emin olun; aksi halde doğrudan arka uca bağlanılabilir.
- SRV kaydı kullanmak port bilgisini gizlemez, sadece oyuncunun yazmasını kolaylaştırır. Güvenlik önlemi olarak görmeyin. Ayrıntısı DNS kayıtları sayfasında.
- Hedefli saldırılar süreklidir. Popüler bir sunucu işletiyorsanız koruma bir kez kurulup unutulacak bir şey değil, sürekli takip edilen bir konudur.
Minecraft’a özgü yapılandırmalar, plugin tarafındaki önlemler ve proxy senaryoları için Minecraft sunucusu DDoS koruması sayfasına geçebilirsiniz. Ücretsiz DDoS korumasıyla gelen paketleri Minecraft sunucu paketleri ve VDS paketleri sayfalarında karşılaştırabilirsiniz.
Yanlış Bilinenler#
| Yaygın inanış | Gerçek |
|---|---|
| “Güçlü sunucu DDoS’u kaldırır” | Hat dolduğunda işlemci ve RAM’in hiçbir önemi kalmaz |
| “Saldıran IP’leri engellersem biter” | Binlerce IP vardır ve sürekli değişir |
| “Trafik grafiği normalse saldırı yok” | L7 saldırıları düşük bant genişliğiyle çöktürür |
| “CDN her şeyi korur” | Standart CDN yalnızca HTTP/HTTPS kapsar, oyun portlarını değil |
| “Port değiştirirsem bulamazlar” | Port taraması saniyeler sürer |
| “Küçük sunucu hedef olmaz” | Kiralık saldırı hizmetleri çok ucuz; hedef seçimi rastgele olabilir |
Özetle#
DDoS, veriyi değil erişilebilirliği hedefleyen bir saldırıdır ve savunması saldırının katmanına göre değişir. L7 saldırılarına karşı sunucunuzda ciddi bir savunma kurabilirsiniz: hız sınırı, bağlantı limiti, kısa zaman aşımları, agresif önbellek ve Fail2Ban. Bunlar gerçek ve ölçülebilir fayda sağlar.
Hacimsel L3/L4 saldırılarında ise tek çözüm, trafiğin sunucunuza ulaşmadan önce ağ kenarında filtrelenmesidir. Bu yüzden sunucu seçerken DDoS korumasının hat üzerinde mi yoksa sadece pazarlama cümlesi mi olduğunu, saldırı eşiği aşıldığında IP’nizin null route edilip edilmeyeceğini mutlaka sorun.
Son olarak: gerçek IP adresinizi gizli tutun, çekirdek parametrelerini sıkılaştırın, logları saklayın ve bir izleme sistemi kurun. Saldırıyı kullanıcılardan önce fark etmek, müdahale süresini dakikalardan saniyelere indirir. Sağlayıcı seçerken bakılacak diğer maddeler için sunucu kiralama rehberine göz atabilirsiniz.