Unturned sunucusunu DDoS saldırılarına karşı koruma

Yayınlanma tarihi 20 dk okuma

Bir Unturned sunucusunun gerçekten hangi portlara ihtiyaç duyduğu, 27017'nin 2021'den bu yana neden gereksiz olduğu, sorgu flood'unu, katılım flood'unu ve eklenti yükünü nasıl sınırlayacağınız ve hangi saldırı büyüklüğünden sonra yalnızca sunucunun önündeki ağda yapılan filtrelemenin işe yaradığı.

Akşamları birkaç dakika boyunca sunucu listesinden kaybolan ve bu sırada bütün oyuncuları bir zaman aşımıyla dışarı atan bir Unturned sunucusunun donanım sorunu yaşaması nadirdir. Çoğunlukla bir saldırı sürüyordur, hem de tam olarak en yoğun anda. Bu yazı önce ek maliyet olmadan kendiniz neleri güvene alabileceğinizi, ardından bu önlemlerin teknik olarak nerede bittiğini, sonunda da sunucunun önündeki ağda neler olması gerektiğini gösteriyor.

Tüm bilgiler Debian 12, Debian 13, Ubuntu 22.04 LTS veya Ubuntu 24.04 LTS üzerinde çalışan Unturned Dedicated Server (U3DS, SteamCMD uygulama kimliği 1110390) içindir. Komutlar root kullanıcısı için yazılmıştır, normal kullanıcı olarak başlarına sudo ekleyin. Saldırı şu anda sürüyorsa: Yapılandırmada önce hiçbir şey değiştirmeyin ve sunucuyu yeniden başlatmayın, ölçüm değerlerini kaydedin (10. bölüm). Saldırıdan sonra bu değerler kaybolur.

Unturned sunucularına neden özellikle saldırılıyor

Unturned sunucularına saldırılıyor, çünkü adresleri herkese açık, oyun trafiği UDP üzerinden gidiyor ve bir saldırı onu tetikleyen kişiye ne beceri ne de anlamlı bir para götürüyor. Bu üç nokta burada diğer oyunların çoğundan daha güçlü biçimde geçerlidir.

Herkese açık bir Unturned sunucusu IP adresini kendisi yayınlar. Bunu yapmak zorundadır, yoksa onu kimse bulamaz: Steam sunucu tarayıcısı ona doğrudan sorar ve unturned-servers.net ya da BattleMetrics gibi üçüncü kişi listeleri IP adresiyle portu düz metin olarak taşır. unturned-servers.net bunun için, kendi beyanına göre her beş dakikada bir sunucunun sunucu portunda UDP bağlantıları kabul edip etmediğini denetler. Bir saldırgan için bu bir emek değil, bir formdur.

Buna oyuncu kitlesi ekleniyor. Unturned ücretsizdir, giriş eşiği sıfırdır ve roleplay ile survival projeleri arasında aynı oyuncular için gerçek bir rekabet vardır. Banlanmış bir oyuncunun, gücenmiş eski bir yöneticinin ya da komşu bir projenin, sunucunuzu bir saat boyunca kullanılamaz hâle getirmek için ona erişmesi gerekmez. Bir DDoS saldırısının teknik olarak ne olduğunu ve sahte gönderen adreslerinin onu neden bu kadar zor izlenebilir kıldığını DDoS saldırısı nedir? yazısı anlatıyor.

Asıl mesele olan portlar

Bir Unturned sunucusu tam olarak iki ardışık UDP portu kullanır: Commands.dat dosyasında belirlenen değer ve bu değer artı bir. Fabrika ayarında bunlar 27015 ve 27016'dır. Smartly Dressed Games'in resmî belgeleri bu dağılımı şöyle tanımlıyor: İlk port sunucu listesinin sorgularını, ikincisi oyun trafiğini taşır. Yalnızca ilki belirlenir, ikincisi kendiliğinden türer.

Name Unturned Sunucum
Port 27015
MaxPlayers 24
Map PEI
Mode Normal
Perspective Both
Owner 76561198000000000

Commands.dat dosyası U3DS/Servers/<Örnek>/Server/Commands.dat yolundadır. Biçimi kendine özgüdür ve sık görülen bir hata kaynağıdır: satır başına bir komut, eşittir işareti yok, değer bir boşlukla ayrılmış ve komutlar büyük küçük harfe duyarlı. // ile başlayan satırlar yorumdur.

Güvenlik duvarı açısından en önemli nokta şudur: 27017 portu, 21 Kasım 2021 tarihli 3.21.30.0 sürümünden bu yana artık gerekmiyor. Bundan önce bir Unturned sunucusu üç porta ihtiyaç duyuyordu, çünkü Steam sorgusu port artı iki üzerindeydi. Bu güncellemeyle sorgu, portu sunucunun kendisiyle paylaşır ve üçüncü port ortadan kalkmıştır. Router rehberleri, hosting firması wiki'leri ve forum gönderileri buna rağmen bugün de 27017'yi anıyor. Açık bir 27017 size artık hiçbir avantaj sağlamaz, salt saldırı yüzeyidir.

Bir diğer önemli nokta: Unturned'in yerleşik bir RCON portu yoktur. Resmî belgeler yalnızca konsol girdisi ile konsol çıktısını tanır; bunlar ICommandInputOutput arayüzü üzerinden değiştirilebilir. Bir Unturned sunucusunda gördüğünüz her uzaktan yönetim bir eklentiden gelir ve kendine ait bir TCP portu getirir. Bu portu kendiniz bulmanız ve kendiniz sınırlamanız gerekir, çünkü onu sizin için kimse güvene almamıştır.

Özellik Değer (fabrika ayarı) Protokol Nerede ayarlanır
Sorgu portu (Steam A2S, sunucu listesi) 27015 UDP Commands.dat dosyasındaki Port
Oyun portu 27016 (port artı bir) UDP ayrı olarak ayarlanamaz
Üçüncü port 27017 3.21.30.0 sürümünden bu yana yok (21.11.2021) yok kapatın
Aynı makinede ikinci sunucu 27017, üçüncüsü 27019 UDP Port, iki fark
RCON yerleşik port yok yalnızca eklenti üzerinden TCP eklenti yapılandırması
Bağlama adresi bütün arayüzler yok Commands.dat dosyasındaki Bind
Oyuncu ve saniye başına paket 50,0 UDP Max_Packets_Per_Second
İzin verilen en yüksek ping 750 ms yok Max_Ping_Milliseconds
Zaman penceresi başına katılım hızı 40,0 saniyede 10 deneme yok Rate_Limit_Kick_Threshold
Kuyruk 8 yer, en fazla 64 yok Commands.dat dosyasındaki Queue_Size
Anti-cheat VAC ve BattlEye, ikisi de etkin yok VAC_Secure, BattlEye_Secure
Steam sorgusunun amplifikasyon faktörü 5,5 (US-CERT TA14-017A) UDP protokol özelliği
24 oyuncuda normal gelen paket hızı saniyede yaklaşık 1.200 paket UDP 24 çarpı 50
1 Gbit/s'lik bir hattın doyuma ulaşması 125 MB/s, 64 baytlık paketlerde saniyede yaklaşık 1,49 milyon paket yok hattın fiziği
KernelHost sunucularında filtrelenen saldırılar saniyede 41,5 milyon pakette 473,4 Gbit/s; 112,2 Gbit/s'lik UDP flood'u UDP işletimden gelen ölçüm değerleri

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 Unturned sunucusu, nerede 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: gerçekten ne dinliyor?

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

ss -lnup
ss -lntp

İlk komut dinleyen UDP soketlerini, ikincisi TCP soketlerini gösterir. İlgi çekici olan, yerel adresi gösteren sütundur. 0.0.0.0:27015 ve [::]:27015 “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 bir RCON eklentisi, bir web paneli, bir veritabanı ve 27017'de kimsenin artık kullanmadığı eski bir test sunucusu görünür. Saldırganın bakışını, dışarıdan yapılan bir port taraması verir; Unturned için açıkça UDP ile:

nmap -Pn -sU -p 27000-27050 SUNUCU.IP.ADRESİNİZ
nmap -Pn -p- --min-rate 1000 SUNUCU.IP.ADRESİNİZ

2. Yalnızca 27015 ve 27016'yı açık bırakma

Unturned için dışarıya iki UDP izni yeter. Oyunun kendisi için tek bir TCP portu gerekmez: Resmî belgeler iki port için de açıkça UDP istiyor ve oyunun ağ katmanı (Steam Networking Sockets, bir güncellemeden bu yana fabrika ayarı) yalnızca UDP üzerinden çalışıyor. Ek olarak TCP açan kişi eskimiş bir rehberi izliyordur.

ufw allow 22/tcp comment 'SSH'
ufw allow 27015/udp comment 'Unturned sorgu'
ufw allow 27016/udp comment 'Unturned oyun'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Sıra önemlidir, yoksa kendinizi dışarıda bırakırsınız. Kurtarma yolu da dâhil tam rehber Kendinizi dışarıda bırakmadan UFW güvenlik duvarı kurma yazısında. Birden fazla örnek çalıştırıyorsanız önerilen iki fark değerine uyun (27015, 27017, 27019) ve her örnek için tam olarak gerçekten kullandığı iki portu açın.

Bir web paneli, bir veritabanı ya da bir RCON eklentisi açık ağa ait değildir. İlgili portu ufw allow from 203.0.113.10 to any port 8080 proto tcp ile kendi adresinize sınırlayın ya da arayüze ssh -N -L 8080:127.0.0.1:8080 root@SUNUCU.IP.ADRESİNİZ ile yerel bir SSH yönlendirmesi üzerinden ulaşın. Veritabanı ise 127.0.0.1 adresine bağlanır.

3. Sunucu listesinden düşmeden sorgu portunu güvene alma

Sorgu portu, bir Unturned sunucusunun en hassas noktasıdır. Sunucu bu port üzerinden A2S_INFO, A2S_PLAYERS ve A2S_RULES Steam sorgularını yanıtlar. Onu tümüyle kapatırsanız, sunucu kusursuz çalışsa bile her sunucu listesinden kaybolur.

Bir A2S yanıtı, sorgudan belirgin biçimde büyüktür. US-CERT, UDP amplifikasyon saldırılarına ilişkin genel bakışında (TA14-017A) Steam protokolünü 5,5 bant genişliği amplifikasyon faktörüyle listeliyor. Somut olarak bu şu anlama gelir: Bir saldırgan sahte gönderen adresiyle yabancı oyun sunucularına sorgular gönderir ve yaklaşık beş buçuk kat büyük olan yanıtları asıl hedefine yönlendirir. O zaman sunucunuz kurban değil, üçüncü bir kişiye karşı amplifikasyon aracıdır. Ters yönde ise tek bir oyuncu bile düşmeden sunucuyu sunucu tarayıcısından kaybettirmek için bir sorgu flood'u yeter. İşletmeciler tam olarak bunu bildiriyor: Sunucu çalışıyor, üzerindeki oyuncular hiçbir şey fark etmiyor, ama sunucu artık bulunamıyor.

Küçük sorgu flood'larına karşı kaynak adres başına bir üst sınır işe yarar. Meşru sorgular seyrek gelir: Steam tarayıcısı her gösterimde bir kez sorar, durum hizmetleri de birkaç dakikada bir.

iptables -I INPUT -p udp --dport 27015 -m hashlimit --hashlimit-name unturned_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 27016 -m hashlimit --hashlimit-name unturned_game --hashlimit-mode srcip --hashlimit-above 300/sec --hashlimit-burst 500 -j DROP

İkinci sayı doğrudan oyundan türüyor: Unturned bir oyuncuyu fabrika ayarında saniyede 50 paketle sınırlar (Max_Packets_Per_Second). Yani kaynak adres başına saniyede 300 paket, aynı adresin arkasında birden fazla oyuncu otursa bile tek bir bağlantıya bol bol yer bırakır. İki değer de başlangıç değeridir, kesin doğrular değil. Önce bir hafta normal işletimi ölçün, yoksa kendi oyuncularınızı dışarı atarsınız.

Salt iptables kuralları bir yeniden başlatmadan sonra kaybolur. Debian ve Ubuntu'da bunlar apt-get install -y iptables-persistent ve netfilter-persistent save ile kaydedilir. UFW altında bu tür kurallar /etc/ufw/before.rules dosyasına aittir, çünkü aksi hâlde bir sonraki ufw reload komutunda kaybolurlar.

Buna hiçbir maliyeti olmayan bir alışkanlık ekleniyor: Web siteniz ya da Discord botunuz oyuncu sayısını gösteriyorsa, sunucuyu ziyaretçinin üzerinden sorgulamayın, sonucu sabit aralıklarla önbelleğe alın. Aksi hâlde çok ziyaret edilen bir durum sayfası, aralık başına bir sorgu yerine ziyaretçi başına bir sorgu üretir.

4. Config.json dosyasındaki yerleşik sınırları ayarlama

Unturned, Commands.dat ile aynı Server klasöründeki Config.json dosyasında, adının düşündürdüğünden savunma için daha önemli olan bir bölüm getiriyor. Fabrika ayarları şöyle:

"Server": {
    "VAC_Secure": true,
    "BattlEye_Secure": true,
    "Max_Ping_Milliseconds": 750,
    "Timeout_Queue_Seconds": 15.0,
    "Timeout_Game_Seconds": 30.0,
    "Max_Packets_Per_Second": 50.0,
    "Join_Rate_Limit_Window_Seconds": 40.0,
    "Rate_Limit_Kick_Threshold": 10,
    "Use_FakeIP": false
}

Max_Packets_Per_Second bağlanmış bir oyuncuyu saniyede 50 paketle sınırlar. Join_Rate_Limit_Window_Seconds ile Rate_Limit_Kick_Threshold, 40 saniye içinde sınırı on defadan fazla aşan bir bağlantıyı dışarı atar. VAC_Secure ve BattlEye_Secure oyuncu tarafında her iki anti-cheat sistemini zorunlu kılar ve böylece tek kullanımlık istemcilerin büyük bölümünü uzak tutar.

Bu sırada bir şey net olmalı: Bu sınırlar gerçekten katılan ya da katılmayı deneyen istemcilere karşı etki eder. Sahte gönderen adresleriyle yapılan bir flood'a karşı etkileri yoktur, çünkü orada hiç oturum oluşmaz. Buna rağmen önemlidirler, çünkü en sık görülen tek vakayı yakalarlar: sunucuyu tek başına aşırı yükleyen, değiştirilmiş tek bir istemci. Max_Ping_Milliseconds değerini 750'de bırakmak mantıklıdır; daha düşük ayarlandığında sunucu her kısa ağ takılmasında yarım turları dışarı atar.

5. Bağlantı izlemesini rahatlatma

Bu nokta neredeyse her zaman 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 de bağlantı izlemesinde (conntrack) kayıt oluşturur ve sahte gönderen adreslerinde her yeni adres yeni bir kayıt demektir. Tablo dolduğunda kernel paketleri ayrım gözetmeden düşürür: Saldırı ile oyuncularınız birlikte dışarı düşer. Sistem logunda o zaman nf_conntrack: table full, dropping packet satırı durur.

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
dmesg -T | grep -i conntrack

En etkili adım, Unturned trafiğini hiç izlemeye almamaktır. Oyun oturumlarını kendisi yönetir ve kernel içinde bir durum izlemesine ihtiyaç duymaz:

iptables -t raw -A PREROUTING -p udp --dport 27015 -j NOTRACK
iptables -t raw -A PREROUTING -p udp --dport 27016 -j NOTRACK

Bu iki port için verdiğiniz izinlerin artık ESTABLISHED,RELATED üzerinden gitmemesi, kendi kabul kuralları olarak durması gerektiğine dikkat edin. nf_conntrack_max değerini artırmak ancak bundan sonra anlamlıdır. Önce tabloyu büyüten kişi sorunu yalnızca birkaç dakika öteler ve bunun için bellek harcar.

Paketler sunucu süreci onları almaktan daha hızlı geliyorsa, buna ek olarak soketin alma arabelleği taşar. Oyuncular açısından bu, hat boş olmasına rağmen paket kaybı gibi görünür:

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

Değerleri /etc/sysctl.d/ altına koyun ve sysctl --system ile etkinleştirin. Gerekli olup olmadıklarını kernel söyler: nstat -az çıktısında UdpRcvbufErrors artıyorsa ya da ss -lunp çıktısında alma kuyruğunda kalıcı olarak bir şey duruyorsa, bu ayarlar işe yarar. İkisi de sıfırda kalıyorsa bu düzenleme hiçbir şeyi değiştirmez. Bu bir yedektir, koruma değil.

6. Katılım flood'u, kuyruk ve beyaz liste

Katılım flood'u, saldırganın hattı doldurmak yerine slotları ve işlem zamanını tüketmek için normal katılım yolunu kullandığı bir saldırıdır. Unturned buna karşı hepsi Commands.dat dosyasında duran dört araç getiriyor:

  • Queue_Size 32 kuyruğu belirler. Fabrika ayarı 8 yer, en yüksek değer 64'tür. Fazla büyük bir kuyruk bir saldırgana yardım eder, fazla küçük olanı ise her yeniden başlatmada gerçek oyuncuları dışarı atar.
  • Whitelisted sunucuyu erişim listesine geçirir. Kayıt konsoldan permit <SteamID64> ile yapılır, unpermit <SteamID64> ile kaldırılır.
  • Password Parolanız adresi yalnızca bir listeden alan her şeyi dışarıda bırakır.
  • Filter adında izin verilmeyen karakterler bulunan oyuncuları geri çevirir, MaxPlayers 24 ise slot sayısını donanımın gerçekten taşıdığı yerde tutar.

Bir beyaz liste, oyun mantığınızı korur, hattınızı korumaz. Sunucunuzu flood ile dolduran bir saldırgan katılmak istemiyordur zaten. Paketleri reddedilir, ama buna rağmen ulaşmıştır ve asıl nokta tam olarak budur.

7. RocketMod, OpenMod ve eklenti tarafı

Unturned'in yaygın iki eklenti platformu var ve ikisi de sunucuyla aynı süreçte çalışıyor. RocketMod daha eski olanı: Özgün bakımcılar 20 Aralık 2019'da bakımı bıraktı ve kaynak kodu MIT lisansı altına koydu. Smartly Dressed Games o zamandan beri, dedicated sunucuyla birlikte zaten gelen Legally Distinct Missile (LDM) türevini sürdürüyor: Rocket.Unturned klasörü Extras klasöründen Modules klasörüne kopyalanır. Geliştiriciler bu türevi açıkça öneriyor, çünkü türev eski Rocket sorunlarını, örneğin threading hatalarını ve teleport istismarlarını gideriyor.

OpenMod ise özgün Rocket bakımcılarından biri tarafından geliştirilen daha yeni ardıldır. RocketMod'un yerini almaz, onun yanında çalışır ve bir entegrasyon üzerinden mevcut Rocket eklentilerini de kullanabilir. Savunma açısından bu iki anlama gelir.

Birincisi: Her eklenti, ana süreçte saldırı yüzeyidir. Her sohbet mesajında ya da her oyun olayında bir veritabanı sorgusu tetikleyen bir eklenti, kendi eliyle kurulmuş bir Denial of Service'tir. O zaman bir olayı döngü hâlinde tetikleyen tek bir oyuncu, hiç bant genişliğine ihtiyaç duymadan sunucuyu felç eder. Eklenti listesini kısa tutun, açık kaynaklı eklentileri tercih edin ve her eklemeden sonra sunucunun kare hızını ölçün.

İkincisi: Unturned'in kendine ait bir RCON portu olmadığı için her uzaktan yönetim bir eklentiden gelir. Kurulumdan sonra ss -lntp ile hangi TCP portunu açtığını denetleyin ve onu kendi adresinize sınırlayın. Parolası zayıf, açık bir uzaktan yönetim portu bir DDoS sorunu değil, bir devralma sorunudur.

8. Workshop içerikleri ve katılım süreci

Workshop içerikleri katılımı pahalı hâle getirir ve bu doğrudan saldırılabilirliği etkiler. Bu, aynı Server klasöründeki WorkshopDownloadConfig.json dosyası üzerinden yönetilir:

{
    "File_IDs": [],
    "Ignore_Children_File_IDs": [],
    "Query_Cache_Max_Age_Seconds": 600,
    "Max_Query_Retries": 2,
    "Use_Cached_Downloads": true,
    "Should_Monitor_Updates": true,
    "Shutdown_Update_Detected_Timer": 600
}

File_IDs alanında haritaların ve modların Workshop kimlikleri durur. Başlangıçta sunucu bunları bağımlılıklarıyla birlikte indirir ve her oyuncu bağlanırken bunları otomatik olarak sonradan yükler. Bilmeniz gereken üç sonuç var. Birincisi, büyük mod listelerinde katılım uzun sürer ve bir saldırıdan sonra bütün oyuncular aynı anda geri döner, bu da sunucuyu ikinci kez zorlar. İkincisi, Should_Monitor_Updates bir Workshop dosyası güncellendiği anda sunucuyu durdurur: Fabrika ayarı 600 saniye olan Shutdown_Update_Detected_Timer o zaman bir yeniden başlatmaya yol açar ve işletmeciler bunu saldırı durumunda düzenli olarak saldırının başarısı sanır. Üçüncüsü, her mod sunucunuzda yabancı koddur.

Pratikte bu şu anlama gelir: Listeyi olabildiğince kısa tutun, beklenmedik her yeniden başlatmadan sonra önce sunucu logunda Workshop güncellemesine ilişkin mesajı denetleyin ve Should_Monitor_Updates ayarını yalnızca güncellemeleri kendiniz planlıyorsanız kapatın.

9. Sunucu listesi, sunucu kodu ve Fake IP işlevi

Sunucu herkese açık biçimde listeli olduğu sürece IP adresiniz gizli tutulamaz. Bir kez bağlanmış her oyuncu onu bilir ve üçüncü kişi listeleri onu zaten yayınlar. Buna rağmen iki alışkanlık işe yarar: Ham adresi hiçbir yerde kendiniz yayınlamayın ve oyuncularınızı bir ana bilgisayar adı üzerinden bağlayın, ki bir adres değişikliği her bağlantıyı bozmasın. Klasik örnek, eski adrese işaret eden ve her değişikliği etkisiz kılan unutulmuş A kaydıdır.

İnternette işletim için zaten Steam sunucu yönetiminden 304930 uygulama kimliğine ait bir Game Server Login Token (GSLT) gerekir. Bu belge ek olarak sunucunuzun sunucu kodunun yeniden başlatmalar boyunca aynı kalmasını, her başlatmada yeniden üretilmemesini sağlar.

Unturned bunun dışında bir Fake IP işlevi sunuyor. Bu işlev Config.json dosyasında "Use_FakeIP": true ile açılır ve CopyFakeIP konsol komutu, sonra yayınlayacağınız adresi verir. Trafik bundan sonra Steam Datagram Relay aktarma ağı üzerinden gider, verilen adresler 169.254.0.0 ile 169.254.255.255 aralığındadır ve sunucunun gerçek adresi oyunculara artık gösterilmez. Valve bu trafiği kimliği doğrulanmış, şifrelenmiş ve hız sınırlı olarak tanımlıyor.

Bunun bedeli yüksektir ve nadiren birlikte söylenir: Adres ve port her yeniden başlatmada değişir, bir alan adı kendi betikleriniz olmadan buna yönlendirilemez ve Steam'in “Favoriler” ile “Geçmiş” listeleri bununla çalışmaz, yalnızca yer imi işlevi çalışır. Ama her şeyden önce bu işlev yalnızca oyun yolunu korur. Sunucunuz gerçek adresini korur ve SSH, web paneli, veritabanı ile web sitesi bu adres üzerinden erişilebilir kalır. Adresi eski bir DNS kaydından, bir durum sayfasından ya da önceki bir bağlantıdan bilen kişi ona doğrudan saldırmayı sürdürür. Yani Fake IP işlevi, sunucunun önündeki ağda yapılan filtrelemenin yerine geçmez, yalnızca adresinizi bilen kişi sayısını küçültür.

10. Kayıt tutma, böylece saldırı anında tahmin yürütmek zorunda kalmazsınız

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 portrange 27015-27016 -c 200 -q

tcpdump için şu geçerlidir: her zaman -c ile sınırlayın; tam yük altında alınan bir paket kaydı, hâlihazırda aşırı yüklü bir sunucuya ek yük getirir. Değerleri nasıl yorumlayacağınız ve bir saldırıyı bir yazılım hatasından nasıl ayırt edeceğiniz DDoS saldırısını tanıma yazısında.

Bu önlemler nerede biter

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. Tipik bir oyun sunucusu 1 Gbit/s'lik bir hatta bağlıdır, bu saniyede 125 megabayt eder ve biri bundan fazlasını gönderdiği anda hat dolar. Normal işletim çok daha altında kalır: 24 oyuncuda ve fabrika ayarında izin verilen oyuncu ile saniye başına 50 pakette saniyede yaklaşık 1.200 paket gelir. Bir booter hizmeti ise hiçbir hazırlık olmadan bunun katlarını üretir.

İkinci büyüklük paket hızıdır ve neredeyse her zaman 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. Yani hattınızı üçte birine kadar bile doldurmayan bir saldırı, işlem zamanı düşürme işine gittiği için sunucunuzu buna rağmen felç edebilir. İşletmeciler bunu “doluluk hiç de yüksek değildi, buna rağmen her şey gitti” biçiminde yaşar.

Hangi büyüklüklerin gerçekten görüldüğünü sınıflandırmak için: KernelHost sunucularında diğerlerinin yanı sıra bir ses sunucusuna yapılan, saniyede 41,5 milyondan fazla pakette 473,4 Gbit/s'yi aşan bir saldırı ve bir oyun sunucusuna yapılan, 112,2 Gbit/s'yi aşan 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. Konum Frankfurt am Main'dir. 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 saldırılır. Bunun için ayda 50,00 EUR'dan başlayan, PrePaid, asgari süresi ve kurulum ücreti 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 27015 UDP'de neye izin verildiğini (sorgular) ve 27016 UDP'de neye izin verildiğini (oyun trafiği) ayrı ayrı ayarlarsınız, bunun için destek talebi yazmanız gerekmez.
  • Değişiklikler gerçek zamanlı etki eder, yani süren bir saldırı sırasında ince ayar yapabilirsiniz, örneğin sorguları daha sıkı tutup oyun trafiğine dokunmadan bırakabilirsiniz.
  • 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, yani kendine ait portu olan bir eklenti için de.

İ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 Unturned dâhil yaygın oyunlar için optimize edilmiş profiller oyuna uygun profil, değiştirilmiş uygulamalar 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

Unturned 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

“Rehberim 27015 ile 27017 arasını açmam gerektiğini söylüyor”: Rehber Kasım 2021'den eskidir. 3.21.30.0 sürümünden bu yana bir Unturned sunucusu yalnızca iki porta ihtiyaç duyar, çünkü Steam sorgusu artık port artı iki üzerinde değildir. Orada ikinci bir örnek çalışmıyorsa 27017'yi kapatın.

“Sunucu çalışıyor, ama artık hiçbir sunucu listesinde yok”: Bu, bir sorgu flood'unun ya da 27015 UDP üzerindeki fazla sıkı kendi kuralınızın tipik görüntüsüdür. iptables -L INPUT -n -v ile kendi kuralınızın eşleşme sayıp saymadığını denetleyin. Sayaçlar hızla artıyorsa şu anda kendi liste kayıtlarınızı filtreliyorsunuz. 27015'i asla tümüyle kapatmayın.

“Bütün oyuncular aynı anda zaman aşımıyla dışarı düşüyor”: Önce bağlantı izlemesinin taşıp taşmadığına bakın (dmesg -T | grep -i conntrack). Tablo doluysa kernel ayrım gözetmeden düşürür. Timeout_Game_Seconds fabrika ayarında 30 saniyededir: Bu süre içinde geri dönen kişi yerini korur.

“Sunucu işletimin ortasında yeniden başlıyor”: Bu nadiren bir saldırıdır. Logda algılanan Workshop güncellemesine ilişkin mesajı denetleyin. Should_Monitor_Updates, fabrika ayarı olan 600 saniyelik süreden sonra sunucuyu kapatır.

“IP adresini değiştirdim ve iki saat sonra yine çevrimdışıydım”: Saldırgan yeni adresi eskisiyle aynı kaynaktan, çoğunlukla bir sunucu listesinden, bir Discord botundan ya da eski bir DNS kaydından aldı. Bir adres değişikliği zaman kazandırır, çözüm değildir.

“Fake IP işlevini açtım ve buna rağmen saldırıya uğruyorum”: Bu işlev adresi yeni oyunculardan saklar, ama sunucudan almaz. Adresi eski bir liste kaydından, bir durum sayfasından ya da önceki bir bağlantıdan bilen kişi sunucunuza doğrudan ulaşmayı sürdürür, üzerindeki SSH ile her web paneline de.

“Ö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

  • Bir Unturned sunucusu tam olarak iki açık UDP portuna ihtiyaç duyar: Commands.dat dosyasında belirlenen Port (fabrika ayarı 27015) ve bu değer artı bir (27016). Oyunun kendisi TCP'ye ihtiyaç duymaz.
  • 27017 portu, 21 Kasım 2021 tarihli 3.21.30.0 sürümünden bu yana gereksizdir, çünkü Steam sorgusu artık port artı iki üzerinde değildir. Onu hâlâ açık tutan kişi eskimiş bir rehberi izliyordur.
  • Unturned'in yerleşik bir RCON portu yoktur. Her uzaktan yönetim bir eklentiden gelir, kendine ait bir TCP portu getirir ve onu kendiniz sınırlamanız gerekir.
  • 27015 sorgu portu en hassas noktadır: Bir sorgu flood'u, tek bir oyuncuya bile dokunmadan sunucuyu sunucu listesinde görünmez kılar ve Steam protokolünün US-CERT TA14-017A'ya göre amplifikasyon faktörü 5,5'tir.
  • Config.json dosyasındaki sınırlar (Max_Packets_Per_Second 50,0, Rate_Limit_Kick_Threshold 40 saniyede 10) yalnızca gerçekten katılan istemcilere karşı etki eder, sahte gönderen adreslerine karşı değil.
  • 1 Gbit/s'lik bir hat saniyede 125 megabaytta dolar, 64 baytlık paketlerde ise saniyede yaklaşık 1,49 milyon pakette. 24 oyuncuyla normal işletim saniyede yaklaşık 1.200 pakettedir. Bunun üzerindeki her şeye sunucunun önündeki ağ karar verir, güvenlik duvarınız değil.
  • KernelHost'ta iki kademeli sürekli koruma her sunucu paketinde ek ücret olmadan dâhildir, teslimden itibaren etkindir ve null routing kullanmaz. Filtreleme kurallarını kendisi yönetmek isteyen kişi, ayda 50,00 EUR'dan başlayan Advanced DDoS Protection'ı buna ekler.

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, 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 Unturned sunucusu için hangi portları açık bırakmam gerekir?
Tam olarak iki UDP portu: Commands.dat dosyasında belirlenen değer ve bu değer artı bir, yani fabrika ayarında 27015 ve 27016. Yalnızca ilki Port 27015 satırı üzerinden belirlenir, ikincisi kendiliğinden türer. Resmî belgelere göre ilk port sunucu listesinin sorgularını, ikincisi oyun trafiğini taşır. Oyunun kendisi için hiçbir TCP portu gerekmez. Aynı makinede birden fazla örnek çalıştırıyorsanız belgeler iki fark bırakmayı önerir, yani 27015, 27017, 27019.
Unturned için 27017 portunu açmam gerekir mi?
Hayır, 21 Kasım 2021 tarihli 3.21.30.0 sürümünden bu yana gerekmiyor. O zamana kadar bir Unturned sunucusu üç porta ihtiyaç duyuyordu, çünkü Steam sorgusu port artı iki üzerindeydi. Bu güncellemeyle sorgu, portu sunucuyla paylaşır ve üçüncü port ortadan kalkmıştır. Buna rağmen çok sayıda router rehberi, hosting firması wiki'si ve forum gönderisi 27017'yi anmayı sürdürüyor. Açık bir 27017 bugün hiçbir avantaj getirmez, salt saldırı yüzeyidir ve orada ikinci bir sunucu örneği çalışmıyorsa kapatılmalıdır.
Unturned sunucum çalışıyor ama artık hiçbir sunucu listesinde yok. Bu bir saldırı mı?
Çoğunlukla evet, hem de 27015 UDP üzerine yapılan bir sorgu flood'u. Sunucu bu port üzerinden A2S_INFO, A2S_PLAYERS ve A2S_RULES Steam sorgularını yanıtlar. Port doldurulduğunda sunucu, zaten bağlı olan oyuncular rahatsız edilmeden oynamayı sürdürürken sunucu tarayıcısından kaybolur. İkinci sık neden, 27015 üzerindeki fazla sıkı kendi güvenlik duvarı kuralınızdır. Kuralınızın eşleşme sayıp saymadığını iptables -L INPUT -n -v ile denetleyin. 27015'i asla tümüyle kapatmayın, yoksa sunucu hiçbir listede bulunamaz.
Unturned'in yerleşik bir RCON portu var mı?
Hayır. Resmî belgeler yalnızca konsol girdisi ile konsol çıktısını tanır; bunlar ICommandInputOutput arayüzü üzerinden kendi uygulamanızla değiştirilebilir. Bu yüzden bir Unturned sunucusundaki her uzaktan yönetim bir eklentiden gelir ve kendine ait bir TCP portu getirir. Kurulumdan sonra ss -lntp ile hangi portun açıldığını denetleyin ve onu kendi adresinize sınırlayın. Parolası zayıf, açık bir uzaktan yönetim portu bir DDoS sorunu değil, bir devralma sorunudur.
Unturned'in Fake IP işlevi DDoS saldırılarına karşı korur mu?
Yalnızca kısmen. Config.json dosyasında Use_FakeIP true ile oyun trafiği Steam Datagram Relay aktarma ağı üzerinden gider ve gerçek adres yeni oyunculara artık gösterilmez. Ama koruma oyun yolunda biter: Sunucunuz gerçek adresini korur, SSH, web paneli ve web sitesi bu adres üzerinden erişilebilir kalır ve adresi eski bir DNS kaydından ya da önceki bir bağlantıdan bilen kişi doğrudan saldırmayı sürdürür. Buna ek olarak adres ve port her yeniden başlatmada değişir, bir alan adı kendi betikleriniz olmadan buna yönlendirilemez.
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. Mantıklı olan, 27015 ile 27016 üzerinde kaynak adres başına hız sınırları ve kernel'in bağlantı izlemesi taşmasın diye iki port için NOTRACK kullanmaktır. Hacimsel saldırılar ise sunucunun önündeki ağda son bulmalıdır.
Unturned sunucum hangi saldırı büyüklüğünden sonra bunu tek başına başaramaz?
Tipik bir oyun sunucusu 1 Gbit/s'lik bir hatta bağlıdır, bu saniyede 125 megabayt eder. Normal işletim çok daha altında kalır: 24 oyuncuda ve fabrika ayarında izin verilen oyuncu ile saniye başına 50 pakette saniyede yaklaşık 1.200 paket gelir. Bant genişliğinden önemlisi paket hızıdır. 64 baytlık paketlerde 1 Gbit/s'lik bir hatta saniyede yaklaşık 1,49 milyon paket sığar, normal bir sunucu kernel'i ise bunların yalnızca birkaç yüz binini işler. Yani bir saldırı, bant genişliği sonuna kadar kullanılmamış olsa bile sizi felç edebilir.
Unturned sunucularına neden bu kadar sık saldırılıyor?
Çünkü adresleri herkese açık, oyun trafiği UDP üzerinden gidiyor ve bir saldırı onu tetikleyen kişiye ne beceri ne de anlamlı bir para götürüyor. Herkese açık biçimde listeli bir sunucu IP adresini ve portunu açık etmek zorundadır, yoksa onu kimse bulamaz: Steam sunucu tarayıcısı doğrudan sorar, üçüncü kişi listeleri ikisini de düz metin olarak taşır. UDP ise talep edilebilecek bir bağlantı kurulumu tanımaz ve gönderen adresleri sahte olabilir. Yani bir saldırganın yük oluşturmak için sunucunuza girmesi de sunucunuza doğru biçimde seslenmesi de gerekmez.
RocketMod ya da OpenMod eklentileri DDoS saldırılarına karşı yardımcı olur mu?
Hayır, durumu daha da kötüleştirebilirler. İki platform da sunucuyla aynı süreçte çalışır. Her sohbet mesajında ya da her oyun olayında bir veritabanı sorgusu tetikleyen bir eklenti, kendi eliyle kurulmuş bir Denial of Service'tir: O zaman tek bir oyuncu, hiç bant genişliği olmadan sunucuyu felç eder. Eklenti listesini kısa tutun ve her eklemeden sonra ölçüm yapın. RocketMod, özgün bakımcılar tarafından 20 Aralık 2019'dan bu yana sürdürülmüyor; önerilen, Smartly Dressed Games'in sürdürdüğü Legally Distinct Missile türevi ya da ardılı OpenMod'dur.
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 sunucunun kayıp olduğu dakikalar 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. Bu, bir Unturned sunucusu için de aynı sunucudaki her başka uygulama için olduğu gibi, hangi portları kullandığınızdan bağımsız olarak geçerlidir.
Unturned sunucum için 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, yani 27015 UDP üzerindeki sorgular ile 27016 UDP üzerindeki oyun trafiği için ayrı ayrı, müşteri panelinde kendiniz yönetirsiniz. 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.

Unturned Unturned DDoS koruması Oyun sunucusu koruması Port 27015 Port 27016 Steam sorgusu RocketMod OpenMod Advanced DDoS Protection