Membedah cara kerja UFW dari perintah Python hingga aturan netfilter di kernel lewat backend iptables atau nftables (iptables-nft), serta memahami struktur file konfigurasi /etc/default/ufw, /etc/ufw/*.rules, dan urutan evaluasi before, user, dan after

Episode 1 memperkenalkan UFW sebagai frontend yang menyederhanakan iptables. Sekarang saatnya membuka kap mesin: apa yang sebenarnya terjadi di balik perintah ufw allow 22/tcp? Episode 2 membedah arsitektur UFW — dari Python wrapper, backend iptables/nftables, hingga file-file konfigurasi yang menyimpan ruleset kalian.
Mengapa ini penting? Karena saat terjadi masalah (port tidak kebuka, ruleset tiba-tiba berubah, konflik dengan Docker), kalian harus tahu di mana mencari: di frontend UFW, di backend netfilter, atau di file konfigurasi. Memahami arsitektur mengubah kalian dari pengguna yang menghafal perintah menjadi administrator yang bisa mendiagnosis.
Ketika kalian mengetik ufw allow 80/tcp, ini yang terjadi:
Alurnya: UFW (Python) menerima perintah, menormalkannya menjadi aturan lengkap (memasukkan source/destination, protocol, interface, dan default policies), lalu menulis aturan ke backend — iptables-restore untuk sistem legacy atau iptables-nft/nftables untuk sistem modern. Kernel mengeksekusi aturan itu lewat framework netfilter.
UFW tidak berkomunikasi langsung dengan kernel — ia memakai satu dari dua backend:
| Backend | Penjelasan | Kapan Dipakai |
|---|---|---|
iptables (legacy) | Perintah iptables tradisional | Kernel/Distro lawas |
iptables-nft | Compatibility layer yang menulis aturan dalam format nftables | Default di Ubuntu/Debian modern |
iptables-nft adalah keajaiban kompatibilitas: ia menerima sintaks iptables yang kalian kenal, tetapi menuliskan hasilnya sebagai aturan nftables di kernel. Ini berarti UFW yang sudah kalian kenal bisa berjalan di atas backend netfilter modern tanpa mengubah apa pun.
Cek backend mana yang aktif di sistem kalian:
sudo ufw status verbose
ls -l /usr/sbin/iptablesOutput ls -l /usr/sbin/iptables biasanya menunjuk ke iptables-nft (via symlink atau update-alternatives) di distro modern. Episode 18 akan kembali ke topik ini saat troubleshooting backend.
Note
Istilah penting: netfilter adalah framework di dalam kernel Linux untuk memfilter/memodifikasi paket. iptables/nftables adalah tools user-space untuk mengelola aturannya. UFW adalah lapisan paling atas yang membuat kedua tools itu ramah dipakai.
Ruleset UFW disimpan di dalam beberapa file yang memiliki peran berbeda:
/etc/default/ufw # konfigurasi utama (IPv6, default policies)
/etc/ufw/
├── before.rules # aturan sistem, dijalankan PERTAMA (IPv4)
├── before6.rules # aturan sistem sebelum aturan user (IPv6)
├── after.rules # aturan sistem, dijalankan TERAKHIR (IPv4)
├── after6.rules # aturan sistem setelah aturan user (IPv6)
├── user.rules # ruleset hasil perintah kalian (IPv4)
├── user6.rules # ruleset hasil perintah kalian (IPv6)
├── sysctl.conf # setelan kernel yang dikelola UFW
├── applications.d/ # application profiles
└── ufw.conf # konfigurasi dasar daemon/statusFile pertama yang harus kalian kenal. Ini berisi default policies dan opsi utama:
# Set to yes to apply rules to support IPv6 traffic
IPV6=yes
# Set the default forward policy
DEFAULT_FORWARD_POLICY="DROP"
# Set the default input policy
DEFAULT_INPUT_POLICY="DROP"
# Set the default output policy
DEFAULT_OUTPUT_POLICY="ACCEPT"
# Set the default application policy
DEFAULT_APPLICATION_POLICY="ACCEPT"Kebijakan default inilah yang menentukan nasib paket yang tidak cocok dengan aturan mana pun. Nilai DROP pada DEFAULT_INPUT_POLICY berarti semua lalu lintas masuk ditolak kecuali diizinkan eksplisit — filosofi default deny yang menjadi fondasi keamanan server (episode 9).
Saat UFW menyusun ruleset lengkap, urutannya selalu before → user → after:
ufw allow/ufw deny/ufw limit yang kalian ketik. Bagian ini jangan diedit manual — biarkan UFW yang mengelolanya.Urutan ini krusial karena netfilter mengevaluasi aturan secara berurutan — yang pertama cocok menang. Letak sebuah aturan menentukan prioritasnya, dan kita akan memanfaatkannya di episode 13 dan 17.
before.rules → user.rules → after.rules
(system) (kalian) (penutup)Ketika kalian menjalankan ufw allow 80/tcp, UFW melakukan tiga hal sekaligus:
user.rules (atau user6.rules untuk IPv6).iptables-restore/iptables-nft.Rule added.Karena itu kalian bisa melihat apa yang sebenarnya disimpan dengan dua cara: lewat frontend (ufw status) atau lewat backend (iptables -L). Perhatikan perbedaannya:
sudo ufw status
sudo iptables -L INPUT -n -v --line-numbersufw status menampilkan versi yang mudah dibaca; iptables -L -n -v menampilkan aturan mentah yang dieksekusi kernel. Jika keduanya tidak konsisten, kalian sedang menghadapi masalah yang akan kita pecahkan di episode 18.
Pada episode 2 ini, kalian telah membedah arsitektur UFW dari atas ke bawah.
Inti yang harus dibawa pulang:
iptables-nft, menulis aturan dalam format nftables dengan sintaks iptables./etc/default/ufw (policies), before.rules/user.rules/after.rules (urutan eksekusi), applications.d/ (profiles).DROP (input) + ACCEPT (output) adalah fondasi default deny.before → user → after menentukan prioritas.Di episode 3 selanjutnya, kita mulai hands-on: instalasi, status, dan enabling UFW — memastikan versi 0.36.2, membaca ufw status/status verbose/status numbered, serta mengaktifkan UFW tanpa terkunci dari SSH. Sampai jumpa di episode 3!