[LinuxFocus-icon]
Ev  |  Eriþimdüzeni  |  Ýçindekiler  |  Arama

Duyumlar | Belgelikler | Baðlantýlar | LF Nedir
[an error occurred while processing this directive]
convert to palmConvert to GutenPalm
or to PalmDoc

Vincent Renardias
tarafýndan Vincent Renardias
<vincent(at)renardias.com>

Yazar hakkýnda:

1993'den beri GNU/Linux kullanýcýsý olan Vincent Renardias, 1996'da kendi geliþtirmelerine baþladý:Debian geliþtiricisi, GIMP ve GNOME'un Fransýzca çevirmeni, Marseille (PLUG)'daki Linux Kullanýcý Grubu'nun kurucusu...Þu an EFB' þirketinde ARGE yöneticisi.GNU/Linux hakkýnda yazmaya devam ediyor.



Türkçe'ye çeviri:
Özcan Güngör <ozcangungor(at)netscape.net>

Ýçerik:

 

Linux ile Paket Filtreleme

[Illustration]

Özet:

Bu makale ilk defa Linux Magazine France'ýn güvenlik üzerine olan bölümünde yayýnlanmýþtýr.Editör, yazarlar ve tercümanlar, bu konu hakkýndaki her makalenin LinuxFocus'ta yayýnlanmasýna izin vermiþlerdir.LinuxFocus, bunlarý Ýngilizce'ye çevirir çevirmez size sunar.Bu iþle ilgili bütün kiþilere teþekkür ederim.Bu tanýtým, bu kökene ait bütün makalelerde yer alacaktýr.


Davetsiz teþebbüslerden korunmanýn iyi yolarýndan biri, aðdaki gereksiz herþeyi filtrelemektir.Bu iþ genellikle firewall denilen makinalarla yapýlýr.
Bu makalede, böyle bir sistemin gerekli temel uygulamalarýný ve ayarlarýný nasýl yapabileceðinizi gösterceðiz.


_________________ _________________ _________________

 

Aðgeçidi, Proxy-Arp yada Ethernet Köprüsü(Bridge)

Filtreleme mekanizmasý, baý istenmeyen paketleri yakalayan bir að olarak düþünülebilir.Önemli olan, uygun büyüklükte bir ay bulmak ve onu uygun bir yere yerleþtirmektir.


Aðda firewall'un yeri
Firewall location

Paketli iyi bir þekilde filtrelemek için filtreleme mekanizmasý, korunacak að ile "dünyanýn geri kalan kýsmý" arasýna konmalýdýr.Bu genelde, biri iç aða, diðeri dýþarýyla baðlatý kuran router'a baðlý iki að arayüzleri(genellikle ethernet) ile yapýlýr.Böylece veriler, içeriðine göre veri geçiþine izin veren ya da vermeyen firewall içinden geçmek zorunda kalýr.
Filterleme mekanizmasýna sahip makina üç farklý þekilde ayarlanabilir:

- Basit" aðgeçidi: Bu en çok kullanýlan ayarlamadýr.Makina, iki að arasýna veya altaðlar arasýnda aðgeçidi olarak kullanýlýr.Yerel aðdaki bilgisayarlar, varsayýlan route olarak router yerine bu aðgeçidini kullanýrlar.

- Proxy-Arp" aðgeçidi: Bir önceki ayralama, aðý altaðlara böler.Bu da IP adreslerinin yarýsýný yok eder ve biraz can sýkýcýdýr.Að ve broadcast adresleri kullanlýrken, 16 adresli(aðmaskesi 28 bit olan) bir altað örneðinde sadece 14 adres kullanýlabilir.Altaða bir bit eklersek, 14 adresi 6'ya düþürürüz(8 IP eksi að ve broadcast adresleri).Bu IP kayýplarýný istemeyeceðiz için bu makalenin ileri bölümlerinde açýklanacak bir yöntemi kullanabilirsiniz.Dahasý, bu yöntemle, ne var olan makinalarýn að ayarlarýnda ne de router'da bir deðiþiklik gerekmez.

- Ethernet Köprüsü: bir ethernet aðgeçidi(IP að geçidi deðil) kurmak, filtereleme mekanizmasýnýn diðer makinalar tarafýndan görünmesini engeller.Bu tür bir ayar, Ethernet arayüzlerine herhangi bir IP adresi vermeden yapýlabilir.Bu makina, ping, traceroute gibi araçlarla bulunamaz.Bu yöntemi ancak 2.2.x kernel ile yapabilirsiz.Çünkü 2.4.x kernellerde bu özellik henüz tamamlanmadý.  

Temel Filtreleme Kurallarý

Þimdi, filremizi nereye kuracaðýmýzý biliyoruz ve neyi engelleyeceðini neyi kabul edeceðini tanýmlamalýyýz.
Böyle bir filtreyi ayarlama iki þekilde yapýlabilir:

- Ýyi olaný: Sadece kuralýn kabul etiði paketler geçer diðerleri geçemez.
- Kötü olan:(maalesef en sýk kullanýlaný) sadece istenmeyen paketler durdurulur ve diðerleri kabul edilir.

Açýklamasý kolay:Ýlk durumda, bir kuralýn unutulmasý servisin doðru çalýmamasýna veya hiç çalýþmamasýna sebep olur.Genellikle hemen farkedilir ve gerekli kuralýn eklenmesi yeterlidir.
Ýkinci durumda, bir kuralýn unutulmasý, bulunmasý zor olan bir açýða neden olabilir.

 

Netfilter

Linux 2.4 ile en çok kullanýlan filtreleme yazýlýmý Netfilter'dir.Linux kernel 2.2'deki 'ipchains'i deðiþtirir.Netfilter iki bölümden oluþur:kernel ile derlenmesi gereken kernel desteði ve sisteminizde kullanýlabilir olan 'iptables' komutu.

 

Örnek Ayar

Ýçinde açýlamasý olan bir örnek, uzun bir konuþmadan daha iyidir.Sonra filtreleme mekanizmasýnýn nasýl yükleneceðini ve nasýl ayarlanacaðýný açýklayacaðýz.Önce makina, Proxy-Arp kullanýlarak bir aðgeçidi olarak çalýþacak ve IP adreslerinin sayýsýný sýnýrlayacak.Sonra filtreleme mekanizmasýný ayarlayacaðýz.

Yazar, Debian daðýtýmý için bir önceliðe sahiptir ancak diðer daðýtýmlarla da yapýlýr.

Önce, kernelinizde Netfilter desteði olup olmadýðýný kontrol edin.Eðer varsa açýlýþ iletilerinde þunu görmelisiniz:

ip_conntrack (4095 buckets, 32760 max)
ip_tables: (c)2000 Netfilter core team

Yoksa, Netfilter desteðini seçtikten sonra kerneli tekrar derlemelisiniz.Aranan seçenekler, "Networking Options" altýndaki "Network Packet Filtering" altmeüsündedir."Netfilter Configuration" bölümünden, gerekli seçenekleri iþretleyin.Þüphe duyduüunuz seçeneklerde, hepsini seçebilirsiniz.Dahasý, Netfilter'i kernel eklemek, modül olarak kullanmaktan daha iyidir.Eðer herhngi bir sebeple Netfilter modüllerinde bir çalýþmazsa, filtreleme çalýþmaz.En iyisi olabilecel risklerden bahsetmeyelim.

Ayrýca 'iproute2' paketini de yüklemelisiniz(Bu sonuncusu, zorunlu deðil ancak örneðimizde kullancaðýz çünkü ayarlama scriptlerinin kolaylaþmasýný saðlayacaktýr).Debian ile, 'apt-get install iproute' komutunu vermeniz yeterlidir.
Diðer daðýtýmlarda, karþý gelen paketi bulun.Yükleyin veya aþaðýda kaynak kodu verilmiþtir.Ýndirin ve derleyin:
ftp://ftp.inr.ac.ru/ip-routing/

Þimdi iki Ethernet kartý ayarlanmalýdýr.Linux kernelinin, bir ethernet kartýný bulduktan sonra diðerini aramayý býraktýðýný belirtelim.Yani sadece ilk kart bulunacaktýr.
Çözüm için þunu lilo.conf dosyasýna ekleyin:
append="ether=0,0,eth1"

Þimdi Ethernet arayüzlerini ayarlayalým.Kullanacaðýmýz yöntem, bir IP adresinden tasarruf edebilmemiz için her iki karta da ayný adresi vermemize izin vermektedir.
Örneðin: 10.1.2.96/28 altaðýna sahip olalým.IP adreslerimiz 10.1.2.96 - 10.1.2.111 aralýðýndadýr.Router, 10.1.2.97 adresine ve filtreleme makinasý 10.1.2.98 adresine sahiptir.eth0 arayüzü, eðer bir hub ya da switch kullanýlmýyorsa, router'a bir RJ45 cross baðlantý ile baðlýdýr. eth1 arayüzü, bir hub/switch'e baðlanýp ordan yerel aða baðlanýr.

Her iki arayüz için de aþaðýdaki parametreler geçerlidir:

address  : 10.1.2.98
netmask  : 255.255.255.240
network  : 10.1.2.96
broadcast: 10.1.2.111
gateway  : 10.1.2.97

Sonra, ayarlamalarý bitirmek için, að kartlarýnýn ilk ayarlarýnýn yapýlmasýndan sonra aþaðýdaki script kullanýlýr:

net.vars: ayarlama deðiþkenleri

PREFIX=10.1.2
DMZ_ADDR=$PREFIX.96/28
# Arayüz tanýmlamalarý
BAD_IFACE=eth0
DMZ_IFACE=eth1
ROUTER=$PREFIX.97


net-config.sh: að ayarlarý scripti

#!/bin/sh
# Script çalýþýrken komutlaýr  görebilmek için aþaðýdaki satýrýn baþýndaki diyezi silin
# set -x
# etc/init.d/net.vars dosyasýndaki önceden tanýmlanmýþ deðiþkenleri okuruz
# Yerel aðdan þu anki rotalrý sileriz.
ip route del $PREFIX.96/28 dev $BAD_IFACE
ip route del $PREFIX.96/28 dev $DMZ_IFACE
# Yerel aða eth1'den router'a eth0'da ulabilecek
# þekilde ayarlarýz.
ip route add $ROUTER dev $BAD_IFACE
ip route add $PREFIX.96/28 dev $DMZ_IFACE
# Her iki arayüzüde de Proxy-Arp'ý açarýz.
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
# Bir karta gelen verileri diðer karta iletebilmek
# için IP yönlendirmesini açarýz.
echo 1 > /proc/sys/net/ipv4/ip_forward

Bizim ayarlamalar için gerekli olan Proxy-Arp mekanizmasýna geri dönelim.
Ayný að içerisindeki bir makina diðeriyle konuþurken, kendi IP adresine karþý gelen Ethernet adresini(MAC adresini, donaným adresini) bilmesi gerekmektedir.Sonra kaynak makina þu soruyu yayýnlar: 1.2.3.4 IP ardesine sahip arayüzün MAC adresi nedir? ve karþý makina cevap vermek zorundadýr.

Bu "konuþma"nýn tcpdump ile alýnmýþ bir örneði:
- istek: 172.16.6.72 IP'li makina, 172.16.6.10 IP'li makinanýn MAC adresini sormaktadýr:
19:46:15.702516 arp who-has 172.16.6.10 tell 172.16.6.72
- cevap: 172.16.6.10 IP'li makina kart adresini gönderir:
19:46:15.702747 arp reply 172.16.6.10 is-at 0:a0:4b:7:43:71

Bu, bizi þu kýsa eçýklmamaya götürür: ARP istekleri, yayýnlamalarla(broadcast) ile yapýlýr. Böylece sadece bir fiziksel að ile sýnýrlýdýr.router'ýn MAC adresini öðrenmeye çalýþan korunan bir makinanýn isteði, filtreleme makinasý ile kesilmelidir. Proxy-ARP özelliðini açarak, sorunu çözmemiye yarým eder. Çünkü ARP istekleri sorar ve yayýlmak için bir karta gelenleri diðer karta gönderir veya tam tersi.

Bu durumda, yerel að ile dýþarýsý arasýndaki tefiði kontrol eden bir makina ile çalýþan bir aðýnýz olmalý.

Netfilter, dorudan paketler üzerinde oynamazý saðlar.Temel ayralamada, paketler 3 kural zinciri tarafýndan yönetilir:
- INPUT: bir arayüze gelen paketler için,
- FORWARD: bir arayüzden diðerine yönlendirilen bütün paketler için,
- OUTPUT: bir arayüzden çýkan bütün paketler için.

'iptables' komutu ile herhangi bir zincire, filtreleme davranýþýný etkileyen kurallar ekleyebiliriz, kurallarý silebiliriz veya deðiþtirebiliriz.
Dahasý, her zincir kendi varsayýlan poklitikasýna sahiptir. Yani herhangi bir kurala uyman paket geldiðinde ne yapacaðýný bilir.

Çok kullanýlan seçenekler þunlardýr:
- ACCEPT: paket geçebilir
- REJECT: paket reddedilir ve gerekli hata gönderilir (ICMP port ulaþýlamaz, TCP Sýfýrlama, duruma göre)
- LOG: syslog'a paketle ilgili not yazar,
- DROP: paket reddedilir ve bir hata gönderilmez.

Standart Zincirlerde Paket Akýþý

Packet flow

Burada, iptables'ýn bütün zincirleri deðiþtirebilecek seçenekleri bulunmaktadýr.Ayrýntýlarýna daha sonra gireceðiz:

-N: yani bir zincir oluþturur.
-X: boþ bir zinciri siler.
-P: bir zincirin varsayýlan ploitikasýný deðiþtirir.
-L: bir zincirdeli kurallarý listeler.
-F: bir zincirdeki bütün kurallarý siler.
-Z: bir zincir içinde geçmiþ bütün paket sayaçlarýný ve byte'larýný sýfýrlar.

Bir zinciri deðiþtimek için aþaðýdaki komular kullanýlabilir:
-A: bir zincirin sonuna bir kural ekler.
-I: zincirin belirtilen yerine bir kural ekler
-R: belirtilen kuralýn zincir içindeki yerini deðiþtirir.
-D: bir zincirde, tanýtýlmýþ veya numarasý verilmiþ bir kuralý siler.

Pratik bir örnek görelim: Verilen bir makinadan gelen PING cevaplarýný (yani 'echo-reply' tipindeki ICMP paketleri) engelleyelim.
Önce, verilen makinayý ping'leyebildiðimizi deneyelim:

# ping -c 1 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes
64 bytes from 172.16.6.74: icmp_seq=0 ttl=255 time=0.6 ms

--- 172.16.6.74 ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Þimdi, 172.16.6.74 IP'li makinadan gelen ICMP-Reply ('-p icmp --icmp-type echo reply') paketlerini engelleyecek kuralý INPUT zincirine ekleyelim. Bu paketler, gözardý edileceklerdir ('-j DROP').
# iptables -A INPUT -s 172.16.6.74 -p icmp --icmp-type echo-reply -j DROP

Þimdi, bu makinayý ping'leyelelim:

# ping -c 3 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes

--- 172.16.6.74 ping statistics ---

3 packets transmitted, 0 packets received, 100% packet loss

Beklediðimiz gibi, cevaplar geçemiyor. 3 cevabýn(252 byte'lýk 3 paket) geçemediðini kontrol edebiliriz:

# iptables -L INPUT -v
Chain INPUT (policy ACCEPT 604K packets, 482M bytes)
 pkts bytes target     prot opt in    out     source       destination
  3   252   DROP       icmp --  any   any     172.16.6.74    anywhere

Ýlk duruma geri dönmek için, INPUT zincirindeki ilk kuralý silmeliyiz:

# iptables -D INPUT 1

Þimdi, PING tekrar çelýþýyor:

# ping -c 1 172.16.6.74
PING 172.16.6.74 (172.16.6.74): 56 data bytes
64 bytes from 172.16.6.74: icmp_seq=0 ttl=255 time=0.6 ms

--- 172.16.6.74 ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
#

Ýþe yarýyor !

Var olan 3 zincire (bunlar hiçbir zaman silinemez) yenilerini ekleyebilrsiniz ve bunlar üzerinde de bir akýþ tanýmlayabilirsiniz.Bu, örneðin, çeþitli zincirlerde ayný kuralý tekrarlamanýnýzý engeller.

Þimdi, bir firewall için minimum kurallarý ayarlayalým. SSH'e, DNS'e, http ve smtp'ye izin verir ve siðerlerini engeller.
Basitleþtirmek için, komutlar bir kabuk scriptinde yazýlmýþtýr. Script, yeni kurallar eklemeden önce var olanlarý siler. Bu numara, kurallarýn ikinci kez yazýlmasýný engeller.

rc.firewall

#!/bin/sh

# Kurallarýn silinmesi
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD


# Zincir, doðrultuya göre oluþturulur.
# bad = eth0 (dýþarý)
# dmz = eth1 (içeri)
iptables -X bad-dmz
iptables -N bad-dmz
iptables -X dmz-bad
iptables -N dmz-bad
iptables -X icmp-acc
iptables -N icmp-acc
iptables -X log-and-drop
iptables -N log-and-drop

# Belirli zincir, paketleri engellemeden önce onlarý kaydeder
iptables -A log-and-drop -j LOG --log-prefix "drop "
iptables -A log-and-drop -j DROP

# TCP bayraklarý kullanýlan paketler
# ve hiç kullanýlmamýþ paketler engellenir.
iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop

# Bilinen IP adreslerinden gelen paketler engellenir.
iptables -A FORWARD -i eth+ -s 224.0.0.0/4 -j log-and-drop
iptables -A FORWARD -i eth+ -s 192.168.0.0/16 -j log-and-drop
iptables -A FORWARD -i eth+ -s 172.16.0.0/12 -j log-and-drop
iptables -A FORWARD -i eth+ -s 10.0.0.0/8 -j log-and-drop

# Kurulmuþ baðlantýlara ait paketler geçirilir.
iptables -A FORWARD -m state --state INVALID -j log-and-drop
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Paketin köküna baðlý olarak, karþý gelen zincir gönderlir.
iptables -A FORWARD -s $DMZ_ADDR -i $DMZ_IFACE -o $BAD_IFACE -j dmz-bad
iptables -A FORWARD -o $DMZ_IFACE -j bad-dmz
# kalanlar engellenir.
iptables -A FORWARD -j log-and-drop

# Geçirilen ICMPler
iptables -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type echo-request -j ACCEPT
iptables -A icmp-acc -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A icmp-acc -j log-and-drop

# Dýþarýsý -> Ýçerisi
# posta, DNS, http(s) ve SSH geçirilir
iptables -A bad-dmz -p tcp --dport smtp -j ACCEPT
iptables -A bad-dmz -p udp --dport domain -j ACCEPT
iptables -A bad-dmz -p tcp --dport domain -j ACCEPT
iptables -A bad-dmz -p tcp --dport www -j ACCEPT
iptables -A bad-dmz -p tcp --dport https -j ACCEPT
iptables -A bad-dmz -p tcp --dport ssh -j ACCEPT
iptables -A bad-dmz -p icmp -j icmp-acc
iptables -A bad-dmz -j log-and-drop

# Ýçerisi -> Dýþarýsý
# posta, DNS, http(s) ve telnet geçirilir
iptables -A dmz-bad -p tcp --dport smtp -j ACCEPT
iptables -A dmz-bad -p tcp --sport smtp -j ACCEPT
iptables -A dmz-bad -p udp --dport domain -j ACCEPT
iptables -A dmz-bad -p tcp --dport domain -j ACCEPT
iptables -A dmz-bad -p tcp --dport www -j ACCEPT
iptables -A dmz-bad -p tcp --dport https -j ACCEPT
iptables -A dmz-bad -p tcp --dport telnet -j ACCEPT
iptables -A dmz-bad -p icmp -j icmp-acc
iptables -A dmz-bad -j log-and-drop

# Makinanýn kendisi için zincir
iptables -N bad-if
iptables -N dmz-if
iptables -A INPUT -i $BAD_IFACE -j bad-if
iptables -A INPUT -i $DMZ_IFACE -j dmz-if

# Dýþ arayüz
# Sadece SSH, bu makinaya geçirilir
iptables -A bad-if -p icmp -j icmp-acc
iptables -A bad-if -p tcp --dport ssh -j ACCEPT
iptables -A bad-if -p tcp --sport ssh -j ACCEPT
ipchains -A bad-if -j log-and-drop

# Ýç arayüz
iptables -A dmz-if -p icmp -j icmp-acc
iptables -A dmz-if -j ACCEPT

Servis kalitesi hakkýnda birkaç söz. Linux, ToS(Type of service-servis tipi) alanýný deðiþtirebilir ve pakete farklý öncelikler verebilir. Örneðin, aþaðýdaki komut, dýþarý giden SSH paketlerini, baðlantý cevabýný artýracak þekilde deðiþtirir.

iptables -A OUTPUT -t mangle -p tcp --dport ssh -j TOS --set-tos Minimize-Delay

Ayný þekilde, '--set-tos Maximize-Throughput' ile FTP baðlantýlarýnýn, oturumun interaktifliðinin zararýna, veri aktarým oranýný artýrabilirsiniz.

Hepsi bu. Artýk etkili bir filtreleme sistemini ayarlamasýnýn temellerini biliyorsunuz. Yine de, güvenlik söz konusunu olduðunda firewall'un her derde deva olmadýðýný akýlýnýzdan çýkarmayýn.Bu sadece bir önlemdir. Firewall kurulumu, güçlü þifreler kullanmanýzý, son güvenlik yamalarýný yapmanýzý, saldýrý algýlama sistemleri kullanmanýzý, vs. engellemez.

 

Referanslar

 

Bu yazý için görüþ bildiriminde bulunabilirsiniz

Her yazý kendi görüþ bildirim sayfasýna sahiptir. Bu sayfaya yorumlarýnýzý yazabilir ve diðer okuyucularýn yorumlarýna bakabilirsiniz.
 talkback page 

Görselyöre sayfalarýnýn bakýmý, LinuxFocus Editörleri tarafýndan yapýlmaktadýr
© Vincent Renardias, FDL
LinuxFocus.org
Çeviri bilgisi:
fr --> -- : Vincent Renardias <vincent(at)renardias.com>
en --> tr: Özcan Güngör <ozcangungor(at)netscape.net>

2003-04-23, generated by lfparser version 2.35