Membangun firewall NetBSD: menulis ruleset npf.conf, mengaktifkan NAT, mengelola dengan npfctl, serta memahami ipfilter sebagai opsi legacy dan perbandingannya dengan pf.

Di episode 11 sebelumnya kita telah melindungi data dengan backup. Namun pertahanan tidak berhenti di penyimpanan — di sisi jaringan juga ada tembok yang harus dibangun. Pada episode ini kita akan membangun firewall NetBSD dengan npf dan ipfilter — menulis ruleset di npf.conf, mengaktifkan NAT, mengelola dengan npfctl, serta memahami ipfilter sebagai opsi legacy dan membandingkannya dengan pf dari OpenBSD.
Sebelum menulis rules, pahami tiga konsep inti:
| Konsep | Penjelasan |
|---|---|
| Rule | Aturan yang mencocokkan lalu lintas (protokol, port, arah) |
| Policy | Sikap default: menolak (block) atau mengizinkan (pass) |
| Stateful | Firewall mengingat koneksi yang sudah diizinkan |
Prinsip desain yang paling aman: default deny — tolak semuanya, lalu izinkan hanya yang dibutuhkan. Inilah fondasi npf.
npf adalah firewall stateful yang dikembangkan khusus untuk NetBSD. Keunggulannya: syntax yang bersih, dukungan NAT dan IPv6 yang matang, serta aturan yang bisa di-reload tanpa memutus koneksi. NPF dibangun sebagai kernel module yang dikelola dengan npfctl — dan kita melihatnya sebagai modul npf di episode 9.
Ruleset ditulis di /etc/npf.conf. Contoh lengkap untuk server:
$if = "wm0"
$ext_ip = 192.168.1.50
set default: in block all
set default: out block all
group default {
# Loopback bebas
pass on lo0 all
# Traffic keluar diizinkan
pass out on $if inet family 4 proto { tcp, udp, icmp } \
from $ext_ip to any
# SSH masuk
pass in on $if inet proto tcp from any to $ext_ip port 22 \
flags S/SA keep state
# HTTP dan HTTPS
pass in on $if inet proto tcp from any to $ext_ip port { 80, 443 } \
flags S/SA keep state
}
# NAT keluar untuk jaringan internal
group "external" on $if {
nat $if inet from 192.168.1.0/24 to any
}Mari bedah bagian pentingnya:
| Baris | Arti |
|---|---|
set default: in block all | Default deny untuk semua masuk |
set default: out block all | Default deny untuk semua keluar |
pass on lo0 all | Loopback diizinkan penuh |
pass out ... keep state | Koneksi keluar diizinkan dan diingat |
pass in ... port 22 flags S/SA keep state | Hanya koneksi baru SSH yang masuk |
nat $if ... to any | NAT untuk jaringan internal |
Opsi flags S/SA keep state memastikan hanya koneksi baru (SYN) yang diizinkan masuk; koneksi turunannya dikenali state table.
Info
Variable $if dan $ext_ip di awal file membuat ruleset mudah dipindah antar mesin — cukup ubah dua baris itu, bukan seluruh ruleset. Ini pola yang disarankan untuk konfigurasi terpusat.
Setelah file ditulis, aktifkan firewall:
npfctl startNPF is now active.Memuat ulang ruleset setelah mengubah npf.conf — tanpa memutus koneksi:
npfctl reloadMelihat statistik dan ruleset aktif:
npfctl statsInterface wm0: 15 packets passed, 3 packets blockedUntuk mematikan sementara:
npfctl stopSebelum memuat ruleset ke sistem produksi, validasi syntax-nya:
npfctl validate /etc/npf.confConfiguration is valid.Aktifkan lewat rc system (ingat pola episode 6):
npf=YES
npf_flags=""Saat boot, NetBSD akan menjalankan /etc/rc.d/npf dan memuat /etc/npf.conf.
IPFilter adalah firewall BSD klasik yang juga tersedia di NetBSD. Ia dikelola dengan ipf, ipfstat, dan ipnat (untuk NAT):
ipfstat -ipass in quick on wm0 proto tcp from any to 192.168.1.50 port = 22
pass in quick on wm0 proto tcp from any to 192.168.1.50 port = 80Aturan ipf ditulis di /etc/ipf.conf dan dimuat dengan:
ipf -Fa -f /etc/ipf.confWarning
IPFilter masih didukung di NetBSD, tetapi untuk proyek baru npf adalah pilihan yang disarankan — ia modern, native NetBSD, dan terus dikembangkan. IPFilter ada di sini untuk kompatibilitas dan sistem legacy.
NetBSD mendukung tiga firewall yang bisa dipilih:
| Firewall | Asal | Kelebihan | Kekurangan |
|---|---|---|---|
| npf | NetBSD | Modern, NAT+IPv6 matang, reload tanpa putus | Lebih sedikit contoh online |
| ipfilter | Proyek terpisah | Stabil, kaya fitur, banyak dokumentasi | Legacy, syntax lebih tua |
| pf | OpenBSD | Terbukti di banyak sistem | Di NetBSD kurang dirawat vs npf |
| Aspek | npf | ipfilter | pf |
|---|---|---|---|
| Syntax | Bersih, mirip pf | Verbose | Ikonik OpenBSD |
| NAT | nat di ruleset | ipnat terpisah | nat di pf.conf |
| IPv6 | Dukungan penuh | Dukungan baik | Dukungan penuh |
| Rekomendasi NetBSD | Utama | Legacy | Alternatif |
Bagi kalian yang baru mulai, npf adalah pilihan paling tepat — satu bahasa untuk aturan, NAT, dan IPv6.
Ketika koneksi tidak berjalan, periksa berurutan:
| Langkah | Perintah |
|---|---|
| Apakah npf aktif? | npfctl show |
| Adakah paket di-block? | npfctl stats |
| Ruleset mana yang cocok? | npfctl list |
| Log firewall | Lihat log kernel dengan dmesg |
npfctl listPada episode 12 ini, kalian telah membangun tembok pertahanan NetBSD: menulis ruleset npf.conf dengan prinsip default deny, mengaktifkan NAT, mengelola firewall dengan npfctl, memahami ipfilter sebagai opsi legacy, serta memetakan perbandingan npf, ipfilter, dan pf.
Inti yang harus dibawa pulang:
/etc/npf.conf; kelola dengan npfctl start/reload/stop/validate.nat $if inet from <net> to any.npf=YES di /etc/rc.conf.Di episode 13 selanjutnya kita akan mengamankan pintu administrasi: SSH dan remote access hardening — menyesuaikan sshd_config untuk key ed25519, menonaktifkan root dan password, serta mengamankan akses dengan fail2ban. Sampai jumpa di episode 13!