Belajar DragonFlyBSD - Firewall: pf & ipfw
Episode 12 of 23

Belajar DragonFlyBSD - Firewall: pf & ipfw

Episode ini membahas pertahanan jaringan DragonFlyBSD: menyusun ruleset di /etc/pf.conf, menggunakan tables dan NAT, mengelola dengan pfctl, lalu memahami sintaks ipfw dan membandingkan pf vs ipfw untuk memilih yang tepat bagi kebutuhan.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 11 sebelumnya kalian sudah menyusun strategi backup untuk melindungi data. Tapi data yang tersimpan rapi tidak ada artinya jika sistem bisa dimasuki orang lain. Episode ini tentang gerbang pertahanan jaringan: firewall. DragonFlyBSD menyediakan dua engine firewall — pf dan ipfw — dan kalian akan belajar kapan memakai yang mana.

Bayangkan firewall sebagai satpam di pintu gedung. Dia punya daftar aturan (ruleset): siapa boleh masuk, siapa harus ditahan, dan ke mana pengunjung diarahkan (NAT). pf adalah satpam dengan buku aturan yang terstruktur dan mudah dibaca; ipfw adalah satpam dengan form checklist yang sangat fleksibel. Keduanya mampu, tapi gaya kerjanya berbeda.

pf: Packet Filter

Struktur /etc/pf.conf

pf (Packet Filter) berasal dari OpenBSD dan menjadi pilihan default DragonFlyBSD. Konfigurasinya berada di /etc/pf.conf dengan struktur yang rapi: macro, tables, options, lalu ruleset. Contoh minimal yang realistis:

Contoh /etc/pf.conf
ext_if = "em0"
lan_if = "em1"
 
table <private> { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 }
 
set skip on lo0
 
block all
pass on $ext_if proto tcp to port { 22, 80, 443 }
pass on $lan_if from <private>

Bacanya: blokir semua; izinkan SSH, HTTP, HTTPS dari luar; izinkan semua dari jaringan internal.

Rule, Tables, dan Stateful Filtering

pf bersifat stateful — ia melacak koneksi yang sudah diizinkan dan otomatis mengizinkan paket balasannya. Tables memungkinkan daftar alamat dinamis:

Kelola table pf
pfctl -t private -T add 10.0.0.0/8
pfctl -t private -T show

Tables sangat berguna untuk daftar IP yang diblokir atau diizinkan yang berubah-ubah — bisa diisi script dan di-load ulang tanpa menulis ulang ruleset.

NAT

Network Address Translation memungkinkan banyak host berbagi satu alamat publik. Di pf, NAT diatur dengan kata kunci nat:

NAT di pf
nat on $ext_if from $lan_if to any -> ($ext_if)

Baris ini menerjemahkan semua lalu lintas dari LAN ke alamat interface luar. Redirection port untuk layanan internal:

Port redirect di pf
rdr on $ext_if proto tcp to port 8080 -> 192.168.1.10 port 80

pfctl: Kontrol Firewall

pfctl adalah tool kendali pf:

Kendali pf dengan pfctl
pfctl -e
pfctl -f /etc/pf.conf
pfctl -s rules
pfctl -s state

-e mengaktifkan pf, -f memuat ruleset, -s rules menampilkan rules yang aktif, -s state menampilkan tabel koneksi. Kebiasaan penting: selalu uji syntax sebelum memuat ruleset production:

Uji syntax pf.conf
pfctl -nf /etc/pf.conf

IPFW

Sintaks Dasar

ipfw adalah engine firewall klasik BSD dengan sintaks berbasis nomor rule. Rules dievaluasi berurutan berdasarkan nomor, sehingga urutan sangat menentukan:

Rule ipfw dasar
ipfw add 100 allow tcp from any to any 22
ipfw add 110 allow tcp from any to any 80
ipfw add 120 allow tcp from any to any 443
ipfw add 500 deny ip from any to any

Setiap rule punya nomor; paket diuji dari nomor terkecil hingga ada yang cocok. count, allow, deny, dan skipto adalah action yang paling sering dipakai.

Tables di ipfw

ipfw juga mendukung tables untuk daftar alamat:

Table ipfw
ipfw table 1 add 192.168.1.0/24
ipfw add 200 allow ip from table(1) to any

Tables membuat ruleset tetap pendek meskipun daftar alamatnya panjang.

Mengaktifkan ipfw

Firewall diaktifkan lewat rc.conf dengan memilih engine dan me-load rules:

Aktifkan ipfw di rc.conf
firewall_enable="YES"
firewall_type="open"

Ruleset kustom bisa disimpan di /etc/rc.firewall atau /etc/ipfw.rules.

Danger

Dua pelajaran paling mahal dari firewall: (1) uji syntax sebelum memuat — satu kesalahan di ruleset production bisa mengunci kalian keluar dari server sendiri; (2) pastikan selalu ada jalur akses konsol atau out-of-band sebelum mengaktifkan firewall. pfctl -nf dan ipfw dry-run adalah penyelamat.

pf vs ipfw: Kapan Memilih

Aspekpfipfw
AsalOpenBSDBSD klasik
SyntaxRuleset deklaratif di fileRule berurutan bernomor
StatefulBawaanBisa diaktifkan
TablesYaYa
NATElegan (nat/rdr)Perlu konfigurasi lebih
KecocokanDefault, modernLegacy, fleksibel per rule

Aturan praktisnya: mulai dengan pf — ia default, dokumentasinya bagus, dan NAT-nya bersih. Gunakan ipfw ketika kalian butuh kontrol per-rule bernomor yang eksplisit, atau ketika memigrasi konfigurasi lama yang berbasis ipfw.

Penutup

Di episode 12 ini kalian telah memahami dua engine firewall DragonFlyBSD: menyusun ruleset pf di /etc/pf.conf dengan macro, tables, stateful filtering, dan NAT, mengelolanya dengan pfctl, lalu mengenal sintaks ipfw bernomor beserta tables, serta membandingkan kapan memilih pf versus ipfw.

Inti yang harus dibawa pulang:

  • pf adalah default: konfigurasi di /etc/pf.conf, kontrol dengan pfctl -f, uji dengan pfctl -nf.
  • Ruleset pf dimulai dengan macro, lalu block all, diikuti pass yang spesifik — prinsip deny-by-default.
  • NAT di pf cukup dengan nat on $ext_if from $lan_if to any -> ($ext_if).
  • ipfw memakai rule bernomor yang dievaluasi berurutan; tables untuk daftar alamat dinamis.
  • Uji selalu sebelum memuat ruleset, dan sediakan akses out-of-band.

Di episode 13 selanjutnya kita mengamankan pintu masuk utama: SSH & remote access hardening. Kalian akan mengonfigurasi sshd_config dengan kunci ed25519, menonaktifkan root dan password login, membuat kunci dengan ssh-keygen, tunneling, serta hardening dengan UseDNS no, MaxAuthTries, AllowUsers, dan fail2ban.