Iptables, çoğu Linux dağıtımıyla varsayılan olarak gelen birincil güvenlik duvarıdır. Ağ güvenliğini yönetmekten sorumludur. Veri paketlerini bir dizi kuralla karşılaştırarak çalışır ve sisteme kurallara göre bir bağlantıyı kabul etmesini, reddetmesini veya yönlendirmesini söyler. Bu eğitimde, kuralları nasıl listeleyeceğinizi ve sileceğinizi, paket ve bayt sayaçlarını nasıl kontrol edip temizleyeceğinizi ve zincirleri nasıl boşaltacağınızı (flush) göstereceğiz. Hazır mısınız? Başlayalım!
Önkoşullar
Eğitime geçmeden önce bir konuyu netleştirelim. Bu kılavuzda gösterilen tüm ipuçları ve püf noktaları ayrı bir sanal makine üzerinde gerçekleştirilmiştir. Sizin de bunu yapmanız iyi bir fikirdir, çünkü sisteminizin tamamen karışması ihtimalini ortadan kaldırır. Ancak bu süreçlerde uzmanlaştıktan sonra bunları gerçek hayattaki durumlarda uygulamayı denemelisiniz.
Bu eğitimde, tüm adımları göstermek için Ubuntu kullanacağız. Ancak, dağıtımdan bağımsız olarak benzer şekilde çalışmalıdırlar.
Kuralları listele
Kuralları özelliğe göre listele
İlk olarak, özelliğe göre tüm aktif kuralları kontrol edelim. Aşağıdaki komutu çalıştırın:
|
1 |
sudo iptables -S |

Daha önce iptables kuralı oluşturma ile çalıştıysanız, benzerliği fark etmiş olabilirsiniz. Çıktılar, “iptables” kısmı hariç, onları oluşturmak için kullanılan komutlara benzer. Ayrıca iptables kuralları yapılandırma dosyalarıyla benzer bir yapıyı paylaşırlar.
Belirli bir zinciri listele
Daha kesin bir şey deneyelim. Tüm iptables kurallarını raporlamak yerine, iptables'a belirli bir zincirin kurallarını raporlamasını söyleyin. Örneğin, TCP, INPUT, OUTPUT vb. Bunu yapmak için, “-S” bayrağından sonra zincir adını belirtin:
|
1 |
sudo iptables -S <zincir> |

Kuralları tablo olarak listele
Tablo görünümü, farklı kuralları karşılaştırırken kullanışlıdır. Iptables'a tüm aktif kuralları bir tablo biçiminde raporlamasını söylemek için “-L” bayrağını kullanın:
|
1 |
sudo iptables -L |

Çıktı, zincire göre sıralanmış tüm mevcut kuralları içerir. Önceki bölüme benzer şekilde, liste çıktısını INPUT, TCP ve OUTPUT vb. gibi belirli bir zincire göre filtrelemek de mümkündür. Bunu yapmak için, “-L” bayrağından sonra zinciri belirtin:
|
1 |
sudo iptables -L <zincir> |

Çıktıyı biraz inceleyelim. Bizim durumumuzda, kurallar nedeniyle çıktı biraz karmaşık görünecektir. Çıktının ilk satırı, varsayılan politikası (DROP) ile birlikte zincir adını (INPUT) bildirir. Bir sonraki satır, tablo sütunlarının başlıklarını belirtir. Geri kalanı ise zincirin kurallarıdır. Başlıkların neyi belirttiğine bir göz atalım:
- target: Bir paket kuralla eşleşirse, bu bölüm hangi işlemin gerçekleştirilmesi gerektiğini tanımlar. Paketi kabul etmek, düşürmek (drop), günlüğe kaydetmek (log) veya başka bir zincire göndermek olabilir.
- prot: Protokolü tanımlar, örneğin udp, tcp, icmp veya hepsi (all).
- opt: Bu sütun IP seçeneklerini belirtir. Nadiren kullanılır.
- source: Paketin kaynağı (IP adresi veya alt ağ). Değer belirli bir adres veya herhangi bir yer (anywhere) olabilir.
- destination: Paketin hedefi (IP adresi veya alt ağ). Değer belirli bir adres veya herhangi bir yer (anywhere) olabilir.
Fark ettiyseniz, son sütun etiketlenmemiştir. Bunun nedeni, bir kuralın seçeneklerini belirtmek için kullanılmasıdır. Önceki alanlara sığmayan kuralın tüm kısımlarını içerecektir. Kaynak/hedef bağlantı noktalarından (port) paket bağlantı durumuna vb. kadar her şeyi içerebilir.
Paket sayıları ve toplam boyut
Paket ve bayt sayaçlarını temizle
Iptables kurallarını listelerken, her bir kurala eşleşen paketlerin sayısını ve paketlerin bayt cinsinden toplam boyutunu da kontrol edebiliriz. Hangi kuralların paketlerle eşleştiğine dair kaba bir resme sahip olmanız gerektiğinde yararlı bir metriktir.
Bu örnekte INPUT zincirini kullanacağız. Bu kez, ayrıntılı mod (verbose) anlamına gelen “-v” bayrağını ekleyin:
|
1 |
sudo iptables -L INPUT -v |

Tablo çıktısının artık iki ek alan içerdiğini fark edeceksiniz: pkts ve bytes.
Paket sayılarını ve toplam boyutu sıfırla
Bazı durumlarda, daha önce gösterdiğimiz sayaçları sıfırlamak isteyebilirsiniz. Sistem yeniden başlatılırsa sayaçlar otomatik olarak temizlenecektir. Ayrıca manuel olarak da sıfırlamaya zorlayabilirsiniz. Paket sayılarını ve toplam boyutu sıfırlamak için “-Z” bayrağını kullanacağız:
|
1 |
sudo iptables -v -Z |

Bu komutun tüm zincirlerin sayaçlarını sıfırlayacağını unutmayın. Diğer komutlarda olduğu gibi, belirli zincirler için de sayacı sıfırlamak mümkündür. Örneğin, sıradaki komut INPUT zincirinin sayaçlarını sıfırlayacaktır:
|
1 |
sudo iptables -v -Z <chain> |

Sayaç sıfırlama işlemini daha kesin hale getirmek mümkündür. Belirli bir zincir altındaki belirli bir kuralın sayacını sıfırlayabilirsiniz. Bunu yapmak için zincir adının altına kural numarasını ekleyin:
|
1 |
sudo iptables -v -Z <chain> <rule_number> |
Kuralları sil
Kuralları özelliğe göre sil
iptables kurallarını silmenin birden fazla yolu vardır. Kuralları silmenin ilk yöntemi kural özelliğine göredir. Silme işlemi için “-D” bayrağını ve ardından kural özelliğini kullanacağız:
|
1 |
sudo iptables -v -D INPUT -s 172.217.194.113 -j DROP |

Daha önce herhangi bir iptables kuralı eklediyseniz, benzerliği fark edeceksiniz. Burada değişen tek şey, “-A” bayrağı yerine “-D” bayrağının kullanılmasıdır.
Kuralları zincir ve numaraya göre sil
Kuralları özelliklerine göre silmek biraz daha fazla çaba gerektirir, değil mi? Kural özelliğini hatırlamak zorunda kalmadan bunları silebilseydik nasıl olurdu? Kuralları zincirine ve numarasına göre silelim! İlk yönteme (özelliğe göre silme) kıyasla bu yöntem, tüm özelliğin elinizde olması gerekmediği için nispeten daha kolaydır.
Bu yöntem, hedef kuralın zincirini ve satır numarasını gerektirir. Satır numarasını nereden alacağız? Bunu belirlemek için aşağıdaki komutu çalıştırın:
|
1 |
sudo iptables -L --line-numbers |

Tüm kuralları ve satır numaralarını içeren büyük bir çıktı alacaksınız. Çıktıyı daraltmak için “-L” bayrağından sonra zincir adını kullanın:
|
1 |
sudo iptables -L <chain> --line-numbers |

Çıktıda, fazladan bir num sütunu fark edeceksiniz. Bu, her kural için satır numarasını gösterir. Hedef numarayı belirledikten sonra silme işlemini gerçekleştirin:
|
1 |
sudo iptables -v -D <chain> <line_number> |
Zincirleri temizle
iptables söz konusu olduğunda, bir zinciri temizlemek (flushing) nedir? Belirli bir zincir altındaki tüm kuralları silme işlemidir. Toplu kural silmeye ihtiyacınız varsa bu yöntemi kullanabilirsiniz. Zincir temizleme işlemini gerçekleştirmeden önce, iptables-save kullanarak mevcut kuralların bir yedeğini almanızı şiddetle tavsiye ederiz. Bu, mevcut tüm zincirleri ve kuralları çıktı olarak verecek yerleşik bir iptables aracıdır. Çıktı bir metin dosyasına aktarılabilir:
|
1 |
sudo iptables-save > ~/Desktop/iptables-backup.txt |
![]()
Tek bir zinciri temizle
Bir zincirin nasıl temizleneceğine göz atalım. “-F” bayrağını ve ardından hedef zinciri kullanın:
|
1 |
sudo iptables -v -F <chain> |

Tüm zincirleri temizle
Tüm zincirleri temizlemeden önce ne yaptığınızı anladığınızdan emin olun. Bu işlem, iptables güvenlik duvarının tüm kurallarını silecektir. Öncesinde bir iptables kural yedeği oluşturduğunuzdan emin olmalısınız.
Hazır mısınız? Aşağıdaki komutu çalıştırarak tüm iptables zincirlerini temizleyin:
|
1 |
sudo iptables -v -F |

Kuralları temizle, zincirleri sil ve tümünü kabul et
Bu bölüm altında açıklanan adımların gerçekleştirilmesi, güvenlik duvarını etkili bir şekilde devre dışı bırakarak kısıtlamasız ağ trafiğine izin verecektir. Önceki bölüme benzer şekilde, devam etmeden önce bir iptables yedeğinizin olmasını öneririz. İlk olarak, yerleşik zincirlerin her birinin varsayılan politikasını ACCEPT olarak değiştireceğiz. Bu, iptables'ın SSH üzerinden sunucunuzun dışında kalmanıza neden olmamasını sağlamak içindir:
|
1 |
sudo iptables -v -P INPUT ACCEPT && sudo iptables -v -P FORWARD ACCEPT && sudo iptables -v -P OUTPUT ACCEPT |

Şimdi, nat ve mangle tablolarını temizleyin:
|
1 2 |
sudo iptables -v -t nat -F sudo iptables -v -t mangle -F |


Tüm zincirleri temizleyin ve varsayılan olmayan tüm zincirleri silin:
|
1 2 |
sudo iptables -v -F sudo iptables -v -X |


Ardından, sonuca göz atalım:
|
1 |
sudo iptables -L --line-numbers |
Son düşünceler
Iptables güçlü bir güvenlik duvarıdır. Umarız bu kılavuz, iptables güvenlik duvarı kurallarını nasıl listeleyeceğinizi ve sileceğinizi öğretmede faydalı olmuştur. Ve bunları gerçek dünyada uygulamadan önce pratik yapmayı unutmayın.
Keyifli bilişimler!



Yorumlar
Henüz yorum yapılmamış. İlk siz olun.