Sunucu güvenlik duvarı yapılandırması tek bir ilkeye dayanır: gelen trafiğin tamamını reddedin, yalnızca hizmet verdiğiniz portları açın. Bu yaklaşımı uyguladığınızda sunucunuzdaki bir servis yanlışlıkla dışa açık kalsa bile dışarıdan erişilemez. Ubuntu ve Debian’da bu işi UFW, AlmaLinux ve Rocky’de firewalld, Windows Server’da Windows Defender Güvenlik Duvarı yapar.
Bu rehber üç işletim sistemi için de çalışan kurallar veriyor, Fail2Ban ile otomatik engellemeyi anlatıyor ve kuralların gerçekten çalıştığını nasıl doğrulayacağınızı gösteriyor. Sunucunuzu yeni kurduysanız VDS ilk ayarlar sayfasındaki diğer güvenlik adımlarını da tamamlayın.
Güvenlik Duvarı Nasıl Çalışır?#
Güvenlik duvarı, sunucunuza gelen ve giden her ağ paketini önceden tanımlanmış kurallara göre değerlendirir. Karar üç değerden çıkar: kaynak adres, hedef port ve protokol. Modern güvenlik duvarları durum bilgisi tutar (stateful): sizin başlattığınız bir bağlantının cevap paketleri otomatik olarak kabul edilir, çünkü bunlar mevcut bir oturumun parçasıdır.
Bu ayrım önemlidir. Giden trafiğe izin verip gelen trafiği reddettiğinizde sunucunuz internete çıkabilir, paket indirebilir, güncelleme alabilir; ama dışarıdan kimse ona bağlantı başlatamaz. Sunucu güvenliğinin temeli budur.
sudo ss -tulpn komutu hangi sürecin hangi portu dinlediğini tek bakışta gösterir.Hangi Portlar Açılmalı?#
| Port | Protokol | Servis | İnternete açık olmalı mı? |
|---|---|---|---|
| 22 | TCP | SSH | Evet, tercihen IP kısıtlamalı |
| 80 / 443 | TCP | HTTP / HTTPS | Evet, web sunucusu varsa |
| 3389 | TCP | RDP | Evet ama mutlaka kısıtlı |
| 25565 | TCP | Minecraft Java | Evet, oyun sunucusu varsa |
| 19132 | UDP | Minecraft Bedrock | Evet, Bedrock sunucusu varsa |
| 30120 | TCP + UDP | FiveM | Evet, FiveM sunucusu varsa |
| 22003 / 22005 / 22126 | UDP / TCP / UDP | MTA:SA | Evet, MTA sunucusu varsa |
| 3306 | TCP | MySQL / MariaDB | Hayır, SSH tüneli kullanın |
| 5432 | TCP | PostgreSQL | Hayır |
| 6379 | TCP | Redis | Kesinlikle hayır |
| 27017 | TCP | MongoDB | Hayır |
UFW ile Yapılandırma (Ubuntu, Debian)#
UFW, iptables üzerine kurulmuş sade bir arayüzdür ve günlük işlerin tamamını karşılar.
Temel kurulum#
# Kurulum (Ubuntu'da genellikle hazır gelir)
sudo apt update && sudo apt install -y ufw
# Varsayılan politikalar: gelen kapalı, giden açık
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH'ı AÇMADAN etkinleştirmeyin!
sudo ufw allow 22/tcp comment 'SSH'
# Etkinleştir
sudo ufw enable
# Durumu kontrol et
sudo ufw status verbose
sudo ufw status numbered
Servis portlarını açma#
# Web sunucusu
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw allow 'Nginx Full' # uygulama profili ile
# Minecraft Java ve Bedrock
sudo ufw allow 25565/tcp comment 'Minecraft Java'
sudo ufw allow 19132/udp comment 'Minecraft Bedrock'
# Port aralığı
sudo ufw allow 27015:27020/udp comment 'Oyun port araligi'
# Belirli bir IP'ye özel izin (yönetim erişimi)
sudo ufw allow from 198.51.100.25 to any port 22 proto tcp comment 'Ofis SSH'
# Bir IP'yi tamamen engelle
sudo ufw deny from 192.0.2.66
Kural silme ve sıfırlama#
# Numaralı listeden sil
sudo ufw status numbered
sudo ufw delete 3
# Kuralı yazarak sil
sudo ufw delete allow 25565/tcp
# Her şeyi sıfırla (dikkatli kullanın)
sudo ufw reset
Minecraft sunucusu için port açmanın ayrıntılı anlatımını UFW ile Minecraft portu açma sayfasında bulabilirsiniz.
firewalld ile Yapılandırma (AlmaLinux, Rocky Linux)#
Red Hat tabanlı dağıtımlarda varsayılan araç firewalld’dir. Bölge (zone) kavramıyla çalışır ve kalıcı kurallar için --permanent parametresi gerekir.
# Durum ve aktif bölge
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
# Port açma (kalıcı)
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --permanent --add-port=19132/udp
sudo firewall-cmd --permanent --add-service=https
# Değişiklikleri uygula
sudo firewall-cmd --reload
# Belirli bir kaynağa izin (zengin kural)
sudo firewall-cmd --permanent --add-rich-rule=\
'rule family="ipv4" source address="198.51.100.25" port port="22" protocol="tcp" accept'
sudo firewall-cmd --reload
--permanent olmadan verilen kurallar yalnızca çalışan yapılandırmaya uygulanır ve sunucu yeniden başladığında kaybolur. Kalıcı kural ekledikten sonra --reload komutunu çalıştırmayı unutmayın, aksi hâlde kural etkin olmaz.iptables ve nftables ile İleri Kurallar#
UFW ve firewalld çoğu ihtiyacı karşılar. Doğrudan iptables yazmanız gereken durumlar oran sınırlama, bağlantı sayısı kısıtlama ve özel zincir mantığıdır.
# Mevcut kuralları listele
sudo iptables -L -n -v --line-numbers
# Aynı IP'den saniyede en fazla 10 yeni SSH bağlantısı
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m limit --limit 10/minute --limit-burst 20 -j ACCEPT
# Tek IP'den eşzamanlı bağlantı sayısını sınırla
sudo iptables -A INPUT -p tcp --dport 25565 -m connlimit \
--connlimit-above 5 --connlimit-mask 32 -j REJECT
# Geçersiz paketleri düşür
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# ICMP flood'u sınırla
sudo iptables -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 1/second -j ACCEPT
iptables kuralları yeniden başlatmada kaybolur. Kalıcı hâle getirmek için:
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
Yeni sistemlerde nftables tercih edilir; kural sözdizimi farklıdır ama mantık aynıdır. UFW ile birlikte doğrudan iptables kuralı yazarken dikkatli olun: iki araç aynı tabloları yönetir ve çakışan kurallar beklenmedik davranışa yol açar.
Windows Defender Güvenlik Duvarı#
Windows Server’da güvenlik duvarını PowerShell ile yönetmek, grafik arayüzden çok daha hızlıdır.
# Güvenlik duvarı profillerinin durumu
Get-NetFirewallProfile | Select-Object Name,Enabled,DefaultInboundAction
# Tüm profillerde gelen trafiği varsayılan olarak engelle
Set-NetFirewallProfile -Profile Domain,Public,Private `
-Enabled True -DefaultInboundAction Block -DefaultOutboundAction Allow
# Port açma
New-NetFirewallRule -DisplayName "Minecraft Java" -Direction Inbound `
-Protocol TCP -LocalPort 25565 -Action Allow
New-NetFirewallRule -DisplayName "Minecraft Bedrock" -Direction Inbound `
-Protocol UDP -LocalPort 19132 -Action Allow
# Belirli IP'ye özel RDP izni
New-NetFirewallRule -DisplayName "RDP-Ofis" -Direction Inbound `
-Protocol TCP -LocalPort 3389 -RemoteAddress 198.51.100.25 -Action Allow
# Kuralları listele ve sil
Get-NetFirewallRule -DisplayName "*Minecraft*" | Select-Object DisplayName,Enabled,Direction
Remove-NetFirewallRule -DisplayName "Minecraft Java"
Grafik arayüzü tercih ederseniz Başlat menüsüne wf.msc yazın; Gelen Kurallar bölümünden Yeni Kural sihirbazıyla aynı işi yapabilirsiniz. Adım adım ekran anlatımı Windows Güvenlik Duvarında port açma sayfasında. RDP erişimini sıkılaştırmak için Uzak Masaüstü rehberindeki güvenlik bölümüne bakın.
Fail2Ban ile Otomatik Engelleme#
Güvenlik duvarı statik kurallar uygular; Fail2Ban ise davranışa göre dinamik kural ekler. Log dosyalarını izler, belirlenen sürede çok sayıda başarısız deneme yapan IP’yi geçici olarak engeller.
sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 198.51.100.25
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
maxretry = 4
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
maxretry = 10
findtime = 60
sudo systemctl enable --now fail2ban
# Durum ve engellenen IP listesi
sudo fail2ban-client status
sudo fail2ban-client status sshd
# Elle engelleme ve engel kaldırma
sudo fail2ban-client set sshd banip 192.0.2.66
sudo fail2ban-client set sshd unbanip 192.0.2.66
Fail2Ban’ı dağıtımınızın paket deposundan kurmanız yeterlidir; kaynak kod bağlantısı belge ve kural örnekleri içindir.
Kuralların Çalıştığını Doğrulama#
Kural yazmak yetmez; beklediğiniz gibi davrandığını ölçün. Üç ayrı kontrol yapın:
# 1) Sunucu içinde: hangi servis hangi portu dinliyor?
sudo ss -tulpn
# 2) Güvenlik duvarı ne diyor?
sudo ufw status numbered
sudo iptables -L INPUT -n -v --line-numbers
# 3) Dışarıdan gerçekten erişilebiliyor mu?
# (başka bir makineden çalıştırın)
nc -zv 203.0.113.10 25565
nmap -Pn -p 22,80,443,25565 203.0.113.10
# Windows'tan dışarıdan test
Test-NetConnection 203.0.113.10 -Port 25565
Servis dinliyor ama dışarıdan erişilemiyorsa sorun güvenlik duvarındadır. Servis zaten dinlemiyorsa güvenlik duvarını kurcalamanın anlamı yoktur; önce uygulamayı çalıştırın. Oyun sunucularında bu ayrımı yapmak, Connection Refused hatasının kaynağını bulmanın en hızlı yoludur.
Oran Sınırlama ve Kötüye Kullanımı Azaltma#
Güvenlik duvarı hacimsel bir DDoS saldırısını durduramaz ama uygulama seviyesindeki kötüye kullanımı ciddi biçimde azaltabilir:
# UFW'nin yerleşik oran sınırlaması (30 saniyede 6 bağlantı üstünü engeller)
sudo ufw limit 22/tcp comment 'SSH oran sinirli'
# Belirli bir ülkeye ya da ağa toplu engel (örnek blok)
sudo ufw deny from 192.0.2.0/24
# Aynı IP'den çok sayıda eşzamanlı oyun bağlantısını sınırla
sudo iptables -A INPUT -p tcp --dport 25565 -m connlimit \
--connlimit-above 3 --connlimit-mask 32 -j REJECT
Gerçek koruma sağlayıcının ağ katmanındaki filtrelemesidir. Saldırı türleri, filtreleme teknolojileri ve saldırı anında yapılacaklar için DDoS saldırısı nedir ve nasıl korunulur sayfasına, oyun sunucularına özel önlemler için Minecraft DDoS koruması sayfasına bakın.
Sık Yapılan Hatalar#
SSH portunu açmadan güvenlik duvarını etkinleştirmek#
En yaygın hata budur ve sonucu anında bağlantı kaybıdır. UFW bu durumda uyarı gösterir; uyarıyı okumadan onaylamayın. Kural yazarken her zaman ikinci bir oturum açık tutun.
“Şimdilik kapatayım, sonra açarım” demek#
Bir sorunu ayıklarken güvenlik duvarını kapatmak yaygın bir alışkanlıktır ama açmayı unutmak da öyle. Kapatmak yerine geçici bir izin kuralı ekleyin ve işiniz bitince silin.
Tüm trafiğe açık kural yazmak#
ufw allow from any to any gibi geniş kurallar güvenlik duvarını anlamsız kılar. Kuralı her zaman en dar kapsamda yazın: belirli port, belirli protokol, mümkünse belirli kaynak.
Kuralları belgelememek#
Altı ay sonra 7788 portunun neden açık olduğunu hatırlamazsınız. UFW’de comment parametresini, firewalld’de zengin kural açıklamalarını kullanın.
IPv6’yı unutmak#
Sunucunuzun IPv6 adresi varsa kurallar iki adres ailesi için de geçerli olmalı. UFW bunu varsayılan olarak yapar; doğrudan iptables kullanıyorsanız ip6tables tarafını da yapılandırın.
Örnek Senaryo: Oyun Sunucusu İçin Tam Yapılandırma#
#!/bin/bash
# Minecraft + web paneli çalışan bir sunucu için temel güvenlik duvarı
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Yönetim erişimi: yalnızca kendi IP'nizden
sudo ufw allow from 198.51.100.25 to any port 2222 proto tcp comment 'SSH yonetim'
# Oyun trafiği: herkese açık
sudo ufw allow 25565/tcp comment 'Minecraft Java'
sudo ufw allow 19132/udp comment 'Minecraft Bedrock'
# Web paneli: HTTPS üzerinden
sudo ufw allow 443/tcp comment 'Panel HTTPS'
# Oran sınırlaması
sudo ufw limit 2222/tcp
sudo ufw --force enable
sudo ufw status verbose
198.51.100.25 yerine kendi IP adresinizi yazdığınızdan emin olun. Kendi IP’nizi curl -4 ifconfig.me komutuyla öğrenebilirsiniz. Sabit IP’niz yoksa SSH kuralını IP kısıtlamasız bırakıp oran sınırlaması ve Fail2Ban ile koruyun.Özetle#
Sunucu güvenlik duvarının doğru yapılandırması üç adımdan oluşur: gelen trafiği varsayılan olarak reddedin, yalnızca hizmet verdiğiniz portları açın ve yönetim portlarını mümkün olduğunca dar kapsamda tanımlayın. Ubuntu ve Debian’da UFW, AlmaLinux ve Rocky’de firewalld, Windows Server’da PowerShell komutları bu işi hızlıca yapar.
Veritabanı ve önbellek portlarını asla internete açmayın; uzaktan erişim gerekiyorsa SSH tüneli kullanın. Fail2Ban’ı her sunucuya kurun, kuralları yazdıktan sonra hem içeriden hem dışarıdan test edin ve her kurala neden eklendiğini açıklayan bir yorum bırakın. Sunucunun geri kalan sıkılaştırması için VDS ilk ayarlar kontrol listesini, saldırı senaryoları için DDoS korunma rehberini tamamlayın.