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

Yayınlanma tarihi 19 dk okuma

Terraria'nın neden yalnızca TCP konuştuğu, sunucunun gerçekten hangi portlara ihtiyaç duyduğu, serverconfig.txt, TShock ve 7878'deki REST API'yi nasıl güvene alacağınız ve hangi saldırı büyüklüğünden sonra yalnızca sunucunun önündeki ağda yapılan filtrelemenin işe yaradığı.

Terraria sunucusunu DDoS saldırılarına karşı korumak isteyen kişi özel bir durumla karşı karşıyadır: Terraria yalnızca TCP konuşur. Oyun trafiği tam olarak tek bir port üzerinden, 7777 TCP üzerinden akar ve oyun hiçbir UDP portu açmaz. Ağda oyun sunucusu koruması üzerine dolaşan tavsiyelerin neredeyse tamamı UDP oyunları için yazılmıştır ve burada ya boşa düşer ya da yanlış yere denk gelir.

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 dedicated bir Terraria sunucusu (vanilla, TShock veya tModLoader) 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 (“Kayıt tutma” bölümüne bakın), saldırıdan sonra bu değerler kaybolur.

Neden özellikle Terraria sunucuları DDoS saldırılarına uğrar

Terraria sunucuları rahat bir hedeftir, çünkü adresleri zorunlu olarak herkese açıktır. Vanilla Terraria'nın yerleşik bir sunucu tarayıcısı yoktur: Oyuncular “Multiplayer” ve “Join via IP” üzerinden bağlanır, yani birinin önceden duyurmuş olması gereken bir adres üzerinden. Yeni oyuncu isteyen kişi sunucusunu terraria-servers.com, tserverweb.com veya topg.org gibi liste sayfalarına kaydeder ya da adresi Discord üzerinden dağıtır. Bu yolların her biri saldırgana, oyuncuya verdiğinin aynısını verir: düz metin olarak IP adresi ve port.

Bir Terraria sunucusu, donanımda, dünyada ve mod listesinde hiçbir şey değişmediği hâlde sürekli çevrimdışı oluyorsa, bunun en olası açıklaması bir saldırıdır. Buna bir projenin tipik durumu ekleniyor: sabit oyun saatleri, rakip sunucular, banlanmış oyuncular ve toplulukta kavga. Bir saldırı, onu sipariş edene ne beceri ne de anlamlı bir para harcaması getirir; bir Terraria server booter, ayda birkaç euroya abonelik olarak satılıyor. Bir DDoS saldırısının teknik olarak ne olduğunu ve nasıl kurulduğunu DDoS saldırısı nedir? yazısı anlatıyor.

Terraria TCP üzerinden çalışır, UDP üzerinden değil

Bu, pratikte diğer her oyun sunucusundan en önemli farktır. Dedicated Terraria sunucusu bağlantıları bir TCP dinleyicisiyle kabul eder (oyun motorunda Terraria.Net.Sockets.TcpSocket sınıfı) ve hiçbir UDP soketi açmaz. Bunun, savunmanızın tamamını belirleyen dört sonucu vardır:

  • Tam olarak kurulmuş bir TCP bağlantısının kaynak adresi sahte olamaz. Saldırganın el sıkışmayı tamamlamak için sunucunun SYN-ACK yanıtını alması gerekir. Yani gerçekten bağlı olan kişi gerçek bir adresten gelir. IP yasakları ve bağlantı üst sınırları bu yüzden Terraria'da bir UDP oyununa göre belirgin biçimde daha iyi işler.
  • Bir SYN flood'u ise pekâlâ sahte adreslerle yapılabilir, çünkü el sıkışmayı hiç tamamlamaz. Bu türe karşı hiçbir IP yasağı yardımcı olmaz, yalnızca SYN cookie'leri ve önündeki ağda yapılan filtreleme işe yarar.
  • 7777 portuna kabul edilen her TCP bağlantısı, yalnızca kernel'de değil, oyun sürecinde de kaynak tüketir. Bu da slot tükenmesini, en az bant genişliğiyle yapılan en etkili saldırı hâline getirir.
  • Bir UDP flood'u buna rağmen sunucunuzu vurur. Paketlerin hattınızı doldurması için kabul edilmeleri gerekmez. Terraria'nın UDP konuşmaması hattı korumaz, yalnızca oyun sürecinin paketlerin kendisini işlemesini engeller.

Bir istisna var: Dedicated sunucu -steam ve -lobby friends ya da -lobby private ile başlatıldığında bağlantı Steam ağı üzerinden, yani 27000 ila 27100 aralığındaki UDP portları üzerinden akar. Bu başka bir işletim kipidir ve IP adresi üzerinden erişilen klasik sunucu değildir.

Asıl mesele olan portlar

Bir Terraria sunucusunun açık ağda tam olarak tek bir porta ihtiyacı vardır: 7777 TCP. Bu tablodaki geri kalan her şey ya internete hiç ait değildir ya da yalnızca kendi adresinize aittir.

Ne için Port Protokol Nerede ayarlanır Açık ağa ait mi?
Terraria oyun trafiği 7777 TCP serverconfig.txt: port=7777 evet, tek port olarak
UDP üzerinden Terraria yok yok oyun hiçbir UDP soketi açmaz hayır
Sorgu ve durum portu yok yok Vanilla Terraria'nın kendine ait bir sorgu protokolü yoktur hayır
RCON yok yok Terraria'da RCON yoktur, uzaktan yönetim yalnızca TShock üzerinden hayır
TShock REST API 7878 TCP tshock/config.json: RestApiPort hayır
tModLoader sunucusu 7777 TCP aynı serverconfig.txt evet, tek port olarak
Steam kipi (-steam -lobby) 27000 ila 27100 UDP yalnızca Steam işletim kipinde hayır
Pterodactyl Wings 8080 TCP panel arka plan süreci hayır, yalnızca kendi adresiniz
Pterodactyl SFTP 2022 TCP panel SFTP hayır, yalnızca kendi adresiniz
SSH 22 TCP /etc/ssh/sshd_config yalnızca kendi adresiniz

Terraria'nın ne bir sorgu portu ne de RCON tanıması, güvene alma açısından iyi bir haberdir: Counter-Strike, Rust veya ARK'ta yansıtma saldırıları için düzenli olarak kötüye kullanılan iki uç nokta burada basitçe yoktur. Karşılığında saldırı yüzeyi 7777 portunda o kadar daha yoğunlaşır ve TShock kullanan kişi 7878 portuyla kendisine ikinci bir yüzey ekler.

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 Terraria 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: aslında 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:7777 “bütün internetten erişilebilir” anlamına gelir, 127.0.0.1:7878 ise “yalnızca yerel” demektir ve güvenlik duvarı kuralına ihtiyaç duymaz. Bu listede Terraria süreciniz için bir UDP kaydı görünüyorsa sunucu Steam kipinde çalışıyordur. Saldırganın bakışını, dışarıdan yapılan bir port taraması verir:

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

2. Yalnızca 7777 TCP'yi açık bırakma, geri kalan her şeyi kapatma

Terraria için dışarıya tek bir izin yeter. Bir UDP kuralına ihtiyacınız yoktur ve 7777 için bir UDP kuralı basitçe yanlış olur: Hiçbir şeyin dinlemediği bir porta trafik geçirir. 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 7777/tcp comment 'Terraria'
ufw allow from 203.0.113.10 to any port 7878 proto tcp comment 'TShock REST'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

203.0.113.10 adresini kendi adresinizle değiştirin. Kurtarma yolu da dâhil tam rehberi Kendinizi dışarıda bırakmadan UFW güvenlik duvarı kurma yazısında bulabilirsiniz. Bir panel işleten kişi 8080 ve 2022 portlarını da kendi adresine sınırlar.

3. serverconfig.txt: parolayı, maxplayers ve secure değerlerini doğru ayarlama

Terraria sunucusunun merkezî yapılandırma dosyasının adı serverconfig.txt olup başlatmada -config serverconfig.txt ile verilir. Güvene alma için dört direktif belirleyicidir:

port=7777
maxplayers=16
password=UzunRastgeleBirParola
secure=1
upnp=0
banlist=banlist.txt

password=, normal yolu izleyen katılım flood'larına karşı en etkili ücretsiz önlemdir. Nedeni protokolde yatar: Bir istemci önce sürüm kimliğiyle (örneğin Terraria279) 1 numaralı mesajı gönderir, parola ayarlanmışsa sunucu 37 numaralı mesajla yanıt verir, istemcinin 38 numaralı mesajla doğru biçimde yanıtlaması gerekir ve ancak bundan sonra sunucu 3 numaralı mesajla oyuncu slotu dâhil izni gönderir. Doğru parola olmadan bir saldırgan, bir katılımın pahalı kısmı olan dünya aktarımına asla ulaşamaz.

maxplayers 1 ila 255 arasındaki değerleri alır, fabrika ayarı 16'dır (1.4.0.1 sürümünden önce 8'di). 255 üst sınırı keyfî bir sayı değildir: Terraria oyuncuları tek bir baytla adresler. maxplayers değerini gerçekten ihtiyacınız olandan yüksek ayarlamayın, çünkü her slot bir saldırganın işgal edebileceği bir kaynaktır. secure=1 yerleşik hile denetimini açar (komut satırında -secure), upnp=0 ise sunucunun bir yönlendiricide kendi başına port açmasını engeller.

4. TShock'u güvene alma: 7878'deki REST API ve giriş flood'u

TShock, Terraria için en yaygın sunucu eklentisidir ve REST API ile birlikte ikinci, tam yetkin bir saldırı yüzeyi getirir. Fabrika ayarında 7878 TCP portunda durur ve serverconfig.txt dosyasında değil, tshock/config.json dosyasında yapılandırılır. Teslim durumunda kapalıdır ("RestApiEnabled": false) ve ihtiyaç duymadığınız sürece tam olarak öyle kalmalıdır.

İhtiyaç duyarsanız şu değerler önemlidir:

"RestApiEnabled": true,
"RestApiPort": 7878,
"EnableTokenEndpointAuthentication": true,
"LogRest": true,
"RESTMaximumRequestsPerInterval": 5,
"RESTRequestBucketDecreaseIntervalMinutes": 1

Bunda iki şey önemlidir. Birincisi, EnableTokenEndpointAuthentication değeri false olduğu sürece /status uç noktası token olmadan sunucu adını, portu, oyuncu sayısını ve oyuncu adlarını verir. Bu, durum sayfaları ve Discord botları için rahattır ve aynı zamanda bir saldırının ne zaman değeceğini bilmek isteyen her saldırgan için ücretsiz bir keşiftir. İkincisi, /v2/token/create uç noktası kullanıcı adı ve paroladan bir erişim token'ı üretir ve 7878 portu açık olduğu anda dışarıdan erişilebilir: yönetici hesabınıza karşı, bu arada işlem zamanı da tüketen bir parola deneme saldırısı. RESTMaximumRequestsPerInterval ve RESTRequestBucketDecreaseIntervalMinutes değerlerinden oluşan kova bunu yavaşlatır, ama bir güvenlik duvarı kuralının yerini tutmaz.

Oyuna erişimin kendisi için başka TShock değerleri geçerlidir. MaximumLoginAttempts 3'tedir ve üç başarısız denemeden sonra bir oyuncuyu dışarı atar. RequireLogin (standart false) her oyuncu için bir hesap şart koşar. EnableIPBans (standart true) ve KickProxyUsers (standart true) bir TCP oyununda özellikle etkilidir, çünkü kurulmuş bir bağlantının kaynak adresi sahte olamaz. Sıkça saldırı olarak bildirilen griefing'e karşı ise TileKillThreshold (60), TilePlaceThreshold (20), TileLiquidThreshold (15) ve ProjectileThreshold (50) eşik değerleri işe yarar; her biri saniyedeki eylem sayısıdır.

Terraria TCP üzerinde çalıştığı için en etkili yerel kural, kaynak adres başına eşzamanlı bağlantılar için bir üst sınırdır. Gerçek bir oyuncuya tam olarak bir tanesi yeter:

iptables -I INPUT -p tcp --dport 7777 --syn -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP
iptables -I INPUT -p tcp --dport 7777 --syn -m hashlimit --hashlimit-name terraria_syn --hashlimit-mode srcip --hashlimit-above 10/min --hashlimit-burst 20 -j DROP

İlk kural, bir adres eşzamanlı olarak üçten fazla bağlantı açık tuttuğu anda yeni bağlantıları düşürür. İkincisi aynı kaynaktan gelen bağlantı denemelerinin hızını, 20'lik bir esneme payıyla dakikada ona sınırlar. İki sayı da başlangıç değeridir, kesin doğrular değil: Ortak bir bağlantının arkasındaki durumlarda (ev arkadaşlığı, okul ağı, mobil operatör) sunucu aynı adres altında birden fazla meşru oyuncu görür. Önce normal işletimde bir hafta ölçün.

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. El sıkışmayı hiç tamamlamayan sahte SYN paketlerine karşı bu kuralların hiçbiri yardımcı olmaz, kernel'in kendisi yardımcı olur. Şu üç değeri denetleyin:

sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog net.core.somaxconn

net.ipv4.tcp_syncookies 1 olmalıdır; Debian ve Ubuntu'da kural olarak zaten öyledir. SYN cookie'leri yarı açık bağlantıların kuyruğundan vazgeçer ve durumu istemcinin yanıtından yeniden kurar; böylece hat dolu olmadığı sürece bir SYN flood'u boşa düşer. net.core.somaxconn Linux 5.4'ten bu yana 4096, öncesinde ise 128'dedir: Değer küçükse kernel, tamamen kurulmuş bağlantıları oyun süreci onları kabul edemeden düşürür.

6. Slot tükenmesini önleme: bir port taraması sunucunuzu neden doldurur

Slot tükenmesi, bir Terraria sunucusuna yapılan en ucuz etkili saldırıdır: Saldırgan, sunucunun oyuncu slotu sayısı kadar TCP bağlantısını 7777 portuna açar ve bunları açık tutar. Bu ona neredeyse hiç bant genişliğine mal olmaz, ama sunucuyu doldurur. Gerçek oyuncular “Server is full” görür ve hattınızda dikkat çekici hiçbir şey olmadığı hâlde artık içeri giremez. İşletmecilerin Terraria'da saldırıya uğradıklarını sıkça fark etmemelerinin nedeni tam olarak budur.

Nedeni sayma biçiminde yatar: Bir bağlantı, istemci sürüm kimliğini hiç göndermeden önce kabul edilir. Geçmişte bu tür hayalet bağlantılar, TCP oturumu zaman aşımına uğrayana kadar dolu kalıyordu. 1.4.5 serisi bunu hafifletti; orada hemen tekrar bağlantısını kesen istemciler için artık slot ayrılmıyor. Ancak 1.4.5.7 ve 1.4.5.8'in ilk sürümlerinde, bir TCP bağlantısı açılıp el sıkışma tamamlanmadığı anda dedicated sunucu, ele alınmamış bir ObjectDisposedException ile çöküyordu. Bunun için bir nc -z ya da bir izleme sisteminin erişilebilirlik denetimi yetiyordu. Hata birkaç hafta içinde sessizce giderildi, eski konteyner imajlarında kısmen hâlâ duruyor. Bu yüzden sunucu sürümünüzü güncel tutun; bu burada bir genel geçer söz değil, somut bir erişilebilirlik sorusudur.

İki ayar ek olarak yardımcı olur. TShock kullanan kişi MaxSlots değerini istediği oyuncu sayısına, serverconfig.txt dosyasındaki maxplayers değerini ise iki yer daha yükseğe ayarlar: O zaman TShock, oyun süreci fazla bağlantıları son boşluğa almak yerine onları düzgün bir mesajla düşürür. Önceki bölümdeki bağlantı üst sınırı ise tam olarak, tek bir adresin bütün slotları bir defada işgal etmesini engelleyen kuraldır.

7. UPnP'yi kapatma ve adresi kendiniz yayınlamama

Terraria sunucusu fabrika ayarında portunu UPnP ile bir yönlendiricide açmayı dener. Kiralanmış bir sunucuda bu etkisizdir, bir ev ağında ise daha sonra haberiniz olmayacak portlar açar. Bunu serverconfig.txt dosyasında upnp=0 ile ya da komut satırında -noupnp ile kapatın.

Burada ayrıca hüsnükuruntu yerine dürüstlük işe yarar: IP adresiniz gizli tutulamaz. Bir kez bağlanmış olan her oyuncu onu bilir ve bir liste sayfasındaki kayıt onu zaten yayınlar. Etkili olan iki alışkanlıktır. Çıplak IP adresini hiçbir yerde kendiniz yayınlamayın, oyuncularınızı bir hostname üzerinden bağlayın: Terraria istemcisi bir hostname'i çözer, yani ciddi durumda bütün bağlantı yolları kopmadan adresi değiştirebilirsiniz. Ve eski DNS kayıtlarını temizleyin, çünkü önceki adrese işaret eden, unutulmuş bir A kaydı her değişikliği etkisiz kılar.

8. Durum sorgularını geçirmek yerine önbelleğe alma

Terraria'nın bir sorgu protokolü olmadığı için durum sayfaları, Discord botları ve liste sayfaları sunucunuzun durumunu iki yoldan biriyle belirler: 7777 portuna gerçek bir TCP bağlantısı kurup kendilerini istemci olarak tanıtırlar ya da TShock REST API'yi sorgularlar. İkisi de sunucunuza iş yükler ve ikisi de sorgulayanların sayısıyla birlikte büyür.

Karşı önlem hiçbir şeye mal olmaz: Sorguyu asla ziyaretçinin tarafından yapmayın. Tek bir hizmetin durumu sabit aralıklarla almasını sağlayın (30 ya da 60 saniye yeter), sonucu önbelleğe alın ve bütün ziyaretçilere önbellekteki durumu sunun. Böylece çok ziyaret edilen bir durum sayfası, ziyaretçi başına bir sorgu yerine aralık başına bir sorgu üretir. Bunun için REST API'yi kullanan kişi 7878 portunu bu tek hizmetin adresine sınırlar.

9. Kayıt tutma, böylece ciddi durumda 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 cumartesi 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 beş komut yeter:

sar -n DEV 1 10
ss -s
ss -tn state syn-recv | wc -l
ip -s link show eth0
tcpdump -ni eth0 tcp port 7777 -c 200 -q

Üçüncü komut Terraria'ya özgü olandır: Yarı açık bağlantıları sayar. İki basamaklı bir değer normaldir, dört ya da beş basamaklı olan bir SYN flood'udur. ss -s bunun yanında TCP bağlantılarının toplam sayısını gösterir ve oyunda kimse yokken bu sayı yaklaşık olarak maxplayers değerinize denk geliyorsa bir slot tükenmesi görüyorsunuz. 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 değerlendireceğiniz 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. 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. Bu büyüklükteki oyun sunucusu projelerine yapılan saldırılar genellikle 5 ila 50 Gbit/s arasındadır, yani hattınızın beş ila elli katı. O durumda connlimit kuralınızın arkada iyi olup olmaması artık bir rol oynamaz, çünkü oyuncularınızın paketleri daha öncesinde geçemez. Terraria sunucusunda CPU kullanımının normal göründüğü lag sıçramaları tam olarak böyle oluşur.

İkinci büyüklük paket hızıdır ve sıkça 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 düşürmeye başlar. Bir SYN flood'unda sınır daha da aşağıdadır, çünkü her SYN paketi bir durum kararı tetikler: Standart bir Linux'un bağlantı kabulünü felce uğratmak için, hat dolmadan çok önce saniyede birkaç on bin SYN paketi bile yeter. İşletmeciler bunu “doluluk hiç de yüksek değildi, buna rağmen her şey gitti” biçiminde yaşar.

Üçüncü nokta ise Terraria'da en sık gözden kaçandır: Bir saldırgan sizin protokolünüze göre davranmaz. Hiçbir UDP portunda bir şey dinlemediği hâlde adresinize UDP flood'ları ve yansıtma trafiği gönderir. Sunucunuz bu paketleri doğru biçimde düşürür, ama paketler hattınızı çoktan doldurmuştur ve tek bir paket bile oyun sürecine ulaşmadan Terraria sunucunuz çevrimdışı olur. Gerçekte hangi büyüklüklerin görüldüğünü sınıflandırmak için: KernelHost sunucularında başka şeylerin yanı sıra saniyede 41,5 milyondan fazla pakette 473,4 Gbit/s'nin üzerinde bir saldırı ve bir oyun sunucusuna 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. Terraria için bu somut olarak şu anlama gelir: 7777 TCP'ye yönelen SYN flood'ları ve bağlantı flood'ları burada son bulur, ağ kartınızda değil.

İ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ı 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 7777 TCP'de neye izin verildiğini ayarlarsınız ve bunun için bir talep yazmak zorunda kalmadan geri kalan her şeyi kapatabilirsiniz.
  • Değişiklikler gerçek zamanlı etki eder, yani süren bir saldırı sırasında ince ayar yapabilirsiniz, örneğin kaynak adres başına izin verilen bağlantı hızını daha sıkı çekebilirsiniz.
  • Uygulamaya uygun koruma profili. Terraria gibi TCP oyunları ve herhangi bir TCP ya da UDP portunda çalışan kendi ya da değiştirilmiş uygulamalarınız için uygun profiller var.

İ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
Terraria için profil TCP oyun sunucuları için otomatik profil 7777 TCP için kendi kural setiniz, tModLoader ve TShock 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

Terraria 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. Sunucusunu şu anda başka bir yerde işleten kişi bu korumayı sonradan ekleyemez, ancak KernelHost'a taşınarak elde eder: Filtreleme ağın bir parçasıdır, sunucudaki bir ek değil.

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

“Sunucu dolu, ama içinde kimse yok”: Bu bir slot tükenmesidir. ss -tn dst :7777 | wc -l ile gerçekte kaç bağlantının açık olduğunu denetleyin ve bunu oyuncu listesiyle karşılaştırın (sunucu konsolu: playing). Sayılar uyuşmuyorsa slotları yabancı bağlantılar işgal ediyordur. Karşı ilaçlar, kaynak adres başına bağlantı üst sınırı, bir sunucu parolası ve güncel bir sunucu sürümüdür.

“7777 UDP'yi açtım ve hiçbir şey değişmiyor”: Doğru, çünkü 7777 UDP'de hiçbir şey dinlemiyor. Terraria yalnızca TCP kullanır. UDP izni doğrudan zarar vermez, ama gereksiz bir açıklıktır ve başka bir oyun için yazılmış bir rehberin kopyalandığının kesin işaretidir.

“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ı denetleyin. Sayaçlar sıfırda kalıyorsa kurala ulaşılmıyor.

“Hiçbir saldırı yokken oyuncular dışarı atılıyor”: connlimit sınırınızı fazla sıkı çekerseniz bu, ortak bağlantıların arkasındaki oyuncuları vurur. TCP'de bu, UDP oyunlarına göre daha çabuk olur, çünkü bir kesintiden sonra yeniden bağlanma hemen yeni bir bağlantı üretirken eski bağlantı hâlâ TIME_WAIT durumunda bekler. Değeri kademeli olarak yükseltin ve eşleşme sayaçlarını izleyin.

“Sunucu takılıyor, hat sakin”: Bunun nedeni bir saldırıdan çok bir mod ya da bir eklentidir. tModLoader altında her ek mod aynı süreçte işlem zamanı tüketir ve çok varlık içeren bir dünya, fazladan tek bir paket gelmeden bir çekirdeği tamamen doldurur. sar -n DEV 1 10 dikkat çekici bir şey göstermiyorsa bu bir DDoS saldırısı değildi.

“Ö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 Terraria sunucusunun tam olarak tek bir açık porta ihtiyacı vardır: 7777 TCP. Oyun hiçbir UDP soketi açmaz, bir sorgu protokolü ve RCON'u yoktur.
  • 7878 TCP portundaki TShock REST API ikinci saldırı yüzeyidir. RestApiEnabled değerini false bırakın ya da portu kendi adresinize sınırlayın.
  • serverconfig.txt dosyasındaki bir sunucu parolası en etkili ücretsiz önlemdir, çünkü 37 numaralı mesaja doğru yanıt vermeyen bir saldırgan dünya aktarımına asla ulaşamaz.
  • Terraria'da en ucuz saldırı slot tükenmesidir: 7777 portuna kabul edilen her TCP bağlantısı, anlamlı bir bant genişliği olmadan bir yer işgal eder. Buna karşı kaynak adres başına bir üst sınır, bir parola ve güncel bir sunucu sürümü işe yarar.
  • Terraria TCP kullandığı için kurulmuş bir bağlantının kaynak adresi sahte olamaz: IP yasakları burada UDP oyunlarına göre daha iyi işler. Sahte SYN flood'larına karşı ise yalnızca SYN cookie'leri ve önündeki ağda yapılan filtreleme yardımcı olur.
  • Bir UDP flood'u, Terraria sunucunuz UDP konuşmadığı hâlde onu felce uğratır, çünkü oyun süreci herhangi bir şey görmeden hattı doldurur.
  • Yaklaşık olarak uplink bant genişliğinizin büyüklüğünden sonra yalnızca sunucunun önündeki ağ belirleyicidir. KernelHost'ta bu filtreleme iki kademelidir, kalıcı olarak etkindir ve her sunucu paketinde ek ücret olmadan bulunur.

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 Terraria sunucusu hangi porta ve hangi protokole ihtiyaç duyar?
Bir Terraria sunucusu tam olarak tek bir porta ihtiyaç duyar: 7777 TCP. Bu fabrika ayarıdır ve serverconfig.txt dosyasında port=7777 olarak durur. Oyun bir UDP portu açmaz, kendine ait bir sorgu portu ve RCON da yoktur. TShock kullananlarda buna ek olarak 7878 TCP portundaki REST API bulunur, teslim durumunda ise kapalıdır. 7777 için bir UDP izni gereksizdir ve başka bir oyun için yazılmış bir rehberin kopyalandığının kesin işaretidir. tModLoader, vanilla sunucuyla aynı portları kullanır.
Terraria'nın UDP yerine TCP kullanması neden önemlidir?
Çünkü bu, etkili karşı önlemleri tersine çevirir. Tam olarak kurulmuş bir TCP bağlantısının kaynak adresi sahte olamaz, çünkü saldırganın sunucunun SYN-ACK yanıtını alması gerekir. IP yasakları ve kaynak adres başına bağlantı üst sınırları bu yüzden Terraria'da bir UDP oyununa göre belirgin biçimde daha iyi işler. Bir SYN flood'u ise pekâlâ sahte adreslerle yapılabilir, çünkü el sıkışmayı hiç tamamlamaz: Buna karşı yalnızca kernel'deki SYN cookie'leri ve sunucunun önündeki ağda yapılan filtreleme yardımcı olur.
Terraria sunucum kimse oynamadığı hâlde Server is full bildiriyor. Bu nedir?
Bu bir slot tükenmesidir, bir Terraria sunucusuna yapılan en ucuz etkili saldırı. Saldırgan, sunucunun oyuncu slotu sayısı kadar TCP bağlantısını 7777 portuna açar ve bunları açık tutar. Bu neredeyse hiç bant genişliğine mal olmaz, ama bütün yerleri doldurur. ss -tn dst :7777 | wc -l ile açık bağlantıların sayısını denetleyin ve bunu sunucu konsolu ile playing komutunun verdiği listeyle karşılaştırın. Karşı ilaçlar, kaynak adres başına bir bağlantı üst sınırı, bir sunucu parolası ve güncel bir sunucu sürümüdür.
Bir sunucu parolası saldırılara karşı işe yarar mı?
Katılım flood'larına karşı evet, hacimsel saldırılara karşı hayır. Nedeni protokolde yatar: Bir istemci önce sürüm kimliğiyle 1 numaralı mesajı gönderir, parola ayarlanmışsa sunucu 37 numaralı mesajla yanıt verir, istemcinin 38 numaralı mesajla doğru biçimde yanıtlaması gerekir ve ancak bundan sonra 3 numaralı mesajla oyuncu slotu dâhil izin gelir. Doğru parola olmadan bir saldırgan, bir katılımın pahalı kısmı olan dünya aktarımına asla ulaşamaz. Parola serverconfig.txt dosyasında password= ile ya da komut satırında -password ile ayarlanır.
7878 portundaki TShock REST API'yi nasıl güvene alırım?
En güvenlisi, onu hiç açmamaktır: tshock/config.json dosyasında RestApiEnabled, teslim durumunda false değerindedir. İhtiyaç duyarsanız EnableTokenEndpointAuthentication değerini true yapın, çünkü aksi hâlde /status uç noktası token olmadan sunucu adını, portu, oyuncu sayısını ve oyuncu adlarını verir. LogRest değerini açın, bir dakikalık bir aralıkta RESTMaximumRequestsPerInterval değerini 5'te bırakın ve güvenlik duvarında 7878 portunu kendi adresinize sınırlayın.
maxplayers değerine kaç oyuncu yazmalıyım?
Gerçekten ihtiyacınız olduğu kadar, çünkü her slot bir saldırganın işgal edebileceği bir kaynaktır. maxplayers 1 ila 255 arasındaki değerleri alır, fabrika ayarı 16'dır, 1.4.0.1 sürümünden önce 8'di. 255 üst sınırı, Terraria'nın oyuncuları tek bir baytla adreslemesinden gelir. TShock kullanan kişi MaxSlots değerini istediği oyuncu sayısına, serverconfig.txt dosyasındaki maxplayers değerini ise iki yer daha yükseğe ayarlar, böylece TShock fazla bağlantıları düzgün bir mesajla geri çevirir.
Bir DDoS saldırısına iptables veya UFW ile karşı koyabilir miyim?
Küçük saldırılara ve bağlantı flood'larına 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. Terraria'da 7777 TCP için bir connlimit kuralı buna rağmen değerlidir, çünkü slot tükenmesini etkili biçimde önler. Hacimsel saldırılar ise sunucunun önündeki ağda son bulmalıdır.
Terraria 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. Bu büyüklükteki projelere yapılan saldırılar genellikle 5 ila 50 Gbit/s arasındadır. Aynı ölçüde önemli olan paket hızıdır: 1 Gbit/s'e 64 baytlık paketlerde 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. Bir SYN flood'unda sınır daha da aşağıdadır, çünkü her SYN paketi bir durum kararı tetikler. Yani bant genişliği sonuna kadar kullanılmadığı hâlde bir saldırı sizi felce uğratabilir.
Terraria hiç UDP kullanmadığı hâlde bir UDP saldırısı beni neden vurur?
Çünkü bir saldırgan sizin protokolünüze göre davranmaz. Orada hiçbir UDP hizmeti dinlemediği hâlde IP adresinize UDP flood'ları ve yansıtma trafiği gönderir. Sunucunuz bu paketleri doğru biçimde düşürür, ama paketler hattınızı çoktan doldurmuştur ve tek bir paket bile oyun sürecine ulaşmadan Terraria sunucunuz çevrimdışı olur. Yani Terraria'nın UDP konuşmaması yalnızca uygulamayı korur, hattı korumaz. Buna karşı yalnızca sunucunun önündeki ağda yapılan filtreleme yardımcı olur.
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. Terraria için bu somut olarak şu anlama gelir: 7777 TCP'ye yönelen SYN flood'ları ve bağlantı flood'ları orada son bulur, ağ kartınızda değil.
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. Terraria sunucusunu şu anda başka bir yerde işleten kişi bu korumayı sonradan ekleyemez, çünkü filtreleme ağın bir parçasıdır ve sunucudaki bir ek değildir. Bu durumda öneri KernelHost'a taşınmaktır.
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: 7777 TCP'de neye izin verildiğini ayarlarsınız ve geri kalan her şeyi kapatabilirsiniz. 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.

Terraria Terraria DDoS koruması TShock tModLoader Oyun sunucusu koruması Port 7777 Port 7878 Advanced DDoS Protection