İptables kullanımı

**Ankesenamon**

Kıdemli Üye
8 Eki 2007
2,220
21
34
iptables Kullanımı
iptables ın çok detaylı bir manuel sayfası vardır (man iptables) ve eğer özellikler hakkında daha fazla detay istiyorsanız bu sayfaya bakabilirsiniz. ipchains'i bilenler sadece 'iptables ve ipchains Arasındaki Farklar' a bakmak isteyebilirler; ikisi çok benzerdir.
iptables ile yapabileceğiniz birçok şey vardır: bunların başında zincirleri yönetmek gelir. İlk olarak silemeyeceğiniz üç gömülü zincir (built-in chains) input, output ve forward ile işe başlayacaksınız.
1. Yeni bir zincir yarat (-N).
2. Boş bir zinciri sil (-X).
3. Gömülü bir zincir için idareyi (policy) değiştir (-P).
4. Bir zincirdeki kuralları listele (-L).
5. Bir zincirdeki kuralları temizle (-F).
6. Bir zincirdeki bütün kuralların paket ve byte sayaçlarını sıfırla (-Z).
Bir zincirdeki kuralları yönetmek için birçok yol vardır.
1. Bir zincire yeni bir kural ekle (-A).
2. Bir zincirin herhangi bir pozisyonuna yeni bir kural ilave et (-I)
3. Bir zincirin herhangi bir pozisyonundaki bir kuralı değiştir (-R)
4. Bir zincirin herhangi bir pozisyonundaki bir kuralı sil (-D).
5. Bir zincirdeki eşleşen ilk kuralı sil (-D).
Bilgisayarınız Başladığında Ne Göreceksiniz
Şu anda (Linux 2.3.15) iptables 'iptables.o' isimli bir modüldür. iptables komutlarını kullanmadan önce bu modülü çekirdeğinize ilave etmeniz gerekecek. Gelecekte, çekirdekte gömülü olabilecektir.
Hiçbir iptables komutu koşmadan önce (dikkatli olun: bazı dağıtımlar iptables ı başlangıç dosyalarında koştururlar), gömülü zincirlerin (INPUT, OUTPUT, FORWARD) hiçbirinde hiçbir kural bulunmayacak, INPUT ve OUTPUT 'ACCEPT' idaresine, FORWARD zinciri ise 'DROP' idaresine sahip olacaktır (iptables modülüne 'forward=1' özelliği sağlayarak bunu iptal edebilirsiniz)
Basit Bir Kural Üzerinde İşlemler
Bu paket filtrelemenin temelidir; kuralları yönetmek. Genel olarak, ekle ('-A') ve sil ('-D') komultarını kullanacaksınız. Diğerleri (ilave etmek için -I ve değiştirmek için -R) bu kavramın basit uzantılarıdır.
Her kural, paketlerin uyması gereken koşullar kümesini ve uyduğu zaman ne yapması gerektiğini ('hedef': target) belirtir. Örneğin: 127.0.0.1 IP adresinden gelen bütün ICMP paketlerini düşürmek (drop etmek) isteyebilirsiniz. Bu durumda koşullarımız protokolun ICMP ve kaynak adresin 127.0.0.1 olmasıdır. Hedefimiz ise 'DROP' dur.
127.0.0.1 gerçek bir ağ bağlantınız olmasa bile sahip olacağınız 'loopback' arayüzüdür. Böyle paketler üretmek için 'ping' programı kullanabilirsiniz (basitçe bütün birlikte çalışan bilgisayarların zorunlu olarak bir ICMP type 0 (echo reply=yankı cevabı) ile cevap vereceği ICMP type8 (echo request=yankı isteği) paketi yollar). 'ping' bağlantıyı test etmek için oldukça yararlı bir progr*****tır.
#ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

---127.0.0.1 ping statistics---
1 packets transmitted ,1 packets received ,0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
#iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
#ping -c 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes

---127.0.0.1 ping statistics---
1 packets transmitted , 0 packets received ,100% packet loss
Burada ilk ping in başarılı olduğunu görebilirsiniz ('-c 1' ping e sadece bir paket göndermesini söyler).
Daha sonra, 127.0.0.1 ('-s 127.0.0.1') den ICMP ('-p icmp') ile gelen bütün paketler için DROP a atlamamız ('-j DROP') gerektiğini belirten bir kuralı 'INPUT' zincirine ekledik ('-A').
Sonra, ikinci ping i kullanarak kuralımızı test ettik. Program hiç gelmeyecek bir cevabı beklemeyi bırakana kadar bir ara olacaktır.
Kuralı iki yoldan biriyle silebileriz. İlki, bunun input zincirindeki tek kural olduğunu bildiğimizden INPUT zinicirdeki 1 numaralı kuralı silmek için aşağıdaki gibi bir numaralandırılmış silme kullanabiliriz:
#iptables -D INPUT 1
#
İkinci yol, -A komutunu tekrarlamak ama -A yı -D ile değiştirerek. Bu yol, karmaşık zincir kurallarınız olduğunda ve temizlemek istediğiniz kural 37 yi hesaplamak için saymak zorunda kalmak istemediğinizde yararlıdır. Bu durumda aşağıdaki komutu kullabiliriz:
#iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
#
-D in sözdizimi -A (veya '-I' veya '-R') komutu ile tamamen aynı özelliklere sahiptir. Eğer aynı zincirde çoklu tanımlı kurallar varsa sadece ilki silinir.
Filtreleme Belirtmeleri
Protokolu belirtmek için '-p' ve kaynak adresi belirtmek için '-s' kullanımını daha önceden görmüştük ama paket karakteristiklerini belirtmek için daha başka özellikler vardır. Aşağıda bu özelliklerin ayrıntılı bir açıklamasını bulacaksınız.
Kaynak (source) ve Hedef (target) IP Adreslerini Belirtme
Kaynak ('-s', '--source' veya '--src') ve hedef ('-d', '--destination' veya '--dst') IP adreslerini belirtmenin dört yolu vardır. En ortak yol 'localhost' veya 'www.linuxhq.com' gibi bütün isim kullanımıdır. İkinici yol '127.0.0.1' gibi IP adresleri belirtmedir.
Üçüncü ve dördüncü yollar '199.95.207.0/24' veya '199.95.207.0/255.255.255.0' gibi IP adresleri grubunu belirtmeyi mümkün kılar. Her ikisi de 199.95.207.0 dan 199.95.207.255 e herhangi bir IP adresi belirtirler; '/' den sonraki dijitler IP adresin anlamlı bölümünü söylerler (yani IP adresin ağ gösteren dijitlerinin sayısını). '/32' veya '/255.255.255.255' default'tur (bütün IP adreslerini eşleştirme). Hiçbir IP adresi belirtmemek için '/0' aşağıdaki gibi kullanılabilir:
#iptables -A INPUT -s 0/0 -j DROP
#
Etkisi '-s' özelliğini hiç belirtmemekle aynı olduğu için bu çok az kullanılır.
Ters Çevirme
'-s' ve '-d' bayrakları da dahil olmak üzere birçok bayrak verilen adrese eşit OLMAYAN adresleri eşleştirmek için '!' ('not' telaffuz edilir) ile başlayan argümanlara sahiptirler. Örneğin, '-s ! localhost' localhost tan gelmeyen her paketi eşleştirir.
Protokol Belirtme
Protokol '-p' bayrağı ile belirtilebilir. Protokol bir rakam (eğer IP için sayısal protokol değerlerini biliyorsanız) veya 'TCP', 'UDP' veya 'ICMP' gibi özel durumlar için bir isim olabilir. Harflerin büyük veya küçük olması önemli değildir, yani 'tcp', 'TCP' ile aynıdır.
Protokol adı '-p ! TCP' gibi ters çevirmek için '!' önekini alabilir.
Arayüz Belirtme
'-i' (veya '--in-interface') ve '-o' (veya '--out-interface') özellikleri eşleşecek bir arayüz adını belirtir. Arayüz paketin ('-i') üzerinden geldiği ve ('-o') üzerinden çıktığı bir fiziksel donanımdır. 'up' olan (şu an çalışan) arayüzleri listelemek için ifconfig komutunu kullabilirsiniz.
INPUT zincirinden geçen paketler bir output arayüzüne sahip değillerdir, yani bu zincirde '-o' kullanan herhangi bir kural hiçbir zaman eşleşmeyecektir. Benzer olarak, OUTPUT zincirinden geçen paketler bir input arayüzüne sahip değillerdir, yani bu zincirde '-i' kullanan herhangi bir kural eşleşmeyecektir.
Sadece FORWARD zincirinden geçen paketler hem input hem de output arayüzüne sahiptirler.
Şu anda var olmayan bir arayüzü belirtmek tamamen serbesttir; arayüz çalışıncaya kadar kural hiçbir şey ile eşleşmeyecektir. Bu PPP bağlantıları (genellikle arayüz ppp0) ve benzerleri için oldukça yararlıdır.
Özel olarak, '+' ile biten bir arayüz bu karakter diziyle başlayan bütün arayüzler (var olsalar da olmasalar da) ile eşleşecektir. Örneğin, bütün PPP arayüzleri ile eşleşen bir kural belirtmek için -i ppp+ özelliği kullanılmalıdır.
Belirtilen arayüz(ler) ile eşleşmeyen bir paket ile eşleşmek için arayüz adı '!' ile başlayabilir.
Segmentleri Belirtme
Bazen paketler bir defada iletilmek için çok geniştir. Böyle bir durumda, paket segmentlere ayrılır ve çoklu paket olarak yollanır. Diğer taraf, bütün paketi yeniden kurmak için bu segmentleri birleştirir.
Segmentler ile problem, internal paketin bir parçası olan IP başlığından sonra ortaya çıkar: protokol başlıkları (örneğin TCP, UDP ve ICMP uzantıları tarafından oluşturulanlar) sadece ilk segmentte bulunduğundan protocol başlıkları için paketin içine bakmak mümkün değildir.
Eğer bağlantı izleme veya NAT yapıyorsanız, o zaman segmentler paket filtreleme koduna erişmeden önce tekrar birleştirilirler, yani segmentler hakkında endişelenmenize gerek yoktur. Aksi takdirde, aynı işlevi gören 'ip_defrag.o' modülünü ilave edebilirsiniz (not: buna ancak iki ağ arasında tek bağlantı iseniz izin verilir).
Aksi takdirde, segmentlere filtreleme kuralları tarafından nasıl davranıldığını anlamanız önemlidir. Bilmediğimiz bir bigiyi soran herhangi bir filtreleme kuralı eşleşmeyecektir. İlk segmente diğer paketlere davranıldığı gibi davranılır, ikinci ve sonraki segmentlere öyle değil. Bu sebeple -p TCP --sport www ('www' nin bir kaynak portunu belirtme) kuralı bir segment (ilk segment dışındaki) ile hiç eşleşmeyecektir. Ters kuralı -p TCP --sport ! www de öyle.
Bunula birlikte, '-f' ( veya '--fragment') bayrağını kullanarak ikinci ve sonraki segmentleri belirten bir kuralı belirtebilirsiniz. İkinci ve sonraki segmentlere uygulanmayan bir kuralı '-f !' ile başlatarak belirtmek serbesttir.
Genellikle, filtreleme ilk segmenti etkileyeceğinden ve bu sebeple karşı tarafta segmentlerin birleşmesini önleyeceğinden ikinci ve sonraki segmentlerin geçişine izin vermek güvenli görülür, oysa sadece segmentler yollayarak makinelerin çökmesine imkan veren bug'ların olduğu bilinmektedir. Siz araştırınız.
Ağ-başları için not: 'malformed' paketler (firewall kodunun, portları ya da ICMP kodu ve tipini okuyabilmesi için çok kısa olan TCP, UDP ve ICMP paketleri) böyle incelemeler yapıldığında drop edilir. Pozisyon 8 de başlayan TCP segmentleri de dahil.
Örnek olarak, aşağıdaki kural 192.168.1.1. e giden bütün segmentleri drop edecektir:
#iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
#
iptables'a Uzantılar: Yeni Testler
iptables uzatılabilir, yani yeni özellikler sağlamak için hem çekirdek hem de iptables araçları uzatılabilirler.
Bu uzantıların bazıları standarttır, diğerleri daha egzotiktir. Uzantılar başka insanlar tarafından yapılıp kullanıcılara ayrı olarak dağıtılabilir.
Çekirdek uzantıları normalde /lib/modules/2.3.15/net gibi çekirdek modülü altdizinlerinde bulunurlar. Şu anda (Linux 2.3.15) istek üzerine yüklenme özellikleri yoktur. Yani istediğinizi elinizle ilave etmeniz gerekecektir. Gelecekte istek üzerine yüklenebilir olabilirler.
Bazı dağıtımlar iptables program uzantılarını /lib/iptables veya /usr/lib/iptables a yerleştirse de genelde /usr/local/lib/iptables/ de bulunan kütüphaneleri paylaşırlar.
Uzantıların iki çeşidi vardır: yeni hedefler ve yeni testler; aşağıda yeni hedeflerden söz edeceğiz. Bazı protokoller otomatik olarak yeni testleri sağlar: şu anda bunlar aşağıda gösterildiği gibi TCP, UDP, ICMP dir
Bunlar için, uzantıları yükleyecek '-p' özelliğinden sonra komut satırında yeni testleri belirtebilirsiniz. Açık (explicit) yeni testler için, sonrasında uzatılmış özelliklerin geçerli olacağı, uzantı yüklemeye yarayan '-m' özelliği kullanılabilir.
Bir uzantı hakkında yardım almak için, onu yüklemek için kulanılan parametre olan '-p' veya '-m' nin yaninda '-h' veya '--help' i kullanın
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.