Minecraft Sunucusu Kurulumu (Paper) ve DDoS Koruması Rehberi
Minecraft Java sunucusu kurmanın en pratik yolu, Ubuntu çalışan bir VDS'e Paper'ı kurup systemd ile servis haline getirmektir. DDoS'a karşı korunmak için ise sunucu içi ayarlar yetmez. Saldırı trafiğinin sunucunuza ulaşmadan önce temizlendiği, DDoS korumalı bir IP ile çalışmanız gerekir.
Bu rehberde Ubuntu 24.04 üzerinde Java 21, Paper, RAM ayarı, systemd servisi, güvenlik duvarı ve koruma seçimini sırayla ele alıyoruz.
1. Doğru VDS'i seçmek
Minecraft'ın ana oyun döngüsü büyük ölçüde tek çekirdeğe yaslanır. Çok çekirdekli ama düşük saat hızlı bir sunucu, birkaç yüksek frekanslı çekirdekten daha kötü performans verebilir. Seçerken şunlara bakın:
- CPU: Çekirdek sayısından çok tek çekirdek performansı önemlidir. Başlangıç için 2-4 vCPU çoğu durumda yeterlidir.
- RAM: Aşağıdaki tablo kaba bir başlangıç noktasıdır. Eklenti sayısı ve harita boyutu değeri değiştirir.
- Disk: Chunk yükleme ve yedekleme için SSD/NVMe tercih edin.
- Konum: Oyuncularınız Türkiye'deyse sunucunun Türkiye'de olması ping'i belirgin biçimde düşürür.
- DDoS koruması: Oyun sunucuları saldırı hedefi olmaya en yatkın hizmetlerden biridir. Koruma sonradan eklenecek bir detay olmamalı.
| Eşzamanlı oyuncu | Önerilen heap (Xmx) | Toplam VDS RAM |
|---|---|---|
| 1-10 | 3-4 GB | 4-6 GB |
| 10-40 | 6-8 GB | 8-10 GB |
| 40+ (eklentili) | 10 GB+ | 12 GB+ |
İşletim sistemi, disk önbelleği ve Java'nın heap dışı belleği için heap'in üstünde en az 1-2 GB pay bırakın.
2. Kullanıcı ve Java kurulumu
Minecraft 1.20.5 ve sonrası Java 21 ister. Sunucuyu root ile değil, ayrı bir kullanıcıyla çalıştırın:
sudo apt update && sudo apt install -y openjdk-21-jre-headless curl screen
sudo useradd -r -m -d /opt/minecraft -s /usr/sbin/nologin minecraft
java -version
java -version çıktısında 21 sürümünü görmelisiniz.
3. Paper'ı indirmek
Paper, Spigot tabanlı ve performans odaklı bir sunucu yazılımıdır. İndirme bağlantısını resmi sayfadan alın: papermc.io/downloads/paper. Sürüm numaraları sık değiştiği için aşağıdaki adresi kendi seçtiğiniz sürümle değiştirin:
sudo -u minecraft -s /bin/bash
cd /opt/minecraft
wget -O paper.jar "PAPERMC_SAYFASINDAN_KOPYALADIGINIZ_JAR_LINKI"
echo "eula=true" > eula.txt
exit
eula=true yazmak Mojang EULA'sını kabul ettiğiniz anlamına gelir. Önce metni okuyun: aka.ms/MinecraftEULA.
4. RAM ve JVM ayarları
Paper topluluğunda yaygın kullanılan Aikar bayrakları, G1 çöp toplayıcıyı Minecraft yüküne göre ayarlar. 12 GB altı heap için aşağıdaki set kullanılır. -Xms ile -Xmx değerini eşit tutmak, heap yeniden boyutlandırma kaynaklı takılmaları önler:
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 \
-jar paper.jar --nogui
Çok yüksek -Xmx vermek iyi fikir değildir. Heap büyüdükçe GC duraklamaları uzayabilir ve işletim sistemi için bellek kalmazsa OOM killer devreye girer.
Oyun tarafında asıl kazancı server.properties içindeki şu değerler sağlar:
view-distance=8
simulation-distance=6
online-mode=true
enable-rcon=false
network-compression-threshold=256
Oyuncu sayısı arttıkça simulation-distance değerini düşürmek, RAM eklemekten genellikle daha etkilidir. Haritayı önceden üretmek için Chunky eklentisi de CPU yükünü dağıtır.
5. systemd servisi
Sunucuyu screen içinde elle başlatmak yeniden başlatmalarda sorun çıkarır. systemd ile otomatik başlatma ve çökme sonrası yeniden başlatma elde edersiniz. Konsola komut gönderebilmek için bir socket birimi kullanıyoruz.
/etc/systemd/system/minecraft.socket:
[Unit]
Description=Minecraft konsol soketi
PartOf=minecraft.service
[Socket]
ListenFIFO=%t/minecraft.stdin
SocketUser=minecraft
SocketMode=0600
RemoveOnStop=true
/etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Paper Sunucusu
After=network-online.target
Wants=network-online.target
Requires=minecraft.socket
[Service]
User=minecraft
WorkingDirectory=/opt/minecraft
Sockets=minecraft.socket
StandardInput=socket
StandardOutput=journal
StandardError=journal
ExecStart=/usr/bin/java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Etkinleştirip başlatın:
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft.socket minecraft.service
sudo journalctl -u minecraft -f
echo "say Merhaba" | sudo tee /run/minecraft.stdin
Durdurduğunuzda systemd, Java sürecine SIGTERM gönderir. Paper bunu yakalayıp dünyayı kaydederek kapanır. Bu yüzden TimeoutStopSec değerini çok düşük tutmayın.
6. Güvenlik duvarı ve sunucu içi önlemler
Yalnızca gerekli portları açın:
sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable
Geyser ile Bedrock oyuncusu kabul ediyorsanız ayrıca 19132/udp gerekir. SSH için anahtar tabanlı giriş kullanın ve mümkünse 22. portu yalnızca kendi IP'nize açın.
Aynı IP'den aşırı bağlantı açan basit botları yavaşlatmak için iptables connlimit kullanılabilir:
sudo iptables -A INPUT -p tcp --dport 25565 \
-m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
bukkit.yml içindeki connection-throttle değeri de aynı IP'den gelen hızlı giriş denemelerini sınırlar. Bu önlemler uygulama katmanındaki küçük botlara karşı faydalıdır. Ancak tek başlarına gerçek bir DDoS'a karşı koruma sağlamazlar.
Arkada BungeeCord/Velocity kullanıyorsanız, alt sunucuların portunu yalnızca proxy IP'sine açın. Aksi halde saldırgan proxy'yi atlayıp doğrudan alt sunucuya bağlanabilir.
7. DDoS korumalı IP neden şart?
Minecraft sunucularına yönelik saldırılar genelde iki biçimde gelir:
- Hacimsel (L3/L4) saldırılar: UDP/SYN flood gibi trafikle hattı doldurur. Sunucu içindeki hiçbir ayar bunu çözemez, çünkü hat sunucuya varmadan dolar.
- Uygulama katmanı saldırıları: Sahte oyuncu botları, bozuk handshake paketleri ve login flood. Bunlar Java sürecini ve CPU'yu hedefler.
İlk grup için trafiğin sunucuya ulaşmadan altyapı seviyesinde filtrelenmesi gerekir. Bu nedenle VDS seçerken IP'nin DDoS koruması kapsamında olup olmadığını netleştirin. Kontrol edeceğiniz noktalar:
- Koruma, TCP (Java) ve gerekirse UDP (Bedrock) trafiğini kapsıyor mu?
- Saldırı sırasında sunucu IP'si null route'a alınıyor mu, yoksa trafik temizlenerek mi iletiliyor?
- Oyuncular için gerçek IP bilgisi ve düşük gecikme korunuyor mu?
- Saldırı geçmişini ve trafik grafiklerini görebiliyor musunuz?
Nixcon'un BGP destekli VDS sunucuları VMware vSphere tabanlıdır ve Türkiye (İzmir) lokasyonunda çalışır. Altyapı seviyesindeki filtreleme ve firewall seçenekleri için DDoS koruma ve firewall sayfasına bakabilirsiniz. Kendi ASN'iniz ve IP bloğunuz varsa, korumalı BGP anonsu seçeneği de mevcuttur.
Yaygın hatalar ve çözümleri
- "Failed to bind to port": Port başka bir süreç tarafından kullanılıyor.
sudo ss -tlnp | grep 25565ile kontrol edin. Önceki bir Java süreci hâlâ çalışıyor olabilir. UnsupportedClassVersionError: Sürüm için yanlış Java kullanıyorsunuz. Güncel Minecraft sürümleri için Java 21 gerekir.- Sunucu
Killedmesajıyla kapanıyor: OOM killer devrede.-Xmxdeğerini VDS RAM'inin altına çekin vedmesg | grep -i oomçıktısına bakın. - TPS düşüyor ama RAM boş: Sorun bellek değil CPU olabilir.
/spark profiler(Spark eklentisi) ile yavaş eklentiyi ya da yoğun entity bölgesini bulun. - Oyuncular bağlanamıyor:
ufw statusve panelinizdeki dış güvenlik duvarını kontrol edin.server.propertiesiçindekiserver-ipalanını boş bırakın. - Yedek almadan güncelleme: Paper'ı güncellemeden önce
worldklasörlerini vepluginsdizinini yedekleyin.
Sonuç
Sağlam bir Minecraft sunucusu için sıra şöyledir: tek çekirdek performansı yüksek bir VDS, Java 21, doğru boyutlandırılmış heap, systemd ile yönetilen bir servis ve altyapı seviyesinde DDoS koruması. Bu bileşenlerden biri eksikse, oyuncu sayınız arttığında ya da ilk saldırı geldiğinde sorun çıkar.
Sık sorulan sorular
Minecraft Paper sunucusu için kaç GB RAM gerekir?
10 kişiye kadar küçük bir sunucu için 3-4 GB heap genellikle yeterlidir. 10-40 oyuncuda 6-8 GB düşünülebilir. Heap'in üzerine işletim sistemi için en az 1-2 GB pay bırakın ve aşırı yüksek Xmx vermeyin.
Minecraft sunucusu için hangi Java sürümü gerekir?
Minecraft 1.20.5 ve sonrası Java 21 gerektirir. Ubuntu 24.04 üzerinde openjdk-21-jre-headless paketi yeterlidir. Yanlış sürüm UnsupportedClassVersionError hatası verir.
Sunucu içi ayarlar DDoS saldırısını durdurur mu?
Hayır. connlimit ve connection-throttle gibi ayarlar küçük botlara karşı işe yarar, ancak hattı dolduran hacimsel saldırılar sunucuya ulaşmadan altyapı seviyesinde filtrelenmelidir. Bu yüzden DDoS korumalı bir IP gerekir.
Minecraft sunucusunu systemd ile çalıştırırken konsola nasıl komut gönderirim?
Bir systemd socket birimi (ListenFIFO) ve serviste StandardInput=socket kullanın. Ardından echo "say Merhaba" | sudo tee /run/minecraft.stdin gibi komutlarla konsola yazabilirsiniz. Günlükleri journalctl -u minecraft -f ile izleyin.