İnternete bağlı herhangi bir sunucu her saniye otomatik botlar, brute-force saldırganları ve port tarayıcıları tarafından yoklanır. Sağlam bir Linux güvenlik duvarı yönetimi, yalnızca izin verilen meşru trafiğin sisteme girmesine izin vererek olası siber tehditlerin ilk savunma hattını oluşturur.
Bu rehberde; kullanıcı dostu ufw (Uncomplicated Firewall) aracını ve Linux çekirdeğinin güçlü paket filtreleme motoru olan iptables / nftables yapısını, en iyi güvenlik pratikleriyle adım adım inceleyeceğiz.
Güvenlik Duvarı Mimarisi: ufw vs iptables
Linux çekirdeğinde paket filtreleme işini Netfilter alt sistemi yönetir.
- iptables: Doğrudan Netfilter kurallarını yöneten, zincirler (Chains: INPUT, OUTPUT, FORWARD) ve tablolar (filter, nat, mangle) içeren düşük seviyeli ve çok güçlü bir araçtır.
- ufw (Uncomplicated Firewall): Ubuntu ve Debian sistemlerde
iptableskomutlarının karmaşıklığını basitleştiren bir ön yüzdür (wrapper). Günlük sunucu operasyonlarında pratik ve güvenilirdir.
| Kriter | ufw | iptables |
|---|---|---|
| Öğrenme Eğrisi | Çok Kolay ve Sezgisel | İleri Düzey ve Karmaşık |
| Kural Sözdizimi | ufw allow 22/tcp | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
| Kullanım Alanı | Standart sunucular, VPS’ler | Özel yönlendiriciler (Router), NAT, Karmaşık kurallar |
| Varsayılan Dağıtım | Ubuntu, Debian | Çoğu dağıtımda kurulu |
ufw ile Adım Adım Güvenlik Duvarı Kurulumu
Yeni bir sunucu kurarken ufw’yi etkinleştirmeden önce MUTLAKA SSH erişimine izin vermelisiniz. Aksi halde kendinizi sunucudan kilitlersiniz!
1. Varsayılan İlkeleri Belirlemek
En güvenli yaklaşım: Gelen tüm trafiği reddet, giden tüm trafiğe izin ver:
# Gelen bağlantıları varsayılan olarak engelle
sudo ufw default deny incoming
# Dışarıya giden bağlantılara varsayılan olarak izin ver
sudo ufw default allow outgoing
2. Kritik Portları Açmak
# 1. Adım: SSH bağlantısına izin ver (Kritik!)
sudo ufw allow 22/tcp
# Eğer SSH portunuzu değiştirdiyseniz (Örn: 2222):
sudo ufw allow 2222/tcp
# Web trafiği: HTTP (80) ve HTTPS (443) izinleri
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Veya uygulama adıyla izin ver (Nginx Full profili)
sudo ufw allow 'Nginx Full'
3. ufw’yi Aktifleştirmek ve Durumunu İzlemek
# Güvenlik duvarını aç
sudo ufw enable
# Durumu ve aktif kuralları numaralandırılmış olarak gör
sudo ufw status numbered
Örnek Çıktı:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
4. Gelişmiş Kurallar: IP ve Alt Ağ Kısıtlaması
Bir veritabanı portunu (3306) veya yönetim panelini sadece kendi ofis IP adresinize açmak istiyorsanız:
# Sadece belirli bir IP'den gelen MySQL trafiğine izin ver
sudo ufw allow from 203.0.113.50 to any port 3306 proto tcp
# Belirli bir alt ağa (Subnet) izin ver
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
# Kötü niyetli bir IP adresini tamamen engelle
sudo ufw deny from 198.51.100.23
5. Kural Silme
Kuralları silmek için status numbered çıktısındaki satır numarasını kullanmak en güvenli yoldur:
# 2 numaralı kuralı sil
sudo ufw delete 2
6. SSH Brute-Force Önleme: limit Kuralı
ufw limit özelliği, 30 saniye içinde aynı IP’den 6 veya daha fazla başarısız bağlantı denemesi gelirse o IP’yi geçici olarak engeller:
# SSH portuna rate-limiting uygula
sudo ufw limit 22/tcp
iptables ile İleri Düzey Paket Filtreleme
Eğer ufw kullanılamayan bir ortamdaysanız veya doğrudan iptables ile çalışmanız gerekiyorsa temel yapı şöyledir:
iptables Zincirleri (Chains)
- INPUT: Sunucunuza gelen paketler.
- OUTPUT: Sunucunuzdan dışarıya üretilen paketler.
- FORWARD: Sunucu üzerinden başka bir yere yönlendirilen paketler (Router/VPN senaryoları).
Temel iptables Kural Dizilimi
# 1. Mevcut bağlantıları ve yerel geri dönüş (Loopback) trafiğini kabul et
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
# 2. SSH (22), HTTP (80) ve HTTPS (443) portlarına izin ver
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 3. Kalan diğer tüm gelen paketleri düşür (Drop)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Kuralları Kaydetmek (Kalıcı Hale Getirmek)
iptables kuralları sistem yeniden başlatıldığında (reboot) varsayılan olarak silinir. Kalıcı kılmak için:
# Ubuntu / Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save
# RHEL / CentOS
sudo iptables-save | sudo tee /etc/sysconfig/iptables
Açık Portların Güvenlik Duvarı ile Kontrolü
ss ve netstat rehberimizde incelediğimiz gibi, ss -tulpn çıktısında bir port dinliyor olsa dahi, eğer güvenlik duvarında ALLOW edilmemişse dış dünyadan o porta erişilemez.
Güvenlik duvarınızın dışarıdan nasıl göründüğünü doğrulamak için başka bir makineden nmap taraması yapabilirsiniz:
# Güvenlik duvarının portları FILTERED (Engelli) olarak gösterdiğini doğrula
nmap -p 22,80,3306 sunucu_ip_adresi
Güvenlik İpuçları
- Port 22’yi Değiştirin: SSH portunu
2222gibi standart dışı bir porta taşımak, internetteki otomatik bot taramalarının %95’ini engeller. - Fail2ban Entegrasyonu:
ufwkurallarına ek olarakfail2bankurarak,/var/log/auth.logdosyasındaki başarısız denemeleri otomatik olarak iptables seviyesinde banlatın. - ICMP (Ping) Yönetimi: İsteğe bağlı olarak sunucunuzun ping isteklerine yanıt vermesini engelleyerek ağ tarayıcılarına karşı görünmezlik sağlayabilirsiniz.
Özet
Sunucu güvenliğinin en kritik adımı gereksiz tüm portları kapatmaktır. ufw kullanarak sadece 2-3 komutla (varsayılan engelleme, SSH ve Web portlarına izin verme) sunucunuzu temel siber tehditlere karşı zırhlayabilirsiniz.