IPFW'de kuralları yazarken aşağıdaki sözdizimine göre yazmalıyız:
Sözlü olarak:
<ekle/sil> <eylem> <eylemin uygulanacağı paketin protokolü> <eylemin uygulanacağı paketlerin tanımı>
Uygulamada:
{add|delete} {allow|deny|fwd|...} <paketin tanımı> [seçenekler]
Aşağıda paketlere uygulanabilecek eylemler alfabetik sırayla listelenmiştir:
allow
Paketlerin firewalldan geçmesine izin verir. Ancak paket, hiçbir trafik düzenleme işlemine tabii tutulmaz.
count
Paket tanımına uyan paketleri sayar, kural olarak algılanmaz. Count eylemi elek gibi davranmaz. Yani sayaçlar arttırıldıktan sonra, bu paket incelenmek üzere bir sonraki kurala teslim edilir.
deny
Paketlerin firewalldan geçmesini engeller ve paketi yok eder. Paketi gönderen bilgisayara hiçbir cevap gönderilmez. Dolayısı ile paketi gönderen bilgisayar birkaç deneme daha yaptıktan sonra Bağlantı Zaman Aşımına Uğradı olarak yorumlar.
divert <port>
Paketlerin üzerinde inceleme, değişiklik yapmak üzere tasarlanmış ve divert soketlerini kullanan programların firewalldan paketleri alabilmesi için kullanılır. Örnek: natd
fwd <host[,port]>
Forward eylemi 2 amaçla kullanılır. Birinci amacı, paketin yönlendirileceği ağ geçidini belirlemektir. Bu sayede birden fazla internet bağlantısının kullanımı, yük dengeleme gibi işlemler yapılabilir. Fwd eyleminin bu amaçla kullanmak için port numarasını belirtmemeliyiz. Diğer amacı ise gelen paketleri transparent proxy yazılımına iletmektir. Ancak bunu yapabilmek için transparent proxy yazılımı firewall'un olduğu sistemde çalışıyor olmalıdır. Proxy'nin başka bir sunucuda yer alması durumunda WCCP protokolü kullanılmalıdır.
pipe <numara>
Pakete bantgenişliği sınırlaması getirmek için kullanılır. Numarası verilen pipe'in önceden tanımlanmış olması gerekmektedir. Aksi halde paketler kaybolacaktır.
queue <numara>
Pakete belirli kuyruk disiplinlerini uygulamak için kullanılır. Numarası verilen queue'nin önceden tanımlanmış olması gerekmektedir. Aksi halde paketler kaybolacaktır.
reset
Paketin firewalldan geçmesini engeller ve TCP Reset (RST) uyarısı gönderir.
skipto <kuralno>
Paketin diğer kurallara uğramadan direk verilen kural numarasından itibaren incelenmesini sağlar.
unreach <unreach_kodu>
Paketin firewalldan geçmesini engeller ve cevap olarak verilen unreach_koduna göre ICMP Unreachable mesajı gönderilir. En çok kullaılan kodlar: net, host, port, needfrag, srcfail, net-unknown, host-unknown.
Paket tanımlamada, yakalamak istediğiniz paketi protokol, gönderen adresi, kaynak-port, alıcı adresi ve hedef-port bilgilerine göre ayırt edebiliyoruz. Aşağıdaki kuralda paket tanımlama kısmını inceleyelim:
add allow tcp from 10.0.0.0/24{5,10-32,87-138} to any 80 setup keep-state
\---------------paket tanımlama--------------/
Paket Tanımlama kısmı protokol tanımı ile başlar. IPFW'de kullanılabilen protokoller /etc/protocols dosyasında tanımlanmıştır.
Protokol tanımından sonra from kelimesi ile birlikte paketi gönderenin adresi tanımlanmalıdır. Bu kısmın mutlaka paket tanımlamada yer almalıdır. Bu kısımda doğrudan ip adresi yazılabilecği gibi maskeleme yöntemi ile networkler de temsil edilebilir. (Ör: 192.168.0.0/16 veya 192.168.0.0:255.255.0.0 bu ifade 192.168.*.* iplerini temsil eder) Ayrıca örnekteki gibi de belirli ip aralıkları da tanımlanabilmektedir. 10.0.0.0/24{5,10-32,87-138} ifadesi 10.0.0.5, 10.0.0.10-10.0.0.32 arası, 10.0.0.87-10.0.0.138 arası iplerini temsil eder. IP adresi veya network tanımlamak yerine bir domain yazmanız durumunda ise dns sorgusu yapılarak, ip karşılığı bulunur ve kurala ip adresi yazılır. Bu alanda kullanılabilecek diğer özel ifadeler table(numara), any ve me dir.
table(numara) ifadesi, önceden oluşturulmuş, birden fazla ip adresi içeren tabloların kullanılmasına imkan sağlar. Oluşacak kural, tablodaki tüm ipleri kapsar. Tabloların tanımlanması için Kısım 4.3.2 ye bakınız.
Not: table() ifadesi 13 Aralık 2005 tarihinde IPFW2 ye eklenmiştir. IPFW'de ve önceki tarihli IPFW2'lerde bu özellik yer almamaktadır.
any ifadesi, tüm ipleri temsil eder.
me ifadesi ise firewall'un kendisi ip adresini (ve tüm ip aliaslarını da) temsil eder.
Göndericinin adresi belirlendikten sonra bir boşluk bırakılarak kaynak port numarası doğrudan numara yazılarak belirtilir. Eğer port numarası kontrol edilmeyecekse bu kısımın paket tanımlamaya yazılmayabilir. Port numaraları, 1 ile 65535 arasındadır. Portlar liste ve aralık halinde de belirtilebilir. (Ör: 25,80,110,2000-3000)
Kaynak port adresi tanımlı ise bu tanımdan sonra, eğer tanımlı değilse gönderici adresinden sonra to kelimesi gelir ve ardından alıcının adresi tanımlanır. Alıcı adresi mutlaka paket tanımlamasında yer almalıdır. Alıcı adresi belirtilirken, gönderici adresi belirtmedeki tüm yöntemler kullanılabilir.
Alıcı adresi tanımlamasından sonra bir boşluk bırakılarak hedef port numarası doğrudan numara yazılarak belirtilir. Eğer port numarası belirtilmeyecekse bu kısım paket tanımlamaya yazılamayabilir. IPFW2 kullanılıyorsa, ipfw otomatik olarak port numarasının önüne dst-port ifadesini ekleyecektir. (Not: FreeBSD 5.x, 6.x ve 7.x-CURRENT branşlarında IPFW2 standart olarak gelmektedir.)