Metin2 sunucusunun kullandığı portlar, hangilerinin dışarı kapalı olması gerektiği ve iptables ile pf üzerinde güvenlik duvarı kuralları.
Metin2 sunucusu kurulduğunda varsayılan ayarlarla gelir ve bu ayarlar herkeste aynıdır. Aynı olması saldırganın işini kolaylaştırır: hangi portun ne yaptığını bilmek için sunucunuzu incelemesine gerek kalmaz.
Bu yazıda Metin2'nin kullandığı portları, hangilerinin dışarı açık olması gerektiğini ve gereksiz olanları nasıl kapatacağınızı anlatıyoruz.
Metin2 Hangi Portları Kullanır?
Standart bir kurulumda karşınıza çıkacak portlar:
| Port | Servis | Dışarı açık olmalı mı? |
|---|---|---|
11002 | Auth sunucusu — giriş doğrulaması | Evet |
13000 | Oyun kanalı 1 | Evet |
13001 | Oyun kanalı 2 | Evet |
15000 | DB önbellek sunucusu (db_cache) | Hayır |
3306 | MySQL veritabanı | Hayır |
22 | SSH yönetim erişimi | Sınırlı |
80 / 443 | Web sitesi | Evet |
Tablodaki en önemli iki satır 15000 ve 3306. Bu ikisi sunucunun iç iletişimi içindir ve internete açık olmaları için hiçbir sebep yoktur. Buna rağmen taradığımız birçok Metin2 sunucusunda ikisinin de dışarıdan erişilebilir olduğunu görüyoruz.
Dışarı açık bir 3306 portu, veritabanınızın şifresine yönelik sınırsız deneme hakkı demektir. Şifreniz güçlü olsa bile, bu portu açık bırakmak için hiçbir geçerli sebep yok.
Açık Portlarınızı Kontrol Edin
Önce mevcut durumu görün. Sunucuda:
netstat -an | grep LISTEN
Daha okunaklı bir çıktı için:
sockstat -4 -l
Çıktıda 0.0.0.0:3306 gibi bir satır görüyorsanız, o servis tüm ağ arayüzlerinden dinliyor demektir. 127.0.0.1:3306 görüyorsanız sadece sunucunun kendisinden erişilebilir; istediğiniz budur.
Oyun Portlarını Değiştirme
Varsayılan 13000 portunu değiştirmek, sunucunuzu Metin2 sunucusu olarak tarayıp hedef listesine ekleyen otomatik araçların bir kısmını atlatır. Tek başına bir koruma değil, ama gürültüyü azaltır.
Kanal yapılandırmasını düzenleyin
cd /usr/home/channel1/game1
nano CONFIG
Dosyada port satırını bulun:
PORT: 13000
İstediğiniz değerle değiştirin. 1024 üzerindeki, başka bir servisin kullanmadığı bir port seçin:
PORT: 24710
Auth portunu değiştirmek
cd /usr/home/auth
nano CONFIG
Aynı şekilde PORT satırını güncelleyin.
İstemci tarafını da güncelleyin
Bu adımı atlarsanız oyuncularınız sunucuya bağlanamaz. Client'taki serverinfo.py dosyasında yeni port değerlerinin yazılı olması gerekir. Yeni bir yama çıkarıp dağıtmayı unutmayın.
Port değişikliğini oyuncu yoğunluğunun düşük olduğu bir saatte, önceden duyuru yaparak yapın. Bağlanamayan oyuncu, sunucunun kapandığını düşünür.
db_cache Portunu Kapatın
15000 portu oyun sunucusu ile veritabanı arasındaki köprüdür. Aynı makinede çalışıyorlarsa dışarıya açılmasına hiç gerek yoktur.
db dizinindeki yapılandırma dosyasında bağlanma adresini yerel arayüze sabitleyin:
BIND_IP: 127.0.0.1
Kanallarınız farklı fiziksel sunucularda çalışıyorsa bu değişikliği yapamazsınız; o durumda güvenlik duvarından sadece kendi sunucularınızın IP'lerine izin verin.
MySQL'i Dışarıya Kapatın
MySQL yapılandırma dosyasını açın (my.cnf) ve şu satırı ekleyin ya da düzeltin:
bind-address = 127.0.0.1
Servisi yeniden başlatın:
systemctl restart mysqld
FreeBSD kullanıyorsanız:
/usr/local/etc/rc.d/mysql-server restart
Peki Navicat ile nasıl bağlanacağım?
SSH tüneli üzerinden. Navicat'ta bağlantı oluştururken SSH sekmesini kullanır, sunucunuzun SSH bilgilerini girersiniz. Navicat önce SSH ile bağlanır, veritabanına oradan ulaşır. 3306 portu dışarı kapalı kalır ama siz rahatça çalışırsınız.
MySQL şifresiyle ilgili sorun yaşarsanız Navicat ve MySQL şifre değiştirme rehberimize bakabilirsiniz.
Güvenlik Duvarı Kuralları
Port ayarlarını yaptıktan sonra, kalan her şeyi güvenlik duvarıyla kapatın. Doğru yaklaşım "her şey kapalı, sadece gerekenler açık" biçimindedir.
Linux — iptables
# Mevcut baglantilari koru
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Yonetim ve oyun portlari
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 11002 -j ACCEPT
iptables -A INPUT -p tcp --dport 13000 -j ACCEPT
iptables -A INPUT -p tcp --dport 13001 -j ACCEPT
# Geri kalan her sey kapali
iptables -P INPUT DROP
Uyarı: Son satırı çalıştırmadan önce SSH portunun izinli olduğundan emin olun. Aksi hâlde kendi sunucunuza erişiminizi kaybedersiniz ve sağlayıcınızın konsolundan girmek zorunda kalırsınız.
Kuralları kalıcı yapmak için:
iptables-save > /etc/iptables/rules.v4
FreeBSD — pf
nano /etc/pf.conf
oyun_portlari = "{ 11002, 13000, 13001 }"
web_portlari = "{ 80, 443 }"
block in all
pass out all keep state
pass in on lo0 all
pass in proto tcp to port 22 keep state
pass in proto tcp to port $web_portlari keep state
pass in proto tcp to port $oyun_portlari keep state
Etkinleştirin:
pfctl -f /etc/pf.conf
pfctl -e
SSH Erişimini Kendinizle Sınırlayın
Sabit IP adresiniz varsa SSH'ı sadece kendinize açın. Bu, sunucu güvenliğinde yapabileceğiniz en etkili tek hamledir:
iptables -A INPUT -p tcp --dport 22 -s SIZIN_IP_ADRESINIZ -j ACCEPT
IP'niz değişkense bu kuralı uygulamayın; kendinizi dışarıda bırakırsınız. Onun yerine fail2ban gibi bir araçla art arda başarısız girişleri engelleyin.
Değişiklikleri Doğrulayın
Ayarları yaptıktan sonra dışarıdan tarayarak kontrol edin. Kendi sunucunuzdan yaptığınız test yanıltıcı olur, çünkü yerel bağlantılar güvenlik duvarına takılmaz.
Başka bir makineden:
nmap -p 22,3306,11002,13000,15000 SUNUCU_IP
Beklediğiniz sonuç: 3306 ve 15000 filtered ya da closed, oyun portları open.
Port Ayarı Tek Başına Yetmez
Doğru yapılandırılmış portlar, hacim tabanlı saldırılara karşı sizi korumaz. Saniyede yüz binlerce paket gönderen bir saldırı, portlarınız ne kadar düzgün olursa olsun bağlantınızı doldurur. Bunun için ağ seviyesinde filtreleme gerekir.
Metin2 sunucularının neden sık hedef olduğunu ve koruma katmanlarının nasıl çalıştığını DDoS saldırıları nedir yazımızda anlattık. Hazır korumalı altyapı arıyorsanız DDoS korumalı Metin2 sunucu paketlerimize göz atabilirsiniz.
Özet
Kontrol listesi kısa: veritabanı ve db_cache portlarını yerel arayüze sabitleyin, oyun portlarını varsayılandan farklı bir değere alın, güvenlik duvarını "önce hepsini kapat" mantığıyla kurun ve sonucu dışarıdan tarayarak doğrulayın.
Sunucunuzda geriye kalan güvenlik açıklarını taramak için Metin2 files güvenlik denetimi rehberimizi de uygulamanızı öneririz.
