Lineage 2 sunucusunu DDoS saldırılarına karşı koruma
Özel bir Lineage 2 sunucusunun gerçekten hangi portlara ihtiyaç duyduğu, 2106 portundaki login sunucusunun neden asıl hedef olduğu, saldırıların neden mevsimsel olarak sunucu açılışlarında görüldüğü ve hangi saldırı büyüklüğünden sonra yalnızca sunucunun önündeki ağda yapılan filtrelemenin işe yaradığı.
Akşamları hiç kimsenin giriş ekranını geçemediği, buna karşılık dünyadaki oyuncuların rahatsız edilmeden oynamaya devam ettiği özel bir Lineage 2 sunucusunun donanım sorunu yoktur. Bu, login sunucusuna yapılan bir DDoS saldırısının parmak izidir ve bir Lineage 2 DDoS koruması tam olarak oraya odaklanmak zorundadır. 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 L2J ve türevleri (L2J-Mobius, aCis) ile AuthD, CacheD ve L2Server içeren L2OFF paketleri 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 şimdi hiçbir şey değiştirmeyin ve ne login sunucusunu ne de oyun sunucusunu yeniden başlatın. Önce ölçüm değerlerini kaydedin (“Kayıt tutma” bölümüne bakın), saldırıdan sonra bu değerler kaybolur.
Lineage 2 sunucusunu DDoS'tan koruma: özel L2 sunucuları neden saldırıya uğrar
Özel bir Lineage 2 sunucusu, onu rahat bir hedefe dönüştüren birkaç özelliği bir arada taşır ve Lineage 2 DDoS koruması tam olarak bu özelliklere odaklanmak zorundadır. Birincisi, adresiniz herkese açıktır, hem de en başından itibaren: Oyuncular yamalı bir System klasörü indirir ve o klasördeki l2.ini dosyasında login sunucunuzun IP adresiyle birlikte ServerAddr= satırı bulunur. Projenizi bir kez kuran herkes, hiç karakter oluşturup oluşturmadığından bağımsız olarak bu adresi bilir.
İkincisi, oyuncu kitlesi sabit saatlere bağlıdır. Kuşatmalar, Epic raid bossları ve etkinlikler takvimde durur, tam bu saatteki bir kesinti mümkün olan en yüksek görünürlüğe sahiptir. Üçüncüsü, projeler birbiriyle doğrudan rekabet hâlindedir: Bir sunucu açan kişi, aynı hafta sonunda üç başka projeyle aynı birkaç bin oyuncu için yarışır. Bir rakibi devre dışı bırakmak bu çevrede yaygın bir stratejidir. Saldırı bu sırada bir hizmet olarak satın alınır (bu çevrede işin adı booter ya da stresser) ve sipariş verene ne beceri ne de anlamlı bir para harcaması getirir. Bir DDoS saldırısının ayrıntıda ne olduğunu DDoS saldırısı nedir? yazısı anlatıyor.
2106 portundaki login sunucusu neden asıl hedeftir
Lineage 2, iki ayrı sürece bölünmüştür: bir login sunucusu ve bir ya da birkaç oyun sunucusu. İstemci önce 2106 TCP üzerinden login sunucusuna bağlanır, oturum açar, oradan oyun sunucusunun harici adresi ve portuyla birlikte sunucu listesini alır ve ardından 7777 TCP üzerinden oyun sunucusuna ikinci bir bağlantı kurar. İki sürecin de kendi yapılandırma dosyaları, kendi portları ve kendi yük sınırları vardır.
Bundan, L2 işletmecilerinin sürekli anlattığı saldırı kalıbı çıkar: 2106 portuna yapılan bir flood yalnızca yeni oturum açmaları bloke eder. Hâlihazırda dünyada olan kişi, kendisi bağlantıyı kaybedene kadar oynamaya devam eder. Yani çevrimiçi göstergesi bir anda değil yavaşça düşer ve forumda “Sunucu çalışıyor, ama ben içeri giremiyorum” yazar. Login sunucusuna yapılan bir saldırıyı, herkesin aynı anda dışarı düştüğü oyun sunucusu saldırısından ayıran tam olarak bu görüntüdür.
Login sunucusu buna ek olarak daha ucuz hedeftir, çünkü yük eşit dağılmamıştır. L2J login sunucusu başlangıçta 1024 bitlik on RSA anahtar çifti ve yirmi Blowfish anahtarından oluşan bir stok üretir. Her oturum açma denemesi istemciye bir paket göndermeye, sunucuya ise özel RSA anahtarıyla bir şifre çözme işlemine mal olur. Yarım kalmış bir oturum bu sırada, yerleşik zamanlayıcı onu düşürene kadar bir yer tutar: LOGIN_TIMEOUT değeri kaynak kodda 60 saniyedir. MaxConnectionPerIP = 50 varsayılan ayarı her kaynak adrese elli eşzamanlı bağlantı izni verir. Böylece bin kaynak adres, her biri bir dakikaya kadar ayakta kalan 50.000 eşzamanlı açık oturum için yeter.
Buna, oyunu çoğu oyun sunucusundan ayıran bir özelliği ekleniyor: Lineage 2 yalnızca TCP üzerinden çalışır. Üretici oyun için 80, 2009, 2106 ve 7777 TCP portlarını, UDP'de ise yalnızca ad çözümlemesi için 53 portunu veriyor. Yani filtrelenmesi gereken bir UDP oyun trafiği yoktur, bunun karşılığında sahte gönderen adresleriyle yapılan klasik SYN flood'u doğrudan etkilidir ve kernel'in bağlantı izlemesi ilk darboğaz hâline gelir.
Lineage 2 sunucularına saldırılar neden mevsimsel olarak sunucu açılışlarında görülür
Özel Lineage 2 sunucularına saldırılar sunucu açılışlarının çevresinde yoğunlaşır, çünkü açılışın tarihi ve saati haftalar öncesinden herkesçe bilinir. Lineage 2 projeleri için açılış takvimleri, yaklaşan açılışları kroniğe göre (Interlude, High Five, Classic, Essence), buna ek olarak rate'leri ve tam açılış saatini listeler ve her gün güncellenir. Saldırganın hiçbir şeyi keşfetmesi gerekmez: Onun için en uygun zaman, işletmecinin duyurusunda yazılıdır.
İkinci neden ekonomiktir. Özel bir Lineage 2 sunucusu parasını baştan kazanır: Oyuncu tabanının tamamı ilk günlerde toplanır, bağışlar ilk haftalarda gelir, ardından nüfus sürekli küçülür. İlk saat içinde içeriye giremeyen bir oyuncu, aynı hafta sonunda açılan projeye geçer ve o proje her zaman vardır. Bu yüzden açılış günündeki bir saatlik kesinti, bir saatlik ciroya değil, sunucunun toplam ömrünün bir bölümüne mal olur.
Üçüncü neden tekniktir. Grand Opening sırasında binlerce oyuncu aynı anda oturum açmayı dener. Login sunucusu tam o dakikada zaten sınırındadır ve ek bir flood, zirve yükünden neredeyse ayırt edilemez. Sakin bir salı günü sonuçsuz kalacak bir saldırı, açılış saatinde yeterli olur. Aynısı, süren işletim içindeki duyurulmuş tarihler için de geçerlidir: Kale kuşatmaları ve Epic raid bossları takvimde durur ve aynı nedenle sevilen saldırı pencereleridir. Açılış akınından sonra cazibe yeniden düşer, bu yüzden işletmeciler saldırıları kalıcı bir durum olarak değil dalga dalga yaşar.
Asıl mesele olan portlar
Aşağıdaki tablo, özel bir Lineage 2 sunucusunun portlarını, bunlara ait yapılandırma dosyasını ve değeri belirleyen direktifi listeler. Varsayılan ayarlar, L2J ile birlikte gelen yapılandırma dosyalarından ve L2OFF paketleri için hazırlanmış kurulum rehberlerinden geliyor.
| Port ve protokol | Hizmet | Dosya ve direktif | Açık ağa mı? |
|---|---|---|---|
| 2106 TCP | Login sunucusu, oyun istemcisinin oturum açması (L2J) | login/config/LoginServer.properties: LoginserverPort = 2106, LoginserverHostname = * |
evet |
| 7777 TCP | Oyun sunucusu, oyun dünyası (L2J) | game/config/Server.properties: GameserverPort = 7777, GameserverHostname = * |
evet |
| 9014 TCP | Login sunucusu, oyun sunucularının kaydını kabul eder | LoginServer.properties: LoginPort = 9014, LoginHostname = 127.0.0.1; karşılığı Server.properties dosyasında: LoginHost = 127.0.0.1, LoginPort = 9014 |
hayır |
| 3306 TCP | MariaDB ya da MySQL, her L2J sunucusunun veritabanı | Server.properties: URL = jdbc:mysql://localhost/lineage2, Login = root |
hayır |
| 2106 TCP (L2OFF) | AuthD, resmî sunucu dosyalarının oturum açma hizmeti | AuthD yapılandırması: serverExPort = 2106 |
evet |
| 7777 TCP (L2OFF) | L2Server, resmî sunucu dosyalarının oyun dünyası | l2server.ini: worldport = 7777 |
evet |
| 2104 ve 2108 TCP (L2OFF) | AuthD dâhilî (serverPort ve serverIntPort) |
AuthD yapılandırması | hayır |
| 2006 ve 2008 TCP (L2OFF) | CacheD, L2Server ile veritabanı arasındaki köprü | CacheD yapılandırması | hayır |
| 2002 TCP (L2OFF) | L2NPC, NPC'leri oyun dünyasına yükler | l2npc.ini |
hayır |
| 1433 TCP (L2OFF) | Microsoft SQL Server, resmî sunucu dosyalarının veritabanı | Veritabanı yapılandırması | hayır |
| 80 ve 443 TCP | Kayıt, bağış mağazası ve vote sayfalarıyla proje web sitesi | Web sunucusu | evet, ama aynı IP adresinde değil |
| 22 TCP | SSH erişimi | /etc/ssh/sshd_config |
yalnızca kendi adresinize sınırlı |
Bu tablo iki soruyu da yanıtlıyor: Lineage 2'de ne bir sorgu portu ne de bir RCON portu vardır. Bir sunucu listesi için oyuncu sayısını sunan ayrı bir hizmet yoktur ve Source tabanlı oyunlardaki gibi bir uzaktan kontrol portu da yoktur. Sunucu listesini login sunucusu kendisi üretir ve 2106 üzerindeki aynı bağlantı üzerinden oturum açmış istemciye gönderir. Uzaktan kontrol, L2J'de oyun içindeki komutlar ve veritabanı üzerinden çalışır. Böylece başka oyunlarda bulunan iki saldırı vektörü ortadan kalkar ve geriye kalan yük daha da fazla 2106 portuna biner.
Bilmeniz gereken büyüklükler
| Gösterge | Değer |
|---|---|
| Oyunun taşıma protokolü | yalnızca TCP, UDP yalnızca 53 portundaki ad çözümlemesi için |
| 1 Gbit/s bağlantı | saniyede 125 megabayt |
| 1 Gbit/s içinde 64 baytlık paketler | saniyede yaklaşık 1,49 milyon paket |
| Normal bir sunucu kernel'inin işlediği miktar | saniyede birkaç yüz bin paket, ardından düşürmeye başlar |
| Kaynak adres başına eşzamanlı bağlantılar, L2J varsayılanı | MaxConnectionPerIP = 50 |
| L2J'de yarım kalmış bir oturum açma oturumunun ömrü | LOGIN_TIMEOUT, 60 saniye |
| Banlanmaya kadarki başarısız denemeler, L2J varsayılanı | LoginTryBeforeBan = 5, ardından LoginBlockAfterBan = 900 saniye |
| KernelHost'ta filtrelenen, bir oyun sunucusuna yönelik saldırı | saniyede 8,7 milyon paketin üzerinde, 112,2 Gbit/s'nin üzerinde |
| KernelHost'ta filtrelenen, bir ses sunucusuna yönelik saldırı | saniyede 41,5 milyon paketin üzerinde, 473,4 Gbit/s'nin üzerinde |
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 Lineage 2 sunucusu, kimde barındırıldığından bağımsız olarak küçük ve orta ölçekli saldırılara kendi gücüyle dayanır.
1. Envanter: aslında ne dinliyor?
Tek bir kural yazmadan önce sunucunuzun dışarıya ne sunduğuna bakın. Tahmin etmeyin, bakın:
ss -lntp
İlgi çekici olan, yerel adresi gösteren sütundur. 0.0.0.0:2106 ve 0.0.0.0:7777 oraya aittir. 0.0.0.0:9014 ve 0.0.0.0:3306 ise hatadır: Bunlar, bir saldırganın sunucu listenize takılabileceği ya da veritabanınızı yoklayabileceği iki porttur. 127.0.0.1:3306 ise “yalnızca yerel” anlamına gelir ve güvenlik duvarı kuralına ihtiyaç duymaz. 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. 9014 portunu ve veritabanını açık ağdan uzak tutma
9014 portu, oyun sunucusunun login sunucusuna kaydolduğu kanaldır ve hiçbir koşulda açık ağa ait değildir. L2J bunun için doğru varsayılan ayarı zaten getiriyor: LoginHostname = 127.0.0.1 portu loopback arayüzüne bağlar, yani port dışarıdan hiç erişilebilir değildir. Login sunucusu ile oyun sunucusu iki farklı makinede çalışıyorsa * yerine somut dâhilî adresi yazın ve portu yalnızca karşı taraf için açın.
Aynı kural veritabanı için de geçerlidir. /etc/mysql/mariadb.conf.d/50-server.cnf dosyasında şu satırın bulunduğunu kontrol edin:
bind-address = 127.0.0.1
Ve veritabanı kullanıcısını değiştirin. Birlikte gelen Server.properties dosyası Login = root değerinde durur ve dosyanın kendisi bunu, tam olarak bunun önerilmediği notuyla açıklar. En az yetkiye sahip kendi kullanıcınızı nasıl oluşturacağınız MariaDB ve MySQL'i güvene alma yazısında. Ardından sonucu kontrol edin:
ss -lntp | grep -E ':9014|:3306'
Bunun üzerindeki güvenlik duvarı kısa kalır. Bir Lineage 2 sunucusu için dışarıya iki izin yeter, hem de kendinizi dışarıda bırakmamanız için tam bu sırayla:
ufw allow 22/tcp comment 'SSH'
ufw allow 2106/tcp comment 'L2 Login'
ufw allow 7777/tcp comment 'L2 Game'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Kurtarma yolu da dâhil tam rehberi Kendinizi dışarıda bırakmadan UFW güvenlik duvarı kurma yazısında bulabilirsiniz.
3. Sunucunuz kaydolduğu anda AcceptNewGameServer'ı kapatma
LoginServer.properties dosyasında fabrika ayarında AcceptNewGameServer = True yazar ve üzerindeki yorum bunun ne anlama geldiğini tam olarak anlatır: Her oyun sunucusu, login sunucunuzdaki boş bir yere kaydolabilir. 9014 portu yalnızca loopback arayüzünde durduğu sürece bu sonuçsuzdur. Port başka bir nedenle erişilebilir hâle geldiği anda ise açık bir kapıdır. Bu yüzden kendi oyun sunucunuz bir kez kaydolup kimliğini aldığı anda değeri False yapın:
AcceptNewGameServer = False
Oyun sunucusu tarafındaki karşılığında AcceptAlternateID = True yazar. Bu, kurulum sırasında rahattır, çünkü istenen kimlik doluysa login sunucusu o zaman başka bir kimlik verir. Üretim sisteminde ise tersini istersiniz: sabit bir kimlik ve kimlik doluysa bir hata.
4. Login sunucusunun flood korumasını doğru ayarlama
L2J, login sunucusunda kendi bağlantı frenini getiriyor. Bu fren LoginServer.properties dosyasında durur ve bütün zaman değerleri milisaniyedir:
EnableFloodProtection = True
FastConnectionLimit = 15
NormalConnectionTime = 700
FastConnectionTime = 350
MaxConnectionPerIP = 50
Değerler birbirine bağlıdır. Aynı kaynak adresten gelen bir önceki bağlantıdan sonra FastConnectionTime süresinden daha kısa sürede ulaşan bir bağlantı hızlı sayılır. Bu tür FastConnectionLimit kadar bağlantıdan sonra adres geri çevrilir. NormalConnectionTime, sayacın yeniden azaltılmaya başlandığı aralıktır. MaxConnectionPerIP, adres başına eşzamanlı açık bağlantıların üst sınırıdır.
Elli eşzamanlı bağlantı, tek bir oyuncu için çok cömerttir ve daha düşük değerler belirgin biçimde yardımcı olur. Buna rağmen burada dikkat gerekir: Aynı evdeki birkaç oyuncu, bir internet kafe ve özellikle bir Carrier-NAT arkasındaki bağlantılar (L2 çevresinde bu, Türkiye'den, Brezilya'dan ve Doğu Avrupa'nın bazı bölgelerinden gelen çok sayıda oyuncuyu ilgilendirir) tek bir herkese açık adresi paylaşır. Burayı 3'e ayarlayan kişi gerçek oyuncuları dışarıda bırakır. Önce normal işletimde bir hafta ölçün, ardından kademeli olarak düşürün.
Ve bilmeniz gereken bir kısıt: Bu fren, login sunucusunun Java sürecinde çalışır. Hakkında karar verdiği her paket, hattınızı çoktan geçmiş ve çoktan işlem zamanı harcamış olur. Bir avuç kaynağa karşı işe yarar, bir botnete karşı yaramaz.
5. Başarısız denemeleri sınırlama ve banned_ip.cfg dosyasını kullanma
LoginServer.properties dosyasındaki iki direktif daha, birinin ne kadar süre tahminde bulunabileceğini yönetir:
LoginTryBeforeBan = 5
LoginBlockAfterBan = 900
LoginTryBeforeBan, adresin banlandığı geçersiz hesap ve şifre birleşimlerinin sayısıdır; LoginBlockAfterBan ise saniye cinsinden ban süresidir (900 değeri 15 dakika eder). Ardından sayım baştan başlar.
Kalıcı banları, login sunucusunun yapılandırma dizinindeki banned_ip.cfg dosyasına yazarsınız. Tek tek adresler, bütün ağlar ve milisaniye cinsinden Unix zaman damgası olarak isteğe bağlı bir sona erme zamanı kabul edilir; # işaretinden sonraki her şey yorumdur:
198.51.100.7
203.0.113.0
198.51.100.44 1789689600000
Buna ek olarak AutoCreateAccounts = False ayarlayın. True varsayılanı, bilinmeyen bir hesap adıyla yapılan her oturum açmada otomatik olarak bir hesap oluşturur. Bu, kurulum sırasında pratiktir ve işletimde bir armağandır: Bir saldırgan bununla istediği kadar hesap üretir ve bunların her biri oyun sunucunuzun adresiyle birlikte sunucu listesini çekebilir. Hesapların bunun yerine web sitenizdeki kayıt üzerinden oluşmasını sağlayın, o zaman kimin bir kimlik aldığını siz denetlersiniz.
6. 2106 ve 7777 üzerindeki bağlantı hızlarını kernel içinde sınırlama
Java freninin çok geç karar verdiği şeye kernel daha erken ve daha ucuz karar verir. Küçük saldırılara ve özensiz botlara karşı kaynak adres başına bir üst sınır işe yarar:
iptables -I INPUT -p tcp --dport 2106 --syn -m connlimit --connlimit-above 8 --connlimit-mask 32 -j DROP
iptables -I INPUT -p tcp --dport 2106 --syn -m hashlimit --hashlimit-name l2login --hashlimit-mode srcip --hashlimit-above 6/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p tcp --dport 7777 --syn -m connlimit --connlimit-above 6 --connlimit-mask 32 -j DROP
İlk kural, bir adres login sunucusuna sekizden fazla bağlantıyı eşzamanlı olarak açık tuttuğu anda yeni bağlantıları düşürür. Normal bir istemciye tam olarak bir tanesi gerekir. İkincisi, yeni bağlantı hızını adres başına saniyede altıya, yirmilik bir arabellekle sınırlar; bu, bir sunucu yeniden başlatmasının ardından gelen yeniden bağlanma fırtınasını hâlâ geçirir. Üçüncüsü oyun sunucusunda adres başına altı eşzamanlı bağlantıya izin verir, çünkü Lineage 2'de çoklu oturum açma (dualbox ve triplebox) normaldir ve fazla sıkı bir sınır para ödeyen oyuncularınızı vurur.
Üç sayı da başlangıç değeridir, kesin doğrular değil. 2000 eşzamanlı oyuncusu olan bir sunucu, 200 oyuncusu olandan farklı davranır. Önce ölçün, sonra ayarlayı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.
7. SYN flood'unu karşılama: syncookies, backlog ve bağlantı izleme
Lineage 2 yalnızca TCP üzerinden çalıştığı için SYN flood'u en yakın vektördür. SYN flood'u, sahte gönderen adresleriyle bağlantı istekleri gönderen ve onayı hiç yanıtlamayan bir saldırıdır; böylece sunucu her istek için hiç kullanılmayacak bellek ayırır. Dört ayar bunun etkisini azaltır:
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_synack_retries=2
SYN cookie'leri bunlar arasında en önemli satırdır: Kernel isteği, hiçbir şey hatırlamadan yanıtlar ve durumu ancak karşı taraf bağlantıyı gerçekten tamamladığında oluşturur. Sahte gönderenler böylece boşa çıkar. Değerler kalıcı olarak /etc/sysctl.d/ altındaki bir dosyaya konur ve sysctl --system ile yüklenir.
Sık gözden kaçan bir darboğaz, kernel'in bağlantı izlemesidir. Tablo dolduğunda sunucu meşru paketleri de düşürür ve logda “nf_conntrack: table full, dropping packet” satırı görünür. Durumu ve üst sınırı şu komut gösterir:
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
8. Web sitesi, login sunucusu ve oyun sunucusu için ayrı IP adresleri
Kayıt, bağış mağazası ve vote sayfalarını taşıyan proje web sitesi, alan adınız üzerinden her zaman bulunabilir. Site login sunucusuyla aynı IP adresinde duruyorsa web sitesine yapılan bir saldırı aynı anda oturum açmayı da felç eder ve tersi de geçerlidir. Bu üç rolü farklı adreslere ayırın. O zaman web sitesine yapılan bir saldırıda oyun erişilebilir kalır ve 2106 portuna yapılan bir saldırıda hâlihazırda bağlı olan oyuncular oynamaya devam eder.
Bu sırada DNS kayıtlarını temiz tutun. En sık görülen hata, önceki bir adrese işaret eden, unutulmuş bir A kaydıdır: Bu kayıt her adres değişikliğini etkisiz kılar, çünkü saldırgan yeni adresi oyuncularınızla aynı ad üzerinden bulur.
Ve burada hayal değil dürüstlük gerekir: Login sunucunuzun adresi gizli tutulamaz. Bu adres, her oyuncunun indirdiği System klasöründeki l2.ini dosyasında durur. Oyun sunucusunun adresini ise login sunucusu kendisi dağıtır: L2J'de bu adres harici adres olarak ipconfig.xml dosyasında durur (eski türevlerde Server.properties dosyasındaki ExternalHostname olarak) ve başarıyla oturum açan her istemciye bildirilir. Saklanmak bir strateji değildir, filtrelemek bir stratejidir.
9. Kayıt tutma, böylece ciddi durumda verileriniz 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 birlikte çalışır. Bir olay sırasında dört komut yeter:
sar -n DEV 1 10
ss -tn state syn-recv | wc -l
ip -s link show eth0
tcpdump -ni eth0 'tcp port 2106' -c 200 -q
İkinci satır Lineage 2'de en anlamlı olanıdır: Yarı açık bağlantıları sayar. Birkaç yüz oyuncuyla beş haneli bir değer, bir SYN flood'udur ve başka bir şey değildir. 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. Bir Lineage 2 sunucusuna karşı bunun için büyük bir saldırı bile gerekmez, çünkü ikinci büyüklük daha önce vurur: paket hızı. 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.
Salt TCP kullanan bir oyunda buna üçüncü bir sınır eklenir. Her yarı açık bağlantı, bağlantı izlemede ve backlog'da bir kayıt tutar ve L2J login sunucusu oturumlarını 60 saniyeye kadar ayakta tutar. Yani hattınızı üçte birine bile doldurmayan, saniyede birkaç yüz bin paketlik bir saldırı oturum açmayı tamamen bloke edebilir. İşletmeciler bunu “doluluk hiç de yüksek değildi, buna rağmen kimse içeri giremedi” biçiminde yaşar.
Gerçekte hangi büyüklüklerin görüldüğünü yerine koymak için: KernelHost sunucularında, bir oyun sunucusuna yönelik saniyede 8,7 milyon paketin üzerinde ve 112,2 Gbit/s'nin üzerinde bir saldırı ile bir ses sunucusuna yönelik saniyede 41,5 milyon paketin üzerinde ve 473,4 Gbit/s'nin üzerinde çok vektörlü bir saldırı da filtrelendi. Bunun için yerel bir ayar yoktur. Hacimsel saldırılar sunucunun önündeki ağda son bulmalıdır. Akut durumda ne yapılacağı Ağır bir DDoS saldırısı: ne yapmalı? yazısında.
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. Özellikle bir Grand Opening'de bu, başarılı bir açılış ile kaybedilmiş bir açılış arasındaki farktır. Ve null routing kullanılmaz: IP adresiniz ağda kalır, yalnızca zararlı paketler düşürülür. IP adresini ağdan çeken kişi, sizin açınızdan saldırganla aynı sonuca ulaşır. Hangi oyunların ve protokollerin kapsandığını Gerçek zamanlı oyun sunucusu DDoS koruması yazısı listeliyor.
Sürekli ateş altındaki projeler için Advanced DDoS Protection
Bazı projelere ara sıra değil, hedefli biçimde ve haftalar boyunca saldırılır ve Lineage 2 çevresinde bu, sunucu listelerinin üst sıralarına çıkan her sunucu için normal durumdur. Bunun için ayda 50,00 EUR'dan başlayan, PrePaid ve asgari süresi olmayan Advanced DDoS Protection var. Fark, daha fazla kapasitede değil, kontrolde:
- Dedicated koruma IP'si: Frankfurt çekirdek ağından verilir ve sunucunuz kendi ağı içinde bu adrese geçirilir. Sizin tarafınızda hiçbir değişiklik gerekmez.
- Müşteri panelinde port ve protokol başına kendiniz yönetebileceğiniz koruma kuralları: 2106 TCP'de neye izin verildiğini ve 7777 TCP'de neye izin verildiğini ayrı ayrı ayarlarsınız. Lineage 2'de belirleyici nokta budur, çünkü iki port tamamen farklı trafik kalıplarına sahiptir: bir tarafta çok sayıda kısa bağlantı, öbür tarafta çok az ama çok uzun bağlantı.
- Değişiklikler gerçek zamanlı etki eder, yani süren bir saldırı sırasında ince ayar yapabilirsiniz ve kuralları açılış saatinden önce daha sıkı, sonrasında yeniden gevşek ayarlayabilirsiniz.
- Uygulamaya uygun koruma profili, herhangi bir TCP veya UDP portundaki değiştirilmiş ve kendi sunucu dosyalarınız için de. L2J, L2J-Mobius, aCis ya da bir L2OFF paketi işletmeniz kural seti açısından fark etmez, çünkü kural seti port ve protokol üzerine kurulur.
İ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, 2106 ve 7777 ayrı ayrı |
| Değişiklikler | otomatik olarak birlikte ilerler | gerçek zamanlı etki eder, bir saldırı sırasında da |
| Sunucu dosyaları | yaygın oyunlar için optimize edilmiş profiller | port ve protokol başına profil, yani L2J, L2J-Mobius, aCis ve L2OFF 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 |
Lineage 2 projelerinin çoğu için, dâhil olan sürekli koruma düzgün bir sunucu yapılandırmasıyla birlikte yeterlidir. Advanced DDoS Protection ise birinin meseleyi kişisel almasına verilen yanıttır ve bu, deneyime göre Grand Opening'den önceki hafta olur.
Sık yapılan hatalar ve çözümleri
“Login çalışmıyor, ama oyun sunucusu normal çalışıyor”: Bu bir rastlantı değil, bir Lineage 2 sunucusuna yapılan saldırının olağan biçimidir. Login sunucusu ile oyun sunucusu, iki port üzerindeki iki süreçtir. ss -tn state syn-recv | wc -l ve sar -n DEV 1 10 değerlerini ölçün. Bant genişliği dikkat çekmezken yarı açık bağlantılar artıyorsa bu, 2106 üzerindeki bir bağlantı flood'udur.
“IP adresini değiştirdim ve ertesi gün yine çevrimdışıydım”: Saldırgan yeni adresi oyuncularınızla aynı yoldan alır, yani değiştirilmiş l2.ini dosyasını taşıyan yeni System klasörü üzerinden, duyurunuz üzerinden ya da unutulmuş bir DNS kaydı üzerinden. Bir adres değişikliği zaman kazandırır, çözüm getirmez.
“MaxConnectionPerIP değerini 3 yaptım, şimdi oyuncular şikâyet ediyor”: Lineage 2'de dualbox olağandır ve bir Carrier-NAT arkasındaki oyuncular tek bir herkese açık adresi yüzlerce başka oyuncuyla paylaşır. Normal işletimdeki ölçüm değerlerinizi kapsayan bir değere geri dönün ve bunun yerine yeni bağlantı hızını kernel içinde sınırlayın.
“iptables kurallarım etki etmiyor”: Üç neden sıktır. Kurallar UFW zincirlerinin arkasında duruyor ve hiç ulaşılmıyordur, son yeniden başlatmadan sonra kaybolmuşlardır (o zaman netfilter-persistent save komutu veya /etc/ufw/before.rules dosyasındaki bir kayıt yardımcı olur) ya da saldırı hacimseldir ve kural, zaten dolu olan bir hatta doğru biçimde çalışıyordur. iptables -L INPUT -n -v komutuyla eşleşme sayaçlarının artıp artmadığını kontrol edin. Sayaçlar sıfırda kalıyorsa kurala ulaşılmıyor.
“Bütün oyuncularda lag sıçramaları var, ama hat sakin”: O zaman bu bir DDoS saldırısı değildir. Bir Java sunucusunda olağan şüpheliler çöp toplama duraklamaları, uygun indeksleri olmayan bir veritabanı ve döngüye girmiş bir script ya da özel bir event'tir. Önce sar -n DEV 1 10 çıktısını kontrol edin: Paket hızları normal kalıyorsa neden ağda değil sunucudadır.
“Ö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.
“Grand Opening'im iki hafta sonra”: O zaman şimdi taşının, açılış haftasında değil. Bir taşınma, oyuncular için yeni bir System klasörüne, bir DNS değişikliğine ve bir test çalışmasına mal olur. Bütün bunları, tarihi duyurmadan önce arkanızda bırakmak istersiniz, çünkü duyurudan itibaren her rakip sizin en elverişsiz zamanınızı bilir.
Kısaca özetle
- Özel bir Lineage 2 sunucusu açık ağda tam olarak iki porta ihtiyaç duyar: login sunucusu için 2106 TCP ve oyun sunucusu için 7777 TCP. 9014 portu, veritabanı (L2J'de 3306, L2OFF'ta 1433) ve dâhilî L2OFF portları 2002, 2006, 2008, 2104 ile 2108 bunlara dâhil değildir.
- Lineage 2 yalnızca TCP üzerinden çalışır ve ne bir sorgu portu ne de bir RCON portu vardır. Bu yüzden tipik saldırı, 2106 portuna yapılan bir SYN ya da bağlantı flood'udur, bir UDP flood'u değil.
- Login sunucusuna yapılan bir saldırı yalnızca yeni oturum açmaları bloke eder. Dünyadaki oyuncular oynamaya devam ederken kimse içeriye giremiyorsa neden 7777 portunda değil 2106 portunda aranmalıdır.
EnableFloodProtection,MaxConnectionPerIP,LoginTryBeforeBanveAutoCreateAccountsdeğerlerini bilinçli olarak ayarlayın,AcceptNewGameServerdeğerini kayıttan sonraFalseyapın ve bağlantı hızlarını buna ek olarak kernel içinde sınırlayın, çünkü Java freni ancak hattın arkasında devreye girer.- Lineage 2 sunucularına saldırılar sunucu açılışlarında yoğunlaşır, çünkü tarih ve saat haftalar öncesinden herkese açıktır ve ekonomik zarar açılış gününde en büyüktür. Koruma duyurudan önce yerinde olmalıdır, sonrasında değil.
- Hat kapasitesinin ve saniyede birkaç yüz bin paketin üzerinde yalnızca sunucunun önündeki ağda yapılan filtreleme belirleyicidir. KernelHost'ta bu filtreleme iki kademelidir, kalıcı olarak etkindir, ek ücretsizdir ve null routing kullanmaz.
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
Lineage 2 sunucum şu anda çevrimdışı. Bunun bir DDoS saldırısı olduğunu nasıl anlarım?
Bir Lineage 2 sunucusu için hangi portları açık bırakmam gerekir?
Lineage 2'de neden oyun sunucusu değil de 2106 portundaki login sunucusu saldırıya uğrar?
L2J'de 9014 portu ne içindir ve dışarıdan erişilebilir olması gerekir mi?
Lineage 2 sunucuları neden özellikle Grand Opening sırasında saldırıya uğrar?
iptables ya da L2J'nin flood korumasıyla bir DDoS saldırısına karşı koyabilir miyim?
Şimdi hızlıca L2 sunucumun IP adresini değiştirmek işe yarar mı?
Lineage 2 sunucum hangi büyüklükten sonra bunu tek başına başaramaz?
KernelHost'taki sunucum bir saldırı sırasında çevrimdışı olur mu?
KernelHost'ta DDoS koruması ek ücretli mi?
Lineage 2 projem için ek olarak Advanced DDoS Protection'a ne zaman ihtiyaç duyarım?
2026 KernelHost GmbH. Tüm hakları saklıdır. Bu rehber telif hakkıyla korunmaktadır. Yazının başka web sitelerinde tamamen, kısmen ya da düzenlenmiş biçimde yayımlanması, yazılı iznimiz olmadan serbest değildir. Kaynak belirtilerek ve bağlantı verilerek yapılan alıntılar ise memnuniyetle karşılanır.

