iptables temel Linux güvenlik duvarı ayarlama¶
Bu makalede
iptables— Linux çekirdeğinde ağ trafiğini filtrelemek ve yönetmek için yerleşik çerçevedir. Kurallara dayalı olarak gelen, giden ve geçiş bağlantılarını esnek bir şekilde kontrol etmenizi sağlar.
Not
iptables neredeyse tüm Linux dağıtımlarında önceden kurulu gelir.
Yeni sistemlerde (RHEL 8+, Ubuntu 20.04+), varsayılan nftables (yani nft komutu) olabilir, ancak iptables iptables-legacy arayüzüyle geriye dönük uyumludur.
Bulut veya VPS sunucuları için — iptables ayarlamak güvenlik için kritik öneme sahiptir.
Temel Kavramlar¶
Üç zincir (chains)¶
| Zincir | Amaç |
|---|---|
INPUT | Sunucuya gelen trafik (SSH, HTTP, vb.) |
OUTPUT | Sunucudan çıkan trafik (güncellemeler, API istekleri) |
FORWARD | Sunucu üzerinden geçen trafik (yalnızca yönlendirme/NAT durumunda) |
Not
INPUT ile dikkatli olun!
İzin olmadan port 22'yi engellemek sunucudan bağlantınızı kesebilir. Kuralları uygulamadan önce her zaman gözden geçirin.
Nasıl çalışır¶
- Bir paket uygun zincire
INPUT,OUTPUT,FORWARDgirer. - Kurallar sıra içinde değerlendirilir — eşleşme bulunduğunda belirtilen eylem gerçekleştirilir.
- Eşleşme bulunamazsa, varsayılan politika
policyuygulanır.
Eylemler (hedefler)¶
| Eylem | Davranış | Öneri |
|---|---|---|
ACCEPT | Paketi kabul et | Güvenilen hizmetler için (SSH, HTTP) |
DROP | Paketi sessizce düşür (cevap yok) | Güvenlik için en iyi seçim — portun varlığını gizler |
REJECT | ICMP hatasıyla (ör. port-unreachable) reddet | Geri bildirim gerektiğinde kullanın (ör. hata ayıklama) |
Not
Güvenlik kuralı
Varsayılan olarak — her şeyi reddet, ardından yalnızca gerekli olanları kabul et.
Temel komut sözdizimi¶
Ana seçenekler:¶
| Seçenek | Amaç |
|---|---|
-A | Kuralı zincirin sonuna ekle |
-I | Kuralı başlangıçta ekle (veya belirli bir numarada: -I INPUT 1) |
-D | Kuralı sil (numara ile veya satırı kopyalayarak) |
-L | Kuralları listele |
-F | Zincirdeki tüm kuralları temizle |
-P | Varsayılan politika ACCEPT, DROP olarak ayarla |
Sık kullanılan kriterler:¶
| Seçenek | Örnek | Açıklama |
|---|---|---|
-p tcp/udp/icmp | -p tcp | Protokol |
--dport N | --dport 22 | Hedef port |
-s IP/MASK | -s 192.168.1.5<b-s 203.0.113.0/24 | Kaynak (IP veya alt ağ) |
-i interface | -i eth0 | Gelen arayüz |
-m state --state NEW,ESTABLISHED | -m state --state NEW | Bağlantı durumu |
-m connlimit | --connlimit-above 5 | Bağlantı limiti |
Görüntüleme ve sorun giderme¶
Tüm kuralları görüntüle (okunabilir):¶
--n — isimleri çözme (daha hızlı); - -v — ayrıntılı çıktı; - --line-numbers — kural numaralarını göster (silme için faydalı). 
Varsayılan politikaları görüntüle:¶
Pratik kural örnekleri¶
1. Temel güvenlik ayarı (önerilir!)¶
# 1. Tüm trafiği döngü arayüzüne izin ver
sudo iptables -A INPUT -i lo -j ACCEPT
# 2. Daha önce kurulan bağlantılara izin ver (önemli!)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 3. SSH'ye izin ver (değiştirilmişse 22'yi kendi portunuzla değiştir!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 4. HTTP/HTTPS'e izin ver
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 5. Diğer her şeyi varsayılan olarak düşür
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # ← genellikle çıkışa izin verilir
2. Erişim kısıtlaması¶
# Sadece bir IP'den MySQL (3306) izin ver
sudo iptables -A INPUT -s 203.0.113.15 -p tcp --dport 3306 -j ACCEPT
# Şüpheli bir IP'den gelen tüm trafiği engelle
sudo iptables -A INPUT -s 198.51.100.77 -j DROP
3. Saldırı Koruması¶
# Bozuk/geçersiz paketleri engelle
sudo iptables -A INPUT -m state --state INVALID -j DROP
# SYN‑flood'ı engelle
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# HTTP bağlantılarını sınırlayın (tek IP'den 20'den fazla eşzamanlı bağlantı yok)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP
4. Kayıt¶
# Kapatılmış portlara bağlanma girişimlerini kaydet (dakikada ilk 5)
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 \
-m limit --limit 5/min -j LOG --log-prefix "PORT-SCAN: " --log-level 4
# Sonra engelle
sudo iptables -A INPUT -p tcp -m multiport --dports 22,3389,5900 -j DROP
Yeniden başlatma sonrası kuralların kaydedilmesi¶
iptables kuralları otomatik olarak kaydedilmez — sadece çekirdek belleğinde bulunur.
RHEL / CentOS 7 ve önceki sürümler için:¶
Debian / Ubuntu için:¶
Kalıcı paketini kurun:
Kurulum sırasında sistem mevcut kuralları kaydetmenizi isteyecek — "Yes" seçin.Daha sonra kaydedilen kuralları güncelleyin:
Not
Yeniden başlatmadan önce kuralları doğrulayın:
-t bayrağı yalnızca sözdizimi kontrolü yapar, uygulama yok. Kuralları Kaldırma¶
Numara ile sil (bkz --line-numbers):¶
Tam eşleşme ile sil:¶
Bir zinciri boşalt:¶
Varsayılan politikaları sıfırla:¶
Bilgi
- Kuralları yerel olarak veya konsol üzerinden test edin (SSH değil!), özellikle
INPUTdeğiştirirken. screenveyatmuxkullanarak hata durumunda oturumu kaybetmemenizi sağlayın.-
Daha modern araçlara geçmeyi düşünün: