FreeBSD menawarkan beberapa modul interface untuk firewall, namun yang sudah siap untuk dipakai (built in) adalah IPFW. IPFW tidak hanya sebagai interface untuk firewall, namun juga sebagai traffic shaper (pemotong trafik), packet scheduler, dan juga kernel NAT. Untuk mengaktifkan IPFW cukup dengan menambahkan baris berikut di /etc/rc.conf :
# cat /etc/rc.conf | grep firewall
firewall_enable = “YES”
firewall_type = “CLIENT”
dimana tipe firewall yang dipilih adalah “CLIENT” yang bersifat inclusive (akan menutup semua protokol dan port dan kemudian membuka beberapa protokol dan port seperlunya). Jika IPFW diaktifkan, maka FreeBSD akan me-load ruleset yg ada di /etc/rc.firewall. Setiap paket data yang datang dan yang keluar dari suatu interface (ethernet card) akan dicocokkan dengan setiap rule yang ada di ruleset mulai dari nomor rule terkecil sampai ditemukan rule yang sesuai (match).
Oleh karenanya, firewall harus didesain se-efisien mungkin sehingga jumlah rule yang diperlukan bisa minimum. Hal ini ditujukan untuk mengurangi waktu pemrosesan dan matching paket dengan rule firewall yang sesuai.
Untuk melihat ruleset yang telah di-load ke memory :
# ipfw show
………
00400 7840 466245 allow icmp from 10.1.0.0/16 to any
………
akan menampilkan semua rule ipfw termasuk counter-nya, yaitu berapa jumlah paket incoming dalam satuan paket (pada contoh diatas adalah 7840) dan dalam satuan byte (pada contoh diatas adalah 466245) yg sesuai dengan rule tersebut
Pengubahan ruleset dapat dilakukan dengan command :
ipfw [add/delete] [rule_number] [allow/deny] [all/tcp/udp] from [source_ip]/[netmask] to [destination_ip]/[netmask] dst-port [port_number] [setup] [keep-state]
Stateful Firewall adalah mekanisme rule dinamis, dimana jika ada suatu incoming paket yg sesuai dengan suatu rule (dan ada statement “keep-state”), yaitu sesuai dengan informasi 5-tuple (IP Source, IP Destination, Port Source, Port Destination, Transport Protocol) maka informasi paket tersebut akan direkam sehingga paket jawaban-nya kelak bisa dikenali dan langsung diterima tanpa perlu pemrosesan di table rule firewall.
Stateful Firewall sangat diperlukan untuk proxy server, dimana squid akan menerima paket dari user (client) via 1 port yang terdefinisi (default pada port 3128) namun paket jawaban dari server tujuan kembali melalui port yang berbeda-beda (random).
Untuk menambah stateful rule (setelah deklarasi “check state”) :
# ipfw add 1000 allow tcp from any to me dst-port 3128 setup keep-state
akan menambah rule di nomor 1000 yg meng-allow incoming TCP dari user/client untuk mengakses proxy squid di port 3128 dengan menggunakan stateful (keep-state) yg berarti paket jawaban (reply) dari web server yang diakses oleh user/client akan otomatis di-allow (tidak perlu diset rule-nya). Parameter “setup” berarti paket outgoing tersebut akan di-allow jika sudah memenuhi syarat 3-steps handshaking (SYN – SYN – ACK).
IPFW juga memiliki fitur DUMMYNET untuk keperluan traffic shaper (mengatur trafik). Untuk dapat menggunakan fitur ini, modul DUMMYNET harus di-load ke memory dengan cara :
# kldload dummynet.ko
Setelah DUMMYNET aktif, kita bisa membuat “pipa” untuk setiap kategori trafik yg ingin kita atur :
# ipfw pipe 1 config bw 768Kbit/s queue 5KBytes
# ipfw pipe 2 config bw 768Kbit/s queue 5KBytes
# ipfw queue 1 config pipe 1 mask src-ip 0x000007ff
# ipfw queue 2 config pipe 2 mask dst-ip 0x000007ff
# ipfw add 1000 queue 1 all from 172.16.8.0/21 to 172.16.1.1
# ipfw add 1100 queue 2 all from 172.16.1.1 to 172.16.8.0/21
akan membuat 2 pipa dengan bandwidth masing-masing 768Kbit/s untuk membatasi trafik dari IP VPN milik mahasiswa 172.16.8.0/21 ke 172.16.1.1 (proxy) agar trafik dari dosen/staf memiliki jaminan bandwidth 256Kbit/s (dengan asumsi total bandwidth adalah 1 Mbit/s).