Unturned-szerver védelme DDoS-támadások ellen

Közzétéve 21 perc olvasás

Mely portokra van valóban szüksége egy Unturned-szervernek, miért felesleges a 27017 2021 óta, hogyan korlátozza a lekérdezési áradatot, a csatlakozási áradatot és a bővítmények terhelését, és mekkora támadásméret fölött segít már csak az előtte lévő hálózatban végzett szűrés.

Annak az Unturned-szervernek, amely este néhány percre eltűnik a szerverlistából, és közben minden játékost időtúllépéssel kidob, ritkán van hardveres problémája. Többnyire támadás fut, méghozzá pontosan akkor, amikor a legnagyobb a forgalom. Ez a cikk először azt mutatja meg, mit tud Ön többletköltség nélkül saját maga bebiztosítani, utána azt, hol érnek véget ezek az intézkedések műszakilag, végül azt, minek kell utána a szerver előtti hálózatban történnie.

Minden adat az Unturned Dedicated Serverre vonatkozik (U3DS, SteamCMD app-azonosító 1110390) Debian 12, Debian 13, Ubuntu 22.04 LTS vagy Ubuntu 24.04 LTS alatt. A parancsok root felhasználóra vannak írva, normál felhasználóként tegye eléjük a sudo parancsot. Ha a támadás éppen fut, először ne változtasson semmit a konfiguráción, és ne indítsa újra a szervert: mentse el a mérési értékeket (10. szakasz), a támadás után már nem lesznek meg.

Miért éppen az Unturned-szervereket támadják

Az Unturned-szervereket azért támadják, mert a címük nyilvános, a játékforgalom UDP-n fut, és egy támadás a kiváltójának sem tudást, sem érdemi pénzt nem kerül. Mindhárom pont erősebben érvényes itt, mint a legtöbb más játék esetében.

Egy nyilvános Unturned-szerver saját magától teszi közzé az IP-címét. Meg is kell tennie, különben senki nem találná meg: a Steam-szerverböngésző közvetlenül kérdezi le, a harmadik felek listái pedig, mint az unturned-servers.net vagy a BattleMetrics, nyílt szövegben tüntetik fel az IP-címet és a portot. Az unturned-servers.net saját közlése szerint ehhez ötpercenként megvizsgálja, hogy a szerver fogad-e UDP-kapcsolatokat a szerverporton. A támadónak ez nem ráfordítás, hanem egy űrlap.

Ehhez jön a játékosbázis. Az Unturned ingyenes, a belépési küszöb nulla, a roleplay- és a survival-projektek között pedig valódi verseny van ugyanazokért a játékosokért. Egy kitiltott játékosnak, egy megbántott ex-adminnak vagy egy szomszédos projektnek nincs szüksége hozzáférésre a szerveréhez ahhoz, hogy egy órára használhatatlanná tegye. Hogy egy DDoS-támadás műszakilag mi, és miért olyan nehezen visszakövethető a hamisított feladócímek miatt, azt a Mi az a DDoS-támadás? cikk írja le.

A portok, amelyekről valójában szó van

Egy Unturned-szerver pontosan két egymást követő UDP-portot foglal el: a Commands.dat fájlban beállított értéket és ezt az értéket plusz egyet. Alapértelmezés szerint ez a 27015 és a 27016. A Smartly Dressed Games hivatalos dokumentációja így írja le a felosztást: az első port viszi a szerverlista lekérdezéseit, a második a játékforgalmat. Csak az elsőt kell beállítani, a második automatikusan adódik.

Name Az én Unturned szerverem
Port 27015
MaxPlayers 24
Map PEI
Mode Normal
Perspective Both
Owner 76561198000000000

A Commands.dat a U3DS/Servers/<példány>/Server/Commands.dat útvonalon található. A formátuma egyedi és gyakori hibaforrás: egy parancs soronként, egyenlőségjel nélkül, az értéket egy szóköz választja el, és a parancsok érzékenyek a kis- és nagybetűkre. A // jellel kezdődő sorok megjegyzések.

A tűzfal szempontjából a legfontosabb pont így hangzik: a 27017-es portra a 2021. november 21-én kiadott 3.21.30.0 verzió óta nincs többé szükség. Azelőtt egy Unturned-szerver három portot igényelt, mert a Steam-lekérdezés a port plusz kettőn ült. Ezzel a frissítéssel a lekérdezés magával a szerverrel osztozik a porton, és a harmadik port megszűnt. A router-útmutatók, a szolgáltatói wikik és a fórumbejegyzések ennek ellenére máig a 27017-et említik. Egy nyitott 27017 már semmilyen előnyt nem jelent Önnek, csupán támadási felület.

Szintén fontos: az Unturnednek nincs beépített RCON-portja. A hivatalos dokumentáció csak konzolbemenetet és konzolkimenetet ismer, amelyek az ICommandInputOutput felületen keresztül lecserélhetők. Minden távvezérlés, amelyet egy Unturned-szerveren lát, egy bővítményből származik, és saját TCP-portot hoz magával. Ezt a portot Önnek magának kell megtalálnia és magának kell korlátoznia, mert senki nem biztosította be Ön helyett.

Jellemző Érték (alapértelmezés) Protokoll Hol állítható be
Lekérdezőport (Steam A2S, szerverlista) 27015 UDP Port a Commands.dat fájlban
Játékport 27016 (port plusz egy) UDP külön nem állítható be
A harmadik port, a 27017 megszűnt a 3.21.30.0 verzióval (2021.11.21.) egyik sem bezárni
Második szerver ugyanazon a gépen 27017, a harmadik 27019 UDP Port, kettes lépésköz
RCON nincs beépített port TCP csak bővítményen keresztül a bővítmény konfigurációja
Kötési cím minden interfész egyik sem Bind a Commands.dat fájlban
Csomagok játékosonként és másodpercenként 50,0 UDP Max_Packets_Per_Second
Megengedett legnagyobb ping 750 ms egyik sem Max_Ping_Milliseconds
Csatlakozási arány időablakonként 10 kísérlet 40,0 másodperc alatt egyik sem Rate_Limit_Kick_Threshold
Várakozási sor 8 hely, legfeljebb 64 egyik sem Queue_Size a Commands.dat fájlban
Csalásellenes rendszer VAC és BattlEye, mindkettő aktív egyik sem VAC_Secure, BattlEye_Secure
A Steam-lekérdezés erősítési tényezője 5,5 (US-CERT TA14-017A) UDP protokolltulajdonság
Normál bejövő csomagsebesség 24 játékos mellett körülbelül 1200 csomag másodpercenként UDP 24-szer 50
Egy 1 Gbit/s-os vonal telítése 125 MB/s, 64 bájt mellett körülbelül 1,49 millió csomag másodpercenként egyik sem a vonal fizikája
A KernelHost szerverein kiszűrt támadások 473,4 Gbit/s másodpercenként 41,5 millió csomaggal; 112,2 Gbit/s UDP-flood UDP üzemi mérési értékek

Amit saját maga megtehet, mielőtt pénzt költene

Ez a szakasz a leghosszabb, és ez szándékos. Egy tisztán konfigurált Unturned-szerver a kis és közepes támadásokat saját erőből kibírja, függetlenül attól, hol áll.

1. Leltár: mi figyel valójában

Mielőtt egyetlen szabályt is írna, nézze meg, mit kínál a szervere kifelé. Ne találgasson, nézzen utána:

ss -lnup
ss -lntp

Az első parancs a figyelő UDP-socketeket mutatja, a második a TCP-socketeket. Az érdekes oszlop a helyi cím. A 0.0.0.0:27015 és a [::]:27015 azt jelenti, hogy „az egész internetről elérhető”, a 127.0.0.1:3306 azt, hogy „csak helyben”, és nem igényel tűzfalszabályt. A játék mellett gyakran ott van egy RCON-bővítmény, egy webpanel, egy adatbázis és egy régi tesztszerver a 27017-en, amelyet már senki nem használ. A támadó nézőpontját egy kívülről indított portszkennelés adja, az Unturned esetében kifejezetten UDP-re is:

nmap -Pn -sU -p 27000-27050 A.SZERVERE.IP.CÍME
nmap -Pn -p- --min-rate 1000 A.SZERVERE.IP.CÍME

2. Csak a 27015-öt és a 27016-ot hagyja nyitva

Az Unturnedhez két kifelé irányuló UDP-engedélyezés elegendő. Magához a játékhoz egyetlen TCP-portra sincs szükség: a hivatalos dokumentáció mindkét portra kifejezetten UDP-t követel meg, a játék hálózati rétege (Steam Networking Sockets, egy frissítés óta az alapértelmezés) pedig kizárólag UDP-n dolgozik. Aki ezen felül TCP-t is engedélyez, elavult útmutatót követ.

ufw allow 22/tcp comment 'SSH'
ufw allow 27015/udp comment 'Unturned lekérdezés'
ufw allow 27016/udp comment 'Unturned játék'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

A sorrend fontos, különben kizárja saját magát. A teljes útmutató a mentőúttal együtt az UFW-tűzfal beállítása anélkül, hogy kizárná magát cikkben olvasható. Ha több példányt üzemeltet, tartsa be a javasolt kettes lépésközt (27015, 27017, 27019), és példányonként pontosan azt a két portot engedélyezze, amelyet az valóban elfoglal.

Egy webpanel, egy adatbázis vagy egy RCON-bővítmény nem való a nyílt hálózatba. Korlátozza az adott portot a saját címére az ufw allow from 203.0.113.10 to any port 8080 proto tcp paranccsal, vagy érje el a felületet helyi SSH-porttovábbításon keresztül az ssh -N -L 8080:127.0.0.1:8080 root@A.SZERVERE.IP.CÍME paranccsal. Az adatbázist a 127.0.0.1 címhez kell kötni.

3. A lekérdezőport bebiztosítása anélkül, hogy kiesne a szerverlistából

A lekérdezőport egy Unturned-szerver legérzékenyebb pontja. Ezen keresztül válaszolja meg a szerver az A2S_INFO, az A2S_PLAYERS és az A2S_RULES Steam-lekérdezést. Ha teljesen letiltja, a szerver eltűnik minden szerverlistáról, akkor is, ha egyébként hibátlanul fut.

Egy A2S-válasz lényegesen nagyobb a kérésnél. Az US-CERT az UDP-erősítéses támadásokról szóló áttekintésében (TA14-017A) 5,5-es sávszélesség-erősítési tényezővel vezeti a Steam-protokollt. Konkrétan ez azt jelenti: a támadó hamisított feladócímmel küld lekérdezéseket idegen játékszerverekre, és a körülbelül öt és félszer nagyobb válaszokat a tényleges célpontjára irányítja. A szervere ilyenkor nem az áldozat, hanem az erősítő egy harmadik fél ellen. Az ellenkező irányban egy lekérdezési áradat is elegendő ahhoz, hogy a szerver eltűnjön a szerverböngészőből anélkül, hogy egyetlen játékos is kirepülne. Az üzemeltetők pontosan ezt jelentik: a szerver fut, a rajta lévő játékosok nem észlelnek semmit, de már nem lehet megtalálni.

A kis lekérdezési áradatok ellen egy forráscímenkénti felső korlát segít. A szabályos lekérdezések ritkán jönnek: a Steam-böngésző megjelenítésenként egyszer kérdez, az állapotszolgáltatások néhány percenként.

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

A második szám közvetlenül a játékból származik: az Unturned gyárilag másodpercenként 50 csomagra korlátoz egy játékost (Max_Packets_Per_Second). A másodpercenkénti és forráscímenkénti 300 csomag tehát bőven hagy levegőt egyetlen előfizetésnek, akkor is, ha több játékos ül ugyanazon a címen. Mindkét érték kiindulási érték, nem igazság. Mérjen előbb egy hetet normál üzemben, különben a saját játékosait dobja ki.

A puszta iptables-szabályok egy újraindítás után nincsenek meg. Debian és Ubuntu alatt az apt-get install -y iptables-persistent és a netfilter-persistent save paranccsal mentik el őket. UFW alatt az ilyen szabályok a /etc/ufw/before.rules fájlba tartoznak, különben a következő ufw reload parancsnál eltűnnek.

Ehhez jön egy szokás, amely semmibe nem kerül: ha a weboldala vagy a Discord-botja mutatja a játékosszámot, ne a látogató felől kérdezze le a szervert, hanem fix időközönként tárolja el az eredményt. Egy sokat látogatott állapotoldal különben látogatónként egy lekérdezést okoz, nem intervallumonként egyet.

4. A Config.json fájlban lévő beépített korlátok beállítása

Az Unturned a Commands.dat fájllal azonos Server könyvtárban lévő Config.json fájlban olyan szakaszt hoz magával, amely a védelem szempontjából fontosabb, mint amit a neve sejtet. Az alapértelmezések a következők:

"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
}

A Max_Packets_Per_Second egy csatlakozott játékost másodpercenként 50 csomagra korlátoz. A Join_Rate_Limit_Window_Seconds és a Rate_Limit_Kick_Threshold kidobja azt a kapcsolatot, amely 40 másodpercen belül több mint tízszer túllépi a korlátot. A VAC_Secure és a BattlEye_Secure mindkét csalásellenes rendszert megköveteli a játékos oldalán, és ezzel távol tartja az eldobható kliensek nagy részét.

Egy dolognak világosnak kell lennie: ezek a korlátok azok ellen a kliensek ellen hatnak, amelyek valóban csatlakoznak, vagy megpróbálják. A hamisított feladócímekkel folyó áradat ellen nem hatnak, mert ott soha nem jön létre munkamenet. Mégis fontosak, mert a leggyakoribb egyedi esetet fogják el: egyetlen manipulált klienst, amely egymaga terheli túl a szervert. A Max_Ping_Milliseconds értékét érdemes 750-en hagyni; alacsonyabbra állítva a szerver minden rövid hálózati akadásnál fél környi játékost kidob.

5. A kapcsolatkövetés tehermentesítése

Ezt a pontot szinte mindig figyelmen kívül hagyják, és olyan kieséseket magyaráz meg, amelyek volumetrikus támadásnak látszanak, de nem azok. A kernel az UDP-forgalomhoz is bejegyzéseket hoz létre a kapcsolatkövetésben (conntrack), hamisított feladócímek esetén pedig minden új cím új bejegyzést jelent. Ha a tábla megtelik, a kernel különbségtétel nélkül dobja el a csomagokat: a támadás és az Ön játékosai együtt repülnek ki. A rendszernaplóban ilyenkor az áll, hogy nf_conntrack: table full, dropping packet.

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

A leghatásosabb lépés az, ha az Unturned-forgalmat egyáltalán nem követteti. A játék maga kezeli a munkameneteit, és nincs szüksége állapotkövetésre a kernelben:

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

Ügyeljen arra, hogy erre a két portra szóló engedélyezései ezután már nem futhatnak az ESTABLISHED,RELATED állapoton keresztül, hanem önálló elfogadási szabályként kell állniuk. Csak ezután érdemes megnövelni az nf_conntrack_max értékét. Aki először a táblát nagyobbítja meg, az csak percekkel tolja el a problémát, és memóriát fogyaszt hozzá.

Ha a csomagok gyorsabban érkeznek, mint ahogy a szerverfolyamat elviszi őket, ezen felül túlcsordul a socket fogadópuffere. Ez a játékosok számára úgy néz ki, mint csomagvesztés szabad vonalon:

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

Helyezze el az értékeket egy /etc/sysctl.d/ alatti fájlban, és aktiválja őket a sysctl --system paranccsal. Hogy szükség van-e rájuk, azt maga a kernel árulja el: ha az nstat -az kimenetében emelkedik az UdpRcvbufErrors értéke, vagy az ss -lunp kimenetében tartósan áll valami a fogadási várakozási sorban, akkor érvényesülnek. Ha mindkettő nullán marad, a módosítás semmit nem változtat. Ez tartalék, nem védelem.

6. Csatlakozási áradat, várakozási sor és engedélyezőlista

A csatlakozási áradat olyan támadás, amelyben a támadó a szabályos csatlakozási utat használja arra, hogy férőhelyeket és számítási időt fogyasszon, ahelyett hogy a vonalat töltené meg. Az Unturned négy eszközt hoz ez ellen, és mind a Commands.dat fájlban áll:

  • A Queue_Size 32 állítja be a várakozási sort. Az alapértelmezés 8 hely, a maximum 64. A túl nagy várakozási sor a támadónak segít, a túl kicsi pedig minden újraindításnál lemorzsolja a valódi játékosokat.
  • A Whitelisted átállítja a szervert hozzáférési listára. A felvétel a konzolon a permit <SteamID64> paranccsal történik, az eltávolítás az unpermit <SteamID64> paranccsal.
  • A Password AzOnJelszava kizár mindenkit, aki a címet csak egy listáról szerezte.
  • A Filter elutasítja azokat a játékosokat, akiknek a nevében nem engedélyezett karakterek vannak, a MaxPlayers 24 pedig annyin tartja a férőhelyek számát, amennyit a hardver valóban elbír.

Az engedélyezőlista a játéklogikáját védi, nem a vonalát. Az a támadó, aki elárasztja a szerverét, egyáltalán nem akar csatlakozni. A csomagjait elutasítják, de attól még megérkeztek, és pontosan ez a lényeg.

7. RocketMod, OpenMod és a bővítmények oldala

Az Unturnednek két elterjedt bővítményplatformja van, és mindkettő ugyanabban a folyamatban fut, mint a szerver. A RocketMod a régebbi: az eredeti gondozók 2019. december 20-án hagyták abba a fejlesztést, és a forráskódot MIT-licenc alá helyezték. A Smartly Dressed Games azóta a Legally Distinct Missile (LDM) nevű leszármazottat gondozza, amelyet a dedikált szerverrel már együtt szállítanak: a Rocket.Unturned fájlt kell átkopírozni az Extras könyvtárból a Modules könyvtárba. A fejlesztők kifejezetten a leszármazottat ajánlják, mert az kijavítja a régi Rocket-problémákat, például a szálkezelési hibákat és a teleportálásos kihasználásokat.

Az OpenMod az újabb utód, amelyet az eredeti Rocket-gondozók egyike fejlesztett. Nem váltja le a RocketModot, hanem mellette fut, és egy integráción keresztül a meglévő Rocket-bővítményeket is használni tudja. A védelem szempontjából ez két dolgot jelent.

Először is: minden bővítmény támadási felület a főfolyamatban. Az a bővítmény, amely minden chatüzenetnél vagy minden játékeseménynél adatbázis-lekérdezést indít, saját kezűleg épített denial of service. Egyetlen játékos, aki ciklusban vált ki egy eseményt, ilyenkor sávszélesség nélkül bénítja meg a szervert. Tartsa rövid a bővítménylistát, részesítse előnyben a nyílt forráskódú bővítményeket, és minden kiegészítés után mérje meg a szerver képkockasebességét.

Másodszor: mivel az Unturnednek nincs saját RCON-portja, minden távvezérlés egy bővítményből származik. A telepítés után ellenőrizze az ss -lntp paranccsal, melyik TCP-portot nyitotta meg, és korlátozza a saját címére. Egy nyitott távvezérlési port gyenge jelszóval nem DDoS-probléma, hanem átvételi probléma.

8. A Workshop-tartalmak és a csatlakozás folyamata

A Workshop-tartalmak drágává teszik a csatlakozást, és ez közvetlenül kihat a támadhatóságra. Ezt az ugyanabban a Server könyvtárban lévő WorkshopDownloadConfig.json fájl szabályozza:

{
    "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
}

A File_IDs értékben a térképek és a modok Workshop-azonosítói állnak. Indításkor a szerver letölti őket a függőségeikkel együtt, és minden játékos automatikusan utánatölti őket csatlakozáskor. Három következményt érdemes ismerni. Először is nagy modlisták esetén hosszú a csatlakozás, és egy támadás után minden játékos egyszerre tér vissza, ami másodszor is megterheli a szervert. Másodszor a Should_Monitor_Updates leállítja a szervert, amint egy Workshop-fájl frissül: a Shutdown_Update_Detected_Timer előre beállított 600 másodperces értéke ilyenkor újraindításhoz vezet, amelyet az üzemeltetők támadás esetén rendszeresen a támadás sikerének tartanak. Harmadszor minden mod idegen kód az Ön szerverén.

A gyakorlatban ez azt jelenti: tartsa a listát a lehető legrövidebben, minden váratlan újraindítás után először a szervernaplót vizsgálja meg a Workshop-frissítésről szóló bejegyzés miatt, és csak akkor kapcsolja ki a Should_Monitor_Updates beállítást, ha a frissítéseket saját maga tervezi be.

9. Szerverlista, szerverkód és a Fake-IP funkció

Az IP-címét nem lehet titokban tartani, amíg a szerver nyilvánosan szerepel a listákban. Ismeri minden játékos, aki egyszer már kapcsolódott, és a harmadik felek listái amúgy is közzéteszik. Két szokás mégis segít: sehol ne tegye közzé saját maga a nyers címet, és hostnéven keresztül kösse be a játékosait, hogy egy címcsere ne törjön el minden hivatkozást. A klasszikus hiba az elfelejtett A-rekord a régi címre, amely minden cserét hatástalanná tesz.

Az internetes üzemeltetéshez amúgy is szükség van egy Game Server Login Tokenre (GSLT) a Steam szerverkezelő felületéről, a 304930 app-azonosítóhoz. Ez ráadásul arról is gondoskodik, hogy a szervere szerverkódja újraindításokon át ugyanaz maradjon, ahelyett hogy minden indításkor újra létrejönne.

Az Unturned ezen felül Fake-IP funkciót is kínál. A Config.json fájlban a "Use_FakeIP": true beállítással kapcsolható be, a CopyFakeIP konzolparancs pedig megadja azt a címet, amelyet aztán közzétehet. A forgalom ezután a Steam Datagram Relay reléhálózaton keresztül fut, a kiosztott címek a 169.254.0.0 és a 169.254.255.255 közötti tartományba esnek, és a szerver valódi címét már nem mutatják meg a játékosoknak. A Valve a forgalmat hitelesítettként, titkosítottként és sebességkorlátozottként írja le.

Ennek az ára magas, és ritkán teszik hozzá: a cím és a port minden újraindításnál változik, egy domainnevet saját szkriptek nélkül nem lehet rá irányítani, és a Steam „Kedvencek” és „Előzmények” listája így nem működik, csak a könyvjelző funkció. Legfőképpen azonban a funkció csak a játék útját védi. A szervere megtartja a valódi címét, és az SSH, a webpanel, az adatbázis és a weboldal azon keresztül továbbra is elérhető marad. Aki a címet egy régi DNS-bejegyzésből, egy állapotoldalról vagy egy korábbi kapcsolatból ismeri, továbbra is közvetlenül támadja. A Fake-IP funkció tehát nem helyettesíti a szerver előtti hálózatban végzett szűrést, csupán csökkenti azoknak a számát, akik egyáltalán ismerik a címét.

10. Naplózás, hogy támadás közben ne kelljen találgatnia

A legfontosabb lépés az, amelyet előtte szinte senki nem tesz meg: összehasonlítási alapot kell létrehozni, amíg minden normálisan fut. Normálérték nélkül egy incidens után nem tudja megmondani, hogy a másodpercenkénti 40 000 csomag sok volt-e, vagy egyszerűen péntek este. Az apt-get install -y vnstat sysstat paranccsal a mérés tartósan együtt fut. Egy incidens alatt négy parancs elegendő:

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

A tcpdump esetében érvényes: mindig korlátozza a -c kapcsolóval, mert egy teljes terhelés alatt készült rögzítés az amúgy is túlterhelt szervert tovább terheli. Hogy az értékeket hogyan értékelje ki, és hogyan különítse el a támadást egy szoftverhibától, arról a DDoS-támadás felismerése a szerveren cikk szól.

Hol érnek véget ezek az intézkedések

Minden eddigi intézkedés az Ön szerverén fut, tehát a vonal végén. Egy tűzfalszabály olyan csomagról dönt, amely már végigment a kábelen. El tudja dobni, de nem tudja meg nem küldötté tenni.

Számoljon utána egyszer. Egy tipikus játékszerver 1 Gbit/s-os vonalon lóg, ez 125 megabájt másodpercenként, és a vonal tele van, amint valaki ennél többet küld. A normál üzem messze ez alatt marad: 24 játékos és a gyárilag engedélyezett, játékosonkénti és másodpercenkénti 50 csomag mellett körülbelül 1200 csomag érkezik másodpercenként. Egy booter-szolgáltatás minden előkészület nélkül ennek a többszörösét termeli.

A második mennyiség a csomagsebesség, és ez majdnem mindig hamarabb üt be, mint a sávszélesség. 64 bájtos kis csomagoknál egy 1 Gbit/s-os vonalba körülbelül 1,49 millió csomag fér másodpercenként. Egy normál szerverkernel a processzortól és a hálózati kártyától függően ennek néhány százezrét dolgozza fel, mielőtt elkezdene eldobni. Egy támadás, amely a vonalát még harmadáig sem tölti meg, tehát ettől függetlenül megbéníthatja a szerverét, mert a számítási idő az eldobásra megy el. Az üzemeltetők ezt így élik meg: „a terhelés nem is volt magas, mégis minden elérhetetlen lett”.

A nagyságrendek besorolásához, amelyek valóban előfordulnak: a KernelHost szerverein többek között egy 473,4 Gbit/s feletti támadást szűrtek ki másodpercenként több mint 41,5 millió csomaggal egy hangszerver ellen, és egy 112,2 Gbit/s feletti UDP-floodot egy játékszerver ellen. Erre nincs helyi beállítás. A volumetrikus támadásoknak a szerver előtti hálózatban kell véget érniük.

Mit állít ez ellen a KernelHost

A folyamatos védelem, amely minden szerverben benne van

A KernelHost DDoS-védelme kétrétegű felépítésű és tartósan aktív, anélkül hogy Önnek bármit be kellene kapcsolnia, meg kellene rendelnie vagy konfigurálnia:

  • 1. réteg: 17 Tbps mitigációs kapacitás a globális scrubbing-hálózatban. A volumetrikus támadásokat a forrásuk közelében tisztítják ki, mielőtt elérnék az adatközpontot.
  • 2. réteg: Arbor valós idejű szűrés 3,2 Tbps kapacitással Frankfurt am Mainban. Közvetlenül a szerver előtt ismerik fel és dobják el a protokollspecifikus mintákat, csomagról csomagra.

Két tulajdonság döntő. A védelem folyamatosan fut, és nem kell előbb egy támadásra reagálnia, tehát nincsenek percek az elején, amikor a szerver elérhetetlen. És nincs null-routing: az IP-címe a hálózatban marad, csak a káros csomagokat dobják el. Aki kiveszi az IP-címet a hálózatból, az az Ön szempontjából ugyanazt az eredményt éri el, mint a támadó. A helyszín Frankfurt am Main. Hogy mely játékok és protokollok vannak lefedve, azt a Játékszerver-DDoS-védelem valós időben cikk sorolja fel.

Advanced DDoS Protection a tartósan támadott projektekhez

Egyes projekteket nem alkalmanként, hanem célzottan és heteken át támadnak. Erre való az Advanced DDoS Protection havi 50,00 EUR-tól, PrePaid alapon, minimális futamidő és beállítási díj nélkül. A különbség nem a nagyobb kapacitásban van, hanem az irányításban:

  • Dedikált védett IP a frankfurti központi hálózatból, amelyre a szerverét a saját hálózaton belül átállítják. Az Ön oldalán nincs szükség átépítésre.
  • Önállóan kezelhető védelmi szabályok portonként és protokollonként az ügyfélportálon: külön állítja be, mi engedélyezett a 27015 UDP porton (a lekérdezések) és mi a 27016 UDP porton (a játékforgalom), anélkül hogy hibajegyet kellene írnia.
  • A módosítások valós időben lépnek érvénybe, tehát futó támadás közben is utánaigazíthat, például szűkebbre fogja a lekérdezéseket, a játékforgalmat viszont érintetlenül hagyja.
  • A játékhoz illő védelmi profil, ugyanígy a módosított és a saját alkalmazásokhoz is, tetszőleges TCP- vagy UDP-portokon, tehát egy saját porttal rendelkező bővítményhez is.

A két szint összehasonlítva

Jellemző Beépített folyamatos DDoS-védelem Advanced DDoS Protection
Ár minden szervercsomagban benne van, felár nélkül havi 50,00 EUR-tól, PrePaid
Szűrőkapacitás 17 Tbps globális scrubbing, valamint Arbor valós idejű szűrés 3,2 Tbps kapacitással Frankfurt am Mainban ugyanaz a kétrétegű szűrés
IP-cím a szervere IP-címe további dedikált védett IP
Szabályrendszer automatikus profilok, nincs szükség konfigurálásra saját szabályok portonként és protokollonként az ügyfélportálon
Módosítások automatikusan követik a rendszert valós időben lépnek érvénybe, támadás közben is
Játékprofil optimalizált profilok az elterjedt játékokhoz, az Unturnedet is beleértve a játékhoz illő profil, a módosított alkalmazásokhoz is
Null-routing nincs nincs
Futamidő a szervercsomaghoz kötve PrePaid, nincs minimális futamidő, nincs felmondási idő, nincs beállítási díj

A legtöbb Unturned-projekthez elegendő a beépített folyamatos védelem egy tiszta szerverkonfigurációval együtt. Az Advanced DDoS Protection arra a válasz, hogy valaki személyes ügyet csinál belőle.

Gyakori hibák és megoldások

„Az útmutatóm azt írja, hogy a 27015-től a 27017-ig kell engedélyeznem”: az útmutató 2021 novemberénél régebbi. A 3.21.30.0 verzió óta egy Unturned-szervernek már csak két portra van szüksége, mert a Steam-lekérdezés már nem a port plusz kettőn ül. Zárja be a 27017-et, kivéve ha ott egy második példány fut.

„A szerver fut, de már egyetlen szerverlistában sem szerepel”: ez a lekérdezési áradat vagy egy túl szigorú saját szabály tipikus képe a 27015 UDP porton. Ellenőrizze az iptables -L INPUT -n -v paranccsal, hogy a saját szabálya számol-e találatokat. Ha a számlálók erősen emelkednek, éppen a saját listabejegyzéseit szűri ki. A 27015-öt soha ne tiltsa le teljesen.

„Minden játékos egyszerre repül ki időtúllépéssel”: először nézze meg, nem csordult-e túl a kapcsolatkövetés (dmesg -T | grep -i conntrack). Ha a tábla megtelt, a kernel különbségtétel nélkül dobja el a csomagokat. A Timeout_Game_Seconds gyárilag 30 másodpercen áll: aki ezen belül visszatér, megtartja a helyét.

„A szerver üzem közben újraindul”: ez ritkán támadás. Vizsgálja meg a naplót az észlelt Workshop-frissítésről szóló bejegyzés miatt. A Should_Monitor_Updates az előre beállított 600 másodperces időtartam után leállítja a szervert.

„Lecseréltem az IP-címet, és két órával később megint offline voltam”: a támadó ugyanabból a forrásból szerezte meg az új címet, mint a régit, többnyire egy szerverlistából, egy Discord-botból vagy egy régi DNS-bejegyzésből. A címcsere időnyereség, nem megoldás.

„Bekapcsoltam a Fake-IP funkciót, és mégis támadnak”: a funkció elrejti a címet az új játékosok elől, de nem veszi el a szervertől. Aki egy régi listabejegyzésből, egy állapotoldalról vagy egy korábbi kapcsolatból ismeri, továbbra is közvetlenül eléri a szerverét, ugyanígy az SSH-t és minden rajta futó webpanelt is.

„Az eddigi szolgáltatóm letiltotta az IP-címemet”: ez a null-routing. A szolgáltató ezzel a saját hálózatát védi, Önnek viszont az eredmény azonos egy sikeres támadással, többnyire még órákkal utána is. Kétség esetén kérdezzen rá, hogy szűrés vagy null-routing történik. A válasz többet dönt a rendelkezésre állásáról, mint bármilyen hardveres adat.

„A tcpdump kimenetében nem látok semmi feltűnőt”: ha a forgalmat már az előtte lévő hálózatban kiszűrik, a szerverre a várakozásnak megfelelően nem érkezik semmi. Működő szűrésnél ez a normális eset. Fordítva is igaz: ha a vonal telített, adott esetben már az az SSH-munkamenet sem ér el Önhöz, amellyel mérni szeretett volna. Használja ilyenkor az ügyfélportál VNC-konzolját, amely a vendégrendszer hálózatától függetlenül működik.

Röviden összefoglalva

  • Egy Unturned-szervernek pontosan két nyitott UDP-portra van szüksége: a Commands.dat fájlban beállított Port értékre (alapértelmezés 27015) és ennek az értéknek a plusz egyére (27016). TCP-re magának a játéknak nincs szüksége.
  • A 27017-es port a 2021. november 21-én kiadott 3.21.30.0 verzió óta felesleges, mert a Steam-lekérdezés már nem a port plusz kettőn ül. Aki még nyitva tartja, elavult útmutatót követ.
  • Az Unturnednek nincs beépített RCON-portja. Minden távvezérlés egy bővítményből jön, saját TCP-portot hoz magával, és Önnek magának kell korlátoznia.
  • A 27015-ös lekérdezőport a legérzékenyebb pont: egy lekérdezési áradat láthatatlanná teszi a szervert a szerverlistában anélkül, hogy egyetlen játékost is eltalálna, a Steam-protokoll erősítési tényezője pedig az US-CERT TA14-017A szerint 5,5.
  • A Config.json fájlban lévő korlátok (Max_Packets_Per_Second 50,0, Rate_Limit_Kick_Threshold 10 negyven másodpercenként) csak azok ellen a kliensek ellen hatnak, amelyek valóban csatlakoznak, a hamisított feladócímek ellen nem.
  • Egy 1 Gbit/s-os vonal 125 megabájt másodpercenként értéknél tele van, 64 bájtos csomagoknál pedig már körülbelül 1,49 millió csomagnál másodpercenként. A 24 játékossal futó normál üzem körülbelül 1200 csomag másodpercenként. Minden ezen felüli esetben a szerver előtti hálózat dönt, nem az Ön tűzfala.
  • A KernelHostnál a kétrétegű folyamatos védelem minden szervercsomagban felár nélkül benne van, és a kiszállítástól aktív, null-routing nélkül. Aki a szűrőszabályokat saját maga akarja irányítani, ahhoz veszi az Advanced DDoS Protection szolgáltatást havi 50,00 EUR-tól.

Ha a projektje már a KernelHostnál fut, a szűrés aktív, anélkül hogy bármit tennie kellene. Ha mégis rendellenességet észlel, nyisson támogatási hibajegyet, hogy a szűrőszabályokat az IP-címéhez igazítsák. Futó támadás esetén ezen felül a WhatsApp-vészhelyzeti chaten ér el minket a +43 650 8209883 számon.

Gyakori kérdések

Mely portokat kell nyitva hagynom egy Unturned-szerverhez?
Pontosan két UDP-portot: a Commands.dat fájlban beállított értéket és ezt az értéket plusz egyet, alapértelmezés szerint tehát a 27015-öt és a 27016-ot. Csak az elsőt kell beállítani a Port 27015 sorral, a második automatikusan adódik. A hivatalos dokumentáció szerint az első port viszi a szerverlista lekérdezéseit, a második a játékforgalmat. Magához a játékhoz TCP-portra nincs szükség. Ha több példányt üzemeltet egy gépen, a dokumentáció kettes lépésközt javasol, tehát 27015, 27017, 27019.
Engedélyeznem kell a 27017-es portot az Unturnedhez?
Nem, a 2021. november 21-én kiadott 3.21.30.0 verzió óta már nem. Addig egy Unturned-szervernek három portra volt szüksége, mert a Steam-lekérdezés a port plusz kettőn ült. Ezzel a frissítéssel a lekérdezés a szerverrel osztozik a porton, és a harmadik port megszűnt. Nagyon sok router-útmutató, szolgáltatói wiki és fórumbejegyzés ennek ellenére máig a 27017-et említi. Egy nyitott 27017 ma semmilyen előnyt nem jelent, puszta támadási felület, és be kell zárni, ha ott nem fut egy második szerverpéldány.
Az Unturned-szerverem fut, de már egyetlen szerverlistában sem szerepel. Ez támadás?
Többnyire igen, méghozzá lekérdezési áradat a 27015 UDP porton. Ezen a porton válaszolja meg a szerver az A2S_INFO, az A2S_PLAYERS és az A2S_RULES Steam-lekérdezést. Ha betemetik, a szerver eltűnik a szerverböngészőből, miközben a már csatlakozott játékosok zavartalanul játszanak tovább. A második gyakori ok egy túl szigorú saját tűzfalszabály a 27015-ön. Ellenőrizze az iptables -L INPUT -n -v paranccsal, hogy a szabálya számol-e találatokat. A 27015-öt soha ne tiltsa le teljesen, különben a szerver egyetlen listában sem lesz megtalálható.
Van az Unturnednek beépített RCON-portja?
Nincs. A hivatalos dokumentáció csak konzolbemenetet és konzolkimenetet ismer, amelyek az ICommandInputOutput felületen keresztül saját megoldással lecserélhetők. Minden távvezérlés egy Unturned-szerveren ezért egy bővítményből származik, és saját TCP-portot hoz magával. A telepítés után ellenőrizze az ss -lntp paranccsal, melyik port nyílt meg, és korlátozza a saját címére. Egy nyitott távvezérlési port gyenge jelszóval nem DDoS-probléma, hanem átvételi probléma.
Megvéd az Unturned Fake-IP funkciója a DDoS-támadásoktól?
Csak részben. A Config.json fájlban a Use_FakeIP true beállításával a játékforgalom a Steam Datagram Relay reléhálózaton keresztül fut, és a valódi címet már nem mutatják meg az új játékosoknak. A védelem azonban a játék útjánál véget ér: a szervere megtartja a valódi címét, az SSH, a webpanel és a weboldal azon keresztül továbbra is elérhető, és aki a címet egy régi DNS-bejegyzésből vagy egy korábbi kapcsolatból ismeri, továbbra is közvetlenül támad. Ezen felül a cím és a port minden újraindításnál változik, egy domainnevet saját szkriptek nélkül nem lehet rá irányítani.
Meg tudom védeni magamat iptables vagy UFW segítségével egy DDoS-támadás ellen?
A kis támadások és a hibásan megírt botok ellen igen, a volumetrikus támadások ellen nem. Egy tűzfalszabály a szerveren olyan csomagokról dönt, amelyek már végigmentek a vonalán. Ha a vonal telített, a játékosai csomagjai már előtte sem jutnak át, teljesen függetlenül attól, milyen jó a szabálykészlete. Érdemes forráscímenkénti sebességkorlátokat tenni a 27015-re és a 27016-ra, valamint NOTRACK szabályt mindkét portra, hogy a kernel kapcsolatkövetése ne csorduljon túl. A volumetrikus támadásoknak a szerver előtti hálózatban kell véget érniük.
Mekkora támadásnál nem bírja már egyedül az Unturned-szerverem?
Egy tipikus játékszerver 1 Gbit/s-os vonalon lóg, ez 125 megabájt másodpercenként. A normál üzem messze ez alatt van: 24 játékos és a gyárilag engedélyezett, játékosonkénti és másodpercenkénti 50 csomag mellett körülbelül 1200 csomag érkezik másodpercenként. A sávszélességnél fontosabb a csomagsebesség. 1 Gbit/s-ba 64 bájtos csomagoknál körülbelül 1,49 millió csomag fér másodpercenként, egy normál szerverkernel ennek csak néhány százezrét dolgozza fel. Egy támadás tehát akkor is megbéníthatja, ha a sávszélesség nincs kimerítve.
Miért támadják olyan gyakran az Unturned-szervereket?
Mert a címük nyilvános, a játékforgalom UDP-n fut, és egy támadás a kiváltójától sem tudást, sem érdemi pénzt nem kíván. Egy nyilvánosan listázott szervernek ki kell adnia az IP-címét és a portját, különben senki nem találja meg: a Steam-szerverböngésző közvetlenül kérdez, a harmadik felek listái mindkettőt nyílt szövegben vezetik. Az UDP viszont nem ismer kapcsolatfelépítést, amelyet meg lehetne követelni, a feladócímek pedig hamisíthatók. A támadónak tehát sem belépnie nem kell a szerverére, sem szabályosan megszólítania azt ahhoz, hogy terhelést keltsen.
Segítenek a RocketMod- vagy OpenMod-bővítmények a DDoS-támadások ellen?
Nem, sőt rontani is tudják a helyzetet. Mindkét platform ugyanabban a folyamatban fut, mint a szerver. Az a bővítmény, amely minden chatüzenetnél vagy minden játékeseménynél adatbázis-lekérdezést indít, saját kezűleg épített denial of service: egyetlen játékos ilyenkor bármilyen sávszélesség nélkül megbénítja a szervert. Tartsa rövid a bővítménylistát, és minden kiegészítés után mérjen. A RocketModot az eredeti gondozók 2019. december 20. óta nem fejlesztik; a javasolt megoldás a Smartly Dressed Games által gondozott Legally Distinct Missile leszármazott vagy az OpenMod nevű utód.
Offline lesz a szerverem a KernelHostnál egy támadás alatt?
Nem. Null-routing nincs használatban. Az IP-címe a hálózatban marad, csak a káros csomagokat dobják el. A védelem kétrétegű: 17 Tbps mitigációs kapacitás a globális scrubbing-hálózatban és egy Arbor valós idejű szűrés 3,2 Tbps kapacitással Frankfurt am Mainban. Folyamatosan fut, és nem kell előbb egy támadásra reagálnia, tehát nincsenek percek az elején, amikor a szerver elérhetetlen.
Extra költséggel jár a DDoS-védelem a KernelHostnál?
Nem. A kétrétegű folyamatos védelem minden szervercsomagban felár nélkül benne van, és a kiszállítástól aktív. Sem megrendelnie, sem bekapcsolnia vagy konfigurálnia nem kell. Ez egy Unturned-szerverre ugyanúgy érvényes, mint ugyanazon a szerveren futó bármely más alkalmazásra, függetlenül attól, mely portokat foglalja el.
Mikor van szükségem az Unturned-szerveremhez ezen felül az Advanced DDoS Protection szolgáltatásra?
Akkor, ha a projektjét nem alkalmanként, hanem célzottan és heteken át támadják, és Ön maga akarja irányítani a szűrést. Dedikált védett IP-t kap, a védelmi szabályokat pedig portonként és protokollonként maga kezeli az ügyfélportálon, tehát külön a lekérdezések számára a 27015 UDP porton és a játékforgalom számára a 27016 UDP porton. A módosítások valós időben lépnek érvénybe, ezért egy zajló támadás közben is tud utánaállítani. Az ár havi 50,00 EUR-tól indul, PrePaid alapon, minimális futamidő és beállítási díj nélkül.

Unturned Unturned DDoS-védelem Játékszerver-védelem 27015-ös port 27016-os port Steam-Query RocketMod OpenMod Advanced DDoS Protection