Membangun port forwarding dan NAT dengan UFW: menambahkan aturan DNAT di /etc/ufw/before.rules, mengubah DEFAULT_FORWARD_POLICY menjadi ACCEPT, mengaktifkan IP forwarding via sysctl, dan meneruskan port 80/443 dari host ke VM atau container

Sejauh ini UFW hanya mengontrol lalu lintas yang menuju dan meninggalkan mesin itu sendiri. Episode 13 menambahkan dimensi baru: meneruskan lalu lintas. Kalian akan belajar mengubah host menjadi gerbang — menerima koneksi di port 80/443, lalu meneruskannya ke VM atau container di belakangnya.
Mengapa ini penting? Karena ini pola yang sangat umum di produksi: satu host publik dengan beberapa layanan di belakang (container, VM, NAS). UFW menangani ini dengan NAT (DNAT) — memodifikasi alamat tujuan paket — dan aturan forward. Di sini kalian akhirnya menyentuh before.rules yang kita siapkan di episode 11.
Alurnya: client mengirim ke IP publik host port 443 → aturan DNAT di tabel nat mengubah alamat tujuan menjadi IP internal VM → aturan forward mengizinkan paket menyeberang antar interface → balasan mengalir balik lewat host. Tiga bahan yang harus disiapkan.
Kernel harus diizinkan meneruskan paket antar interface. UFW mengelola sysctl lewat /etc/ufw/sysctl.conf:
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1Terapkan perubahan sysctl:
sudo sysctl -p /etc/ufw/sysctl.confVerifikasi:
sysctl net.ipv4.ip_forwardOutput net.ipv4.ip_forward = 1 berarti kernel siap meneruskan paket.
Note
Penting: setel forwarding di /etc/ufw/sysctl.conf, bukan /etc/sysctl.conf. Karena UFW menulis ulang setelan sysctl saat enable/reload, perubahan di file lain bisa ditimpa. Letakkan di file yang dikelola UFW agar konsisten.
Default DEFAULT_FORWARD_POLICY="DROP" (dari episode 9) akan membuang semua paket yang diteruskan. Ubah ke ACCEPT di /etc/default/ufw:
DEFAULT_FORWARD_POLICY="ACCEPT"Sekarang bagian inti. Tambahkan aturan DNAT ke bagian atas /etc/ufw/before.rules, di dalam blok *nat:
# START UFW NAT
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
# Forward port 80 dan 443 dari host ke VM 192.168.122.10
-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.122.10:80
-A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.122.10:443
# Masquerade agar balasan dari VM lewat host
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# END UFW NATDua bagian penting:
Muat ulang ruleset:
sudo ufw reloadVerifikasi NAT aktif:
sudo iptables -t nat -L -n -vChain PREROUTING (policy ACCEPT 0 packets)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0
tcp dpt:80 to:192.168.122.10:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0
tcp dpt:443 to:192.168.122.10:443Pastikan aturan forward di status UFW juga aktif (karena policy forward sekarang ACCEPT):
sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing), allow (routed)Baris allow (routed) menandakan forwarding diizinkan.
Dari mesin lain, coba akses layanan melalui IP publik host:
curl -I http://203.0.113.5
curl -kI https://203.0.113.5Jika web server di VM merespons, port forwarding bekerja. Jika tidak, episode 18 akan menuntun kalian mendiagnosis — tetapi dua pemeriksaan cepatnya: (1) aturan DNAT ada (iptables -t nat -L), (2) VM menerima koneksi (ss -tlnp di VM).
Pola yang sama berlaku untuk port lain — misalnya meneruskan SSH ke container di port 2222:
-A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 10.0.0.5:22Jangan lupa izinkan port 2222 masuk di UFW:
sudo ufw allow 2222/tcpnet.ipv4.ip_forward=1, kernel menolak meneruskan paket apa pun — DNAT tak akan pernah berhasil.*nat di before.rules. Menaruhnya di after.rules atau di luar blok *nat membuat reload error atau aturan diabaikan.ufw status — kalian tetap perlu ufw allow untuk port publiknya.-o eth0 membatasi masquerade ke interface publik — lebih aman daripada -A POSTROUTING -j MASQUERADE tanpa batasan.Pada episode 13 ini, kalian telah membangun port forwarding & NAT.
Inti yang harus dibawa pulang:
DEFAULT_FORWARD_POLICY="ACCEPT", dan aturan DNAT di before.rules./etc/ufw/sysctl.conf, bukan file sysctl lain.iptables -t nat -L -n -v dan status verbose (baris allow (routed)).Di episode 14 selanjutnya, kita menghadapi konflik yang paling sering membuat admin pusing: Firewall untuk Docker, KVM & Tools Lain — bagaimana Docker menyuntik aturan iptables sendiri, ordering dengan rules UFW, integrasi dengan KVM/libvirt bridge, serta peran sslh dan fail2ban. Sampai jumpa di episode 14!