Belajar UFW - Port Forwarding & NAT
Series/Belajar UFW/Episode 13
Episode 13 of 23

Belajar UFW - Port Forwarding & NAT

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

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

Pendahuluan

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.

Gambaran Arsitektur

100%

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.

Bahan 1: Aktifkan IP Forwarding

Kernel harus diizinkan meneruskan paket antar interface. UFW mengelola sysctl lewat /etc/ufw/sysctl.conf:

/etc/ufw/sysctl.conf (ubah)
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

Terapkan perubahan sysctl:

Terapkan IP forwarding
sudo sysctl -p /etc/ufw/sysctl.conf

Verifikasi:

Cek ip_forward
sysctl net.ipv4.ip_forward

Output 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.

Bahan 2: Ubah Default Forward Policy

Default DEFAULT_FORWARD_POLICY="DROP" (dari episode 9) akan membuang semua paket yang diteruskan. Ubah ke ACCEPT di /etc/default/ufw:

/etc/default/ufw (ubah)
DEFAULT_FORWARD_POLICY="ACCEPT"

Bahan 3: Aturan NAT di before.rules

Sekarang bagian inti. Tambahkan aturan DNAT ke bagian atas /etc/ufw/before.rules, di dalam blok *nat:

/etc/ufw/before.rules (tambahan 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 NAT

Dua bagian penting:

  • PREROUTING / DNAT — mengganti alamat tujuan paket masuk sebelum di-routing, sehingga paket "ditujukan" ke VM internal.
  • POSTROUTING / MASQUERADE — mengganti alamat sumber balasan, sehingga balasan VM terlihat datang dari host (SNAT).

Reload dan Verifikasi

Muat ulang ruleset:

Reload UFW
sudo ufw reload

Verifikasi NAT aktif:

Cek aturan NAT
sudo iptables -t nat -L -n -v
Output (ringkas)
Chain 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:443

Pastikan aturan forward di status UFW juga aktif (karena policy forward sekarang ACCEPT):

Status UFW
sudo ufw status verbose
 
Status: active
Default: deny (incoming), allow (outgoing), allow (routed)

Baris allow (routed) menandakan forwarding diizinkan.

Uji dari Luar

Dari mesin lain, coba akses layanan melalui IP publik host:

Uji port forward
curl -I http://203.0.113.5
curl -kI https://203.0.113.5

Jika 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).

Port Forwarding untuk Protokol Lain

Pola yang sama berlaku untuk port lain — misalnya meneruskan SSH ke container di port 2222:

/etc/ufw/before.rules (tambahan)
-A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 10.0.0.5:22

Jangan lupa izinkan port 2222 masuk di UFW:

Buka port 2222 masuk
sudo ufw allow 2222/tcp

Common Pitfalls

  1. Lupa mengubah DEFAULT_FORWARD_POLICY: DNAT tanpa forward policy ACCEPT = paket diteruskan ke NAT lalu dijatuhkan. Gejalanya: koneksi time out.
  2. Lupa IP forwarding: tanpa net.ipv4.ip_forward=1, kernel menolak meneruskan paket apa pun — DNAT tak akan pernah berhasil.
  3. NAT di file yang salah: aturan NAT wajib di blok *nat di before.rules. Menaruhnya di after.rules atau di luar blok *nat membuat reload error atau aturan diabaikan.
  4. Lupa membuka port di frontend: DNAT tidak otomatis membuka port di ufw status — kalian tetap perlu ufw allow untuk port publiknya.
  5. MASQUERADE terlalu luas: -o eth0 membatasi masquerade ke interface publik — lebih aman daripada -A POSTROUTING -j MASQUERADE tanpa batasan.

Penutup

Pada episode 13 ini, kalian telah membangun port forwarding & NAT.

Inti yang harus dibawa pulang:

  • Butuh tiga bahan: IP forwarding aktif, DEFAULT_FORWARD_POLICY="ACCEPT", dan aturan DNAT di before.rules.
  • DNAT (PREROUTING) mengganti tujuan; MASQUERADE (POSTROUTING) mengganti sumber balasan.
  • Setel sysctl di /etc/ufw/sysctl.conf, bukan file sysctl lain.
  • Verifikasi dengan iptables -t nat -L -n -v dan status verbose (baris allow (routed)).
  • Selalu buka port publiknya juga di frontend UFW.

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!

Belajar UFW - Port Forwarding & NAT | Belajar UFW