Menuntaskan dukungan IPv6 di UFW: mengaktifkan IPV6=yes di /etc/default/ ufw, memahami aturan paralel dual-stack yang dibuat otomatis, serta membedah peran before.rules dan after.rules dalam urutan eksekusi ruleset lengkap

Sepanjang series ini kalian melihat aturan yang selalu muncul berpasangan: 22/tcp dan 22/tcp (v6). Itu adalah dual-stack — UFW mengelola IPv4 dan IPv6 secara paralel. Episode 11 membuka tirai: bagaimana dukungan IPv6 dikonfigurasi, apa peran file rules sebelum/sesudah, dan bagaimana urutan eksekusi keseluruhan bekerja.
Mengapa ini penting? Karena IPv6 bukan lagi masa depan — ia sudah berjalan di mana-mana: AWS, VPS, hingga jaringan rumah. Server yang hanya mengamankan IPv4 menyisakan pintu belakang IPv6 yang terbuka. Dan memahami before.rules/after.rules adalah kunci untuk NAT (episode 13) dan prioritas aturan (episode 17).
Kontrol utama ada di /etc/default/ufw:
# Set to yes to apply rules to support IPv6 traffic
IPV6=yesDengan IPV6=yes, setiap perintah ufw allow <port>/<proto> otomatis membuat dua aturan — satu IPv4 (ditulis ke user.rules) dan satu IPv6 (ditulis ke user6.rules):
sudo ufw status
To Action From
-- ------ ----
443/tcp ALLOW Anywhere
443/tcp (v6) ALLOW Anywhere (v6)Jika kalian mengubah IPV6=no, aturan IPv6 tidak lagi dibuat — dan seluruh lalu lintas IPv6 jatuh ke kebijakan default sistem (biasanya iptables IPv6 menolak). Perubahan ini baru berlaku setelah reload:
sudo ufw reload
sudo ufw statusWarning
Mematikan IPV6=no bukan berarti IPv6 "tidak ada" — ia tetap ada di jaringan kalian, hanya tidak lagi dikelola UFW. Di sistem dengan IPv6 aktif (default Ubuntu), ini bisa menjadi celah. Biarkan IPV6=yes kecuali kalian yakin menonaktifkan IPv6 di seluruh stack.
Selain otomatis dual-stack, kalian bisa menulis aturan yang menyebut alamat IPv6 secara eksplisit:
sudo ufw allow from fd00::1/64 to any port 22 proto tcpsudo ufw deny from 2001:db8::5Verifikasi di status — aturan IPv6 tampil tanpa penanda (v6) karena memang hanya untuk IPv6:
sudo ufw status
To Action From
-- ------ ----
22/tcp ALLOW fd00::1/64Episode 2 memperkenalkan urutan eksekusi. Sekarang kita bedah peran masing-masing file lebih dalam:
IPv4 IPv6
/etc/ufw/before.rules /etc/ufw/before6.rules
/etc/ufw/user.rules /etc/ufw/user6.rules
/etc/ufw/after.rules /etc/ufw/after6.rulesAturan yang harus berlaku paling awal — dijalankan sebelum aturan kalian. Isinya aturan fondasi:
lo) sepenuhnya — lalu lintas lokal.Mengapa "before"? Karena beberapa hal harus menang atas aturan user. Loopback misalnya — mematikan loopback karena kesalahan aturan user akan membuat banyak layanan lokal hancur. Jadi aturan ini dilindungi di layer sistem.
File ini ditulis oleh UFW dari perintah ufw allow/deny/limit kalian. Jangan diedit manual — hasil edit akan ditimpa saat reload. Semua aturan dari episode 4-10 berakhir di sini.
Aturan penutup yang dijalankan setelah semuanya. Isi defaultnya biasanya:
Jika paket cocok dengan aturan manapun di before → user → after, keputusan diambil. Jika tidak cocok dengan apa pun, jatuh ke default policy. Inilah urutan yang kita pakai untuk reasoning tentang prioritas di episode 13 dan 17.
Mari lihat potongan penting before.rules — terutama bagian yang menjadi dasar NAT di episode 13:
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# drop invalid packets
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
# allow established connections
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# allow icmp
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
COMMITPerhatikan strukturnya: blok *filter dibuka, chains didefinisikan, aturan ditulis, lalu COMMIT. Aturan RELATED,ESTABLISHED di atas adalah alasan kenapa koneksi keluar yang sudah terjalin tetap bisa menerima balasan — fondasi dari default policy allow-outgoing.
Note
File rules UFW memakai format iptables-restore: blok tabel (*filter, *nat) diikuti aturan, diakhiri COMMIT. Untuk menambah aturan manual (seperti NAT), kalian menulis di dalam blok tabel yang sesuai — bukan di sembarang tempat. Kita praktikkan di episode 13.
before.rules/after.rules: aturan manual baru aktif setelah sudo ufw reload.*nat, bukan *filter — menaruhnya di blok salah = aturan diabaikan atau error saat reload.user.rules manual: akan ditimpa oleh UFW. Selalu pakai perintah ufw, bukan edit file.Pada episode 11 ini, kalian telah menguasai IPv6 dan struktur file.
Inti yang harus dibawa pulang:
IPV6=yes di /etc/default/ufw membuat setiap aturan otomatis dual-stack (IPv4 + IPv6).before.rules → user.rules → after.rules → default policy.before.rules melindungi loopback, menolak invalid, dan mengizinkan koneksi established.iptables-restore dengan blok tabel + COMMIT.Di episode 13 nanti kita akan memakai before.rules untuk membangun NAT dan port forwarding. Tapi sebelum itu, episode 12 menutup kebutuhan observasi: Logging & Monitoring — mengaktifkan level logging UFW, membaca /var/log/ufw.log, mendeteksi scan dan brute force, serta memakai ufw show added. Sampai jumpa di episode 12!