| |||||||
![]() |
| | LinkBack | Thread Tools | Display Modes |
|
#1
| ||||
| ||||
| IPTables ve Netfilter nedir?
Gerçekten başlangıç seviyesi için uygun ve anlaşılması kolay bir makale. Kesinlikle paylaşmak istedim.Kaynagını hatırlıyamıyorum özür dilerim. Yukarıda geçen yazıyı Enver Altın tarafından 14 Kasım 2004 tarihinde The truth about my life adresinde yayınlanmıştır. Hiç olmazsa yazının sonuna kaynak belirtilmesi gerekmez miydi? Yazının sonuna degil ama başına yazmıştık enveraltina bi kez daha teşekkürler.Netfilter nedir? Netfilter, en basit ifade biçimi ile 2.3 ve daha yeni Linux çekirdeği sürümleri içerisinde bulunan yetenekli ve yüksek performanslı NAT, filtering ve packet mangling sistemi olarak biliniyor. Peki, IPTables nedir? iptables, çekirdek içerisinde yer alan Netfilter sistemini userspace içerisinden denetlemek amacıyla kullandığımız araç ve yazılımın adı. Bu ikisi sürekli birlikte anılıyor, farkları nedir? Netfilter, Linux çekirdeği içerisinde sürekli olarak çalışır ve Linux sistem çağrıları (syscall) yoluyla yönetilir. IPTables ise, çekirdek içerisinde çalışan netfilter yapısını yönetmek amacıyla kullandığımız araç. Her ikisi de Netfilter projesi kapsamında, aynı kişiler ve gruplar tarafından geliştiriliyor. Buna karşın netfilter kodu resmi Linux çekirdeği ile birlikte gelirken, iptables adındaki araç ayrı bir yazılım ve kullanılan dağıtım tarafından sağlanıyor. Temel kavramlar: IP paketinin yapısı IP paketlerini mektup zarflarına kadar basitleştirecek olursak, temel anlamda bir IP paketi: ![]() Şekil 1: Basit bir IP paketi bu kadar basit algılanabilir (tabii gerçekte böyle değil, IP paketleri çok daha fazla bilgi içeriyor fakat şimdilik bu bölümlerle ilgilenmeyeceğiz). Bir IP paketini şimdilik yalnızca nereden geldiğini, nereye gitmek üzere gönderildiğini ve veriyi içeren bir mantıksal bir birim olarak düşünelim.Nelerden bahsedeceğiz? Bu belge içerisinde, yalnızca Netfilter’ın çok sık kullanılan NAT ve Filtering özelliklerinden bahsedeceğim; packet mangling ve bandwidth shaping gibi daha ileri düzey konulara şimdilik girmeyeceğim. Ayrıca kullanıcı tanımlı kural zincirlerinin yönetimi, REJECT ve LOG target konularından ve paketlerin bağlantı durumlarına göre incelenmeleri gibi konulardan da detaylı olarak bahsetmeyeceğim. Bu konulardan bahsetmeme nedenim, belgeyi olabildiğince basit ve giriş düzeyinde tutmak. Bahsetmediğim konular gelişkin bir güvenlik duvarı yapılandırması için değerli ve gerekli konular. Bu konularda vakit bulduğumda ayrıca geniş bir belge hazırlayacağım. Netfilter nasıl çalışıyor? ![]() Şekil 2: Netfilter, tablolar ve zincirler Yalnızca NAT ve IP Filtering konularından bahsedecek olmanın verdiği rahatlıkla yukarıdaki şekli çizdim.Netfilter temel anlamda iki farklı türden ve mantıksal olarak birbirine benzerlik gösteren işlemler gerçekleştiriyor. Bunlar:
Bence ideal bir dünyada NAT olmamalıydı. Eğer herkese yetecek kadar çok IP adresimiz olsaydı ve her IP adresi için ek bedel ödemek gibi anlamsız koşullar olmasaydı, NAT gibi bir işleme gerek kalmazdı NAT gibi süreçler, bir tek IP adresine sahip olduğunuz fakat bu IP adresini çeşitli hizmetler için ortak kullanmanız gerektiği durumlarda, belirli sınırlar çerçevesinde faydalı oluyor. En popüler senaryolardan bir tanesini açıklamak gerekirse, dial-up bir modem ile edindiğiniz bir IP adresiniz var ve aynı zamanda bu bilgisayara bağlı bir ethernet üzerinden yerel ağınızdaki diğer bilgisayarlarla iletişim kurabiliyorsunuz. Yerel ağınıza bakan ağ arayüzünün 192.168.1.1 olduğunu, modem bağlantınızdan edindiğiniz IP adresinin de 123.123.123.123 olduğunu varsayalım. IP dolaştırma (routing) etkin olsun (nasıl etkinleştirileceğinden bahsedeceğim). Yalnızca IP dolaştırma yapılanmasının etkin olduğu durumda yerel ağdan (örneğin IP adresi 192.168.1.5 olan “Ahmet”‘in bilgisayarından) gelen bir IP paketi; kaynak adresinde 192.168.1.5 bilgisi yer alacak biçimde Internet erişimimiz bulunan IP adresi üzerinden, değiştirilmeksizin iletilecek. Eğer bağlı bulunduğumuz ISP, IP dolaştırma sırasında özel bazı adresleri de yönlendirecek kadar dikkatsiz ise Ahmet’in Internet üzerinde bağlanmaya çalıştığı sunucuya kaynak adresi 192.168.1.5 olan bir IP paketi ulaşacak Bu durumda, Ahmet’in bağlandığı sunucunun yanıtları Ahmet’e gönderebilmesini sağlamak üzere, Ahmet’den gelen ve Internet yönüne doğru gidecek olan paketlerin hedef adreslerini, Internet’e bağlı bulunan sistemimizin Internet üzerindeki gerçek IP adresi ile değiştirmeliyiz ki Ahmet’in isteğine yanıt olarak gönderilecek IP paketleri Internet’e bağlı bulunan sistemimize kadar ulaşabilsin. Ayrıca, bu işlemi yapan sistemimiz hangi IP paketlerini nereden geldikleri ve nereye gittikleri gibi asıl bilgiler ile birlikte nasıl değiştirdiğini hatırlamalı ki yanıt niteliğinde gelen paketleri yerel ağımızdaki asıl hedeflerine (yani örneğimizde Ahmet’in bilgisayarına) tekrar, Internet üzerinden geliyormuş gibi gönderebilsin (stateful NAT). Bu işlem, basit bir NAT uygulamasıdır ve iptables kullanılarak tek satırlık ve birçok kişinin ne olup bittiğini anlamaksızın ezberlediği bir komut ile kolaylıkla gerçekleştirilebilir. İlk bakışta görülebileceği gibi, NAT iki durumda yani iki farklı biçimde yapılabilir:
Ayrıca, MASQUERADE adıyla bilinen özel bir SNAT türü var. Masquerading, sabit bir IP adresine veya sabit/güvenilir bir bağlantıya sahip olmayan sistemlerde kullanılması için tasarlanmış bir NAT türü. SNAT yerine MASQUERADE kullanıldığında, paketin hedef adresine, paketin sistemden ayrılacağı ağ arayüzünün IP adresi otomatik olarak yazılır (SNAT kullanıldığında paketin kaynak adresine yazılacak IP adresini belirtmek durumundasınız). Tek dezavantajı, SNAT’a kıyasla çok küçük performans kayıplarına neden olması. Ayrıca doğru kullanılmadığında ve küçük birkaç husus gözden kaçırıldığında MASQUERADE ile sisteminize küçük güvenlik açıkları oluşturmanız işten bile değil. Şimdi örneğimizi tamamlayalım ve neler olup bittiğini açıklayalım: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE iptables aracını kullanarak çekirdek içerisindeki Netfilter modüllerinin yapılandırmasına bir kural ekleyerek değiştirmiş olduk ve belirttiğimiz kural, 192.168.1.0/24 ağından gelen ve ppp0 arayüzü yönüne gidecek olan (routing’den sonra NAT yaptığımız için bu bilgiye sahibiz) tüm IP paketlerinin kaynak adreslerine gönderilmeden önce otomatik olarak ppp0 arayüzünün IP adresinin yazılmasını sağladı. Bu sayede hedef sunucudan dönen yanıt paketleri bize ulaşacak ve Netfilter yanıt niteliğindeki paketleri tersi yönde otomatik olarak DNAT yapacak ve routing işleminden önce bu paketlerin hedef adreslerini değiştirerek yerel ağımızdaki kullanıcılara ulaşmasını sağlayacak (bu işlem için ayrıca bir kural eklememize gerek yok). Aynı senaryoya bir özellik daha ekleyelim; Internet’e modem ile bağlı olan sistemimiz, Internet yönünden kendisine ulaşan HTTP (TCP port 80) isteklerini Ahmet’in 192.168.1.5 adresindeki bilgisayarına iletsin. Kuralımız: iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport http -j DNAT –to 192.168.1.5 Bu parametreler ne anlama geliyor? Nasıl kullanılıyor? Netfilter, IP paketleri üzerinde yapılacak çeşitli işlem türlerini ve aşamalarını tablolar içerisinde gruplar. Bu belgede yalnızca nat ve filter tablolarından bahsedeceğiz. Bu tablolar içerisinde kural zincirleri bulunur (kural zincirleri sistem tarafından veya kullanıcılar tarafından gereksinimlere göre tanımlanır). Ayrıca her tablo, öntanımlı adı değiştirilemeyen ve silinemeyen belirli sayıda kural zinciri içerir, bunlar:
Ad Kullanım biçimi Açıklama Örnek Tablo seçimi -t iptables komutunun devamındaki parametrelerin hangi tablo üzerinde gerçekleştirileceğini belirtmek amacıyla kullanılır. -t nat -t filter Kuralları listele -L [] Bir tablodaki istenen veya tüm zincirlerde yer alan kuralları listeler. -L -L POSTROUTING Kuralları temizle -F [] Bir tablodaki istenen veya tüm zincirlerde yer alan kuralları temizler. -F -F POSTROUTING Öntanımlı davranış belirle -P Bir tablodaki belirtilen zincirin öntanımlı davranış kuralını belirler. Zincirdeki diğer kurallarden herhangi biri tarafından işlenmeyen bir paket, öntanımlı davranış kuralında belirtilen işleme tabi tutulur. -P INPUT DROP -P INPUT LOG Kural ekle -A Bir tablodaki belirtilen zincir içerisine belirtilen parametrelere göre bir kural ekler. -A POSTROUTING -A FORWARD Kural sil -D Bir tablodaki belirtilen zincirde yer alan ve belirtilen parametrelerle bire bir aynı olan kuralı siler. -D POSTROUTING -D FORWARD Kullanıcı tanımlı zincir sil -X [] Bir tablodaki belirtilen veya tüm kullanıcı tanımlı zincirleri siler. -X benim_zincirim -X Paket seçimi için kullanılan parametreler: Ad Kullanım biçimi Açıklama Örnek Kaynak adresi -s [!] İncelenen paketin kaynak adresi, belirtilen adres ile örtüşüyor ise paket üzerinde belirtilen işlem gerçekleştirilir. -s 192.168.1.5 -s 192.168.1.0/24 Hedef adresi -d [!] İncelenen paketin hedef adresi, belirtilen adres ile örtüşüyor ise paket üzerinde belirtilen işlem gerçekleştirilir. -d 192.168.1.10 -d 192.168.2.0/24 Protokol -p [!] İncelenen paket belirtilen taşıyıcı protokol ile örtüşüyor ise paket üzerinde belirtilen işlem gerçekleştirilir. Öntanımlı değeri (belirtilmediğinde): “all” -p tcp -p udp -p icmp -p all Hedef port –dport [!] İncelenen paketin hedef port adresi belirtilen port ile örtüşüyor ise paket üzerinde belirtilen işlem gerçekleştirilir. –dport 80 –dport ftp Kaynak port –sport [!] İncelenen paketin kaynak port adresi belirtilen port ile örtüşüyor ise paket üzerinde belirtilen işlem gerçekleştirilir. –sport ftp-data –sport 53 Geliş arayüzü -i [!] İncelenen paketin geldiği ağ arayüzü belirtilen ağ arayüzü ile örtüşüyorsa paket üzerinde belirtilen işlem gerçekleştirilir. Bu bilgiye yalnızca routing işleminden önce veya routing işlemi sırasında yapılan denetimlerde erişilebilir. -i eth1 -i ppp0 Gidiş arayüzü -o [!] İncelenen paketin gitmek üzere olduğu ağ arayüzü belirtilen ağ arayüzü ile örtüşüyorsa paket üzerinde belirtilen işlem gerçekleştirilir. Bu bilgiye yalnızca routing işleminden sonra erişilebilir. -o ppp0 -o eth1 Ayrıca bu parametrelerin tümünde, belirtilecek değerden önce kullanılabilecek ünlem işareti (!), olumsuzluk belirtmek anlamında kullanılır. Örneğin, –dport ! 80 biçimindeki bir tanımın bulunduğu kural, hedef port adresi 80 olmayan tüm paketlere uygulanacaktır. Çeşitli ifadelere göre seçilen paketlere nasıl bir işlem uygulanacağı -j parametresi ile belirtilir ve bahsi geçen kuralın bulunduğu tabloya göre değişiklik gösterir: NAT tablosu için: Ad Kullanım biçimi Açıklama Örnek SNAT -j SNAT –to Sistemden ayrılmak üzere olan paketin kaynak adresini (ve belirtilmişse kaynak port numarasını) belirtilen adres (ve belirtilmişse port numarası) bilgisi ile değiştirir. Bu işlem yalnızca routing işleminden sonra gerçekleştirilebilir. -j SNAT –to 212.156.4.1 -j SNAT –to 212.156.4.20:53 -j SNAT –to 192.168.1.35:http DNAT -j DNAT –to Sisteme henüz gelmiş bir paketin hedef adresini (ve belirtilmişse hedef port numarasını) belirtilen adres (ve belirtilmişse port numarası) bilgisi ile değiştirir. Bu işlem yalnızca routing işleminden önce gerçekleştirilebilir. -j DNAT –to 192.168.1.5 -j DNAT –to 212.156.123.123:10000 MASQUERADE -j MASQUERADE Sistemden ayrılmak üzere olan paketin kaynak adresini, paketin sistemden ayrılacağı ağ arayüzünün adresi ile değiştirir. Bu işlem yalnızca routing işleminden sonra gerçekleştirilebilir. -j MASQUERADE REDIRECT -j REDIRECT –to Sisteme henüz gelmiş bir paketin, iptables kurallarının çalıştığı sistem üzerindeki belirtilen port adresine yönlendirilmesini sağlar. -j REDIRECT –to 3128 Filter tablosu için: Ad Kullanım biçimi Açıklama Örnek ACCEPT -j ACCEPT Belirtilen paket seçimi parametrelerine uyan paketin geçişine izin verilir. -j ACCEPT DROP -j DROP Belirtilen paket seçimi parametrelerine uyan paket gözardı edilir, hiç alınmamış gibi davranılır. -j DROP REJECT -j REJECT Belirtilen paket seçimi parametrelerine uyan paket uygun bir ICMP hata paketi ile yanıtlanarak, reddedilir. Bu konuda daha detaylı bilgi için man iptables komutu verin. -j REJECT LOG -j LOG Belirtilen paket seçimi parametrelerine uyan paket sistem kayıtları içerisine kaydedilir. Bu konuda daha detaylı bilgi için man iptables komutu verin. -j LOG Filtreleyelim! Kısa bir senaryo, sistemimize SSH (tcp port 22) ile gelebilecek tüm bağlantıları kapatmak istiyoruz: iptables -t filter -A INPUT -p tcp –dport ssh -j DROP komutunu verdiğimizde, sistemimize herhangi bir ağ üzerinden SSH ile erişmek mümkün olmayacak, çünkü Netfilter paketlerin işletim sisteminin IP yığıtı içerisinde değerlendirmeye alınmasını engelleyecek ve gözardı edecektir. Yeri gelmişken, daha önce bahsettiğim bir ipucunu kullanmak istiyorum. Son örneğimizde -t filter ile filter tablosunu ayrıca belirtmiştik, fakat -t parametresi belirtilmediğinde öntanımlı olarak zaten filter tablosu kullanılır, dolayısıyla bu ifade çok da gerekli değil. Örneğimizi biraz geliştirelim; 192.168.1.5 dışında hiçbir yerden ssh kabul etmeyelim: iptables -A INPUT -s ! 192.168.1.5 -p tcp –dport ssh -j DROP Bir başka örnek, yerel ağdan gelmeyen tüm SSH isteklerini boşverelim: iptables -A INPUT -i ! eth0 -p tcp –dport ssh -j DROP Sanırım artık FORWARD zinciri ile de oynayabiliriz, yerel ağdan internet yönüne giden tüm SMTP iletişimini boşverelim örneğin (IP Forwarding’in açık olduğunu varsayıyorum): iptables -A FORWARD -i eth0 -p tcp –dport smtp -j DROP IP Forwarding nedir, nasıl çalıştırılır? IP Forwarding, daha önce de belirttiğim gibi IP paketlerinin bir ağ arayüzünden bir diğerine aktarılması; yani IP paketlerinin bir fiziksel ağdan bir diğerine aktarılması işlemidir. Linux çekirdeği, bu işlemi gerçekleştirmek için gerekli tüm yapıyı barındırır ve aktif hale getirmek kolaydır: echo 1 > /proc/sys/net/ipv4/ip_forward IP Forwarding işleminin düzgün çalışabilmesi için, en az bir ağ arayüzüne (Linux çekirdeği sanal arayüzler arasında da IP Forwarding yapabilir) ve en az iki IP subnet’in routing tablosunda tanımlı olmasına gereksinim duyulur: server:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.199.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 0.0.0.0 192.168.199.3 0.0.0.0 UG 0 0 0 eth1 Örnekteki routing tablosuna göre, 192.168.1.0/24 ve 192.168.199.0/24 ağları arasında IP Forwarding işlemi gerçekleştirilebilir. Ayrıca bir default gateway (0.0.0.0: bilinmeyen ağlara 192.168.199.3 yoluyla eth1 üzerinden ulaşılacağı anlamına gelir) tanımlı olduğundan, diğer tüm ağlara erişim buradan sağlanır. IP paketlerinin hangi ağlara yönlendirileceği, routing tablosu içerisindeki kayıtlara göre belirlenir. Öntanımlı zincir kuralları IPTables, tüm zincirler için öntanımlı bir davranış kuralı tanımlanmasına izin verir. Eğer bir IP paketi, ilgili zincir içerisindeki kurallardan herhangi biri tarafından ACCEPT yada DROP/REJECT biçiminde işaretlenmemişse, zincirin öntanımlı kuralı tarafından yakalanır. Örneğin, filter tablosundaki FORWARD zincirinin öntanımlı kuralını DROP olarak değiştirecek olursak: iptables -P FORWARD DROP IP forwarding/routing sırasında, FORWARD zinciri içerisindeki kurallardan herhangi biri tarafından ACCEPT edilmeyen paketler, gözardı edilir. Özetle öntanımlı olarak tüm paketlerin forward edilmesini kapatmış oluruz, daha sonra FORWARD zincirine ekleyeceğimiz kurallarla da istisnalar tanımlayabiliriz: iptables -P FORWARD DROP iptables -A FORWARD -s 192.168.1.0/24 -o ppp0 -p tcp –dport ssh -j ACCEPT Bu tanım sayesinde 192.168.1.0/24 ağı, ppp0 (Internet) yönüne yalnızca SSH protokolünü kullanarak erişebilir. Tabii NAT yapmazsak erişemeyecekler Öneriler Bu bölüme, iptables’i öğrenmeye başladığım günden bu yana edindiğim naçizane tecrübelerimi ve önerilerimi eklemek istedim.
Önce örnek ağımızın neye benzediğine bir bakalım: ![]() Şekil 3: Örnek ağ şeması ve gereksinimlerimizi belirleyelim:
![]()
__________________ 1.)Lütfen destek talebinde bulunmak için msn messenger üzerinden iletişime geçmeyiniz. 2.)Ücretsiz destek almak için forum sayfalarımızı kullanmanız aynı sorunu yaşayan diğer üyelerin cevaplara en kısa sürede ulaşabilmesi ve sizlere yardımcı olmak isteyen bizlerin ve diğer üyelerimizin zaman kazanmaları açısından çok önemlidir. 3.)Forumlarımızda sorunlarınızı anlatırken mümkün olduğunca çok detay vermeniz en kısa sürede sorununuza çözüm bulmanız açısından mühimdir. Daha çok öğrenmek ve öğretmek dileğiyle.. Sevgiler.. The Platform. |
|
#2
| ||||
| ||||
|
çorba gibi olmuş ![]() pek bişey anlıyamadım galiba:confused: |
|
#3
| |||
| |||
|
bende anlamadım
|
|
#4
| ||||
| ||||
|
bende anlamadım
__________________ ----------------------------------------------------------------------------------------- >> LÜTFEN ÜCRETSİZ DESTEK TALEP ETMEK İÇİN MSN ADRESLERİMİZİ EKLEMEYİNİZ. HER TÜRLÜ ÜCRETSİZ DESTEK İÇİN FORUMLARIMIZI KULLANINIZ. TEŞEKKÜRLER << |
|
#5
| ||||
| ||||
|
Bende anlamadım desem hasan abi kalpten gider ama cidden anlamadım |
|
#6
| |||
| |||
|
bi kaç kere okumak şart |
|
#7
| ||||
| ||||
|
Hasan ben anladım [ Gönlü olsun üzmeyin admini ]
|
|
#8
| ||||
| ||||
|
anlamadınız da zaten döküman anonim.yani içinde 3-4 parça var. büyük bir bölümü enver tarafından yazılmıştır. dökümanı basitleştirmek için epey uğraştığımı belirtmeden geçmeyeceğim. bundan daha basiti yok. anlayın üzmeyin beni.
__________________ 1.)Lütfen destek talebinde bulunmak için msn messenger üzerinden iletişime geçmeyiniz. 2.)Ücretsiz destek almak için forum sayfalarımızı kullanmanız aynı sorunu yaşayan diğer üyelerin cevaplara en kısa sürede ulaşabilmesi ve sizlere yardımcı olmak isteyen bizlerin ve diğer üyelerimizin zaman kazanmaları açısından çok önemlidir. 3.)Forumlarımızda sorunlarınızı anlatırken mümkün olduğunca çok detay vermeniz en kısa sürede sorununuza çözüm bulmanız açısından mühimdir. Daha çok öğrenmek ve öğretmek dileğiyle.. Sevgiler.. The Platform. |
|
#9
| ||||
| ||||
|
Tmm tmm bişi demedik Alaska'dan bana hediye alsana Hasan.
__________________ ----------------------------------------------------------------------------------------- >> LÜTFEN ÜCRETSİZ DESTEK TALEP ETMEK İÇİN MSN ADRESLERİMİZİ EKLEMEYİNİZ. HER TÜRLÜ ÜCRETSİZ DESTEK İÇİN FORUMLARIMIZI KULLANINIZ. TEŞEKKÜRLER << |
|
#10
| ||||
| ||||
|
Teşekkürler hoca
__________________ Çok kaygı çekme, mukadder olan olur, takdir olunan rızkın da sana gelir.[Hz Muhammed (S.A.V)] Şiir vardır ki, hikmettir. Beyân vardır ki, büyüdür.[Hz Muhammed (S.A.V)] Kim, bir zümreye benzemeye çalışırsa, o, onlardandır.[Hz Muhammed (S.A.V)] Hikmetin başı, Allah korkusudur.[Hz Muhammed (S.A.V)] Elif Lam Mim. İnsanlar "inandık" deyip kurutlacaklarınımı sanırlar [Ankebut ,1] |
![]() |
| Thread Tools | |
| Display Modes | |
| |




