Metin2 Sunucu Güvenliği
Bir sunucuyu bir buçuk yıl boyunca ayakta tutup aynı zamanda “bunu çökertmeye çalışan” insanlarla uğraşınca, güvenlik kelimesinin ne anlama geldiğini biraz daha farklı görmeye başlıyorsun. Dışarıdan bakınca basit gibi duran şeylerin aslında ne kadar kolay sömürülebildiğini defalarca deneyimledikten sonra, kafada otomatik bir kontrol listesi oluşuyor. Bu yazı da biraz o gözle yazıldı diyebilirim. Amaç saldırı yöntemlerini öğretmek değil, tam tersi; en azından temel seviyede nasıl korunulur onu toparlamak.

Şunu baştan söyleyeyim, hiçbir sistem %100 güvenli değil. Bu tamamen karşındaki kişinin ne kadar uğraştığıyla ilgili. Bugün sağlam dediğin yapı, yarın başka bir açıkla tekrar gündeme gelebiliyor. O yüzden burada anlatılan şey “tam çözüm” değil, minimum seviyede sağlam durman için gereken temel hatlar. Özellikle Metin2 gibi ekonomi, item dengesi ve oyuncu etkileşimi yoğun olan oyunlarda küçük bir açık bile zincirleme şekilde sistemi bozabiliyor.
Oyun içi exploit ve bug tarafı
En çok göz ardı edilen ama aslında en tehlikeli kısım burası. Dışarıdan saldırı falan değil, direkt oyun içinden sistemin delinmesi. Mesela ekonomi tarafına dikkat etmek gerekiyor. Bir item bir anda aşırı değerleniyorsa ya da tam tersi çöküyorsa, genelde arka planda bir şeyler dönüyordur. Benim gördüğüm sunucularda bu tip şeyler genelde ilk sinyal oluyor.
Klasik hatalardan biri item dengesizliği. Bir item NPC’ye satıldığında, satın alma fiyatından daha fazla yang veriyorsa olay bitmiştir zaten. Bunu fark eden biri bot yazıp sürekli döngüye sokabiliyor. Bir süre sonra oyun içi ekonomi tamamen uçuyor. Oyuncular arasında adalet kalmıyor, bazıları sonsuz zenginlik elde ediyor. Bu tarz şeyleri tek tek kontrol etmek gerekiyor, özellikle item satış değerleri.

Quest tarafı da ayrı bir problem. Yanlış yazılmış questler oyuncuya aynı ödülü tekrar tekrar verebiliyor. Özellikle client kapat-aç tarzı açıklar çok sık görülüyor. Basit bir mantık var aslında, ödül verilen kod bloğu en sona düzgün şekilde bağlanmazsa sistem “tamamlandı” state’ini yanlış okuyor ve exploit çıkıyor.
Daha teknik tarafta ise server crash bug’ları var. number_ex tarzı eski bug’lar mesela bazı komutların parametrelerle patlamasına sebep oluyordu. Özellikle zar atma, random fonksiyonlar gibi sistemlerde kullanılıyordu. 34k ve eski revizyonlarda bu tip şeyler daha yaygın. Bazı fix paketleri var ama tamamen kapatmak kullanılan core’a bağlı.

Bir diğer problem savaş (war) komutu exploit’i. Lonca savaşlarıyla ilgili olduğu için kapatamıyorsun ama eski sürümlerde bunu kullanarak server crash atılabiliyordu. Yine benzer şekilde “gold drop crash” dediğimiz olay var; aşırı miktarda yang veya item drop edilince core çökebiliyor. Bunlar genelde eski altyapılarda kalmış ama hâlâ karşılaşılabiliyor.
Server ve OS tarafı (altyapı kısmı)
İşin en kritik kısmı burası aslında. Çünkü oyun içi bug’lar seni yavaş yavaş bitirir ama OS veya network tarafı direkt server’ı götürür.
Hosting seçimi çok önemli. DDoS koruması olmayan bir yerde zaten uzun süre ayakta kalmak zor. OVH gibi sağlayıcılar bu işte sık kullanılıyor çünkü maliyet/koruma dengesi iyi. Ama şunu net söyleyeyim, “basic protection” çoğu zaman yeterli olmuyor. Saldırı anında birkaç dakika bile açık kalması bile sunucuyu çökertebilir.

Pro versiyonlarda trafik sürekli mitigation üzerinden geçiyor, ayrıca firewall yönetimi var. Burada önemli nokta şu: gereksiz portları kapatmak. Özellikle 3306 (MySQL) kesinlikle public olmamalı. Navicat gibi araçlarla bağlanmak için SSH tunnel kullanmak daha doğru bir yöntem.
UDP tarafı da genelde sorun çıkarıyor. Birçok setup’ta tamamen kapatmak daha stabil sonuç veriyor. TCP zaten yeterli oluyor çoğu modern client için.
SSH ve sistem sertleştirme
SSH tarafı en çok brute force yenen yerlerden biri. İlk yapılması gereken root login’i kapatmak. Direkt root ile dışarı açılmak ciddi risk. Onun yerine game gibi bir kullanıcı açıp yetkiyi oradan vermek daha sağlıklı.

Şifre ile login’i kapatıp SSH key kullanmak neredeyse zorunlu gibi bir şey. Çünkü brute force denemeleri logları bile şişiriyor, sürekli port scan yiyorsun zaten. Root login kapandıktan sonra sadece key ile giriş yapılmalı.
Bir de yetki yönetimi önemli. Dosya sahiplikleri düzgün ayarlanmazsa ya server çalışmaz ya da herkes her şeye erişir. game kullanıcısına /home/game gibi bir alan verip tüm server dosyalarını oraya almak daha temiz bir yapı.
Firewall (pf mantığı)
Son katman firewall. Burada amaç sadece gerekli portları açık bırakmak. SSH, game portları, auth portları gibi şeyler dışındaki her şey kapalı olmalı. Özellikle database portunun dışarı açık olması çok büyük risk.

pf firewall gibi sistemlerde ayrıca rate limiting ve scrubbing özellikleri var. Bu da küçük saldırıları otomatik filtreleyebiliyor. Donanım firewall tek başına yetmeyebiliyor, yazılım firewall ile birlikte kullanmak daha sağlam bir yapı oluşturuyor.
Paylaş :




