Skip to content

Instantly share code, notes, and snippets.

@suleymanfatih
Last active June 25, 2025 10:46
Show Gist options
  • Select an option

  • Save suleymanfatih/23e975d220f888227d497ed839157032 to your computer and use it in GitHub Desktop.

Select an option

Save suleymanfatih/23e975d220f888227d497ed839157032 to your computer and use it in GitHub Desktop.
mc-firewall

🛡️ Raspberry Pi Üzerinde Paper Minecraft Sunucusu Güvenliği

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.


🔑 1. SSH Anahtarlı Giriş (Key-Based Authentication)

Sunucuya parolasız, sadece size özel bir SSH anahtarı ile bağlanmak, brute-force saldırılarını tamamen önler.

🔧 Kendi bilgisayarınızda (istemci):

ssh-keygen -t ed25519

Oluş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.


⚠️ 2. SSH Güvenliğini Artırma

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_config

Aş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.


🔐 3. Fail2Ban Kurulumu ve SSH Brute-Force Koruması

fail2ban, başarısız giriş denemelerini takip eder ve belirli sayıda hatalı deneme yapan IP adreslerini otomatik olarak engeller.

Kurulum:

sudo apt-get update
sudo apt-get install fail2ban -y

Yapılandırma:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Jail 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/24

Fail2ban 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.


🌍 4. Coğrafi Erişim Kısıtlaması (GeoIP)

Gerekli Paketler:

sudo apt update
sudo apt install ipset iptables wget  -y
sudo 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
done
cd /opt/ipdeny/
sudo bash /opt/ipdeny/tr_disini_engelle.sh
sudo ipset restore < /opt/ipdeny/geoip-load.txt
rm -f /opt/ipdeny/*.zone /opt/ipdeny/all-zones.tar.gz

IPSet'i Kalıcı Hale Getirme

sudo ipset save | sudo tee /etc/ipset.conf > /dev/null

Sistem 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.target

Sonra servisi etkinleştir:

sudo systemctl daemon-reload
sudo systemctl enable ipset-restore

🔁 Sunucu yeniden başladığında IP bloklama otomatik olarak aktif hale gelir.


🛡️ 5. Güvenlik Duvarı (iptables) Kuralları

Kuralların Uygulanması:

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.


💾 6. Kuralları Kalıcı Hale Getirme

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.


🔄 7. Sistem Güncellemeleri ve Bakım

  • 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.


🎉 Tebrikler!

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! ☁️🧱🕹️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment