IPFIREWALL(IPFW), isminden de anlaşıldığı gibi ip based bir paket filtreleme sistemidir. IPFIREWALL’u diğer güvenlik duvarlarından ayıran en büyük özelliği ek bir yazılıma ihtiyaç duymadan traffic shaping yapabilmesi ve IPFW2 versiyonu ile de Layer2 filtering’e destek vermesidir. IPFIREWALL bir çekirdek modülüdür. IPFW’nin kurallarında değişiklik yaptığınız zaman, IPFWyi yeniden başlatmak gerekmez çünkü yeniden başlatamazsınız zaten  Kural çalıştırıldığı anda uygulanır

GÜVENLİK DUVARININ AĞ ÜZERİNDEKİ YERİ

Firewall ağ üzerinde Router ile Yerel Ağ arasında ağ geçidi olarak yer alır. Burada dikkat edilmesi gereken nokta clientlarda ağ geçidi olarak router’i değil, firewallun tanımlanması. Firewall’un ağ geçidi ise router olarak tanımlanmalıdır

GEREKLİ DONANIM

Öncelikle, Yerel ağınızın büyüklüğüne göre bir bilgisayar seçmelisiniz. Şekilde görüldüğü gibi Firewalla iki ayri bağlantı bağlanıyor. Bunun için 2 adet ethernet kartına ihtiyacımız olacak. Yalnız ethernet kartının markasının seçiminde çok dikkatli olmamız gerekiyor. Çünkü bütün internet trafiği bu ethernetlerden geçeceği için trafiği mümkün olduğunca hızlı iletmeliyiz. En çok tercih edilen marka Intel.

Ethernetinizin markası Intel ise, FreeBSD ethernet kartlarınızı fxp0 ve fxp1 olarak tanıyacaktır. Router’a bağlanan ethernet fxp0, Yerel Ağ’a bağlanan ethernet ise fxp1 olsun. fxp0’a size verilen registered IPlerden birini atayın. fxp1’e ise yerel ağınızın büyüklüğüne göre bir unregistered IP bloğu seçip bir IP atayın.

Örnek olarak fxp0’a 212.152.10.5 nolu ipyi, fxp1’e ise 192.168.0.1 nolu ipyi verdiğimizi kabul ediyorum.

BAŞLANGIÇ

Açılış scriptlerinde düzenlemeler yapmamız gerekiyor. Burada kullanmadığımız tüm daemonları kapatmalıyız. Bunun için /etc/rc.conf dosyasına aşağıdaki satırları ekleyin veya var olanları değiştirin:

PHP Code:

firewall_enable=”YES”

firewall_type=”open”

gateway_enable=”YES”

tcp_drop_synfin=”YES”

portmap_enable=”NO”

inetd_enable=”NO”

usbd_enable=”NO”

KERNEL(Çekirdek) AYARLARI

IPFW’nin kernel tabanlı olduğundan bahsetmiştim. Gerekli tüm binary dosyalar FreeBSD kurulurken yükleniyor. Ancak kernel ayarları yapılmadan kullanmayı denediğinizde “ipfw: getsockopt(IP_FW_GET): Protocol not available” diye bir hata alırsınız. Yani gerekli fonksiyonlar çekirdekte mevcut değil. Bu durumda kernel’e IPFIREWALL opsiyonu eklemeliyiz.

Eğer kernel’ın ismini değiştirmediyseniz GENERIC olarak sisteminizde yer almalı. Aşağıdaki satırları /usr/src/sys/i386/conf/GENERIC isimli dosyaya ekleyin

options IPFIREWALL

#Firewall’ı aktif hale getiri

options IPFIREWALL_VERBOSE

#Log tutma (syslogd)

options IPFIREWALL_VERBOSE_LIMIT=200

#Kural başına düşen log limiti

options IPFIREWALL_FORWARD

#Paket iletme (Uygulama alanı: TransparentProxy)

options IPDIVERT

#Port Yönlendirme

options DUMMYNET

#Traffic Shaper. Band genişliği ve kuyruk(queue) ayarları için gereklidir.

options IPSTEALTH

#Bu firewalldan geçen paketlerin TTL’lerinin değiştirmeden geçmesini sağlar. Firewall’u traceroute gibi araçlardan gizlemek için gereklidir.

options TCP_DROP_SYNFIN

#Gelen paketin içeriği sadece SYN+FIN den oluşuyorsa paketi sil

Çekirdeği derlemek için aşağıdaki işlemleri takip edelim

console# /usr/sbin/config GENERIC

console# cd ../../compile/GENERIC (FreeBSD 5.x lerde bu klasör ../compile/GENERIC olacak)

console# make depend

console# make

console# make install

Bütün işlemler bittikten sonra bilgisayarınızı yeniden başlatın.

Uyarı:

Eğer KernelSecurityLevel 2 veya daha yukarısı ise make install işlemini single-user mod’a geçip öyle yapmanız gerekiyor

SÖZ DİZİMİ ve KULLANIM ŞEKLİ

Sözdizimi çeşitleri:

ipfw [-f | -q] flush

ipfw [-q] {resetlog | delete} [kuralno …]

ipfw [-q] add [kuralno] <rule-body>

ipfw pipe <kuralno> config <opsiyonlar>

ipfw pipe {delete | list | show} [kuralno …]

Parametreler:

-a Listeleme esnasında sayaçları gösterir. show parametresi default olarak -a parametresini barındırır.

-f flush parametresi için onay istemez. Ancak ifade herhangi bir tty’den çalıştırılmamışsa -f default olarak uygulanır (Ör: flush isteği crontab’tan çağrılmışsa herhangi bir tty’ye bağlı olmadığı için -f default olarak uygulanır.)

-t Kuralların son eşleşme zamanını gösterir.(timestamp)

-q Yapılan işlemlerin çıktısının ekrana verilmesini engeller (sessiz)

-N Kuralları listelerken IP adreslerini ve servisleri çözümleyip(resolve) göstermeye çalışır.

Kural Düzeni

ipfw add [kuralno] [prob match_probability] <action> [log [logamount number]] <proto> from <src> to <dst> [interface-spec] [options]

<action>’lar:

allow: kurala uyan paketlerin geçmesine izin verir

count: kurala uyan paketleri sayar, paket diğer kurallardan geçmeye devam eder.

deny: kurala uyan paketleri siler.

divert <port>: kurala uyan paketi verilen port’a yönlendirir. (bu action için kernel’a IPDIVERT seçeneğinin yüklenmesi gerekir)

fwd <ip>[,port]: kurala uyan paketleri verilen ip ve port numarasına yönlendirir. IP adresi local bir IP ise port dikkate alınır. Ancak IP local değilse port numarası dikkate alınmaz ve route ile routing tablosuna göre yönlendirilir.

pipe <pipe_no>: Paketi dummynete yönlendirir. Dummynet bir trafik düzenleme kütüphanesidir. (Bandgenişliği, kuyruk ayarları, paket bekletme vb.)

reset: kurala uyan paketleri reddeder. TCP reset (RST) paketi göndermeye çalışır.

skipto <kuralno>: kurala uyan paketleri verilen kural numarasina gönderir. Paket kurallardan geçmeye devam eder.

tee <port>: paketlerin birer kopyasını verilen port numarasına gönderir.

unreache <kod>: gelen paketleri reddeder ve cevaben ICMP unreach paketi gönderir. ICMP unreach paketi ise belirlenen kod numarası ile belirlenir. kod numarası 0 ile 255 arasındadır. En çok bilinen kodlar: net, host, protocol, port, needfrag, srcfail, net-unknown, host-unknown …

<proto>: İncelenecek paketin protokolünü belirler.

FreeBSDnin inceleyebildiği protokoller:

ip:IP:internet protocol, pseudo protocol number

hopopt:HOPOPT:hop-by-hop options for ipv6

icmp:ICMP:internet control message protocol

igmp:IGMP:internet group management protocol

ggp:GGP:gateway-gateway protocol

ipencap:IP-ENCAP:IP encapsulated in IP (officially “IP”)

st2:ST2:ST2 datagram mode (RFC 1819)

tcp:TCP:transmission control protocol

cbt:CBT:CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk

A.Ballardie@cs.ucl.ac.uk Bu e-posta adresini spambotlara karşı korumak için JavaScript desteğini açmalısınız

This e-mail address is being protected from spambots. You need JavaScript enabled to view it >

egp:EGP:exterior gateway protocol

igp:IGP:any private interior gateway (Cisco: for IGRP)

bbn-rcc:BBN-RCC-MON:BBN RCC Monitoring

nvp:NVP-II:Network Voice Protocol

pupUPARC universal packet protocol

argus:ARGUS:ARGUS

emcon:EMCON:EMCON

xnet:XNET:Cross Net Debugger

chaos:CHAOS:Chaos

udp:UDP:user datagram protocol

mux:MUX:Multiplexing protocol

dcnCN-MEASCN Measurement Subsystems

hmp:HMP:host monitoring protocol

prmRM:packet radio measurement protocol

xns-idp:XNS-IDP:Xerox NS IDP

trunk-1:TRUNK-1:Trunk-1

trunk-2:TRUNK-2:Trunk-2

leaf-1:LEAF-1:Leaf-1

leaf-2:LEAF-2:Leaf-2

rdp:RDP:”reliable datagram” protocol

irtp:IRTP:Internet Reliable Transaction Protocol

iso-tp4:ISO-TP4:ISO Transport Protocol Class 4

netblt:NETBLT:Bulk Data Transfer Protocol

mfe-nsp:MFE-NSP:MFE Network Services Protocol

merit-inp:MERIT-INP:MERIT Internodal Protocol

sep:SEP:Sequential Exchange Protocol

3pc:3PC:Third Party Connect Protocol

idpr:IDPR:Inter-Domain Policy Routing Protocol

xtp:XTP:Xpress Tranfer Protocol

ddpDPatagram Delivery Protocol

idpr-cmtp:IDPR-CMTP:IDPR Control Message Transport Proto

tp++:TP++:TP++ Transport Protocol

il:IL:IL Transport Protocol

ipv6:IPV6:ipv6

sdrp:SDRP:Source Demand Routing Protocol

ipv6-route:IPV6-ROUTE:routing header for ipv6

ipv6-frag:IPV6-FRAG:fragment header for ipv6

idrp:IDRP:Inter-Domain Routing Protocol

rsvp:RSVP:Resource ReSerVation Protocol

gre:GRE:Generic Routing Encapsulation

mhrp:MHRP:Mobile Host Routing Protocol

bna:BNA:BNA

esp:ESP:encapsulating security payload

ah:AH:authentication header

i-nlsp:I-NLSP:Integrated Net Layer Security TUBA

swipe:SWIPE:IP with Encryption

narp:NARP:NBMA Address Resolution Protocol

mobile:MOBILE:IP Mobility

tlsp:TLSP:Transport Layer Security Protocol

skip:SKIP:SKIP

ipv6-icmp:IPV6-ICMP:ICMP for IPv6

ipv6-nonxt:IPV6-NONXT:no next header for ipv6

ipv6-opts:IPV6-OPTS:destination options for ipv6

cftp:CFTP:CFTP

sat-expak:SAT-EXPAK:SATNET and Backroom EXPAK

kryptolan:KRYPTOLAN:Kryptolan

rvd:RVD:MIT Remote Virtual Disk Protocol

ippc:IPPC:Internet Pluribus Packet Core

sat-mon:SAT-MON:SATNET Monitoring

visa:VISA:VISA Protocol

ipcv:IPCV:Internet Packet Core Utility

cpnx:CPNX:Computer Protocol Network Executive

cphb:CPHB:Computer Protocol Heart Beat

wsn:WSN:Wang Span Network

pvpVPacket Video Protocol

br-sat-mon:BR-SAT-MON:Backroom SATNET Monitoring

sun-nd:SUN-ND:SUN ND PROTOCOL-Temporary

wb-mon:WB-MON:WIDEBAND Monitoring

wb-expak:WB-EXPAK:WIDEBAND EXPAK

iso-ip:ISO-IP:ISO Internet Protocol

vmtp:VMTP:Versatile Message Transport

secure-vmtp:SECURE-VMTP:SECURE-VMTP

vines:VINES:VINES

ttp:TTP:TTP

nsfnet-igp:NSFNET-IGP:NSFNET-IGP

dgpGPissimilar Gateway Protocol

tcf:TCF:TCF

eigrp:EIGRP:Enhanced Interior Routing Protocol (Cisco)

ospfSPFIGPpen Shortest Path First IGP

sprite-rpc:Sprite-RPC:Sprite RPC Protocol

larp:LARP:Locus Address Resolution Protocol

mtp:MTP:Multicast Transport Protocol

ax.25:AX.25:AX.25 Frames

ipip:IPIP:Yet Another IP encapsulation

micp:MICP:Mobile Internetworking Control Pro.

scc-sp:SCC-SP:Semaphore Communications Sec. Pro.

etherip:ETHERIP:Ethernet-within-IP Encapsulation

encap:ENCAP:Yet Another IP encapsulation

gmtp:GMTP:GMTP

ifmp:IFMP:Ipsilon Flow Management Protocol

pnniNNINNI over IP

pimIMrotocol Independent Multicast

aris:ARIS:ARIS

scps:SCPS:SCPS

qnx:QNX:QNX

a/n:A/N:Active Networks

ipcomp:IPComp:IP Payload Compression Protocol

snp:SNP:Sitara Networks Protocol

compaq-peer:Compaq-Peer:Compaq Peer Protocol

ipx-in-ip:IPX-in-IP:IPX in IP

vrrp:VRRP:Virtual Router Redundancy Protocol

pgmGMGM Reliable Transport Protocol

l2tp:L2TP:Layer Two Tunneling Protocol

ddxDX-II Data Exchange

iatp:IATP:Interactive Agent Transfer Protocol

st:ST:Schedule Transfer

srp:SRP:SpectraLink Radio Protocol

uti:UTI:UTI

smp:SMP:Simple Message Protocol

sm:SM:SM

ptpTPerformance Transparency Protocol

isis:ISIS:ISIS over IPv4

fire:FIRE:

crtp:CRTP:Combat Radio Transport Protocol

crudp:CRUDP:Combat Radio User Datagram

sscopmce:SSCOPMCE:

iplt:IPLT:

sps:SPS:Secure Packet Shield

pipeIPErivate IP Encapsulation within IP

sctp:SCTP:Stream Control Transmission Protocol

fc:FC:Fibre Channel

divertIVERTivert pseudo-protocol [non IANA]

<src> to <dst>: {any | me | [not] <ip adresi/maske> [portlar]}

any: tüm paketleri kapsar

me: Sistemin ethernet arayüznün ip numarasına uyan paketleri kapsar

<ip adresi/maske> aşağıdaki şekillerde kullanılabilir:

ipno: 1.2.3.4 şeklinde olan ip adresleridir. Porta bakılmaksızın bu ipyi içeren tüm paketleri kapsar

ipno/bit: 1.2.3.4/24 biçiminde olan ip adresleridir. Bu ifade 1.2.3.0 dan 1.2.3.255’e kadar olan tüm ip adreslerini kapsar

ipno:mask: 1.2.3.4:255.255.240.0 biçiminde olan ip adresleridir. Bu ifade 1.2.3.0 dan 1.2.15.255’e kadar olan tüm ip adreslerini kapsar

[portlar]: {port | port1-port2} [,port[,…]] biçiminde kullanılır. port1-port2 ifadesi birinci port ile ikinci port arasındaki tüm portları kapsar

[interface-spec]:

in: Sadece gelen paketleri kapsar

out: Sadece giden paketleri kapsar

via <ifX>: Sadece <ifX> arayüzünden geçen paketleri kapsar via any: Herhangi bir arayüzden geçen tüm paketleri kapsar

TRAFİK SHAPING KONFİGÜRASYONU (DUMMYNET)

ipfw, paket filtrelemenin yanında dummynet aracılığı ile trafik düzenlemesi de yapabilmektedir.

Trafik düzenleyicisi, belirlenen özellikteki paketleri ayırır ve aynı statüde olan paketler için pipe denilen sanal bir tünel açar.

pipe, verilen bantgenişliği, paket bekletme süresi, kuyruk boyutu ve paket kayıp oranlarında sanal bir tünel yaratır. Paket geçerken, ait olduğu pipe’ın kurallarına göre geçer.

pipe konfigürasyonu aşağıdaki düzende uygulanır:

ipfw pipe <pipe_no> config <pipe konfigürasyonu>

<pipe konfigürasyonu:>

bw <bandwidth>: Bantgenişliği [K|M] {bit/s | Byte/s } ile ölçülür.

Default değeri 0 dır. 0 limitsiz bantgenişliği anlamındadır. Bantgenişliğinin miktarı ile birimi arasında boşluk bırakılmamalıdır.

Örnek: ipfw pipe 1 config bw 1Mbit/s

delay ms-delay: Paket bekletme süresi milisaniye ile ölçülür. Standart değeri 0 ms dir. Yani bekletme yoktur.

plr kayıp_oranı: PLR=Packet Loss Rate, paket kayıp oranı. kayıp_oranı 0 ile 1 arasında bir değerdir. 0 kayıp yok, 1 ise %100 kayıp anlamına gelir.

Aşağıdaki örnekte pipe 1’den geçen paketlerin %50si kaybolacaktır.

Örnek: ipfw pipe 1 config plr 0.50

ÖRNEKLER

ipfw’nin çok fazla kullanım şekli var. Bunların birkaçı açıklamaları ile birlikte aşağıda örneklenmiştir:

BASİT PAKET FİLTRELEME:

Aşağıdaki komut mevcut kuralları hit sayıları ile birlikte listelemer

ipfw -a list

Aşağıdaki komut mevcut kuralları, hit sayıları ve son eşleşme zamanı ile birlikte listeler:

ipfw -at list

Aşağıdaki örnek, Kaynak & Mercan Sigorta Acenteliği A.Ş. dan gelen www.hedef.com un SSH portuna giden TCP paketlerin geçmesini engeller

ipfw add deny tcp from Kaynak & Mercan Sigorta Acenteliği A.Ş. to www.hedef.com 22

Bu örnek, 123.45.0.0/16 dan my.host.orga gönderilen tüm paketlerinin geçmesini engeller. (123.45.0.0/16 = 123.45.0.0:255.255.0.0)

ipfw add deny all from 123.45.0.0/16 to my.host.org

TRAFİK DÜZENLEME:

Aşağıdaki örnek gelen paketlerin %10’unu siler

ipfw add prob 0.10 deny all from any to any in

Sıradaki örnek, yukarda yapılan işlemi dummynet aracılığı ile pipe kullanarak yapmaktadır

ipfw add pipe 2 all from any to any

ipfw pipe 2 config plr 0.10

Ağ geçidi olarak kullanılan bir firewallda pipe’ları kullanarak bantgenişliği yapılabilir. Yerel ağdaki 10.0.1.0/24 iplerinin trafiğini limitleyelim

ipfw add pipe 1 all from 10.0.1.0/24 to any out

ipfw pipe 1 config bw 300Kbit/s queue 50KBytes

Mevcut bantgenişliğinin giriş ve çıkış olarak eşit bir biçimde bölüştürmesi de giren ve çıkan paketler için ayrı kullar yazılmasıyla sağlanır. (Bantgenişliği toplam 512Kbit/s kabul ediliyor.)

ipfw add pipe 1 all from any to any out

ipfw add pipe 2 all from any to any in

ipfw pipe 1 config bw 256Kbit/s

ipfw pipe 2 config bw 256Kbit/s

Trafik Düzenlemenin bir diğer özelliği de paket bekletme aşağıdaki örnek dışarı çıkan paketleri 250ms bekletmekte ve 512Kbit/s bantgenişliği limiti getirmektedir.

ipfw add pipe 1 all from any to any out

ipfw pipe 1 config delay 250ms bw 512Kbit/s