Bu rehber, Raspberry Pi üzerinde çalışan bir Paper (veya benzeri) Minecraft sunucusunun güvenliğini artırmak amacıyla hazırlanmıştır. Aşamalar sıralı ve açıklamalı olarak verilmiştir. Her adımın sonunda neden bu işlemi yaptığımız ayrıca belirtilmiştir. Sisteminize zarar vermemek için işlemleri sırasıyla dikkatle uygulayın.
Sunucuya parolasız, sadece size özel bir SSH anahtarı ile bağlanmak, brute-force saldırılarını tamamen önler.
ssh-keygen -t ed25519Oluşan anahtarı sunucuya gönderin:
ssh-copy-id -i ~/.ssh/id_ed25519.pub pi@<sunucu_IP_adresi>Eğer ssh-copy-id komutu yoksa manuel olarak da ekleyebilirsiniz:
# Sunucuda (Raspberry Pi)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # public anahtarı buraya yapıştırın
chmod 600 ~/.ssh/authorized_keys👉 Neden? Parola ile giriş ihtiyacını kaldırarak SSH üzerinden yapılacak brute-force saldırılarını tamamen etkisiz hâle getirir.
SSH bağlantısını daha güvenli hale getirmek için yapılandırma dosyasını düzenleyin.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo nano /etc/ssh/sshd_configAşağıdaki satırları bulun ve şu şekilde ayarlayın:
Port 2222 # 1024 üstü bir port seçin (örnek: 2222)
PasswordAuthentication no # Yalnızca SSH anahtarıyla giriş izni
PubkeyAuthentication yes # Anahtarlı giriş onaylansın
PermitRootLogin no # Root ile doğrudan giriş yasaklansın
Bu işlemleri Kaydedip modem veya router panelinden yeni portumuza yönlendirme ekleyip ardından ssh servisini yeniden başlatın. Sonrasında eski ssh port yönlendirmesini silebilirsiniz.
sudo systemctl restart ssh👉 Neden? SSH portunu değiştirerek bot taramalarından kurtulursunuz. Parola girişini kapatarak güvenlik duvarını daha da sağlamlaştırırsınız.
fail2ban, başarısız giriş denemelerini takip eder ve belirli sayıda hatalı deneme yapan IP adreslerini otomatik olarak engeller.
sudo apt-get update
sudo apt-get install fail2ban -ysudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localJail tanımlamaları: Dosya içinde her servis için bir [service] bloğu bulunur (örneğin [sshd]). Bu blokların altında enabled = true satırı ile ilgili servisi etkinleştirin. Örnek SSH jail’i (varsayılan log dosyası ve port ile):
[sshd] bloğunu şu şekilde yapılandırın:
[sshd]
enabled = true
port = 2222 # (örnek: 2222)
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
ignoreip = 127.0.0.1 192.168.1.0/24Fail2ban servisini yeniden başlatıp aktif hale getirelim!
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban👉 Neden? SSH bağlantılarını test eden botların IP'si otomatik olarak engellenmiş olur.
sudo apt update
sudo apt install ipset iptables wget -ysudo mkdir /opt/ipdeny
sudo nano /opt/ipdeny/tr_disini_engelle.sh#!/bin/bash
cd /opt/ipdeny || exit 1
# Zone dosyalarını indir
wget -N http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
tar -xzf all-zones.tar.gz
# geoip-load.txt oluştur
echo "create geoip-block hash:net maxelem 300000" > geoip-load.txt
# TR dışındaki IP’leri ekle
for zone in *.zone; do
country=$(basename "$zone" .zone)
if [ "$country" != "tr" ]; then
while read -r ip; do
echo "add geoip-block $ip" >> geoip-load.txt
done < "$zone"
fi
donecd /opt/ipdeny/
sudo bash /opt/ipdeny/tr_disini_engelle.sh
sudo ipset restore < /opt/ipdeny/geoip-load.txtrm -f /opt/ipdeny/*.zone /opt/ipdeny/all-zones.tar.gzsudo ipset save | sudo tee /etc/ipset.conf > /dev/nullSistem her yeniden başlatıldığında GeoIP IPSet listesini otomatik olarak yüklemek için bu betik kullanılır.
sudo nano /etc/systemd/system/ipset-restore.service[Unit]
Description=Restore IP sets
DefaultDependencies=no
Before=netfilter-persistent.service
After=network.target
Wants=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipset restore -f /etc/ipset.conf
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetSonra servisi etkinleştir:
sudo systemctl daemon-reload
sudo systemctl enable ipset-restore🔁 Sunucu yeniden başladığında IP bloklama otomatik olarak aktif hale gelir.
sudo iptables -F
sudo iptables -X
# Temel güvenlik
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Güvenilir IP’ler
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -s 1.1.1.1 -j ACCEPT
# Ping (ICMP echo-request) engelle
sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# TR dışı engelle (geoip-block içindeki IP'ler)
sudo iptables -A INPUT -p tcp --dport 2222 -m set --match-set geoip-block src -j DROP
sudo iptables -A INPUT -p tcp --dport 25565 -m set --match-set geoip-block src -j DROP
sudo iptables -A INPUT -p udp --dport 25565 -m set --match-set geoip-block src -j DROP
# SSH ve Minecraft’a TR içi izin
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 25565 -j ACCEPT
# Diğer her şeyi engelle
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP👉 Neden? Sadece izin verdiğimiz bağlantılar geçebilir. Minecraft ve SSH dışında tüm trafiği engellemiş oluruz.
sudo apt-get install iptables-persistent -y
sudo netfilter-persistent save👉 Neden? Sunucu yeniden başlatıldığında tüm iptables kurallarının korunmasını sağlamak için.
- Sistem güncelleme:
sudo apt update && sudo apt full-upgrade -y - Kullanılmayan paketleri temizleme:
sudo apt autoremove -y
- Günlük dosyaları kontrol:
sudo tail -f /var/log/auth.log
- Otomatik güvenlik güncellemeleri için:
sudo apt install unattended-upgrades
👉 Neden? Güncel olmayan sistemler zafiyet barındırabilir. Bakım, sistemin kararlılığını artırır.
Artık Paper Minecraft sunucunuz, Raspberry Pi üzerinde katmanlı güvenlik önlemleriyle güçlendirilmiş durumda:
- 🔐 SSH anahtarla giriş
- 🛡️ iptables ile kural bazlı güvenlik
- 🌍 Coğrafi IP engeli
- 🔒 Brute-force saldırılarına karşı fail2ban
- 🔄 Güncelleme ve bakım yapısı
Bağlantınızı kesmeden önce kuralları test etmeyi unutmayın. SSH portu değiştiyse yeni portla bağlantı kurabildiğinizi doğrulamadan oturumu kapatmayın.
Sunucun sana hizmet etmeye hazır! ☁️🧱🕹️