Memigrasikan ruleset iptables ke nftables secara aman: mengekspor dengan iptables-save, menerjemahkan massal dengan iptables-restore-translate, menerjemahkan per-rule dengan iptables-translate, serta strategi cutover bertahap yang bisa di-rollback di tengah jalan

Setelah memahami di episode 19 bahwa iptables-nft hanyalah jembatan ke nf_tables, pertanyaan logis berikutnya muncul: kalau ujung-ujungnya sama, kenapa tidak langsung bicara bahasa nftables saja? Episode 20 menjawabnya dengan langkah nyata: migrasi. Kalian akan belajar menerjemahkan ruleset iptables yang sudah berjalan bertahun-tahun menjadi aturan nftables murni — tanpa downtime, tanpa kebingungan, dengan rollback selalu tersedia.
Kunci migrasi yang tenang ada di tool resmi dari proyek netfilter: iptables-translate dan iptables-restore-translate. Keduanya membaca bahasa iptables dan menulis bahasa nft — membuat perpindahan lebih seperti "mengganti kamus" daripada menulis ulang dari nol.
Mengapa repot, kalau iptables-nft masih berfungsi? Beberapa alasan yang sah:
| Alasan | Penjelasan |
|---|---|
| Aturan murni nft | Sets, maps, dan ekspresi yang tidak dimiliki iptables |
| Satu sintaks | inet family menangani IPv4 + IPv6 sekaligus |
| Performa | O(log n) lookup untuk sets vs linear scan |
| Operasi atomik | Perubahan ruleset dengan nft -f tanpa jendela tidak aman |
| Masa depan | Pengembangan fitur hanya di nftables |
Untuk deployment baru, nftables adalah pilihan; untuk server yang sudah berjalan, migrasi perlu direncanakan. Di sinilah seluruh keterampilan kalian dari episode 8 (backup) dan 19 (backend) bersatu.
Selalu mulai dari state yang dikenal baik:
sudo iptables-save > /root/backup/rules.v4.before
sudo ip6tables-save > /root/backup/rules.v6.beforeKedua file ini adalah tiket pulang kalian. Sampai migrasi dinyatakan berhasil, mereka tidak boleh hilang.
iptables-restore-translate menerjemahkan seluruh file ruleset sekaligus:
sudo iptables-restore-translate -f /root/backup/rules.v4.before > ruleset.nftcat ruleset.nft# Translated by iptables-restore-translate v1.8.9 on ...
add table ip filter
add chain ip filter INPUT { type filter hook input priority 0; }
add chain ip filter FORWARD { type filter hook forward priority 0; }
add chain ip filter OUTPUT { type filter hook output priority 0; }
add rule ip filter INPUT ct state established,related accept
add rule ip filter INPUT tcp dport 443 accept
add rule ip filter INPUT counter dropPerhatikan polanya: setiap chain iptables menjadi chain nftables dengan hook dan priority yang sama; aturan -A menjadi add rule; modul conntrack menjadi ekspresi ct state. Yang perlu kalian periksa: hasil terjemahan belum tentu final — ia basis yang harus di-review, bukan jawaban jadi.
Untuk aturan-aturan yang kompleks, atau untuk memahami satu per satu, iptables-translate menerjemahkan perintah tunggal:
sudo iptables-translate -A INPUT -p tcp --dport 443 -j ACCEPTnft add rule ip filter INPUT tcp dport 443 counter acceptsudo iptables-translate -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTnft add rule ip filter INPUT ct state established,related counter acceptJuga tersedia ip6tables-translate untuk aturan IPv6. Fitur ini dua arah — ia juga bisa membaca ekspresi nft untuk membantu memahami apa yang sudah ada.
Tip
Mulai dari ruleset yang sudah bersih (episode 17) sebelum diterjemahkan. Aturan yang membingungkan hanya akan diterjemahkan menjadi nftables yang sama-sama membingungkan — bedanya sekarang lebih sulit dibaca orang yang tidak kenal iptables. Rapikan dulu, baru terjemahkan.
Kelebihan nftables yang paling berharga: tabel inet menangani IPv4 dan IPv6 sekaligus. Setelah terjemahan, konsolidasikan:
# Gabung aturan IPv4 dan IPv6 ke satu tabel inet
sudo nft -f ruleset.nft
sudo ip6tables-restore-translate -f /root/backup/rules.v6.before >> ruleset.nft
# Lalu rapikan duplikasi & jadikan satu tabel 'inet firewall'Alih-alih dua tabel (ip dan ip6), kalian bisa menulis satu tabel inet dengan aturan yang berlaku untuk kedua family. Ini adalah langkah yang sebaiknya dilakukan manual — hasil translate berfungsi, tapi konsolidasi memberi penghematan terbesar.
Cutover tidak harus drama. Strategi yang direkomendasikan:
iptables-save, ip6tables-save, dan snapshot file ruleset.sudo nft flush ruleset
sudo iptables-restore < /root/backup/rules.v4.before
sudo ip6tables-restore < /root/backup/rules.v6.beforeKarena iptables-nft dan nft menulis ke kernel yang sama, flush lalu restore iptables memulihkan state semula dalam hitungan detik.
Warning
Jangan pernah melakukan cutover tanpa akses out-of-band ke mesin. Kesalahan sintaks nft bisa membuat aturan dasar ikut hilang (ingat konsekuensi nft flush ruleset dari episode 19). Akses konsol + backup + prosedur rollback tertulis adalah tiga syarat non-negosiasi sebelum migrasi produksi.
Setelah migrasi, kalian mendapatkan fitur yang tidak ada di iptables. Set menyimpan kumpulan nilai dan melakukan lookup O(log n):
nft add set inet firewall blocked_ips { type ipv4_addr; }
nft add element inet firewall blocked_ips { 203.0.113.7, 203.0.113.9 }
nft add rule inet firewall input ip saddr @blocked_ips dropMengelola 1000 IP dalam satu set jauh lebih efisien daripada 1000 aturan -s berurutan — dan bisa diisi/dikosongkan tanpa menyentuh aturan inti.
Migrasi firewall seharusnya memakan waktu berminggu-minggu, bukan berjam-jam. Kesabaran di tahap review dan uji paralel adalah investasi terbesar.
Inti yang harus dibawa pulang:
iptables-save/ip6tables-save — itulah tiket pulang.iptables-restore-translate -f menerjemahkan massal; iptables-translate untuk per-rule.inet; rapikan ruleset sebelum diterjemahkan.Di episode 21 selanjutnya kita akan membahas automation & IaC — mengelola firewall dengan Ansible (modul iptables & iptables_state), memahami aturan Docker dan kube-proxy Kubernetes yang hidup di atas iptables, serta posisi firewalld/nftables sebagai default RHEL. Sampai jumpa di episode 21!