Call of Duty sunucusunu DDoS saldırılarına karşı koruma

Yayınlanma tarihi 23 dk okuma

Bir Call of Duty sunucusunun gerçekten hangi portlara ihtiyaç duyduğu, oyunun, sorgunun ve RCON'un neden aynı portta olduğu, getstatus yansıtmasını ve RCON saldırılarını nasıl sınırlayacağınız ve hangi saldırı hacminden sonra yalnızca sunucunun önündeki ağda yapılan filtrelemenin işe yaradığı.

Bir Call of Duty sunucusunu DDoS saldırılarına karşı korumak, klasik oyunlarda sevindirici biçimde somut bir iştir: Konu tam olarak bir UDP portu, server.cfg dosyasındaki bir tutam Dvar ve motorun 2003'ten bu yana beraberinde getirdiği bir amplifikasyon vektörüdür. Akşam bir maçın tam ortasında bütün oyuncuları aynı anda kaybeden bir sunucunun ise donanım sorunu yaşaması nadirdir. Çoğunlukla bir saldırı yapılıyordur, hem de tam olarak sunucu dolu olduğu anda.

Bu yazı önce hangi oyunlar için geçerli olduğunu, ardından ek maliyet olmadan kendiniz neleri güvene alabileceğinizi, sonra bu önlemlerin teknik olarak nerede bittiğini ve en sonunda sunucunun önündeki ağda neler olması gerektiğini gösteriyor. Komutlar Debian 12, Debian 13, Ubuntu 22.04 LTS ve Ubuntu 24.04 LTS için yazılmıştır ve root kullanıcısını varsayar; normal kullanıcı olarak başlarına sudo ekleyin.

Saldırı şu anda sürüyorsa: server.cfg dosyasında şimdi hiçbir şey değiştirmeyin ve sunucuyu yeniden başlatmayın. Önce ölçüm değerlerini kaydedin (“Kayıt tutma” bölümüne bakın), saldırıdan sonra bunlar kaybolur.

Hangi Call of Duty oyunlarında bir sunucuyu DDoS saldırılarına karşı koruyabilirsiniz

Bir Call of Duty sunucusunu DDoS saldırılarına karşı yalnızca kendi dedicated sunucularına izin veren oyunlarda koruyabilirsiniz. Bunlar Call of Duty (2003), Call of Duty United Offensive, Call of Duty 2, Call of Duty 4 Modern Warfare ve Call of Duty World at War oyunlarının özgün sürümleridir; buna topluluk platformları Plutonium (World at War, Black Ops, Black Ops II, Modern Warfare 3), IW4x (Modern Warfare 2) ve CoD4X (Call of Duty 4) eklenir. Bütün bu oyunlar aynı kalıbı beraberinde getirir: bir server.cfg, açık bir UDP portu ve herkese açık bir sunucu listesinde bir kayıt.

Bu yazı, modern bölümler için açıkça geçerli değildir. Warzone, Modern Warfare (2019), Black Ops Cold War, Vanguard, Modern Warfare II, Modern Warfare III ve Black Ops 6 kiralanabilir dedicated sunucu tanımaz: Maçlar Activision'ın matchmaking altyapısında çalışır; bir server.cfg yoktur, sunucu tarayıcısı yoktur ve açabileceğiniz ya da güvene alabileceğiniz bir port yoktur. Activision'ın bu oyunlar için yayımladığı port listeleri (diğerlerinin yanında TCP 3074 ile 27014 ila 27050, ayrıca UDP 3074, 3478 ve 27000 ila 27031) istemci ve platform portlarını tanımlar, sunucu portlarını değil. Warzone'da bağlantı kopmaları yaşayan kişinin sorunu kendi hattındadır ya da Activision'dadır, ama kiralanmış bir sunucunun çözeceği bir sorun değildir.

Neden ısrarla Call of Duty sunucuları saldırıya uğrar

Call of Duty sunucuları, onları rahat bir hedefe dönüştüren dört özelliği bir arada taşır. Birincisi, listelenen her sunucu adresini kendisi yayınlar: Sunucu listesindeki kayıt, IP adresini ve portu düz metin olarak taşır, yoksa oraya kimse giremezdi. İkincisi, bütün trafik UDP üzerinden çalışır ve UDP'de talep edilebilecek bir bağlantı kurulumu yoktur, gönderen adresleri sahte olabilir. Üçüncüsü, motor durum sorgularını, kimsenin oyunu başlatması gerekmeden herkese yanıtlar. Dördüncüsü, uzaktan yönetim RCON, oyunun kendisiyle aynı portta durur.

Buna bir de toplumsal taraf ekleniyor: banlanmış oyuncular, klanlar arasındaki rekabet, yıllardır birbirini tanıyan bir toplulukta çıkan kavgalar. Bir saldırı, tetikleyen kişiye ne beceri ne de anlamlı bir para harcaması getiriyor; booter ve stresser denen hizmetler ayda birkaç euroya abonelik olarak satılıyor ve oyun sunucuları üzerinden yapılan amplifikasyon saldırıları oralarda standart teklife dâhil. Bir DDoS saldırısının ayrıntıda ne olduğunu DDoS saldırısı nedir? yazısı anlatıyor.

Asıl mesele olan portlar

Klasik bir Call of Duty sunucusu tam olarak bir UDP portu kullanır, o da 28960'tır. Bu tek port üzerinde üç şey aynı anda çalışır: oyun trafiği, sunucu listesinin durum sorguları ve uzaktan yönetim RCON. Ayrı bir sorgu portu ve ayrı bir RCON portu yoktur. Dedicated bir sunucunun başlatma satırı bütün oyunlarda aynı görünür, yalnızca çalıştırılabilir dosyanın adı farklıdır:

+set dedicated 2 +set net_ip 0.0.0.0 +set net_port 28960 +set sv_maxclients 32 +exec server.cfg +map_rotate
Oyun ya da platform Hizmet Port Protokol
Call of Duty, United Offensive, Call of Duty 2, Call of Duty 4, World at War Oyun, sorgu ve RCON birlikte 28960 UDP
Aynı makinedeki diğer örnekler Oyun, sorgu ve RCON birlikte 28961 ila 28970 UDP
Plutonium T4 (World at War) Oyun, sorgu ve RCON birlikte 28960 UDP
Plutonium T5 (Black Ops) Oyun, sorgu ve RCON birlikte 28960 UDP
Plutonium T6 (Black Ops II) Oyun, sorgu ve RCON birlikte 4976 UDP
Plutonium IW5 (Modern Warfare 3) Oyun, sorgu ve RCON birlikte 27016 UDP
IW4x (Modern Warfare 2) Oyun, sorgu ve RCON birlikte 28960 UDP
t7x (Black Ops III) Oyun, sorgu ve RCON birlikte 27017 UDP
Call of Duty 4 ana sunucusu (giden) Liste ve yetkilendirme 20810 ve 20800 UDP
Call of Duty 2 ana sunucusu (giden) Liste ve yetkilendirme 20710 ve 20700 UDP
Call of Duty 1 ana sunucusu (giden) Liste ve yetkilendirme 20510 ve 20500 UDP
IW4MAdmin Yönetim için web arayüzü 1624 TCP
SSH Sunucu erişimi 22 TCP

Ana sunucu portları güvenlik duvarı izinlerinize ait değildir. 20810 ve 20800, karşı taraftaki hedef portlardır, sizin makinenizde dinleyen portlar değil: Sunucunuz listeye kendisi sesleniyor. Buna rağmen birçok port açma rehberi onları gelen yönde açmayı öneriyor. Bu, hiçbir karşılık vermeden saldırı yüzeyini büyütür.

Call of Duty'de alışıldık büyüklükler

Durumu hâlâ kendiniz kontrol altına alabilir misiniz diye tahmin etmek istiyorsanız, ikinci tablo daha önemli olanıdır. Dolu bir sunucunun normal yükünü, bir saldırıda söz konusu olan sayılarla karşılaştırır.

Gösterge Değer
Oyuncu başına giden hız (alışıldık sv_maxRate değeri) saniyede 25.000 bayt
32 slot dolu olduğunda giden yük saniyede yaklaşık 800 kilobayt, yani aşağı yukarı 6,4 Mbit/s
Tipik bir oyun sunucusunun hattı 1 Gbit/s, saniyede 125 megabayta denk gelir
64 baytlık paketlerde 1 Gbit/s üzerindeki paket hızı saniyede yaklaşık 1,49 milyon paket
Hat üzerindeki bir getstatus sorgusunun boyutu 41 bayt (20 bayt IP başlığı, 8 bayt UDP başlığı, 13 bayt veri yükü)
CISA'nın TA14-017A uyarısına göre Quake ağ protokolünün amplifikasyon faktörü 63,9
Bundan hesaplanan, bir getstatus sorgusuna verilen yanıt yaklaşık 2.600 bayt
CoD4X'in getstatus için yerleşik üst sınırı 20 saniyede 20 yanıt
CoD4X'in getinfo için yerleşik üst sınırı 100 saniyede 100 yanıt
KernelHost'ta bir oyun sunucusuna karşı filtrelenen UDP flood'u 112,2 Gbit/s'nin üzerinde
KernelHost'ta bir ses sunucusuna karşı filtrelenen saldırı saniyede 41,5 milyonun üzerinde pakette 473,4 Gbit/s'nin üzerinde

Oyun, sorgu ve RCON neden aynı portta duruyor

Call of Duty açısından belirleyici olan özellik budur. Bütün klasik Call of Duty oyunlarının üzerine kurulduğu id Tech 3 motoru, oyun, sorgu ve uzaktan yönetim için ayrı portlar tanımaz. Her şey, o tek UDP portu üzerinde bağlantısız paketler denen paketler aracılığıyla çalışır. Bağlantısız bir paket, dört bayt 0xFF ile başlayan ve ardından komut adını düz metin olarak taşıyan bir UDP paketidir: getstatus, getinfo, getchallenge, connect ya da rcon.

Pratikteki sonuç rahatsız edicidir: RCON'u, oyunu da kapatmadan güvenlik duvarıyla oyundan ayıramazsınız. 28960 portundaki bir kural her zaman her şeyi etkiler. Sorgu flood'larını ve RCON saldırılarını hedefli biçimde ayıklamak isteyen kişinin yalnızca port numarasına değil, paket içeriğine bakması gerekir. Port temelli güvenlik duvarı kurallarının Call of Duty'de, ayrı sorgu portu olan oyunlara göre daha erken sınırına ulaşmasının nedeni tam olarak budur.

Call of Duty'de getstatus yansıtması nedir?

getstatus yansıtması, bir saldırganın sahte gönderen adresiyle küçük durum sorgularını çok sayıda oyun sunucusuna göndermesi ve bu sunucuların belirgin biçimde daha büyük yanıtlarının asıl kurbanda toplanması anlamına gelen bir amplifikasyon saldırısıdır. Oyun sunucuları burada hedef değil, amplifikasyon aracıdır. Bu vektör id Tech 3 motoru için on yılı aşkın süredir belgelenmiştir ve Call of Duty'yi de Quake 3 ile onun diğer türevlerini de aynı şekilde etkiler.

Bu sizi iki yönden, iki kat vurur. Saldırıya uğrayan taraf olarak, işlem zamanı ile giden bant genişliği tüketen bir getstatus sorgu seli alırsınız ve oyuncularınız bunu lag sıçramaları olarak fark eder. İstemeden amplifikasyon aracı olan taraf olarak, yabancı bir kurbana yanıtlar gönderirsiniz ve abuse şikâyeti size gelir. İkisi de aynı portta, aynı paketlerle olur ve ikisi de doluluk grafiğinde ilk bakışta zararsız görünür.

Bir getstatus paketi nasıl görünür

Sorgu, dört bayt 0xFF ile getstatus sözcüğünden, yani toplam 13 bayt veri yükünden oluşur. IP ve UDP başlığıyla birlikte bu, hat üzerinde 41 bayt eder. Call of Duty forumlarında yıllardır elden ele dolaşan güvenlik duvarı kurallarındaki uzunluk denetimi tam olarak bunu hedefler:

iptables -A INPUT -p udp -m length --length 41:45 -m recent --set --name getstatus_cod
iptables -A INPUT -p udp -m string --algo bm --string "getstatus" -m recent --update --seconds 1 --hitcount 20 --name getstatus_cod -j DROP

Yanıt kıyaslanamayacak kadar büyüktür. Bir statusResponse, sunucu yapılandırmasının tamamını karakter dizisi olarak ve buna ek olarak bağlı her oyuncu için bir satır taşır; yani dolu bir sunucuda birkaç kilobayt eder. CISA, UDP amplifikasyon saldırılarını derlediği listede (TA14-017A) Quake ağ protokolünü 63,9 amplifikasyon faktörüyle veriyor ve kötüye kullanılan komut olarak açıkça sunucu bilgilerinin alışverişini adlandırıyor. Böylece 1 Mbit/s'lik sahte sorgu, kurbanda yaklaşık 64 Mbit/s'ye dönüşür. Karşılaştırma için: Aynı listede DNS 28 ila 54 arasında, NTP ise 556,9'da duruyor.

Yerleşik fren: sv_queryIgnoreTime ve sv_queryIgnoreMegs

Call of Duty 4, sunucu sürümü 1.7'den bu yana yerleşik bir sorgu frenine sahip. Bu fren, durum sorgusu göndermiş her adresi hatırlar ve aynı adresten gelen sonraki sorguları ayarlanabilir bir süre boyunca yok sayar. Bunu dört Dvar yönetir, şu fabrika ayarlarıyla:

sv_queryIgnoreMegs        1
sv_queryIgnoreTime        2000
sv_queryBounceIgnoreTime  12000
sv_queryIgnoreDebug       0

sv_queryIgnoreMegs, yok sayma listesinin ne kadar bellek kullanabileceğini belirler. 1 megabayt yaklaşık 65.000 adres alır, her ek megabayt ise yaklaşık 87.000 adres daha. 0 değeri freni tamamen kapatır ve yapılandırma eski bir şablondan geldiği için çok sayıda sunucuda durum tam olarak budur. sv_queryIgnoreTime, milisaniye cinsinden kilitleme süresidir. sv_queryBounceIgnoreTime, bir yanıt “ICMP Port Unreachable” ile geri döndüğünde, yani tam olarak sunucunuz yabancı bir kurbana karşı amplifikasyon aracı olarak kötüye kullanıldığında devreye girer. sv_queryIgnoreDebug 1, isabetleri loga yazar, böylece bir şeyin olup olmadığını genel olarak görebilirsiniz.

CoD4X kullanan kişinin sunucu kodunda buna ek olarak sabit üst sınırları vardır: 20 saniyede en fazla 20 getstatus yanıtı, 100 saniyede en fazla 100 getinfo yanıtı ve 100 milisaniyede en fazla bir RCON hata mesajı. Kaynak kodundaki yorum niyeti açıkça adlandırıyor: Sunucu, kendisinin flood ile dolmasına razı olabilir, ama bu sırada giden bant genişliği harcamamalıdır. Bu doğru bir öncelik sıralamasıdır, ama sunucunun önündeki filtrelemenin yerini tutmaz.

Call of Duty'de RCON neden tarihsel olarak bir sorundur

RCON, sunucunun uzaktan yönetimidir ve Call of Duty'de oyun portu üzerinde şifrelenmemiş bir UDP paketidir. Bir RCON komutu hat üzerinde şöyle görünür: dört bayt 0xFF, ardından rcon sözcüğü, ardından düz metin hâlindeki parola, ardından asıl komut. Şifreleme yoktur, oturum yoktur, kullanıcı hesabı yoktur ve ikinci bir faktör yoktur. Bundan, hepsi gerçek olan üç sorun doğar:

  • Okunması. Trafiği yolun herhangi bir noktasında gören kişi, RCON parolanızı düz metin olarak okur. Bu, sizinle sunucu arasındaki her ağ için ve parolayı verdiğiniz her araç için geçerlidir.
  • Denenmesi. Kilitlenebilecek bir oturum açma yoktur ve on hatalı denemeden sonra bir hesap kilidi yoktur. Bir saldırgan parolaları istediği hızda dener. Özgün sunucu bunu hiç yavaşlatmaz, CoD4X ise yalnızca yanıtı 100 milisaniyede bir hata mesajına sınırlar ve denemeyi “Bad rcon” olarak loga yazar.
  • Yansıtma. Bir RCON hata mesajı da sahte bir pakete verilen yanıttır. Sunucunuza sahte RCON paketleri gönderen kişi onu küçük bir amplifikasyon aracı olarak kullanır ve sunucunuz bu arada logunu doldurur.

Pratikteki sonuç: rcon_password değerini yalnızca RCON'a gerçekten ihtiyaç duyuyorsanız ayarlayın. İhtiyaç duyuyorsanız uzun ve rastgele olsun. CoD4X en az sekiz karakter istiyor, bu bir alt sınırdır, öneri değil. Gündelik işte yönetimi, açık ağdan gelen RCON yerine SSH ve sunucu konsolu üzerinden yapın. Ve kendisi RCON üzerinden konuşan IW4MAdmin gibi bir yönetim aracı işletiyorsanız, onun 1624 portundaki web arayüzü açık ağa ait değildir.

Para harcamadan önce kendiniz neler yapabilirsiniz

Bu bölüm en uzunu ve bu bilinçli bir tercih. Düzgün yapılandırılmış bir Call of Duty sunucusu, kimde barındırıldığından bağımsız olarak küçük ve orta ölçekli saldırılara kendi gücüyle dayanır.

1. Envanter: sunucuda ne dinliyor?

Tek bir kural yazmadan önce sunucunuzun dışarıya ne sunduğuna bakın. Tahmin etmeyin, bakın:

ss -lntup

İlgi çekici olan, yerel adresi gösteren sütundur. 0.0.0.0:28960 ve [::]:28960 “bütün internetten erişilebilir” anlamına gelir, 127.0.0.1:3306 ise “yalnızca yerel” demektir ve güvenlik duvarı kuralına ihtiyaç duymaz. Oyunun yanında orada sık sık IW4MAdmin, haritaların Fast Download'u için bir web sunucusu, istatistikler için bir veritabanı ve unutulmuş ikinci bir oyun örneği görünür. Saldırganın bakışını, dışarıdan yapılan bir port taraması verir:

nmap -Pn -sU -p 28960-28970,4976,27016 SUNUCU.IP.ADRESİNİZ
nmap -Pn -p- --min-rate 1000 SUNUCU.IP.ADRESİNİZ

2. Yalnızca oyunun gerçekten ihtiyaç duyduğunu açık bırakma

Tek bir Call of Duty sunucusu için dışarıya tek bir izin yeter, geri kalan her şey kısıtlanır ya da hiç yayımlanmaz. UFW ile bu şöyle görünür, hem de tam bu sırayla, ki kendinizi dışarıda bırakmayın:

ufw allow 22/tcp comment 'SSH'
ufw allow 28960/udp comment 'Call of Duty'
ufw allow from 203.0.113.10 to any port 1624 proto tcp comment 'IW4MAdmin'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

203.0.113.10 adresini kendi adresinizle değiştirin. Plutonium T6'da 28960/udp yerine 4976/udp geçer, Plutonium IW5'te ise 27016/udp olur. Birden fazla örnek işletiyorsanız yalnızca gerçekten kullanılan aralığı açın, yani örneğin 28960:28962/udp, topluca 28960 ila 28970 değil. Hiçbir şeyin dinlemediği her port bir giriş kapısı olmasa da saldırı durumunda kernel'e yine de iş çıkarır. Kurtarma yolu da dâhil tam rehberi Kendinizi dışarıda bırakmadan UFW güvenlik duvarı kurma yazısında bulabilirsiniz.

3. server.cfg dosyasındaki sorgu frenini açma

Bu dört satır, bir Call of Duty 4 sunucusunun her server.cfg dosyasına aittir ve birkaç megabayt bellek dışında hiçbir şeye mal olmaz:

set sv_queryIgnoreMegs "4"
set sv_queryIgnoreTime "2000"
set sv_queryBounceIgnoreTime "12000"
set sv_queryIgnoreDebug "0"

4 megabayt yaklaşık 326.000 adres alır, bu ciddi bir flood için de yeter. sv_queryIgnoreTime değerini fabrika ayarı olan 2000 milisaniyenin üzerine yalnızca dikkatli biçimde çıkarın: Sunucu listesi ve her sunucu tarayıcısı sunucunuzu aynı mekanizma üzerinden sorgular ve kilitleme süresini fazla yükseğe ayarlayan kişi listeden kaybolur. Frenin gerçekten çalışıp çalışmadığını bilmek istiyorsanız sv_queryIgnoreDebug değerini geçici olarak 1 yapın, ardından logun diskinizi doldurmaması için yeniden 0 yapın.

4. Sorgu flood'larını güvenlik duvarında ayıklama

Motordaki fren, ancak paket oyun sürecine ulaştıktan sonra etki eder. Bir güvenlik duvarı kuralı daha erken karar verir ve daha az maliyetlidir. Şu iki satır getstatus sorgularını kaynak adres başına sınırlar:

iptables -A INPUT -p udp --dport 28960 -m length --length 41:45 -m recent --set --name cod_query --rsource
iptables -A INPUT -p udp --dport 28960 -m string --algo bm --string "getstatus" -m recent --update --seconds 2 --hitcount 4 --name cod_query --rsource -j DROP

İlk satır, bir durum sorgusunun tipik uzunluğunda paket gönderen her kaynak adresi hatırlar. İkincisi, aynı adres iki saniye içinde bunlardan dörtten fazlasını gönderdiği anda her yeni getstatus sorgusunu düşürür. İki saniyede dört sorgu her sunucu tarayıcısına yeter. Forumlarda saniyede 20 sorguya izin veren, belirgin biçimde daha cömert olan ve temiz bir yansıtma dalgasından çok kaba botlara karşı işe yarayan sürümler de dolaşıyor.

Salt iptables kuralları bir yeniden başlatmadan sonra kaybolur; Debian ve Ubuntu'da şöyle kaydedilir:

apt-get install -y iptables-persistent
netfilter-persistent save

UFW altında bu tür kurallar /etc/ufw/before.rules dosyasına aittir, çünkü aksi hâlde bir sonraki ufw reload komutunda kaybolurlar. Ardından iptables -L INPUT -n -v komutuyla eşleşme sayaçlarının artıp artmadığını kontrol edin. Sıfırda kalıyorlarsa kurala ulaşılmıyor.

5. RCON'u kapatma ya da dar tutma

En güvenli RCON erişimi, var olmayanıdır. Boş bir rcon_password her RCON paketini reddeder:

set rcon_password ""

Burada bir ayrıntıyı göz önünde bulundurun: Sunucu o durumda da yanıt verir, hem de bir hata mesajıyla, ve böylece küçük bir amplifikasyon aracı olarak kalır. Bunu tamamen dışlamak isteyen ve RCON'a zaten yalnızca sabit bir adresten ihtiyaç duyan kişi paketleri daha önce düşürür:

iptables -A INPUT -p udp --dport 28960 ! -s 203.0.113.10 -m string --algo bm --string "rcon " -j DROP

Bu kuralın bilmeniz gereken bir yan etkisi var: rcon karakter dizisi teorik olarak bağlı bir oyuncunun chat paketinde de görünebilir, o paket de düşürülür. Pratikte buna katlanılabilir. Yan etkiyi istemeyen kişi kuralı kullanmaz ve yalnızca boş ya da çok uzun bir parolayla çalışır.

6. Katılım flood'unu ve slot tükenmesini savma

Bir katılım flood'u hatta değil, oyun mantığına yöneliktir: Saldırgan, bütün slotlar yarı kalmış bağlantılarla dolana kadar hızlı biçimde getchallenge ve connect paketleri gönderir. Gerçek oyuncular o zaman, oyunda kimse olmamasına rağmen “Server is full” yanıtını alır. Bu duruma karşı şu ayarlar işe yarar:

set sv_maxclients "32"
set sv_reconnectLimit "3"
set sv_floodProtect "1"
set sv_connectTimeout "30"
set sv_timeout "120"

sv_reconnectLimit, aynı oyuncunun üst üste kaç kez yeniden bağlanabileceğini sınırlar. sv_floodProtect, sunucunun oyuncu başına kaç istemci komutu işlediğini sınırlar ve böylece tek bir istemcinin sunucuyu komutlarla yavaşlatmasını engeller. sv_connectTimeout ve sv_timeout, yarı kalmış ya da sessiz bir bağlantının bir slotu ne kadar süre bloke ettiğini belirler: Burada eski bir şablondan gelen cömert değerleri bırakan kişi, saldırgana slot tükenmesini kolaylaştırır.

CoD4X'te buna sv_authorizemode eklenir. 1 değeri yalnızca geçerli kopyaya sahip oyuncuları içeri alır, 0 yalnızca sahip olmayanları, -1 ise ikisini birlikte. 1 değerini ayarlayan kişi tek kullanımlık istemcilerin büyük bir bölümünü dışarıda bırakır, ama özgün kopyası olmayan gerçek oyuncuları da kaybeder. En sert araç, g_password üzerinden verilen bir sunucu parolasıdır; bu, düzenli katılım yolunu kullanan her şeye karşı işe yarar. Ve bir şey net olmalı: Bir parola oyun mantığınızı korur, hattınızı korumaz. Sunucunuzu flood ile dolduran bir saldırgan zaten katılmak istemiyor. Paketleri reddedilir, ama buna rağmen ulaşmış olur ve mesele tam olarak budur.

7. Sunucu listesindeki kayıt ve kendi adresiniz

Burada hayal kurmak yerine dürüstlük işe yarar: IP adresinizi gizli tutamazsınız. Bir kez bağlanmış her oyuncu onu biliyor ve liste kaydı onu zaten port ile birlikte yayınlıyor. Kaydı, server.cfg dosyasında hiçbir ana sunucu ayarlamayarak kapatabilirsiniz (Dvar'ların adı sv_master1, sv_master2 ve devamıdır). Ancak bu, yeni oyuncular açısından bütün görünürlüğe mal olur ve yalnızca saldırganların en rahatına karşı işe yarar.

Listelerin durumuna dair bir not: Activision'ın özgün ana sunucuları (20510 portunda codmaster.activision.com, 20710 portunda cod2master.activision.com, 20810 portunda cod4master.activision.com) eski oyunlar için artık hiçbir şeye yanıt vermiyor. Bugün listelenmek isteyen kişi topluluk listelerini kullanıyor: CoD4X kendi listesini işletiyor ve bunun için sv_authtoken içinde bir token istiyor, Plutonium ise kendi sunucu listesini beraberinde getiriyor. Bu, meselenin kendisini değiştirmiyor; adres orada da aynı şekilde düz metin olarak duruyor.

Buna rağmen iki alışkanlık işe yarıyor. Çıplak IP adresini hiçbir yerde kendiniz yayımlamayın, yani ne Discord kanalında ne de klan sayfasında. Ve oyuncularınızı bir ana bilgisayar adı üzerinden bağlayın, böylece gerektiğinde bütün bağlantılar kırılmadan adresi değiştirebilirsiniz. Buradaki klasik, eski adrese işaret eden, unutulmuş bir A kaydıdır: Her değişikliği etkisiz kılar.

8. Web arayüzlerini, veritabanını ve Fast Download'u açık ağdan çekme

Call of Duty sunucularının çoğunda oyunun yanında daha fazlası çalışıyor: 1624 portunda web arayüzüyle IW4MAdmin, haritaların Fast Download'u için bir web sunucusu, bazen istatistikler için bir veritabanı. Bu hizmetlerin her biri kendine ait bir saldırı yüzeyidir ve hiçbiri sınırsız biçimde açık ağa ait değildir.

1624 portunu kendi adresinize sınırlayın ya da arayüze bir SSH yönlendirmesi üzerinden erişip ardından yerel olarak http://127.0.0.1:1624 adresini açın:

ssh -N -L 1624:127.0.0.1:1624 root@SUNUCU.IP.ADRESİNİZ

Veritabanını 127.0.0.1 adresine bağlayın; açık ağda hiçbir durumda işi yoktur. Ve Fast Download'u oyun sürecine değil, kendine ait bir web sunucusuna koyun: Aksi hâlde yük altındaki bir web sunucusu oyundan tam olarak simülasyon için ihtiyaç duyduğu işlem zamanını alır.

9. Kayıt tutma, böylece gerektiğinde veriniz olsun

En önemli adım, neredeyse hiç kimsenin önceden atmadığı adımdır: her şey normal çalışırken bir karşılaştırma temeli oluşturmak. Normal değer olmadan bir olaydan sonra saniyede 40.000 paketin çok mu olduğunu yoksa sadece cuma akşamı mı olduğunu söyleyemezsiniz. apt-get install -y vnstat sysstat ile ölçüm kalıcı olarak arka planda çalışır. Bir olay sırasında dört komut yeter:

sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp port 28960 -c 200 -q

Call of Duty için belirleyici soruyu yanıtlayan bir beşincisi var. Bu kayıt yalnızca bağlantısız paketleri, yani tam olarak getstatus, getinfo, getchallenge, connect ve rcon paketlerini gösterir:

tcpdump -ni eth0 'udp port 28960 and udp[8:4] = 0xffffffff' -c 200 -A

Orada sürekli yeni adreslerden gelen yüzlerce getstatus varsa bir sorgu flood'unuz var. Orada rcon varsa biri parolanızı denemeye çalışıyor. Orada yalnızca getchallenge ve connect varsa bu bir katılım flood'udur. tcpdump için şu her zaman geçerlidir: -c ile sınırlayın; tam yük altında alınan bir kayıt, hâlihazırda aşırı yüklü bir sunucuya ek yük getirir. Değerleri nasıl yorumlayacağınız DDoS saldırısını tanıma yazısında.

Bu önlemler nerede biter

Şimdi hiçbir yapılandırma dosyasının çözemeyeceği bölüm. Buraya kadarki tüm önlemler sizin sunucunuzda, yani hattın sonunda çalışır. Bir güvenlik duvarı kuralı, kabloyu çoktan geçmiş bir paket hakkında karar verir. Paketi düşürebilirsiniz, ama gönderilmemiş hâle getiremezsiniz.

Bir kez birlikte hesaplayalım. Dolu bir 32 slotluk sunucu giden yönde yaklaşık 6,4 Mbit/s üretir, bu bir gigabit hattın yüzde birinden azdır. Aynı hat, biri saniyede 125 megabayt gönderdiği anda dolar ve ayda on euroya sipariş edilebilen saldırılar tam olarak buna göre tasarlanmıştır. iptables kuralınızın arkada iyi olup olmaması o zaman artık önemli değildir, çünkü oyuncularınızın paketleri daha öncesinde geçemez.

İkinci büyüklük paket hızıdır ve Call of Duty'de düzenli olarak bant genişliğinden önce vurur. 64 baytlık küçük paketlerde 1 Gbit/s'lik bir hatta saniyede yaklaşık 1,49 milyon paket sığar. Normal bir sunucu kernel'i, CPU ve ağ kartına bağlı olarak bunların birkaç yüz binini işler, ardından paketleri düşürmeye başlar. Bir getstatus sorgusu 41 baytla bundan daha da küçüktür: Hattınızı üçte birine bile doldurmayan bir saldırı, bütün işlem zamanı düşürme işine gittiği için sunucunuzu buna rağmen felce uğratır. İşletmeciler bunu “doluluk hiç de yüksek değildi, buna rağmen her şey gitti” biçiminde yaşar.

Call of Duty'de hesabı ağırlaştıran bir özellik daha var. Oyun, sorgu ve RCON aynı portta durduğu için 28960'ı gerektiğinde kapatamazsınız: Bu, sunucuyu kapatmakla aynı şey olurdu. Ve motor her durum sorgusuna sorgu boyutunun katlarıyla yanıt verdiği için, bir saldırgan aynı etki için diğer oyunlara göre daha az kendi bant genişliğini harcar.

Gerçekte hangi büyüklüklerin görüldüğünü yerli yerine koymak için: KernelHost sunucularında, diğerlerinin yanında bir ses sunucusuna karşı saniyede 41,5 milyonun üzerinde pakette 473,4 Gbit/s'nin üzerinde bir saldırı ve bir oyun sunucusuna karşı 112,2 Gbit/s'nin üzerinde bir UDP flood'u filtrelendi. Bunun için yerel bir ayar yoktur. Hacimsel saldırılar sunucunun önündeki ağda son bulmalıdır.

KernelHost buna karşı ne koyuyor

Her sunucuda dâhil olan sürekli koruma

KernelHost'un DDoS koruması iki kademeli kuruludur ve siz herhangi bir şeyi açmak, sipariş etmek veya yapılandırmak zorunda kalmadan kalıcı olarak etkindir:

  • 1. kademe: küresel scrubbing ağında 17 Tbps mitigasyon kapasitesi. Hacimsel saldırılar, veri merkezine ulaşmadan önce kaynaklarına yakın bir noktada temizlenir.
  • 2. kademe: Frankfurt am Main'de 3,2 Tbps ile Arbor gerçek zamanlı filtreleme. Doğrudan sunucunun önünde protokole özgü kalıplar tanınır ve paket paket düşürülür.

İki özellik belirleyicidir. Koruma kalıcı olarak çalışır ve önce bir saldırıya tepki vermek zorunda değildir; yani başlangıçta sunucunun kayıp olduğu dakikalar yaşanmaz. Ayrıca null routing kullanılmaz: IP adresiniz ağda kalır, yalnızca zararlı paketler düşürülür. IP adresini ağdan çeken kişi, sizin açınızdan saldırganla aynı sonuca ulaşır. Hangi oyunların ve protokollerin kapsandığını Gerçek zamanlı oyun sunucusu DDoS koruması yazısı listeliyor.

Sürekli ateş altındaki projeler için Advanced DDoS Protection

Bazı klanlara ve topluluklara ara sıra değil, hedefli biçimde ve haftalar boyunca saldırılıyor. Bunun için ayda 50,00 EUR'dan başlayan, PrePaid ve asgari süresi olmayan Advanced DDoS Protection var. Fark, daha fazla kapasitede değil, kontrolde:

  • Dedicated koruma IP'si: Frankfurt çekirdek ağından verilir ve sunucunuz kendi ağı içinde bu adrese geçirilir. Sizin tarafınızda hiçbir değişiklik gerekmez.
  • Kendiniz yönetebileceğiniz, port ve protokol başına koruma kuralları: Müşteri panelinde 28960 UDP'de neye izin verildiğini, bunun için bir destek talebi yazmak zorunda kalmadan ayarlarsınız; birden fazla örnekte ise port başına ayrı ayrı.
  • Değişiklikler gerçek zamanlı etki eder, yani süren bir saldırı sırasında ince ayar yapabilirsiniz.
  • Her oyuna uygun koruma profili, aynı şekilde herhangi bir TCP veya UDP portunda çalışan değiştirilmiş ve kendi uygulamalarınız için de. Plutonium ile CoD4X açısından ilgili nokta budur, çünkü onların portları fabrika ayarlarından sapabilir.

Advanced DDoS Protection, KernelHost'ta duran sunucular içindir. Call of Duty sunucunuz şu anda başka bir yerde çalışıyor ve orada düzenli olarak ağdan çekiliyorsa, bir şeyi değiştirecek yol KernelHost'a taşınmaktır.

İki kademenin karşılaştırması

Özellik Dâhil olan sürekli DDoS koruması Advanced DDoS Protection
Fiyat her sunucu paketinde dâhil, ek ücret olmadan ayda 50,00 EUR'dan başlar, PrePaid
Filtreleme kapasitesi 17 Tbps küresel scrubbing artı Frankfurt am Main'de 3,2 Tbps ile Arbor gerçek zamanlı filtreleme aynı iki kademeli filtreleme
IP adresi sunucunuzun IP adresi ek dedicated koruma IP'si
Kural seti otomatik profiller, yapılandırma gerekmez müşteri panelinde port ve protokol başına kendi kurallarınız
Değişiklikler otomatik olarak birlikte ilerler gerçek zamanlı etki eder, bir saldırı sırasında da
Oyun profili yaygın oyunlar için optimize edilmiş profiller oyuna uygun profil, Plutonium, CoD4X ve kendi portlarınız için de
Null routing hayır hayır
Süre sunucu paketine bağlı PrePaid, asgari süre yok, fesih bildirim süresi yok, kurulum ücreti yok

Call of Duty sunucularının çoğu için, dâhil olan sürekli koruma düzgün bir server.cfg dosyasıyla birlikte yeterlidir. Advanced DDoS Protection ise birinin meseleyi kişisel almasına verilen yanıttır.

Sık yapılan hatalar ve çözümleri

“IP adresini değiştirdim ve iki saat sonra yine çevrimdışıydım”: Saldırgan yeni adresi eskisiyle aynı kaynaktan aldı, çoğunlukla liste kaydından, durum gösteren bir Discord botundan ya da eski bir DNS kaydından. Adres değişikliği zaman kazancıdır, çözüm değil.

“Kurban ben olduğum hâlde sağlayıcım bana abuse bildirimi gönderiyor”: O zaman sunucunuz hedef değil, amplifikasyon aracıdır. Biri sahte getstatus sorguları gönderiyor ve sunucunuz uslu uslu yabancı bir kurbana yanıt veriyor. Önce sv_queryIgnoreMegs değerinin 0 olup olmadığını kontrol edin, ardından dört sorgu Dvar'ını ve 4. bölümdeki güvenlik duvarı kuralını ayarlayın.

“Sunucu listede dolu görünüyor, ama boş”: Bu bir katılım flood'udur ve hatta değil, oyun mantığına vurur. Buna karşı sv_reconnectLimit, sv_connectTimeout ile sv_timeout için daha kısa değerler ve tereddüt hâlinde bir sunucu parolası işe yarar.

“Sunucu saldırı sırasında sunucu listesinden kayboluyor”: Bu sonuçtur, neden değil. Sunucu listesi, sunucunuzun yaşayıp yaşamadığını aynı durum sorguları üzerinden denetler. Yanıtlar geçmiyorsa ya da sizin kendi freniniz tarafından düşürüldüyse sunucu çevrimdışı sayılır. Güvenlik duvarından şüphelenmeden önce sv_queryIgnoreTime değerinin fazla yüksek olup olmadığını kontrol edin.

“iptables kurallarım etki etmiyor”: Üç neden sıktır. Kurallar UFW zincirlerinin arkasında duruyor ve hiç ulaşılmıyordur, son yeniden başlatmadan sonra kaybolmuşlardır (o zaman netfilter-persistent save komutu veya /etc/ufw/before.rules dosyasındaki bir kayıt yardımcı olur) ya da saldırı hacimseldir ve kural, zaten dolu olan bir hatta doğru biçimde çalışıyordur. iptables -L INPUT -n -v komutuyla eşleşme sayaçlarının artıp artmadığını kontrol edin.

“Sunucu çalışıyor, ama bütün oyuncularda lag sıçramaları var”: Önce CPU yüküne değil, arayüzün paket hızına bakın. sar -n DEV 1 10 dikkat çekici bir şey göstermiyor ve buna rağmen takılıyorsa bunun nedeni çoğunlukla bir mod, abartılmış bir sv_maxRate değeri ya da düpedüz maçtaki fazla sayıda bottur.

“Önceki sağlayıcım IP adresimi kapattı”: Bu null routing'dir. Sağlayıcı bununla kendi ağını korur; sizin için sonuç başarılı bir saldırıyla aynıdır, genellikle sonrasında saatlerce de sürer. Tereddüt ederseniz filtreleme mi yapıldığını yoksa null routing mi uygulandığını sorun. Yanıt, erişilebilirliğiniz hakkında herhangi bir donanım bilgisinden daha çok şey belirler.

“tcpdump çıktısında dikkat çekici bir şey görmüyorum”: Trafik zaten önündeki ağda filtreleniyorsa sunucuya beklendiği gibi hiçbir şey ulaşmaz. Filtreleme çalışırken normal durum budur. Tersi de geçerlidir: Hat doyuma ulaştığında, ölçüm yapmak istediğiniz SSH oturumu bile size ulaşmayabilir. O durumda müşteri panelindeki, konuk sistemin ağından bağımsız çalışan VNC konsolunu kullanın.

Kısaca özetle

  • Klasik bir Call of Duty sunucusu tam olarak bir açık porta ihtiyaç duyar: 28960 UDP. Plutonium T6'da bu 4976 UDP, Plutonium IW5'te 27016 UDP'dir.
  • Oyun, durum sorgusu ve RCON, Call of Duty'de aynı portta durur. RCON'u bir port kuralıyla oyundan ayıramazsınız; bunun için paket içeriğine bakan bir kurala ihtiyaç duyarsınız.
  • getstatus yansıtması bu oyuna özgü amplifikasyon vektörüdür: 41 bayt sorgu, CISA'nın TA14-017A uyarısına göre Quake ağ protokolünde 63,9 faktör, yani yaklaşık 2.600 bayt yanıt.
  • Sorgu frenini açın: sv_queryIgnoreMegs 4, sv_queryIgnoreTime 2000, sv_queryBounceIgnoreTime 12000. Çok sayıda sunucuda 0 değerinde duruyor ve böylece kapalıdır.
  • rcon_password değerini yalnızca RCON'a gerçekten ihtiyaç duyuyorsanız ayarlayın: Parola şifrelenmemiş biçimde UDP üzerinden geçer ve hesap kilidi olmadığı için istendiği kadar denenebilir.
  • 20810 ve 20800 ana sunucu portları giden yöndeki hedef portlardır ve gelen yöndeki izinlerinize ait değildir.
  • Yaklaşık 1 Gbit/s'den ya da saniyede birkaç yüz bin paketten sonra yalnızca sunucunun önündeki ağ belirleyicidir, artık yapılandırmanız değil.

Sunucunuz hâlihazırda KernelHost'ta çalışıyorsa filtreleme, siz hiçbir şey yapmak zorunda kalmadan etkindir. Buna rağmen dikkat çekici bir durum fark ederseniz, IP adresiniz için filtreleme kurallarının yeniden ayarlanması amacıyla bir destek talebi açın. Süren bir saldırı sırasında bize ek olarak +43 650 8209883 numarasındaki WhatsApp acil durum sohbeti üzerinden ulaşabilirsiniz.

Sıkça sorulan sorular

Bir Call of Duty sunucusu hangi portlara ihtiyaç duyar?
Klasik bir Call of Duty sunucusu tam olarak bir açık porta ihtiyaç duyar: 28960 UDP. Bu tek port üzerinde oyun trafiği, durum sorguları ve uzaktan yönetim RCON birlikte çalışır; ayrı bir sorgu portu ya da RCON portu yoktur. Plutonium platformlarında fabrika ayarları farklıdır: World at War ile Black Ops da 28960 UDP kullanır, Black Ops II 4976 UDP, Modern Warfare 3 ise 27016 UDP kullanır. 20810 ve 20800 ana sunucu portları giden yöndeki hedef portlardır ve gelen yönde açılmaları gerekmez.
Bu yazı Warzone, Modern Warfare veya Black Ops 6 için de geçerli mi?
Hayır. Warzone, Modern Warfare (2019), Black Ops Cold War, Vanguard, Modern Warfare II, Modern Warfare III ve Black Ops 6 kiralanabilir dedicated sunucu tanımaz. Maçlar Activision'ın matchmaking altyapısında çalışır; server.cfg yoktur, sunucu tarayıcısı yoktur ve açabileceğiniz ya da güvene alabileceğiniz bir port yoktur. Kendi sunucunuz ve dolayısıyla kendi DDoS korumanız yalnızca klasik oyunlarda mümkündür: Call of Duty, United Offensive, Call of Duty 2, Call of Duty 4 ve World at War ile topluluk platformları Plutonium, IW4x ve CoD4X.
Call of Duty'de getstatus yansıtması nedir?
getstatus yansıtması, sahte gönderen adresiyle küçük durum sorgularının çok sayıda oyun sunucusuna gönderilmesi ve bu sunucuların büyük yanıtlarının asıl kurbanda toplanması anlamına gelen bir amplifikasyon saldırısıdır. Bir getstatus sorgusu 41 bayt büyüklüğündedir, yanıt ise sunucu yapılandırmasının tamamını ve bağlı her oyuncu için bir satır taşır. CISA, TA14-017A uyarısında Quake ağ protokolünü 63,9 amplifikasyon faktörüyle listeler; bu, sorgu başına yaklaşık 2.600 bayt yanıt demektir. Etkilenen, bütün klasik Call of Duty oyunlarının üzerine kurulduğu id Tech 3 motorudur.
Sunucum, üçüncü kişilere yapılan saldırılarda amplifikasyon aracı olarak kötüye kullanılıyor. Ne yapmalıyım?
Önce yerleşik sorgu frenini açın. server.cfg dosyasında sv_queryIgnoreMegs değerini 4, sv_queryIgnoreTime değerini 2000 ve sv_queryBounceIgnoreTime değerini 12000 yapın. sv_queryIgnoreMegs 0 değerinde duruyorsa fren tamamen kapalıdır ve çok sayıda sunucuda durum tam olarak budur. Buna ek olarak getstatus sorgularını kaynak adres başına iki saniyede birkaç sorguya sınırlayan bir güvenlik duvarı kuralı ekleyin. sv_queryIgnoreDebug 1 ile frenin çalışıp çalışmadığını logda görürsünüz, ardından değeri yeniden 0 yaparsınız.
Call of Duty'de rcon_password neden bir risktir?
Çünkü Call of Duty'de RCON, oyun portu üzerinde şifrelenmemiş bir UDP paketidir. Komut, dört bayt 0xFF, rcon sözcüğü, düz metin hâlindeki parola ve asıl komuttan oluşur. Şifreleme yoktur, oturum yoktur, kullanıcı hesabı yoktur ve hatalı denemelerden sonra bir kilitleme yoktur: Trafiği yolun herhangi bir noktasında gören kişi parolayı okur, görmeyen kişi ise onu istediği kadar deneyebilir. rcon_password değerini yalnızca RCON'a gerçekten ihtiyaç duyuyorsanız ayarlayın, aksi hâlde boş bırakın ve yönetimi SSH üzerinden yapın.
Call of Duty sunucum şu anda çevrimdışı. Bir DDoS saldırısını nasıl anlarım?
CPU yüküne değil, arayüzün paket hızına bakın. sar -n DEV 1 10 ile saniyedeki paket ve bayt sayısını, ip -s link show eth0 ile düşürülen paket sayaçlarını görürsünüz. Sunucunun kendisi neredeyse hiç çalışmazken gelen paketler normal değerin çok üzerine çıkıyorsa bu bir saldırıdır. Hangi tür olduğunu, bağlantısız paketlerin tcpdump ile ve udp port 28960 and udp[8:4] = 0xffffffff filtresiyle alınan bir kaydı gösterir. Orada çok sayıda getstatus duruyorsa bu bir sorgu flood'udur.
Bir DDoS saldırısına iptables veya UFW ile karşı koyabilir miyim?
Küçük saldırılara ve özensiz botlara karşı evet, hacimsel saldırılara karşı hayır. Sunucudaki bir güvenlik duvarı kuralı, hattınızı çoktan geçmiş paketler hakkında karar verir. Hat doyuma ulaştığında oyuncularınızın paketleri, kural setiniz ne kadar iyi olursa olsun daha öncesinde geçemez. Call of Duty'de buna bir de şu ekleniyor: 28960 portunu gerektiğinde kapatamazsınız, çünkü oyun da orada duruyor. Hacimsel saldırılar sunucunun önündeki ağda son bulmalıdır.
KernelHost'taki sunucum bir saldırı sırasında çevrimdışı olur mu?
Hayır. Null routing kullanılmaz. IP adresiniz ağda kalır, yalnızca zararlı paketler düşürülür. Koruma iki kademelidir: küresel scrubbing ağında 17 Tbps mitigasyon kapasitesi ve Frankfurt am Main'de 3,2 Tbps ile Arbor gerçek zamanlı filtreleme. Koruma kalıcı olarak çalışır ve önce bir saldırıya tepki vermek zorunda değildir; yani başlangıçta sunucunuzun sunucu listesinden düştüğü dakikalar yaşanmaz.
DDoS koruması ek ücretli mi ve Advanced DDoS Protection'a ne zaman ihtiyaç duyarım?
İki kademeli sürekli koruma her sunucu paketinde ek ücret olmadan bulunur ve teslimden itibaren etkindir; onu ne sipariş etmeniz ne de açmanız gerekir. Advanced DDoS Protection'a, sunucunuza ara sıra değil hedefli biçimde ve haftalar boyunca saldırıldığında ve filtrelemeyi kendiniz yönetmek istediğinizde ihtiyaç duyarsınız. Dedicated bir koruma IP'si alırsınız ve koruma kurallarını port ile protokol başına müşteri panelinde kendiniz yönetirsiniz, değişiklikler gerçek zamanlı etki eder. Fiyat ayda 50,00 EUR'dan başlar, PrePaid, asgari süre ve kurulum ücreti olmadan.

Call of Duty Call of Duty DDoS koruması Oyun sunucusu koruması Port 28960 Plutonium CoD4X getstatus yansıtması RCON Advanced DDoS Protection