İçindekiler
- 1 VPS sunucularda güvenlik duvarı neden kritik?
- 2 Temel güvenlik duvarı kavramları (araçlardan bağımsız)
- 3 ufw, firewalld ve iptables’a genel bakış
- 4 Hangi dağıtımda hangi aracı kullanmalı?
- 5 İyi bir VPS güvenlik duvarı tasarımı nasıl olmalı?
- 6 ufw ile adım adım VPS güvenlik duvarı yapılandırma
- 7 firewalld ile adım adım VPS güvenlik duvarı yapılandırma
- 8 iptables ile doğrudan kural yazma
- 9 Karşılaştırma: ufw, firewalld ve iptables artıları–eksileri
- 10 Yaygın hatalar ve kaçınmanız gereken senaryolar
- 11 DCHost altyapısında pratik öneriler
- 12 Özet ve sonraki adımlar
VPS sunucularda güvenlik duvarı neden kritik?
VPS sunucunuzu ilk kez internete açtığınız anda, henüz sitenizi duyurmadan bile port taramaları ve otomatik bot denemeleri başlar. Özellikle SSH, HTTP/HTTPS, SMTP gibi portlar tüm dünyaya açık olduğu için, temel bir güvenlik duvarı kural seti olmadan yola çıkmak; ofisinizin kapısını kilitlemeden gece ışıkları açık bırakmaya benzer. DCHost tarafında yaptığımız mimari tasarım ve güvenlik denetimi çalışmalarında, sorunlu VPS vakalarının önemli bir kısmında ya güvenlik duvarının tamamen kapalı olduğunu ya da yalnızca “SSH açık, gerisi default” gibi düşünülmeden bırakılmış kuralları görüyoruz.
Bu yazıda, VPS üzerinde en sık kullanılan üç yaklaşımı; ufw, firewalld ve iptables araçlarını yan yana koyup karşılaştırmalı şekilde ele alacağız. Amacımız; “Hangi aracı seçmeliyim?”, “Varsayılan kural seti nasıl olmalı?”, “IPv6’yı unutmazsam iyi olur mu?” gibi sorularınıza net cevap vermek ve elinizde doğrudan kullanabileceğiniz örnek komutlar bırakmak. DCHost’ta barındırdığınız VPS, dedicated veya colocation sunucularınızda uygulayabileceğiniz pratik, sahada denenmiş bir rehber hazırlayacağız.
Temel güvenlik duvarı kavramları (araçlardan bağımsız)
Önce araçlardan bağımsız birkaç temel kavramı netleştirelim; böylece ufw, firewalld ve iptables komutları size daha anlamlı gelecektir.
- Stateful firewall: Paketlerin bağlantı durumunu (NEW, ESTABLISHED, RELATED vb.) takip eder. Gelen trafiği körü körüne değil, var olan bir oturumun parçası mı diye bakarak değerlendirir.
- INPUT / OUTPUT / FORWARD: Sunucunuza gelen (INPUT), sunucudan çıkan (OUTPUT) ve sunucu üzerinden yönlendirilen (FORWARD) trafiği ifade eder. Çoğu VPS senaryosunda esas odak INPUT zinciridir.
- Varsayılan politika (policy): Hiçbir kurala uymayan pakete ne olacağıdır. Güvenli yaklaşım; INPUT için DROP, OUTPUT için genellikle ACCEPT (ihtiyaca göre sıkılaştırılabilir) şeklindedir.
- IPv4 ve IPv6: Birçok yönetici IPv4 kurallarını özenle yazar, IPv6 tamamen boş kalır. Sunucunuzda IPv6 aktifse (çoğu modern VPS’te öyledir), güvenlik duvarı kurallarını her iki protokol için de düşünmeniz gerekir.
- Port ve servis: Güvenlik duvarı port seviyesinde çalışır (80/tcp, 443/tcp gibi). Bazı araçlar (firewalld) portları anlamlı servis etiketleriyle (http, https, ssh) gruplar.
Güvenlik duvarının temel mantığı; “gerekeni özellikle aç, gerisini kapat”tır. Bu bakış açısını koruduğunuz sürece, hangi aracı seçtiğiniz ikinci sırada kalır.
ufw, firewalld ve iptables’a genel bakış
ufw nedir, hangi senaryolarda öne çıkar?
ufw (Uncomplicated Firewall), özellikle Ubuntu ve türevlerinde varsayılan olarak gelen, iptables/nftables için bir kolay yönetim katmanıdır. Amaç; karmaşık iptables sözdizimiyle uğraşmadan “ssh izin ver, http izin ver, geri kalanını kapat” gibi temel senaryoları hızlıca kurabilmektir.
- Basit komut seti:
ufw allow 22/tcp,ufw deny 25/tcpgibi okunabilir komutlar. - Uygulama profilleri: Nginx, OpenSSH gibi servisler için hazır tanımlar kullanılabilir.
- Küçük ve orta ölçekli VPS’lerde, özellikle tek yöneticili ortamlarda idealdir.
firewalld nedir, hangi dağıtımlarda karşımıza çıkar?
firewalld, çoğunlukla RHEL tabanlı (AlmaLinux, Rocky Linux vb.) dağıtımlarda gelen, daemon tabanlı bir güvenlik duvarı yöneticisidir. Arkada iptables veya nftables kullanır ama siz zone (bölge) ve service (hizmet) kavramlarıyla çalışırsınız.
- Zone mantığı:
public,internal,trustedgibi bölgelere arayüz atar, her bölge için farklı kural seti yazarsınız. - Servis tanımları:
http,https,sshgibi ön tanımlı servisleri tek komutla açıp kapatabilirsiniz. - Dinamik yapı: Kural değişiklikleri çoğu zaman bağlantıyı kesmeden, yeniden başlatmaya gerek kalmadan uygulanır.
iptables nedir, ne zaman doğrudan kullanılır?
iptables, Linux çekirdeğindeki netfilter altyapısına doğrudan kural yazmanızı sağlayan klasik araçtır. Çok esnektir; NAT, port yönlendirme, gelişmiş eşleştirme (match) modülleriyle aklınıza gelen hemen her şeyi yapabilirsiniz. Dezavantajı; sözdiziminin uzun ve hataya açık olmasıdır.
Bugün birçok dağıtım arka planda nftables’a geçiş yapıyor olsa da, iptables hâlâ çok yaygın kullanılıyor. nftables tarafını derinlemesine ele aldığımız nftables ile VPS güvenlik duvarı rehberimiz bu yazının doğal devamı niteliğinde.
Hangi dağıtımda hangi aracı kullanmalı?
Genel saha deneyimimize göre tipik dağıtım–araç eşleşmeleri şöyle:
- Ubuntu / Debian: ufw varsayılan olarak gelir, arka planda iptables veya nftables kullanır. Basit senaryolar için ufw, gelişmiş kurulumlar için doğrudan iptables/nftables tercih edilir.
- AlmaLinux / Rocky Linux / RHEL: firewalld varsayılan gelir. Panel (cPanel, Plesk vb.) kullanılan ortamlarda da çoğunlukla firewalld/iptables tabanlı kurulum görürüz.
- Minimal/özel imajlar: Hiçbiri kurulu olmayabilir; doğrudan iptables veya nftables üzerine kendi tercih ettiğiniz yöneticiyi kurarsınız.
DCHost VPS veya dedicated sunucularınızda, dağıtım seçiminize göre hazırladığımız hazır imajlarda genellikle ilgili ekosistemin doğal aracıyla ilerliyoruz. Özet tavsiye:
- Ubuntu/Debian: ufw ile başlayın, ihtiyaç duyarsanız iptables/nftables’a inin.
- AlmaLinux/Rocky: firewalld ile başlayın, çok özel ihtiyaçlarda alt seviyeye inin.
İyi bir VPS güvenlik duvarı tasarımı nasıl olmalı?
Ufak komut örneklerine geçmeden önce, kuralları tasarlarken izlemeniz gereken prensipleri netleştirelim. DCHost blogunda anlattığımız VPS sunucu güvenliği rehberimizle de uyumlu, pratik bir kontrol listesi şu şekilde:
- Varsayılan inbound politikası: DROP – Sadece açıkça izin verdiklerinize geçit verin.
- SSH’yi daraltın – Mümkünse IP bazlı kısıtlama, değilse en azından rate limit uygulayın.
- HTTP/HTTPS portlarını açın – Web sunucusu çalıştırıyorsanız 80 ve 443 açık olacak, diğer web portları (8080 vb.) yalnızca gerekiyorsa açılacak.
- Veritabanını internete açmayın – MySQL/PostgreSQL gibi servisleri yalnızca iç ağdan veya VPN’den erişilebilir kılın.
- IPv6’yı unutmayın – Aynı kural setinin IPv6 karşılığını da oluşturun.
- Log seviyesini makul tutun – Her paketi loglamak yerine, yalnızca reddedilen kritik trafiği kayıt altına alın.
- Çakışan araç kullanmayın – Aynı anda hem ufw hem firewalld hem de el ile iptables kuralı yazmayın; sorumluluğu tek araca verin.
Yeni kurulan VPS’ler için önerdiğimiz ilk adımları ayrıntılı olarak “Yeni VPS’te İlk 24 Saat” rehberimizde anlattık; burada ise güvenlik duvarı kısmını derinleştiriyoruz.
ufw ile adım adım VPS güvenlik duvarı yapılandırma
Kurulum ve temel ayarlar
Birçok Ubuntu sunucusunda ufw zaten kurulu gelir. Değilse:
apt update
apt install ufw -y
Önce IPv6’nın aktif olduğundan emin olun. /etc/ufw/ufw.conf dosyasında:
IPv6=yes
ardından varsayılan politikaları belirleyelim:
ufw default deny incoming
ufw default allow outgoing
SSH, HTTP ve HTTPS’i açma
Uzak yönetimi kaybetmemek için SSH’ya izin vermeden ufw’yi asla etkinleştirmeyin:
ufw allow 22/tcp # Varsayılan SSH portu
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
Eğer SSH farklı bir porttaysa, örneğin 2222 ise:
ufw allow 2222/tcp
SSH için rate limit ve IP kısıtlama
Brute-force denemelerini azaltmak için ufw’nin limit özelliğini kullanabilirsiniz:
ufw limit 22/tcp
Belirli bir IP aralığından erişim gerekiyorsa:
ufw allow from 203.0.113.10 to any port 22 proto tcp
Belirli servislere izin verme
ufw, bazı servisleri isimle tanır. Mevcut profilleri görmek için:
ufw app list
Örneğin Nginx Full profili (80 ve 443):
ufw allow "Nginx Full"
Etkinleştirme ve durum kontrolü
Kurallardan emin olduktan sonra ufw’yi etkinleştirin:
ufw enable
Durumu görmek için:
ufw status verbose
IPv6 örneği
IPv6 adresiniz üzerinden gelen HTTP/HTTPS trafiğine izin vermek için ekstra bir şey yapmanıza gerek yoktur; ufw IPv6 için de aynı kuralı uygular. Ancak yalnızca belirli bir IPv6 bloğunu yetkilendirmek isterseniz:
ufw allow from 2001:db8::/64 to any port 22 proto tcp
firewalld ile adım adım VPS güvenlik duvarı yapılandırma
Kurulum ve servis yönetimi
RHEL/AlmaLinux/Rocky tabanlı bir VPS’te genellikle firewalld kurulu ve aktiftir. Emin olmak için:
yum install firewalld -y # veya dnf
systemctl enable --now firewalld
Temel kavramlar:
- Zone: Güvenlik seviyesi tanımları (public, internal, trusted vb.).
- Service: Birden çok portu kapsayan isimlendirilmiş servisler (http, https, ssh…).
- Runtime vs permanent: Kalıcı olması için mutlaka
--permanentkullanıp ardındanreloadetmelisiniz.
Varsayılan zone’u ve arayüzleri kontrol etme
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
Genellikle VPS’lerde tüm trafik public zone üzerinden gelir. Gerekirse:
firewall-cmd --set-default-zone=public
SSH, HTTP ve HTTPS’e izin verme
firewalld’de servis ismiyle kural eklemek oldukça rahattır:
# Geçici (runtime) kurallar
't firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https
# Kalıcı yapmak için
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
# Değişiklikleri yükle
firewall-cmd --reload
Belirli bir port ve protokol açma
Örneğin 2222/tcp portunda SSH dinliyorsanız:
firewall-cmd --zone=public --add-port=2222/tcp --permanent
firewall-cmd --reload
IP bazlı kısıtlama için rich rule örneği
Belirli bir IP’den SSH’a izin vermek için rich rule kullanabilirsiniz:
firewall-cmd --permanent
--zone=public
--add-rich-rule='rule family="ipv4"
source address="203.0.113.10"
service name="ssh" accept'
firewall-cmd --reload
IPv6 ile kullanım
firewalld, hem IPv4 hem IPv6 için aynı kuralı uygular. IPv6 özelinde kısıtlama yapacaksanız:
firewall-cmd --permanent
--zone=public
--add-rich-rule='rule family="ipv6"
source address="2001:db8::/64"
service name="ssh" accept'
firewall-cmd --reload
iptables ile doğrudan kural yazma
Zincirler ve temel akış
iptables’ta en çok kullanılan filter tablosu ve üç ana zincir vardır:
- INPUT: Sunucuya gelen trafik.
- OUTPUT: Sunucudan çıkan trafik.
- FORWARD: Sunucu üzerinden yönlendirilen trafik.
Basit bir VPS senaryosunda genellikle INPUT’u sertleştirip OUTPUT’u çoğunlukla açık bırakırız.
Örnek temel iptables script’i
Aşağıdaki örnek, hem IPv4 hem IPv6 için makul bir başlangıçtır. Önce IPv4:
#!/bin/bash
# Mevcut kuralları temizle
iptables -F
iptables -X
# Varsayılan politikalar
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loopback'e izin ver
iptables -A INPUT -i lo -j ACCEPT
# Var olan bağlantılara izin ver
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH (22/tcp)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
# HTTP(80) ve HTTPS(443)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# İsteğe bağlı: Reddedilen paketleri logla (dikkat, çok gürültü yapabilir)
# iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-denied: " --log-level 7
# En sonda DROP politikası zaten uygulanıyor
IPv6 için de benzer bir script ip6tables ile yazılmalıdır:
ip6tables -F
ip6tables -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
Kuralları kalıcı yapmak
Birçok dağıtımda reboot sonrası iptables kuralları kaybolur. Debian/Ubuntu tarafında şu paketi kullanabilirsiniz:
apt install iptables-persistent -y
# Mevcut kuralları kaydet
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Farklı sistemlerde /etc/rc.local veya systemd unit ile bu script’i boot’ta çalıştırmak da yaygın bir yaklaşımdır.
Karşılaştırma: ufw, firewalld ve iptables artıları–eksileri
Kullanım kolaylığı
- ufw: Öğrenmesi en kolay, özellikle tek sunuculu Ubuntu VPS’lerde çok pratik. Basit gereksinimler için ideal.
- firewalld: Zone ve service kavramı sayesinde orta ölçekli yapılarda düzenli kalmayı kolaylaştırır. Öğrenme eğrisi ufw’den biraz daha diktir.
- iptables: En esnek ama en karmaşık seçenek. Yanlış bir kural tek komutla kendinizi sunucudan kilitlemenize neden olabilir.
Dağıtım entegrasyonu ve ekosistem
- Ubuntu/Debian: ufw ile başlamak genellikle en konforlu seçimdir.
- AlmaLinux/Rocky/RHEL: firewalld ile uyumlu çalışacak şekilde tasarlanmıştır; panel yazılımları da çoğunlukla firewalld/iptables ile entegredir.
- Özel imajlar ve container içi: Daha ince ayar için doğrudan iptables veya nftables tercih edilir.
Dinamiklik ve otomasyon
- ufw: Basit Ansible/SSH script’leriyle rahat yönetilir; ancak çok sık kural değişen, dinamik ortamlar için sınırlı kalabilir.
- firewalld: API’si ve
firewall-cmdile runtime değişiklikleri destekler; servis kesintisi olmadan kural güncellemek kolaydır. - iptables: Tamamen script tabanlıdır; DevOps ekibi iptables’a hâkimse, kompleks otomasyon senaryoları için güçlü bir araçtır.
Ne zaman hangisini seçmeli?
- Küçük/orta ölçekli tek VPS, Ubuntu/Debian: ufw çoğu zaman fazlasıyla yeterlidir.
- Kurumsal ya da panel kullanılan RHEL tabanlı sistemler: firewalld ile ilerleyin, gerekiyorsa alt seviyede iptables/nftables ayarlarına inin.
- Gelişmiş NAT, custom match modülleri, çok ince trafik şekillendirme: Doğrudan iptables veya modern alternatif olarak nftables.
Yaygın hatalar ve kaçınmanız gereken senaryolar
“Test için güvenlik duvarını kapattım, öyle kaldı” sendromu
Sahada en sık gördüğümüz hata, canlı ortamda hızla bir sorun çözmeye çalışırken ufw disable veya systemctl stop firewalld komutunun verilmesi ve sonrasında unutulması. Çözüm: Böyle durumlarda mutlaka geçici istisna tanıyın, ardından orijinal kural setine geri dönün; tamamen kapatmayın.
Veritabanı portlarını dünyaya açmak
MySQL’in 3306 portunu veya PostgreSQL’in 5432’sini doğrudan internete açmak, saldırı yüzeyinizi dramatik şekilde büyütür. Mutlaka:
- Bu portları sadece iç ağ veya VPN arayüzüne açık tutun,
- Ya da IP bazlı çok sıkı kısıtlama uygulayın.
IPv6’yı tamamen unutmak
Birçok DDoS ve brute-force denemesi artık IPv6 üzerinden de geliyor. Sunucunuzda IPv6 açıksa, yalnızca IPv4 kuralları yazmak sizi korumaz. Bu konuda daha geniş çerçeveyi IPv6 yapılandırma rehberimizde anlattık; güvenlik duvarı kurallarınızı mutlaka iki protokol için de düşünün.
Güvenlik duvarını tek katmanlı düşünmek
OS seviyesindeki güvenlik duvarı, savunmanızın yalnızca bir katmanı olmalı. Uygulama katmanında WAF ve rate limit kullanmak, HTTP düzeyinde ise HTTP güvenlik başlıkları ile tarayıcı tarafını sertleştirmek aynı derecede önemli. Çok katmanlı yaklaşımla küçük yanlış yapılandırmaların etkisini azaltırsınız.
DCHost altyapısında pratik öneriler
DCHost’ta sağladığımız VPS, dedicated ve colocation hizmetlerinde, müşteri tarafında uygulanabilir ve sürdürülebilir kural setleri tasarlamaya özellikle dikkat ediyoruz. Özet pratik tavsiyemiz:
- Ubuntu/Debian VPS’ler: ufw ile başlayın, hazır bir “web sunucusu + SSH” profilini temel alın. SSH için
limitözelliğini, web için 80/443 kurallarını ekleyin, kalan her şeyi kapatın. - AlmaLinux/Rocky VPS’ler: firewalld ile
publiczone’dassh,http,httpsservislerini kalıcı olarak açın. Veritabanı, Redis gibi hizmetleri public zone yerine internal/trusted zone’a veya yalnızca VPN arayüzüne açık tutun. - Gelişmiş senaryolar: Rate limit, port knocking, daha sofistike IPv6 kuralları gibi ihtiyaçlar için nftables rehberimiz ve ağ güvenliği odaklı diğer yazılarımızı referans alın.
Daha üst düzey, bütünsel bir yaklaşım görmek isterseniz, VPS sunucu güvenliği için pratik ve doğrulanabilir yaklaşımlar yazımızı da mutlaka okuyun. Orada yalnızca güvenlik duvarını değil, patch yönetimi, kullanıcı hesapları, loglama ve izleme tarafını da birlikte ele alıyoruz.
Özet ve sonraki adımlar
VPS üzerinde sağlam bir güvenlik duvarı kural seti kurmak, karmaşık bir iş olmak zorunda değil. Doğru yaklaşım; önce ihtiyacınızı netleştirmek (hangi portlara gerçekten ihtiyacınız var, hangi IP’lerden erişim olacak), sonra dağıtımınızla en uyumlu aracı seçmek (Ubuntu için ufw, RHEL tabanlı sistemler için firewalld, çok özel durumlar için doğrudan iptables/nftables) ve en önemlisi de IPv4–IPv6 ikilisini birlikte düşünmek. Geri kalan kısım, birkaç tekrar sonrası kas hafızasına dönüşüyor.
DCHost olarak, altyapınızı kurarken yalnızca CPU, RAM, disk gibi metriklere değil; güvenlik duvarı, WAF, loglama ve yedekleme gibi bütünsel güvenlik katmanlarına da birlikte bakıyoruz. Mevcut VPS’inizde güvenlik duvarını yeniden tasarlamak veya yeni bir DCHost VPS/dedicated sunucu üzerinde sıfırdan, dokümante bir kural seti kurmak isterseniz, ekibimiz örnek scriptler ve mimari önerilerle yanınızda. Bir sonraki adım olarak; bu rehberi uygulayıp temel kural setinizi oturtun, ardından da çok katmanlı savunma için WAF ve uygulama güvenliği yazımıza göz atın. Böylece VPS’iniz hem hızlı hem de uzun vadede güvenli bir zemine oturmuş olur.
