Left 4 Dead 2 sunucusunu DDoS saldırılarına karşı koruma

Yayınlanma tarihi 21 dk okuma

Bir Left 4 Dead 2 sunucusunun gerçekten hangi portlara ihtiyaç duyduğu, 27015/UDP üzerindeki A2S sorgusunu kendi oyuncularınızı dışarıda bırakmadan nasıl yavaşlatacağınız, lobby sisteminin erişim filtresi olarak neyi başardığı ve hangi saldırı büyüklüğünden sonra yalnızca sunucunun önündeki ağda yapılan filtrelemenin işe yaradığı.

Bir Left 4 Dead 2 sunucusu nadiren uygun bir anda çöker. Bir kampanyanın son bölümünde çöker, bir Versus maçının ikinci turunda ya da tam olarak banlanmış bir oyuncunun üçüncü kez geri çevrildiği anda. Saldırı altında olan kişinin ağ tekniği üzerine ilkesel bir tartışmaya değil, bir sıraya ihtiyacı vardır. Bu yazı önce bir Left 4 Dead 2 sunucusunu, dâhili araçlarla mümkün olduğu sürece DDoS saldırılarına karşı nasıl koruyacağınızı, ardından bu olanakların fiziksel olarak nerede bittiğini, sonunda da sunucunun önündeki ağda neler olması gerektiğini gösteriyor.

Tüm bilgiler, SteamCMD üzerinden 222860 uygulama kimliğiyle kurulmuş, Debian 12, Debian 13, Ubuntu 22.04 LTS veya Ubuntu 24.04 LTS üzerinde çalışan dedicated bir sunucu (srcds) içindir. Komutlar root kullanıcısı için yazılmıştır, normal kullanıcı olarak başlarına sudo ekleyin. Sırayı belirlediği için bir noktayı baştan söyleyelim: Süren bir saldırı sırasında hiçbir şeyi körlemesine değiştirmeyin ve ölçüm değerlerini kaydetmeden sunucuyu yeniden başlatmayın. Saldırıdan sonra bu değerler kaybolur.

Left 4 Dead 2 sunucuları neden cazip bir DDoS hedefidir

64 slotlu bir nişancı oyunuyla arasındaki fark, turun büyüklüğündedir. Bir koop kampanyasında hayatta kalanlar için dört slot, bir Versus maçında iki taraf için toplam sekiz slot vardır. Bu yüzden bir kesinti hiçbir zaman tek tek oyuncuları değil, her zaman oyunun tamamını vurur: Beş bölümden üçüncüsünde bir kampanyayı yarıda bırakan kişi, akşamı bütün katılımcılar için bitirmiş olur. Bir saldırıyı tetikleyen kişi açısından cazip olan tam olarak budur, çünkü saldırı ona ne beceri ne de anlamlı bir para harcaması getirir, karşı tarafta ise bir saatlik oyun süresini yok eder.

Buna bir de yapı ekleniyor. Left 4 Dead 2, Source engine üzerinde çalışır ve bir Source sunucusu IP adresi ile portuyla herkese açık biçimde bulunabilir. Bu bir kaza değil, bir ön koşuldur: Hiçbir sorguyu yanıtlamayan bir sunucu hiçbir listede yer almaz ve hiçbir lobby onu bulamaz. Yani soru hiçbir zaman bir saldırganın adresinizi bilip bilmediği değildir, yalnızca oraya ateş ettiğinde ne olacağıdır. Oyun trafiği UDP üzerinden akar ve UDP'de talep edilebilecek bir bağlantı kurulumu yoktur, buna ek olarak gönderen adresleri sahte olabilir. Bunun teknik olarak nasıl işlediğini DDoS saldırısı nedir? yazısı anlatıyor.

Üçüncü nokta Left 4 Dead 2'ye özgüdür ve Counter-Strike, Garry's Mod ya da Team Fortress 2'de bir karşılığı yoktur: Oyuncuların çoğu sunucu tarayıcısı üzerinden değil, lobby sistemi üzerinden gelir. En fazla dört oyuncudan oluşan bir lobby, Steam matchmaking üzerinden dedicated bir sunucuya yönlendirilir ve sunucu bunun için bir rezervasyon alır. Bu yöntem aynı anda hem en etkili erişim filtreniz hem de ek bir saldırı yüzeyidir. İkisi de aşağıda ayrıntılı olarak anlatılıyor.

Asıl mesele olan portlar

Bir Left 4 Dead 2 sunucusu, oyunu oyun yapan her şey için tam olarak bir UDP portu kullanır. Standart port 27015'tir ve başlatma satırında -port ya da +hostport ile belirlenir:

./srcds_run -game left4dead2 -console -nohltv \
  -port 27015 \
  +ip 203.0.113.10 \
  +maxplayers 4 \
  +exec server.cfg \
  +map c1m1_hotel
Port ve protokol Ne için Dışarıya açık olmalı mı
27015/UDP Aynı port üzerinde oyun trafiği ve A2S sunucu sorgusu Evet, bu port olmadan oyun olmaz
27015/TCP rcon_password ayarlanmışsa RCON Hayır, yalnızca kendi adresiniz için açın
27005/UDP İstemci portu, oyuncudan çıkar Hayır, sunucuda açılmasına gerek yoktur
27020/UDP SourceTV, yalnızca -hltv ya da +tv_enable 1 ile Yalnızca gerçekten yayın yapıyorsanız
27016, 27017 ve devamı Aynı makinedeki diğer sunucu örnekleri Her örnek için tek tek, aralık olarak değil
80/TCP ve 443/TCP Hızlı indirme (sv_downloadurl), aynı makinedeyse Yalnızca web sunucusu orada çalışıyorsa
22/TCP SSH erişimi Hayır, kendi adresinize sınırlayın

Bu tablonun ilk satırı, sorunun özüdür. Oyun trafiği ve sunucu sorgusu 27015/UDP portunu paylaşır, Left 4 Dead 2'de ayrı bir sorgu portu yoktur. Bu portu topluca kapatan ya da kabaca hız sınırlaması uygulayan kişi, aynı hareketle kendi oyuncularını dışarı atar ve saldırıyı saldırganın istediği biçimde sonlandırır.

Bir A2S sorgusu birkaç düzine baytlık bir pakettir, yanıt ise bunun katlarıdır. UDP'de gönderen adresi sahte olabilir ve bununla sunucunuz yalnızca kurban değil, aynı zamanda bir amplifikasyon aracı hâline gelir: Bir saldırgan, hedefinin adresiyle yabancı oyun sunucularını sorgular ve onların yanıtlarını oraya yönlendirir. Valve, Aralık 2020'de A2S_INFO sorgusuna, sorgulayanın yanıtı almadan önce geri göndermesi gereken bir ön istek (S2C_CHALLENGE) ekledi. Bu, yansıtmanın etkisini azaltır ama sona erdirmez, çünkü eski sorgu programları hâlâ yanıtlanıyor.

Para harcamadan önce kendiniz neler yapabilirsiniz

Aşağıdaki bölüm hiçbir şeye mal olmaz ve sunucunuzun nerede durduğundan bağımsız olarak değerlidir. Hacimsel bir saldırıyı sizin yerinize üstlenmez, ama küçük ve orta ölçekli saldırıları etkisiz bırakır ve yanlışlıkla DDoS saldırısı olarak bildirilen kesintileri ortadan kaldırır.

1. Envanter: gerçekte ne dinliyor?

Bir kural yazmadan önce hangi hizmetlerin erişilebilir olduğunu netleştirin. Zamanla büyümüş bir Left 4 Dead 2 sunucusunda bu neredeyse her zaman beklenenden fazladır, çünkü srcds'in yanında kampanyalar için bir web sunucusu, bir istatistik veritabanı ve bazen Versus için ikinci bir sunucu daha çalışır:

ss -lntup

127.0.0.1 ya da ::1 adresine bağlı olan her şeyin açılmasına gerek yoktur. 0.0.0.0 veya [::] üzerinde dinleyen her şey ise internetten erişilebilir. Saldırganın bakışını dışarıdan yapılan bir port taraması verir ve bu bakış, deneyime göre kendi beklentinizden sapar:

nmap -Pn -sU -sT -p 27000-27050,80,443,3306 SUNUCU.IP.ADRESİNİZ

Altyapı yeni kurulduysa ya da onu adım adım izlemek istiyorsanız, SteamCMD ile oyun sunucusu kurma yazısı SteamCMD'den çalışan srcds'e kadar olan yolu anlatıyor.

2. Yalnızca srcds'in gerçekten ihtiyaç duyduğu portları açık bırakma

Dışarıya bir UDP portu, kendi adresiniz için bir TCP portu, fazlası değil. RCON açık internete ait değildir, çünkü RCON'a sahip olan kişi haritayı değiştirir, bütün oyuncuları banlar ve sunucuyu durdurur:

ufw allow 27015/udp comment "L4D2 oyun portu ve A2S"
ufw allow from 203.0.113.10 to any port 27015 proto tcp comment "RCON"
ufw allow from 203.0.113.10 to any port 22 proto tcp comment "SSH"
ufw default deny incoming
ufw default allow outgoing
ufw --force enable

203.0.113.10 adresini kendi adresinizle değiştirin. Bu adres düzenli olarak değişiyorsa yol, kalıcı bir izin yerine bir SSH port yönlendirmesinden geçer. Güvenlik duvarını devreye alırken izlediğiniz sıra, kendinizi dışarıda bırakıp bırakmayacağınıza karar verir; bu sıra, kurtarma yolu da dâhil Kendinizi dışarıda bırakmadan UFW güvenlik duvarı kurma yazısında. Buna rağmen olursa: KernelHost'un KVM root sunucularında ve dedicated sunucularında IPMI ya da iDRAC yoktur, sunucuya müşteri panelindeki VNC konsolu üzerinden ulaşırsınız ve o konsol konuk sistemin ağ yığınına bağlı değildir.

3. Lobby aramasından düşmeden A2S sorgusunu yavaşlatma

Bu konu alanındaki en pahalı hata buradadır. Oyun trafiği ve sunucu sorgusu aynı portu kullandığı için fren, portlar arasında değil iki paket sınıfı arasında ayrım yapmak zorundadır.

Steam oyun sunucusu altyapısı, Aralık 2020'deki değişikliklerden bu yana bunun için kendi sınırlamasını getiriyor; bu sınırlama başlatmadan önce bir ortam değişkeni olarak ayarlanır. STEAM_GAMESERVER_RATE_LIMIT_200MS=N, bir gönderen adresinin bağlantısız paketlerini (A2S_INFO, A2S_RULES, A2S_PLAYERS) 200 milisaniyelik bir pencerede bunlardan N'den fazlası ulaştığı anda düşürür. Valve kullanışlı aralık olarak 25 ile 75 arasını veriyor, sınırlama varsayılan olarak kapalıdır:

export STEAM_GAMESERVER_RATE_LIMIT_200MS=50
./srcds_run -game left4dead2 -console -port 27015 +exec server.cfg +map c1m1_hotel

Bir systemd unit dosyasında aynı değer Environment=STEAM_GAMESERVER_RATE_LIMIT_200MS=50 olarak [Service] bölümüne aittir, yoksa bir sonraki yeniden başlatmadan sonra kaybolur. Bu fren yalnızca sunucu sürümünüz güncel Steamworks altyapısını taşıyorsa devreye girer ve sunucunuzun işlem zamanını korur, hattınızı korumaz: Paketler çoktan ulaşmış olur.

Bir katman daha aşağıda aynı trafik kernel içinde ayrıştırılabilir. Source engine'in bütün bağlantısız paketleri, yani sunucu sorguları ve bağlantı kurulumu, dört tam dolu bayt ile (0xffffffff) başlar; hâlihazırda bağlı oyuncuların trafiğinde bu başlık yoktur. Buna dayanarak nftables ile gönderen adres başına bir hız sınırlaması konabilir:

table inet l4d2 {
    chain input {
        type filter hook input priority -10; policy accept;
        udp dport 27015 @th,64,32 0xffffffff \
            meter a2sflood { ip saddr limit rate over 10/second burst 20 packets } drop
    }
}

Dosyayı nft -f ile yüklersiniz. -10 önceliği, kuralın UFW'nin filtre zincirinden önce devreye girmesini sağlar ve @th,64,32 ifadesi UDP başlığının arkasındaki ilk dört baytı okur. Cömert başlayın ve sınırı ancak meşru sorguların kanıtlanabilir biçimde geçtiğini gördükten sonra sıkın: Sunucu listesindeki kendi kaydınız buna bağlıdır.

4. Lobby sistemini erişim filtresi olarak kullanma

Bu, yalnızca Left 4 Dead 2 ile öncesindeki oyunda bulunan kaldıraçtır. Sunucu, matchmaking dışındaki bağlantıları kabul edip etmeyeceğine kendisi karar verir. Bunu server.cfg dosyasındaki dört direktif belirler:

sv_allow_lobby_connect_only 1
sv_search_key "kendi-anahtariniz"
sv_steamgroup "103582791400000000"
sv_steamgroup_exclusive 2
  • sv_allow_lobby_connect_only 1 yalnızca bir matchmaking lobby'sinden gelen katılımlara izin verir. Geliştirici konsolundaki bir connect 203.0.113.10:27015 komutu ve bir Steam daveti geri çevrilir. 0 değeri ikisine de izin verir.
  • sv_search_key serbestçe seçilebilen bir arama anahtarıdır. Sunucuyu matchmaking üzerinden yalnızca aynı anahtarın ayarlandığı bir lobby bulur. Anahtar olmadan sunucu herkese açık aramada görünmez.
  • sv_steamgroup sunucuyu bir Steam grubuna bağlar ve onu o grubun grup sunucuları arasında gösterir.
  • sv_steamgroup_exclusive üç kademe tanır: 0 herkese izin verir, 1 tıpkı 0 gibi davranır ama katılımın bir lobby üzerinden olmasını ister, 2 ise yalnızca grup üyelerini ve IP adresi üzerinden doğrudan erişimi geçirir.

Sabit bir topluluk için arama anahtarı ile sv_steamgroup_exclusive 2 birleşimi, oyunun tanıdığı en etkili ücretsiz erişim filtresidir. Herkese açık bir sunucu bunu kullanamaz, çünkü kimsenin bulamadığı bir sunucu, çevrimdışı olan bir sunucu kadar boştur.

Ve şimdi reklam metinlerinin atlamayı sevdiği kısım: Bu direktifler oyun mantığınızı korur, hattınızı korumaz. 27015/UDP portunu flood ile dolduran bir saldırgan katılmak istemiyordur. Paketleri reddedilir, ama buna rağmen ulaşmış olur, bant genişliği tüketmiş ve ağ yığınından bir geçiş maliyeti çıkarmış olur. Tek kullanımlık hesaplardan gelen bir katılım flood'una karşı sv_allow_lobby_connect_only 1 mükemmel çalışır, bir booter'a karşı ise hiç çalışmaz.

5. Lobby rezervasyonu ve sv_force_unreserved'ın daha iyi bir tercih olduğu durumlar

Lobby rezervasyonu, sunucunuzun bir matchmaking lobby'si tarafından zaman sınırlı olarak işgal edilmesidir. Rezervasyon sürdüğü sürece sunucu diğer lobby'ler için dolu sayılır ve ancak bir süre sonra kendiliğinden sona erer. Dört slotlu bir sunucu için bu kıt bir kaynaktır: 32 ya da 64 slotlu bir nişancı oyununun tersine, bir oyunu bloke etmek için çok azı yeter.

Sunucusunu matchmaking üzerinden işletmeyen kişi bu yüzeyi tamamen ortadan kaldırır:

sv_force_unreserved 1
sv_allow_lobby_connect_only 0

sv_force_unreserved 1, sunucunun lobby sisteminden gelen rezervasyon isteklerine artık yanıt vermemesini ve rezervasyon işareti taşıyan katılımları reddetmesini sağlar. L4DToolZ ile dörtten fazla koop slotu işletiyorsanız aynı ayara zaten ihtiyacınız var, çünkü aksi hâlde ilk dört slot dolduğu anda lobby bir rezervasyon alır ve kalan slotlara ulaşılamaz. Madalyonun öbür yüzü nettir: Oyuncularınız o zaman yalnızca sunucu tarayıcısı ya da connect üzerinden girer.

İki işletim biçiminden birini bilinçli olarak seçin. Yarı açık matchmaking ile yarı açık doğrudan katılımın karışımı, iki dezavantajı birleştiren seçenektir.

6. RCON'u güvene alma

Zayıf parolalı açık bir RCON portu bir DDoS sorunu değil, sunucunun ele geçirilmesidir. rcon_password değerini asla boş bırakmayın ve asla tahmin edilebilir bir şey yazmayın; openssl rand -base64 32 çıktısındaki bir değer yeter. Source başlıkları buna ek olarak oturum açma denemelerine karşı bir fren getirir:

rcon_password "BURAYA_RASTGELE_BİR_DEĞER"
sv_rcon_minfailures 3
sv_rcon_maxfailures 5
sv_rcon_minfailuretime 30
sv_rcon_banpenalty 1440

Böylece bir adres, 30 saniye içindeki üç başarısız denemeden sonra bir gün boyunca banlanır; sunucu konsolundaki find sv_rcon komutu bu değişkenlerden hangilerini sürümünüzün tanıdığını gösterir. Buna rağmen 2. adımdaki güvenlik duvarı kısıtlaması daha etkili kalır, çünkü denemeyi uygulamaya kadar hiç geçirmez. RCON'a ihtiyacınız yoksa parolayı boş bırakın: O zaman 27015 portunun TCP tarafı dinlemez.

7. Özel kampanyaları oyun portu üzerinden sunmak yerine dışarı taşıma

Özel kampanyalar, Left 4 Dead 2'nin on beş yıl sonra hâlâ oynanmasının nedenidir ve aynı zamanda Counter-Strike'ta bu biçimde bulunmayan bir yük kaynağıdır. Bir kampanya, haritalar, modeller, dokular ve seslerden oluşan bir VPK paketidir, yani tek bir rekabet haritasının ağırlığının katlarıdır.

Oyuncular için rahat yol Steam Workshop'tur: Paket o zaman sizin sunucunuzdan değil Steam'den gelir ve size hiç bant genişliği maliyeti çıkarmaz. Tek tek dosyaları kendiniz sunuyorsanız, bu sunum oyun portuna değil bir web sunucusuna aittir:

sv_allowdownload 1
sv_allowupload 0
sv_downloadurl "https://cdn.example.org/l4d2/"
sv_consistency 1

sv_downloadurl için dosyalar bzip2 arşivi olarak web sunucusuna aittir, yani haritam.bsp dosyasından haritam.bsp.bz2 olur. sv_downloadurl olmadan srcds dosyaları oyun bağlantısı üzerinden kendisi gönderir ve o zaman şu geçerlidir: Yeni bir oyuncunun her bağlantı denemesi size indirmenin tamamını, indirmenin ortasındaki her kopma da aynı şekilde maliyet çıkarır. Bu, bir hattı doldurmanın son derece ucuz bir yoludur ve hiçbir istatistikte saldırı gibi görünmez.

Buna dair uygulamada acıtan üç nokta. sv_allowupload 0 ayarlanmalıdır, çünkü istemciden sunucuya yüklemeye ihtiyacınız yoktur. sv_downloadurl için kullanılan web sunucusu oyunla aynı makinede duruyorsa indirme ile oyun trafiği aynı hattı ve aynı IP adresini paylaşır, o zaman 443/TCP portuna yapılan bir saldırı süren oyununuzu da vurur. Ve sv_consistency 1 saldırılara karşı değil, farklılık gösteren istemci dosyalarına karşı bir korumadır; onu yalnızca bir kampanya aksi hâlde kanıtlanabilir biçimde başlamıyorsa kapatmalısınız.

8. SourceMod, Metamod ve eklentiler

DDoS olarak bildirilen kesintilerin önemli bir bölümü DDoS değildir. Bunlar, sunucu binary'sinde ya da bir eklentide bir açık bulunduğu için tek bir istemcinin tetiklediği çökmeler ve yük sıçramalarıdır. Buna karşı bant genişliği değil, bakım işe yarar:

  • Metamod:Source ve SourceMod'u motor sürümüyle uyumlu tutun. Left 4 Dead 2 hâlâ güncelleme alıyor ve uyumsuz bir eklenti, bir güncellemenin hemen ardından gelen çökmelerin en sık nedenidir.
  • Kendi müdahaleleriniz yerine Left4DHooks. L4D2'ye özgü olaylar bu eklentide bir arada bulunur. Aynı işlevlere kendi elinizle müdahale etmek, belirli paket dizilerinde çekilen bir sunucu binary'sine giden en hızlı yoldur.
  • L4DToolZ'u yalnızca bilinçli olarak kullanın. Bu eklenti, sabit biçimde yerleşik slot sınırlarını yükseltir. Her ek slot, işlem zamanı üreten ek bir oyuncudur ve lobby sistemiyle birlikte bu eklenti sv_force_unreserved 1 ayarına ihtiyaç duyar.
  • Daha az eklenti. Her plugin, aynı süreç içindeki koddur. Kendi web hizmetlerini getiren eklentiler ek portlar açar ve sık sık tam olarak korumak istediğiniz adresi yayınlar.

Banlar kalıcı olarak kaydedilmelidir, yoksa yeniden başlatmadan sonra kaybolurlar. Source başlıkları bunun için writeid ile birlikte banid ve writeip ile birlikte addip komutlarını tanır; oluşan dosyalar exec banned_user.cfg ve exec banned_ip.cfg ile yeniden okunur.

9. Bağlantı izlemeyi ve alma arabelleğini rahatlatma

Bu nokta sık gözden kaçar ve hacimsel bir saldırı gibi görünen ama öyle olmayan kesintileri açıklar. Kernel, UDP trafiği için bağlantı izlemede (conntrack) kayıtlar oluşturur ve gönderen adresleri sahte olduğunda her adres yeni bir kayıt anlamına gelir. Tablo dolduğunda kernel paketleri ayrım yapmadan düşürür: Saldırı ile oyuncularınız birlikte dışarı düşer. Durumu ve üst sınırı tek bir bakış gösterir:

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

En etkili adım, oyun trafiğini hiç izlememektir, çünkü engine oturumlarını kendisi yönetir:

table inet raw {
    chain prerouting {
        type filter hook prerouting priority raw; policy accept;
        udp dport 27015 notrack
    }
    chain output {
        type filter hook output priority raw; policy accept;
        udp sport 27015 notrack
    }
}

iptables ile karşılığı iptables -t raw -A PREROUTING -p udp --dport 27015 -j NOTRACK ve --sport ile OUTPUT için aynı satırdır. Port bundan sonra açıkça izin verilmesini gerektirir, çünkü izleme olmadan mevcut bir durumu denetleyen hiçbir kural artık devreye girmez. Paketler srcds'in onları aldığından daha hızlı ulaşırsa buna ek olarak alma arabelleği taşar ve bu, oyuncular için boş bir hatta paket kaybı gibi görünür:

net.core.rmem_max = 16777216
net.core.rmem_default = 1048576
net.core.netdev_max_backlog = 16384

Dosyayı /etc/sysctl.d/ altına koyar ve sysctl -p ile etkinleştirirsiniz. Değerlerin gerçekten gerekli olup olmadığını kernel'in kendisi söyler: nstat -az çıktısında UdpRcvbufErrors artıyorsa değerler işe yarar. Sayaç sıfırda kalıyorsa bu ayarlama hiçbir şeyi değiştirmez. Bu bir yedek kapasitedir, koruma değildir.

10. Ölçüm yapma, böylece saldırı anında tahmin yürütmek zorunda kalmazsınız

Saldırı sırasında en önemli soru şudur: Ne kadarı ulaşıyor, hangi porta ve bu sorgu trafiği mi oyun trafiği mi. Dört komut yeter:

ip -s link show eth0
nstat -az | grep -i udp
sar -n DEV 1 10
tcpdump -ni eth0 -c 200 "udp port 27015 and udp[8:4] = 0xffffffff"

İlk komutu on saniye arayla iki kez çalıştırın, o zaman mutlak bir değer yerine bir hız elde edersiniz. Son satır yalnızca bağlantısız paketleri gösterir, yani tam olarak bir sorgu flood'unun kötüye kullandığı sınıfı; neredeyse kimse bağlı değilken sayaç saniyeler içinde doluyorsa yanıtınızı almış olursunuz. Paket kaydını kısa tutun, çünkü kaydın kendisi yük altında işlem zamanı harcar. Değerleri nasıl yorumlayacağınız Sunucuda DDoS saldırısını tanıma yazısında.

Ancak 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 dolu bir Versus sunucusuyla cuma akşamı mı olduğunu söyleyemezsiniz.

Bu önlemler nerede biter

Şimdi dürüst bölüm. Buraya kadar anlatılan her şey, ancak paketler ağ kartınıza ulaştığında etki eder. 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. Tipik bir oyun sunucusu 1 Gbit/s'lik bir hatta bağlıdır, bu saniyede 125 megabayt eder. Mümkün olan en küçük paket boyutunda bu hat saniyede yaklaşık 1,49 milyon paket taşır, 10 Gbit/s'lik bir hat ise yaklaşık 14,88 milyon. Bu, CPU, kernel ve güvenlik duvarından bağımsız olan fiziksel üst sınırdır. Normal bir sunucu kernel'i, işlemciye ve ağ kartına bağlı olarak saniyede birkaç yüz bin paketi işler, ardından düşürmeye başlar. Yani hattınızı üçte birine bile doldurmayan bir saldırı sunucunuzu felç edebilir, çünkü işlem zamanı düşürme işine gider. İşletmeciler bunu “doluluk hiç de yüksek değildi, buna rağmen her şey gitti” biçiminde yaşar.

Buna karşılık gerçek saldırılar var. KernelHost'taki işletimden iki örnek, ikisi de gerçek zamanlı olarak filtrelendi: 7777/UDP üzerindeki bir oyun sunucusuna yönelik, 112,2 Gbit/s'nin ve saniyede 8,7 milyon paketin üzerinde bir UDP flood'u ve 9987/UDP üzerindeki bir ses sunucusuna yönelik, 473,4 Gbit/s'nin ve saniyede 41,5 milyon paketin üzerinde çok vektörlü bir saldırı. Bunu kendi hattınızla karşılaştırın: 473,4 Gbit/s, 1 Gbit/s'lik bir bağlantının yaklaşık 470 katıdır ve 10 Gbit/s'lik bir bağlantının hâlâ yaklaşık 47 katıdır.

Bu yüzden yaygın iki acil freni tatmin edici değildir. Null routing (blackholing), saldırıya uğrayan IP adresini ağdan çıkarır ve saldırıyı bitirir, ama sunucunuzu da bitirir: Oyuncularınız açısından sonuç başarılı bir saldırıyla aynıdır. Tepkisel bir yönlendirme ise geçiş süresinde tam olarak kampanyanın karara bağlandığı dakikalara mal olur. Etkili olan yalnızca, sunucunun önündeki ağda kalıcı olarak çalışan bir filtrelemedir.

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 çok ö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 Layer 3 ile 7 arasındaki protokole özgü kalıplar tanınır ve paket paket düşürülür.

İki özellik belirleyicidir. Birincisi, filtreleme kalıcı olarak çalışır, yani oyuncularınızın dışarı düştüğü bir geçiş süresi yoktur. İkincisi, null routing kullanılmaz: Saldırıya uğrayan IP adresi ağda kalır, yalnızca zararlı paketler düşürülür. Koruma her sunucu paketinde ek ücret olmadan bulunur, ayrı bir koruma paketi ve kurulum gerektirmez ve teslimden itibaren etkindir. Sunucular Frankfurt am Main'deki maincubes Premium Datacenter'da durur. 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ı projelere ara sıra değil, hedefli biçimde ve haftalar boyunca, değişen kalıplarla ve her zaman tam olarak sözleşilen kampanya akşamında saldırılır. Bu durumlar 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 bir koruma IP'si. Sunucunuz bizim ağımızda bu adrese geçirilir, sizin tarafınızda hiçbir değişiklik gerekmez.
  • Port ve protokol başına kendiniz yönetebileceğiniz koruma kuralları. Hangi portun hangi profille filtrelendiğini müşteri panelinde siz belirlersiniz, yani 27015/UDP portunu kampanyalarınızı sunan web sunucusundan farklı biçimde.
  • Değişiklikler gerçek zamanlı etki eder, destek talebi açmadan ve beklemeden. Yani süren bir saldırı sırasında ince ayar yapabilirsiniz.
  • Her oyuna uygun bir koruma profili. Left 4 Dead 2 ve diğer Source başlıkları için, aynı şekilde 40'tan fazla başka oyun ve protokol için, buna ek olarak değiştirilmiş sunucular için serbest TCP ve UDP profilleri.

Burada da PrePaid modeli geçerlidir: asgari süre yok, fesih bildirim süresi yok, sözleşme yok ve kurulum ücreti yok. Saldırı dalgası geçtiğinde süreyi basitçe uzatmazsınız.

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

Özellik Dâhil olan sürekli koruma Advanced DDoS Protection
Fiyat her sunucu paketinde dâhil, ek ücret olmadan ayda 50,00 EUR'dan başlar, asgari süresi olmayan PrePaid
Etkinleştirme teslimden itibaren etkin, kurulacak bir şey yok sipariş edin, koruma IP'sini alın, sunucu geçirilir
Filtreleme kapasitesi 17 Tbps küresel scrubbing, buna ek olarak Frankfurt am Main'de 3,2 Tbps Arbor gerçek zamanlı filtreleme aynı iki kademeli filtreleme, buna ek olarak kendi kurallarınız
IP adresi sunucunuzun IP adresi ek dedicated koruma IP'si
Kuralları değiştirme KernelHost tarafından bakımı yapılır, ince ayar destek talebiyle müşteri panelinde kendiniz, gerçek zamanlı etkili
Oyun profilleri 40'tan fazla oyun ve protokol, Source başlıkları dâhil port başına profil seçilebilir, değiştirilmiş sunucular için de
Saldırı sırasında null routing hayır hayır
Şuna uygun ilk kampanyadan itibaren her sunucu sürekli ve hedefli biçimde ateş altında olan projeler

Left 4 Dead 2 projelerinin çoğu için, dâhil olan sürekli koruma düzgün bir sunucu yapılandırması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

Sunucu lobby aramasından kayboldu, ama çalışmaya devam ediyor: Çoğunlukla 27015/UDP portu topluca kapatılmış ya da fazla sıkı hız sınırlaması almıştır; oyun trafiği ile sorgu aynı portu paylaştığı için kaba bir kural ikisini de vurur. Bunun yerine bağlantısız paketlere yapılan bir eşleştirmeyle çalışın. Port erişilebilir ve sunucu buna rağmen görünmüyorsa sv_search_key, sv_steamgroup_exclusive, sv_lan 0 ve sv_region 255 değerlerini, ayrıca başlatmanın yanlışlıkla -nomaster ile yapılıp yapılmadığını kontrol edin.

Sunucu konsolunda sürekli “Invalid split packet length” yazıyor: Bu hacimsel bir saldırı değil, hızlı bir sırayla gönderilen, hatalı biçimde birleştirilmiş bir ağ paketidir. Trafik bu sırada çok küçük kalır, sunucu buna rağmen takılır. Önce bant genişliğinin gerçekten dikkat çekici olup olmadığını kontrol edin ve sunucu binary'si ile eklentileri güncel duruma getirin. Bant genişliği burada işe yaramaz.

Bütün oyuncuların pingi yüksek, ama hat dolu değil: Bu, hacim değil paket hızı olduğuna işaret eder. ip -s link show çıktısındaki düşürülen paketlere ve nstat -az çıktısındaki UDP sayaçlarına bakın. Sistem logunda nf_conntrack: table full satırı varsa oyun portunu notrack ile izlemenin dışına çıkarın.

Güvenlik duvarı kuralı doğru, buna rağmen etki etmiyor: iptables -L INPUT -n -v ile eşleşme sayaçlarının artıp artmadığını kontrol edin. Sıfırda kalıyorlarsa kurala ulaşılmıyordur, çünkü kural UFW zincirlerinin arkasında duruyordur ya da son yeniden başlatmadan sonra kaybolmuştur. Sayaçlar artıyor ve hiçbir şey değişmiyorsa sunucunun önündeki hat doyuma ulaşmıştır ve bundan sonra yalnızca ağda yapılan filtreleme işe yarar.

Slotlar boş olmasına rağmen sunucu artık oyuncu kabul etmiyor: Çoğunlukla bir lobby rezervasyonu takılı kalmıştır. Ya sunucuyu tutarlı biçimde matchmaking üzerinden işletirsiniz, ya da sv_force_unreserved 1 ayarlayıp oyuncularınızın sunucu tarayıcısı üzerinden katılmasını sağlarsınız. L4DToolZ ile dörtten fazla koop slotu varsa bu ayar zaten zorunludur.

Yeni oyuncuların indirmesi bitmiyor ve hat bu sırada dolu: O zaman srcds kampanya dosyalarını oyun portu üzerinden kendisi sunuyordur. sv_downloadurl değerini bir web sunucusuna yönlendirin ve dosyaları orada bzip2 arşivi olarak koyun, ya da oyuncularınızı Steam Workshop'a yönlendirin.

Saldırı bir IP değişikliğinden sonra duruyor ve bir ila iki gün sonra geri geliyor: Bu normal durumdur, çünkü sunucunuz yeniden kaydolduğu anda yeni adresi kendisi yayınlar, unutulmuş bir DNS kaydı ya da durum gösteren bir Discord botu da gerisini tamamlar. Bir IP değişikliği saat kazandırır, çözüm getirmez.

Sunucuda yabancı yönetim komutları çalışıyor: Bu bir DDoS saldırısı değil, ele geçirilmiş bir RCON erişimidir. Parolayı hemen değiştirin ve 27015 portunun TCP tarafını kendi adresinize sınırlayın.

Kısaca özetle

  • Bir Left 4 Dead 2 sunucusu dışarıya tam olarak bir açık porta ihtiyaç duyar: 27015/UDP. Oyun trafiği ve A2S sorgusu bu portu paylaşır, ayrı bir sorgu portu yoktur.
  • 27015/TCP portu RCON'dur ve yalnızca kendi adresinize aittir. RCON'a ihtiyacı olmayan kişi rcon_password değerini boş bırakır.
  • Lobby sistemi, oyunun tanıdığı en etkili ücretsiz erişim filtresidir: sv_allow_lobby_connect_only 1, kendinize ait bir sv_search_key ve sv_steamgroup_exclusive 2 matchmaking üzerinden gelmeyen her şeyi dışarıda bırakır. Bu sistem katılımları filtreler, paketleri değil.
  • Özel kampanyalar Steam Workshop'a ya da sv_downloadurl arkasına aittir, asla oyun portu üzerine değil. Aksi hâlde yarıda kalan her bağlantı denemesini bant genişliğinizle ödersiniz.
  • Hız sınırlaması, bağlantısız paketler (0xffffffff ile başlayanlar) ile oyun trafiği arasında ayrım yapmak zorundadır. 27015/UDP üzerindeki kaba bir kural kendi oyuncularınızı dışarı atar.
  • 64 baytlık paketlerde 1 Gbit/s'lik bir hat saniyede yaklaşık 1,49 milyon paket taşır. Bunun üzerinde yalnızca sunucunun önündeki ağ belirleyicidir, sunucunun kendisindeki hiçbir ayar değil.
  • KernelHost'ta 17 Tbps küresel scrubbing ve Frankfurt am Main'de 3,2 Tbps ile Arbor gerçek zamanlı filtreleme kalıcı olarak ve ek ücret olmadan, null routing olmadan ve geçiş süresi olmadan filtreler.

Projeniz 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, ekibimizin IP adresiniz için filtreleme kurallarını yeniden ayarlaması 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. Bu sırada dört bilgiyi hemen verin: IP adresi, port, kendi saat diliminizdeki zaman aralığı ve ne gördüğünüz (oyuncular dışarı düşüyor, sunucu lobby aramasında yok, ping yüksek). Bu bir geri soru turunu ortadan kaldırır ve tam bir kampanya sürerken bu turun değeri büyüktür.

Başka bir yerde barındırıyorsanız ve düzenli olarak ateş altındaysanız, KernelHost'a taşınmak, hattı daha önce biten bir sunucudaki her ek kuraldan daha kısa yoldur. Sürekli koruma her sunucu paketinin bir parçasıdır, ancak ciddi durumda satın aldığınız bir ek değildir.

Sıkça sorulan sorular

Bir Left 4 Dead 2 sunucusu için hangi portları açık bırakmam gerekir?
Tam olarak bir tanesini: 27015/UDP. Oyun trafiği ile A2S sunucu sorgusu bu port üzerinden birlikte akar, Left 4 Dead 2'de ayrı bir sorgu portu yoktur. 27015/TCP portu RCON'dur ve yalnızca kendi adresiniz için açılmalıdır. 27005/UDP istemci portudur, oyuncudan çıkar ve sunucuda açılmasına gerek yoktur. 27020/UDP portu SourceTV'dir ve yalnızca -hltv ya da tv_enable 1 ile gerçekten yayın yapıyorsanız gereklidir. Aynı makinedeki diğer sunucu örnekleri 27016, 27017 ve devamı olarak yukarı doğru sayar.
L4D2 sunucum takılıyor, ama hat boş. Bu bir DDoS saldırısı mı?
Muhtemelen değil. Önce sunucu konsoluna bakın: Orada Invalid split packet length satırı tekrarlanıyorsa hatalı biçimde birleştirilmiş ağ paketleri ulaşıyordur ve bunlardan çok azı yeter. Trafik minik kalır, sunucu buna rağmen takılır. Paralel olarak paket hızını sar -n DEV 1 10 ile, düşürülen paket sayaçlarını ip -s link show eth0 ile kontrol edin. İkisi de dikkat çekmiyorsa bu hacimsel bir saldırı değil, engine'de ya da bir SourceMod eklentisinde bir çökme veya yük kalıbıydı. Buna karşı bant genişliği değil, güncel bir sunucu binary'si işe yarar.
sv_allow_lobby_connect_only 1 DDoS saldırılarına karşı korur mu?
Hayır, bu direktif katılımları filtreler, paketleri değil. sv_allow_lobby_connect_only 1 ile içeriye yalnızca bir Steam matchmaking lobby'si üzerinden yönlendirilmiş oyuncular girer; geliştirici konsolundan verilen bir connect komutu ve Steam davetleri geri çevrilir. Trollere, tek kullanımlık hesaplara ve bir katılım flood'una karşı bu çok etkilidir. Ancak 27015/UDP portunu flood ile dolduran bir saldırgan katılmak istemiyordur: Paketleri reddedilir, ama buna rağmen ulaşmış olur, bant genişliği tüketmiş ve işlem zamanı harcamış olur. Hacimsel saldırılara karşı bu ayar işe yaramaz.
Sunucu ateş altındayken 27015 portuna öylece hız sınırlaması uygulayabilir miyim?
Topluca değil. Oyun trafiği ve sunucu sorgusu 27015/UDP portunu paylaştığı için kaba bir hız sınırlaması kendi oyuncularınızı dışarı atar ve saldırıyı saldırganın istediği biçimde sonlandırır. Fren, paket sınıfları arasında ayrım yapmak zorundadır: Source engine'in bütün bağlantısız paketleri dört tam dolu bayt ile (0xffffffff) başlar, hâlihazırda bağlı oyuncuların trafiği ise başlamaz. Tam olarak buna dayanarak nftables ya da iptables ile gönderen adres başına bir sınır konabilir. Buna ek olarak STEAM_GAMESERVER_RATE_LIMIT_200MS ortam değişkeni, bir adresin bağlantısız paketlerini 200 milisaniye içinde bunlardan ayarlanan değerden fazlası ulaştığı anda düşürür.
Lobby rezervasyonu nedir ve sunucumu neden bloke eder?
Lobby rezervasyonu, sunucunuzun bir matchmaking lobby'si tarafından zaman sınırlı olarak işgal edilmesidir. Rezervasyon sürdüğü sürece sunucu diğer lobby'ler için dolu sayılır ve ancak bir süre sonra kendiliğinden sona erer. Dört koop slotunda bu kıt bir kaynaktır. Sunucusunu matchmaking üzerinden işletmeyen kişi sv_force_unreserved 1 ayarlar: Sunucu o zaman rezervasyon isteklerine artık yanıt vermez ve rezervasyon işareti taşıyan katılımları reddeder. L4DToolZ ile dörtten fazla koop slotu varsa bu ayar zaten zorunludur, aksi hâlde ek slotlara ulaşılamaz.
Özel kampanyalar sunucumu saldırıya açık hâle getirir mi?
Onu pahalı hâle getirirler. Özel bir kampanya, haritalar, modeller, dokular ve seslerden oluşan bir VPK paketidir, yani tek bir haritanın katlarıdır. srcds bu dosyaları oyun portu üzerinden kendisi sunuyorsa yeni bir oyuncunun her bağlantı denemesi size indirmenin tamamını, indirmenin ortasındaki her kopma da aynı şekilde maliyet çıkarır. Bu, bir hattı doldurmanın ucuz bir yoludur ve hiçbir istatistikte saldırı gibi görünmez. Oyuncularınızı Steam Workshop'a yönlendirin ya da dosyaları sv_downloadurl üzerinden bir web sunucusuna, orada bzip2 arşivi olarak koyun.
Hangi saldırı büyüklüğünden sonra hiçbir güvenlik duvarı kuralı işe yaramaz?
Sunucunuzun önündeki hat doyuma ulaştığı anda. Tipik bir oyun sunucusu 1 Gbit/s'lik bir hatta bağlıdır, bu saniyede 125 megabayt eder ve 64 baytlık paketlerde saniyede yaklaşık 1,49 milyon paket demektir. Normal bir sunucu kernel'i bunların birkaç yüz binini işler, ardından düşürmeye başlar. Kuralınız her zaman ancak kabloyu çoktan geçmiş bir paket hakkında karar verir; onu düşürebilir, ama gönderilmemiş hâle getiremez. Bu sınırdan sonra yalnızca sunucunun önündeki ağda kalıcı olarak çalışan bir filtreleme işe yarar.
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ğındaki 17 Tbps mitigasyon kapasitesi hacimsel saldırıları kaynaklarına yakın bir noktada yakalar ve Frankfurt am Main'de 3,2 Tbps ile Arbor gerçek zamanlı filtreleme, protokole özgü kalıpları doğrudan sunucunun önünde düşürür. İki kademe de kalıcı olarak çalışır ve önce bir saldırıya tepki vermek zorunda değildir; yani oyuncularınızın dışarı düştüğü bir geçiş süresi yaşanmaz.
KernelHost'ta DDoS koruması ek ücretli mi?
Hayır. İki kademeli sürekli koruma her sunucu paketinde ek ücret olmadan bulunur ve teslimden itibaren etkindir. Onu ne sipariş etmeniz ne açmanız ne de yapılandırmanız gerekir ve ayrı bir koruma paketi yoktur. Sunucular Frankfurt am Main'deki maincubes Premium Datacenter'da durur. Left 4 Dead 2 sunucusunu şimdiye kadar başka bir yerde işleten ve düzenli olarak ateş altında olan kişi, bunu hattı daha önce biten bir sunucudaki bir ek kuralla değil, taşınarak çözer.
Ek olarak Advanced DDoS Protection'a ne zaman ihtiyaç duyarım?
Projenize ara sıra değil, hedefli biçimde ve haftalar boyunca saldırıldığında ve filtrelemeyi kendiniz yönetmek istediğinizde. Dedicated bir koruma IP'si alırsınız ve koruma kurallarını port ile protokol başına müşteri panelinde kendiniz yönetirsiniz, yani 27015/UDP portunu kampanyalarınızı sunan web sunucusundan farklı biçimde. Değişiklikler gerçek zamanlı etki eder, yani süren bir saldırı sırasında ince ayar yapabilirsiniz. Fiyat ayda 50,00 EUR'dan başlar, PrePaid, asgari süre ve kurulum ücreti olmadan.

Left 4 Dead 2 L4D2 DDoS koruması Source engine srcds Lobby sistemi Port 27015 Oyun sunucusu koruması Advanced DDoS Protection