Firewall with ipfw in freebsd

Firewall tersusun dari dua kata “fire” dan “wall” yang berarti api dan tembok, so firewall mean that tembok yang melindungi dari api (definisi saya sendiri lho). Dalam suatu jaringan, firewall memegang peranan penting dalam fungsi keamanan jaringan tersebut, terlebih jika network terhubung dengan internet. Selain itu firewall juga dapat digunakan untuk mengatur/menyeleksi paket yang masuk maupun keluar.

Secara umum firewall dapat diseting dengan dua type yakni exclusive firewall (default-accept) dan inclusive firewall (default-deny).

Pada Operating System FreeBSD terdapat dua bawaan paket untuk firewall, yakni IPFW dan PF. IP Firewall (IPFW) merupakan bawaan orisinil FreebSD (th 1994) sedang Paket Filter (PF) diambil dari OpenBSD project sekitar tahun 2003.

Berikut penulis sampaikan instalasi dan konfigurasi IPFW dasar pada OS FreeBSD 7 :

  1. Mengaktifkan modul IPFW
    Terdapat dua cara untuk mengaktifkan modul IFW pada FreeBSD, pertama dengan menggunakan rc.conf, yang kedua dengan rebuilt kernel supaya suport IPFW.

    • dengan rc.conf
      #vi /etc/rc.conf
      tambahkan baris firewall_enable=”YES”, kemudian restart system.
      Pada waktu booting, system akan secara otomatis me-load modul ipwf.ko dan menghubungkan dengan kernel secara dinamis. Yang perlu diperhatikan pada cara ini adlah modul ipwf.ko akan menggunakan defaul-policy firewall yakni inclusive (default-deny) artinya akan meblok semua paket yang masuk atau keluar, jadi jika proses instalasi lewat ssh bisa berabe karena firewall aktif, tidak bisa login karena policy port ssh belum ada
    • dengan rebuilt kernel
      Cara kedua ini lebih banyak dipilih karena menawarkan peforma yang lebih baik selain kelebihan dalam hal fasilitas kontrol yang lebih banyak.
      Buat custom kernel misal firewall :
      # cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/FIREWALL
      # vi /usr/src/sys/i386/conf/FIREWALL

      tambahkan opsi-opsi berikut :
      options IPFIREWALL                   # untuk mengaktifkan IPFW
      options IPFIREWALL_VERBOSE           # untuk mengaktifkan suport syslogd
      options IPFIREWALL_VERBOSE_LIMIT=10  # untuk mencegah syslogd flooding
      options IPFIREWALL_DEFAULT_TO_ACCEPT # untuk merubah dari default-deny ke default-accept

      kemudian re-compile kernel dengan yang sudah dibuat yakni FIREWALL
      # config FIREWALL
      # cd ../compile/FIREWALL
      # make cleandepend && make depend
      # make && make install

      Kemudian reboot system
  2. Menambah rule untuk firewall.
    Setelah berhasil mengaktifkan modul IPFW, sekarang cek basic rule yang ada dengan perintah ipfw show
    lpp# ipfw show
    00040 0 0 divert 8668 ip from any to any via xl0
    00050 0 0 divert 8668 ip4 from any to any via xl0
    00060 215 23527 allow tcp from 10.25.57.2 to any
    00100 8 400 allow ip from any to any via lo0
    00200 0 0 deny ip from any to 127.0.0.0/8
    00300 0 0 deny ip from 127.0.0.0/8 to any
    60000 316 49717 allow ip from any to any
    65000 13 1137 allow ip from any to any
    65535 0 0 allow ip from any to any

    Berikut sedikit penjelasan mengenai rule tsb, IPFW menggunakan urutan rule number dari yg terkecil sampai yang paling besar (65535) artinnya paket yang masuk di cek dari rule number paling atas (1) kemudian apabila ada yang sesuai dengan rule yang ada misal rule number 100 maka paket diperlakukan sesuai rule number 100 (allow ip from any to any via lo0) dan tidak dicek lagi, kemudian apabila tidak ada yg cocok, akan sampai pada rule number yg paling akhir yakni 65535 sehingga paket akan dieksekusi berdasarkan rule number terakhir (65535) yakni allow ip from any to any. Catatan untuk rule terakhir (65535) tidak dapat diubah manual.
    Selanjutnya apabila ingin ditambahkan rule yang lain digunakan perintah ipfw add, misal
    # ipfw add 400 permit ip from 10.25.57.0/24 to any
    400 adalah RULE NUMBER, permit adalah ACTION yang ingin dikenakan pada paket yg lewat, baris perintah berikutnya ip from 10.25.57.0/24 to any adalah SELECTION maksudnya semua trafic IP yang masuk dari subnet 10.25.57.0/24 ke semua host yang ada. Rule diatas membolehkan semua trafic IP yang masuk dari subnet 10.25.57.0/24 ke semua host yang ada di network. Pada rule tsb firewall hanya mengecek header IP karena menggunakan ip from ….., selain ip pada layer 3, IPFW juga dapat mengecek pada layer 2 (MAC Address) dan juga layer 4 (UDP/TCP port number). any mengacu pada semua IP yang ada, bisa juga digunakan me yang mengacu pada IP yg terkonfigurasi pada network interface yang ada di host.
    # ipfw show
    00040 0 0 divert 8668 ip from any to any via xl0
    00050 0 0 divert 8668 ip4 from any to any via xl0
    00060 510 57919 allow tcp from 10.25.57.2 to any
    00200 0 0 deny ip from any to 127.0.0.0/8
    00300 0 0 deny ip from 127.0.0.0/8 to any
    00400 13 1000 allow ip from 10.25.57.0/24 to any
    60000 751 99636 allow ip from any to any
    65000 13 1137 allow ip from any to any
    65535 0 0 allow ip from any to any

    Perintah ipfw show, menampilkan hanya menampilkan rule statis sedang rule dinamis tidak ditampilkan. Kolom pertama pada ipfw show meampilkan rule number, kolom kedua menampilkan jumlah paket yang cocok dengan rule, kolom ketiga menampilkan volume trafik dari rule.
    Untuk perintah ipfw yang lain bisa dibaca pada man page ipfw.
  3. Membuat rule dengan template yang sudah ada.
    Selain dengan menambahkan rule2x pada tabel ipfw, bisa digunakan template yang sudah tersedia di /etc/rc.firewall.
    Ada lima template, yakni open, closed, client, simple, dan workstation. Caranya dengan menambahakan firewall_type pada /etc/rc.conf, misal digunakan template “open”
    # vi /etc/rc.conf
    firewall_type="open"
  4. Membuat custom ruleset.
    Jika ingin menggunakan rule set yang dibuat sendiri, bisa dengan membuat scrip ruleset misal /etc/firewallku.conf kemudian pada /etc/rc.conf ditambahkan baris :
    firewall_script="/etc/firewallku.conf"
    Contoh custom ruleset “firewallku.conf” :
    flush
    add check-state
    add allow tcp from me to any setup keep-state
    add allow tcp from 192.168.1.0/24 to me keep-state
    add allow ip from 10.1.1.0/24 to me
    add allow ip from any to any

    flush digunakan untuk menghapus aturan firewall sebelumnya, sangat dianjurkan untuk menempatkan flush pada baris pertama. Contoh ruleset tersebut mengilustrasikan sebuah stateful-ruleset atau ruleset yang mengandung satu atau lebih kata keep-state, yang berarti apabila suatu paket cocok dengan kata keep-state maka akan terbentuk secara otomatis suatu “dynamic rule” dengan informasi paket bersangkutan dan dengan masa hidup yang terbatas. Untuk melihat dynamic-rule gunakan opsi -d
    ipfw -d show