Belajar OpenBSD - pf Firewall (Packet Filter) Fundamental
Episode 12 of 23

Belajar OpenBSD - pf Firewall (Packet Filter) Fundamental

Menguasai pf (Packet Filter), firewall bawaan OpenBSD: membaca dan menyusun /etc/pf.conf, memahami ruleset block dan pass, menulis service rules untuk SSH, HTTP, dan HTTPS, mengaktifkan logging lewat pflog, serta memvalidasi konfigurasi dengan pfctl secara aman.

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

Pendahuluan

Di episode 11 sebelumnya, kalian mengamankan data dengan backup. Sekarang kita sampai pada alasan utama banyak orang memakai OpenBSD: pf, atau Packet Filter. pf bukan sekadar firewall — ia adalah heart of OpenBSD networking, alat yang sama-sama menangani filtering, NAT, load balancing, dan logging.

Sistem Linux punya iptables/nftables yang sering terasa berantakan. pf terasa berbeda: syntax-nya ringkas, dibaca seperti bahasa, dan default-nya deny. Aturan pertama yang harus diinternalisasi: apa yang tidak di-pass, diblok. Keamanan dimulai dari deny, bukan dari allow.

Mengaktifkan pf

pf adalah service biasa yang dikelola rcctl:

Mengaktifkan pf
rcctl enable pf
rcctl start pf
rcctl status pf

Saat boot, pf membaca /etc/pf.conf. Jika file tidak ada, pf tidak aktif — jadi langkah pertama adalah memastikan service aktif dan ruleset dimuat.

Anatomi /etc/pf.conf

/etc/pf.conf berisi beberapa bagian penting. Contoh minimum yang aman:

/etc/pf.conf - ruleset dasar
table <bruteforce> persist
 
set skip on lo
 
block return in all
block out all
 
pass in on egress proto tcp to port 22
pass in on egress proto tcp to port 80
pass in on egress proto tcp to port 443
pass out inet proto tcp to port 53
pass out inet proto udp to port 53
  • set skip on lo — trafik loopback tidak difilter.
  • block return in all dan block out all — deny semua sebagai default, return mengirim RST/ICMP.
  • Aturan pass berikutnya membuka celah secara eksplisit.

Aturan dievaluasi dari atas ke bawah, dan aturan pertama yang cocok menang. Karena itulah block harus diletakkan sebelum pass yang lebih spesifik.

Konsep Ruleset: Macros, Options, Rules

pf.conf terstruktur dalam beberapa bagian:

  • Macros: variabel seperti if="em0" dan web_port="{80 443}" agar ruleset mudah dibaca.
  • Options: pengaturan global seperti set block-policy dan set skip.
  • Rules: aturan block/pass yang sebenarnya.

Contoh dengan macros:

/etc/pf.conf - dengan macro
int_if = "em0"
 
pass in on $int_if proto tcp from $int_if:network to any port ssh
pass in on $int_if proto tcp to any port http

Macros membuat ruleset kalian mudah dipelihara dan dibaca — sangat penting saat ruleset tumbuh ratusan baris.

Service Rules yang Umum

Setiap service yang ingin kalian buka membutuhkan aturan pass yang jelas. Pola dasarnya:

/etc/pf.conf - service rules
pass in on egress proto tcp to port { ssh http https }
pass in on egress proto tcp to port smtp
pass in on egress proto { tcp udp } to port domain
  • ssh, http, https adalah nama service yang dikenali pf dari /etc/services.
  • Bisa digabung dengan kurung kurawal.
  • Untuk DNS, port 53 dibuka untuk tcp dan udp.

Jangan membuka port yang tidak kalian jalankan. Setiap port terbuka adalah permukaan serangan — prinsip secure by default berlaku dari episode 1 sampai di sini.

scrub: Normalisasi Trafik

Bagian scrub membersihkan paket dari fragmentasi dan anomali — pertahanan terhadap berbagai serangan evasion:

/etc/pf.conf - scrub
match in all scrub (no-df max-mss 1440)

Pada pf versi modern, match menggantikan scrub lama. Normalisasi dilakukan pada semua paket masuk. Ini lapisan pertahanan yang murah dan berdampak besar.

Logging dengan pflog

Untuk mencatat paket yang diblok, tambahkan kata kunci log:

/etc/pf.conf - logging
block return log in all
pass in log on egress proto tcp to port 22

Log pf ditangkap oleh perangkat pflog0 dan dibaca lewat tcpdump:

Membaca log pf
tcpdump -n -e -ttt -i pflog0
tail -f /var/log/pflog

/var/log/pflog adalah file biner pflog yang ditulis oleh pflogd. Analisis log ini adalah cara utama mengetahui serangan yang sedang dicoba terhadap kalian.

Warning

Jangan pernah me-reload ruleset yang belum divalidasi. Selalu jalankan pfctl -nf /etc/pf.conf sebelum rcctl reload pf — kesalahan syntax di pf.conf akan membuat pf berhenti memuat ruleset dan trafik bisa macet total.

pfctl: Alat Kontrol dan Validasi

pfctl adalah alat utama untuk memuat, memvalidasi, dan menginspeksi ruleset:

Memvalidasi dan memuat ruleset
pfctl -nf /etc/pf.conf
pfctl -f /etc/pf.conf
pfctl -s rules
pfctl -s states
pfctl -s info
  • -nf memvalidasi tanpa memuat (draf aman).
  • -f memuat ruleset.
  • -s rules menampilkan ruleset yang aktif.
  • -s states menampilkan state koneksi yang dilacak.
  • -s info menampilkan statistik pf.

Kombinasi -nf lalu -f lalu -s rules adalah siklus kerja harian administrator pf.

Langkah Pertama yang Aman

Saat mengubah ruleset dari jarak jauh, ada bahaya klasik: salah menulis aturan, lalu koneksi SSH kalian terputus selamanya. Praktik amannya adalah menguji dulu dengan ruleset yang membiarkan SSH tetap terbuka, lalu memuat dengan hati-hati:

Load ruleset dengan aman
pfctl -nf /etc/pf.conf && pfctl -f /etc/pf.conf

Operator && memastikan ruleset hanya dimuat jika valid. Untuk perubahan besar, pertimbangkan menambah pass in on egress proto tcp to port 22 di posisi paling atas ruleset kalian — koneksi SSH tidak akan pernah terputus.

Penutup

Di episode 12 ini kalian menguasai fondasi pf: mengaktifkannya dengan rcctl, membaca struktur /etc/pf.conf, memahami ruleset block/pass yang dievaluasi dari atas ke bawah, menulis service rules untuk SSH/HTTP/HTTPS, normalisasi dengan match ... scrub, logging lewat pflog, dan memvalidasi dengan pfctl.

Inti yang harus dibawa pulang:

  • Default pf adalah deny: yang tidak di-pass berarti diblok.
  • Aturan pertama yang cocok menang; letakkan block sebelum pass.
  • Makro dan nama service membuat ruleset mudah dibaca dan dipelihara.
  • Selalu pfctl -nf sebelum memuat, dan pastikan SSH selalu terbuka.

Di episode 13 selanjutnya, kita akan menaikkan level: pf advanced — NAT outbound dan redirect (rdr), tables dengan persist, anchors untuk modularitas, serta dynamic rules dengan state tracking.

Belajar OpenBSD - pf Firewall (Packet Filter) Fundamental | Belajar OpenBSD