Dikkat: Bu yazıda geçen komutlar hem Linux tabanlı Centos hem de Linux tabanlı Red Hat (RHEL) işletim sisteminde geçerlidir.
iptables Nedir?
Linux kernel’inde paket filtreleme anlamına gelen “netfilter” vardır. Bu “netfilter”in komut satırı ara yüzü “iptables”dir.
iptables Ne İşe Yarar?
“iptables” ile paket filtreleme kuralları yönetilir.
iptables Nelerden Oluşur?
iptables yapısında tablolar vardır. Tablo içerisinde de zincirler vardır.
Tablolar:
- Filter tablosu :
- Paket filtreleme yapar
- INPUT, FORWARD ve OUTPUT zincirleri
- Nat tablosu :
- Kaynak/hedef ip ve port bilgilerinin değiştirir (NAT’lar)
- PREROUTING, POSTROUTING ve OUTPUT zincirleri
- Mangle tablosu :
- tos, ttl, mark değerlerinin değiştirir
- PREROUTING, INPUT, FORWARD, OUTPUT ve POSTROUTING zincirleri
- Raw tablosu :
- Paket izinin tutulması veya tutulmaması için kullanılır
- PREROUTING ve OUTPUT zincirleri
Zincirler:
- INPUT : Hedefi sizin bilgisayarınız olan paketleri inceler. Eğer paket geldiği interface’de kalacaksa kural filter tablosunun INPUT zincirine yazılmalıdır.
Örneğin makinanız üzerindeki web sunucuda bulunan web sayfalarını görüntülemek için diğer bilgisayarlardan gönderilen talepler…
- OUTPUT : Sizin bilgisayarınız tarafından üretilen paketleri Örneğin internette bir siteye bağlanmak için gönderdiğiniz paketler…
- FORWARD : Kaynağı ve hedefi farklı bir bilgisayar olan, sizin bilgisayarınız tarafından üretilmemiş, ancak hedefe ulaşması için sizin bilgisayarınızın üzerinden geçmesi gereken paketleri inceler.
Eğer paket bir interface’ye gelip diğer bir interface’den geçerek yoluna devam edip gidecekse kural filter tablosunun FORWARD zincirine yazılmalıdır.
Örneğin makinanızı lokal ağınızda bulunan diğer kullanıcı bilgisayarlarını internete çıkarmak için Gateway/Firewall olarak yapılandırdığınızda, lokal ağınızda bulunan diğer bilgisayarların internetteki herhangi bir web sayfasına bağlanmak için sizin üzerinizden gönderdiği paketler…
- POSTROUTING : Bir paketin kaynak ip adresi veya port numarası değiştirilecekse kural NAT tablosunun POSTROUTING zincirine yazılır. Yani yönlendirmeden hemen sonra kaynak verilerinde değişiklik yapılır.
- PREROUTING : Hedef adresi veya port numarası değiştirilecekse kural NAT tablosunun PREROUTING zincirine yazılır. Yani yönlendirme işleminden hemen önce hedef verileri değiştirilip sonra paket route edilir.
Kuralların İşleme Mantığı Nedir?
Kurallar sırasıyla işlenmektedir. Bundan dolayı kuralların yazılı sırasına dikkat edilmelidir. Yan paket zincir içerisinden yukardan aşağı doğru kontrol edildiğinde uyduğu ilke kurala göre zincirden çıkar. Aşağıdaki diğer kurallara bakılmaz.
Grafiksel Ekranda Firewall
Bunun için terminal ekranda “system-config-firewall” komutu kullanılabilir. “Root” şifresi ile ayarlara devam edilir ve “ctrl+c” ile de firewall grafiksel ara yüzü kapatılabilir.
Veya GUI uyani grafiksel ekranda system > Administration > Firewall şeklinde açılabilir.
Trusted Services:
Grafiksel arayüzde “Trusted Services” kısmında yaygın kullanılan portlar ve servisler görünmektedir.
Other Ports:
Eğer izin vereceğimiz servis veya port bu listede yok ise “Other Ports” kısmında port ekleyebiliriz.
Trusted Interfaces:
Tursted Interface kısmında istediğiniz interface için firewall kapatabilir veya açabilirsiniz. Örneğin eth0 interface’i için firewall kapalı olsun diyebilirsiniz. Bir interface’den gelen tüm paketleri kabul etmek için;
- iptables -A INPUT -i eth0 -j ACCEPT
komutu da kullanılabilir. Ayrıca “Trusted Interfaces” kısmında sistemde hiç olmayan veya olduğu halde firewall tarafında listelenmeyen interface’ler de “Add” ile eklenebilir.
Masguerading (NAT):
NAT işlemi için Masguerading kısmı kullanılmaktadır. Bu kısımdan seçilen interface NAT yapılacak paketlerin çıkacağı interface’dir. Başka interface’lerden gelen paketler bu seçilen interface’den dışarıya natlanarak gönderilir.
NAT uygulanırken paketler interface değiştirir yani bir interface’den diğerine geçerler. Iptables GUI kullanmıyorsanız yani terminal ekran kullanılıyorsa; interface’ler arası paket forwarding işlemi yapılmaz. Bundan dolayı ilk önce /etc/sysctl.conf dosyası içerisinde bulunan;
- net.ipv4.ip_forward = 0
satırını aşağıdaki gibi değiştirmek gerekir.
- net.ipv4.ip_forward = 1
Bu değişikliğin etkili olabilmesi için de;
- sysctl -p
komutu kullanılır. Iptables GUI kullanıyorsanız yani grafiksel ekranda kullanıyorsanız paket forwarding işlemi NAT yaptığınızda otomatik aktifleştirilir. Burada kullandığımız Masquerade işlemi paketleri iç ve dış networkümüz arasında taşırken routing işlemi yapmaktadır. Ancak biz kernel routing tablosuna herhangi yeni bir değer girmediğimiz için burada yapılan routing işlemi için gerekli network bilgisini interface yapılandırmalarından elde etmektedir.
Port Forwarding:
Bir porta gelen trafiğin yönlendirilmesi için kullanılır. Hedef için aynı IP üzerinde bulunan bir port veya başka bir IP adresi üzerinde bulunan herhangi bir port seçilebilir. Port Forwarding, NAT işleminin bir parçasıdır.
Komut satırında aşağıdaki şekilde port forwarding yapılabilir.
- iptables -A PREROUTING -i eth1 -p tcp –dport 22 \ -j DNAT –to-destination 192.168.122.150:20022
ICMP Filter:
ICMP protokolü network testlerinde kullanılmaktadır. Default’ta yani varsayılan olarak sunucu ICMP paketlerine açıktır. Bundan dolayı bilgi çalınmasını engellemek için ICMP paketlerine karşı kısıtlama yapılabilir. Bunun için aşağıdaki seçeneklerden istenilenler
Örnek olarak sunucumuza doğru ping başlatalım. Sunucumuzun IP adresi 192.168.93.143’dür.
- Windows makinadan >> linux sunucumuza “ping 192.168.93.143 -t” komutu ile sonsuz ping başlatalım.
Ping devam ederken “Echo Request (ping)” seçeneğini işaretleyip “Apply” dediğimiz anda ping cevap vermeyi kesmektedir. Tekrar tiki kaldırdığımızda ping devam etmektedir.
Custom Rules:
Bu kısma kendi yazdığımız kuralları ekleyebiliriz. Örneğin “/home/nizam/Desktop” yoluna “kural” isimli bir dosya oluşturalım ve aşağıdaki satırları içerisine yazalım.
-I OUTPUT -p udp -m udp –dport 53 -j LOG
-I OUTPUT -p udp -m udp –dport 55 -j LOG
-I INPUT -p udp -m udp –dport 53 -j LOG
Şimdi bu dosyayı “Custom Rules>Add” şeklinde seçip ekleyelim. Ardından “Apply” diyerek uygulayalım.
Dosyada yapılan her kural değişikliğinden sonra firewall’a uygulanabilmesi için GUI üzerinde Disable & Enable butonlarını kullanmanız gerekecek.