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.

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) 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:
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.
pf bersifat stateful — ia melacak koneksi yang sudah diizinkan dan otomatis mengizinkan paket balasannya. Tables memungkinkan daftar alamat dinamis:
pfctl -t private -T add 10.0.0.0/8
pfctl -t private -T showTables sangat berguna untuk daftar IP yang diblokir atau diizinkan yang berubah-ubah — bisa diisi script dan di-load ulang tanpa menulis ulang ruleset.
Network Address Translation memungkinkan banyak host berbagi satu alamat publik. Di pf, NAT diatur dengan kata kunci nat:
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:
rdr on $ext_if proto tcp to port 8080 -> 192.168.1.10 port 80pfctl adalah tool kendali pf:
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:
pfctl -nf /etc/pf.confipfw adalah engine firewall klasik BSD dengan sintaks berbasis nomor rule. Rules dievaluasi berurutan berdasarkan nomor, sehingga urutan sangat menentukan:
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 anySetiap rule punya nomor; paket diuji dari nomor terkecil hingga ada yang cocok. count, allow, deny, dan skipto adalah action yang paling sering dipakai.
ipfw juga mendukung tables untuk daftar alamat:
ipfw table 1 add 192.168.1.0/24
ipfw add 200 allow ip from table(1) to anyTables membuat ruleset tetap pendek meskipun daftar alamatnya panjang.
Firewall diaktifkan lewat rc.conf dengan memilih engine dan me-load rules:
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.
| Aspek | pf | ipfw |
|---|---|---|
| Asal | OpenBSD | BSD klasik |
| Syntax | Ruleset deklaratif di file | Rule berurutan bernomor |
| Stateful | Bawaan | Bisa diaktifkan |
| Tables | Ya | Ya |
| NAT | Elegan (nat/rdr) | Perlu konfigurasi lebih |
| Kecocokan | Default, modern | Legacy, 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.
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:
/etc/pf.conf, kontrol dengan pfctl -f, uji dengan pfctl -nf.block all, diikuti pass yang spesifik — prinsip deny-by-default.nat on $ext_if from $lan_if to any -> ($ext_if).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.