1. Home
  2. Docs
  3. Linux
  4. Ağ ve Güvenlik
  5. ufw ve iptables ile Linux Güvenlik Duvarı (Firewall) Yönetimi

ufw ve iptables ile Linux Güvenlik Duvarı (Firewall) Yönetimi

Print

İ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 iptables komutlarının karmaşıklığını basitleştiren bir ön yüzdür (wrapper). Günlük sunucu operasyonlarında pratik ve güvenilirdir.
Kriterufwiptables
Öğrenme EğrisiÇok Kolay ve Sezgiselİleri Düzey ve Karmaşık
Kural Sözdizimiufw allow 22/tcpiptables -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ımUbuntu, 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ı

  1. Port 22’yi Değiştirin: SSH portunu 2222 gibi standart dışı bir porta taşımak, internetteki otomatik bot taramalarının %95’ini engeller.
  2. Fail2ban Entegrasyonu: ufw kurallarına ek olarak fail2ban kurarak, /var/log/auth.log dosyasındaki başarısız denemeleri otomatik olarak iptables seviyesinde banlatın.
  3. 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.

Tags , , , , ,

How can we help?