Tips Setup Firewall di Ubuntu + Cara Konfigurasi SNAT dan DNAT

Nah, setelah kemarin kita bahas soal DHCP server, sekarang kita masuk ke topik yang nggak kalah penting: firewall. Bayangin kalau server kalian terbuka lebar tanpa perlindungan, bisa-bisa diserbu sama bot-bot jahat dari seluruh dunia. Di Ubuntu, tool firewall yang paling umum dipake ada dua: UFW (Uncomplicated Firewall) yang simpel buat pemula, dan iptables/nftables yang lebih powerful buat kebutuhan advanced.

Di artikel ini, saya bakal jelasin dari yang basic sampe advanced, termasuk gimana caranya setup SNAT (Source NAT) dan DNAT (Destination NAT) buat ngatur routing dan port forwarding.

Perbedaan UFW, iptables, dan nftables

Sebelum mulai, kalian perlu tau bedanya:Table

ToolDeskripsiCocok Buat
UFWWrapper di atas iptables, sintaksnya simpelPemula, setup basic firewall
iptablesFirewall tradisional Linux, powerful tapi sintaks kompleksUser intermediate-advanced
nftablesPengganti iptables di Ubuntu 22.04+, lebih efisienUser yang mau performa lebih baik

Saya bakal fokus ke UFW buat basic setup, terus masuk ke iptables buat SNAT/DNAT karena UFW nggak support NAT secara native.

Bagian 1: Setup Firewall dengan UFW

UFW itu pilihan paling gampang kalau kalian cuma mau buka/tutup port tanpa pusing mikirin chain dan table.

1. Install dan Enable UFW

Biasanya UFW udah terinstall di Ubuntu, tapi kalau belum:

sudo apt update
sudo apt install ufw

Enable UFW:

sudo ufw enable

Cek status:

sudo ufw status verbose

2. Setting Default Policy

Rule paling penting: default deny incoming, allow outgoing.

sudo ufw default deny incoming
sudo ufw default allow outgoing

3. Buka Port yang Diperlukan

SSH (jangan sampai ke-lockout!):

sudo ufw allow 22/tcp
# atau lebih spesifik ke IP tertentu aja
sudo ufw allow from 192.168.1.0/24 to any port 22

HTTP dan HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Buka port range (misal buat passive FTP):

sudo ufw allow 10000:10100/tcp

4. Allow Berdasarkan IP atau Subnet

Akses dari IP spesifik:

sudo ufw allow from 203.0.113.50

Akses dari subnet tertentu ke port tertentu:

sudo ufw allow from 10.0.0.0/8 to any port 3306 proto tcp

5. Deny dan Delete Rules

Block IP jahat:

sudo ufw deny from 192.168.1.200

Hapus rule (cari nomornya dulu):

sudo ufw status numbered
sudo ufw delete 3

6. Limit Rate (Anti Brute Force)

Batasi koneksi SSH biar nggak di-brute force:

sudo ufw limit 22/tcp

Ini otomatis block IP yang coba koneksi terlalu sering dalam waktu singkat.

Bagian 2: SNAT dan DNAT dengan iptables

Nah, sekarang kita masuk ke yang lebih advanced. UFW nggak bisa handle NAT, jadi kita harus turun ke level iptables.

Apa Itu SNAT dan DNAT?

JenisFungsiContoh Penggunaan
SNAT (Source NAT)Ganti IP source paket yang keluarShare internet ke LAN, IP private jadi IP public
DNAT (Destination NAT)Ganti IP tujuan paket yang masukPort forwarding, redirect traffic ke server internal

Persiapan: Enable IP Forwarding

Sebelum setup NAT, aktifin dulu IP forwarding di kernel:

sudo nano /etc/sysctl.conf

Uncomment baris ini:

net.ipv4.ip_forward=1

Apply perubahan:

sudo sysctl -p

Atau sementara (hilang kalau reboot):

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Setup SNAT (Share Internet ke LAN)

Scenario: Kalian punya server dengan 2 interface:

  • eth0 → IP public 203.0.113.10 (ke internet)
  • eth1 → IP private 192.168.1.1 (ke LAN)

Tujuan: Client di LAN bisa akses internet lewat server ini.

# Flush rules lama (hati-hati kalau remote!)
sudo iptables -t nat -F
sudo iptables -F

# SNAT: Ganti source IP dari 192.168.1.x jadi 203.0.113.10
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.10

# Atau pakai MASQUERADE kalau IP public dinamis (PPPoE, DHCP)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Allow forwarding dari LAN ke WAN
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Allow established connection balik dari WAN ke LAN
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Block forward lainnya (security)
sudo iptables -A FORWARD -j DROP

Penjelasan:

  • -t nat: Table NAT
  • POSTROUTING: Chain yang diproses setelah routing decision (pas paket mau keluar)
  • MASQUERADE: Sama kayak SNAT tapi otomatis pake IP dari interface output (cocok buat IP dinamis)

Setup DNAT (Port Forwarding)

Scenario: Kalian punya web server internal di 192.168.1.50:80, mau diakses dari luar lewat IP public 203.0.113.10:8080.

# DNAT: Redirect port 8080 dari eth0 ke 192.168.1.50:80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.50:80

# Allow forwarding ke server internal
sudo iptables -A FORWARD -p tcp -d 192.168.1.50 --dport 80 -j ACCEPT

Kalau mau redirect port 80 external ke 8080 internal (reverse):

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.50:8080

Kombinasi SNAT + DNAT (DMZ Setup)

Scenario lengkap: Server sebagai gateway + port forwarding ke beberapa server internal.

#!/bin/bash

# Flush semua rules
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Allow loopback
iptables -A INPUT -i lo -j ACCEPT

# Allow established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# SNAT untuk LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT: Port forwarding examples
# Web server 1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

# SSH ke server 2
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.20:22
iptables -A FORWARD -p tcp -d 192.168.1.20 --dport 22 -j ACCEPT

# Allow LAN ke internet
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Allow SSH ke gateway dari LAN
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT

# Logging (optional)
iptables -A INPUT -j LOG --log-prefix "DROP_INPUT: "
iptables -A FORWARD -j LOG --log-prefix "DROP_FORWARD: "

Simpan script di atas ke /usr/local/bin/firewall.sh, kasih executable, dan jalanin:

sudo chmod +x /usr/local/bin/firewall.sh
sudo /usr/local/bin/firewall.sh

Simpan Rules iptables (Persisten)

iptables rules hilang kalau reboot. Install iptables-persistent:

sudo apt install iptables-persistent
sudo netfilter-persistent save

Atau manual:

sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

Buat auto-load saat boot, edit /etc/network/if-pre-up.d/iptables:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules.v4
/sbin/ip6tables-restore < /etc/iptables/rules.v6
sudo chmod +x /etc/network/if-pre-up.d/iptables

Tips Keamanan Firewall

1. Jangan lockout diri sendiri Kalau konfigurasi via SSH, selalu buka port 22 dulu sebelum apply rules lain. Atau pakai screen/tmux biar session nggak putus.

2. Test rules sementara Jangan langsung save ke persistent. Test dulu, kalau bener-bener berhasil baru save.

3. Logging penting Aktifin logging buat debug:

sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES_DROP: " --log-level 4
sudo tail -f /var/log/kern.log

4. Rate limiting lebih agresif Block port scanning:

sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

5. Gunakan fail2ban Gabungin iptables dengan fail2ban buat block otomatis IP yang mencurigakan:

sudo apt install fail2ban
sudo systemctl enable fail2ban

Troubleshooting Umum

Client nggak bisa internet padahal SNAT udah setup?

  • Cek IP forwarding udah aktif: sysctl net.ipv4.ip_forward
  • Cek default gateway client udah bener (harusnya IP LAN server)
  • Cek DNS client, bisa pake 8.8.8.8 atau DNS server internal

DNAT nggak jalan?

  • Pastikan chain FORWARD allow traffic ke destinasi
  • Cek nggak ada rules DROP sebelum rules DNAT
  • Pastikan service di server internal jalan dan listen di IP yang bener

Rules iptables hilang reboot?

  • Belum install/save pake iptables-persistent
  • Atau script load belum dijalanin saat boot

Kesimpulan

Setup firewall di Ubuntu bisa dimulai dari yang simpel pake UFW, tapi kalau butuh fitur advanced kayak NAT, kalian harus turun ke iptables. SNAT buat share internet ke LAN, DNAT buat expose service internal ke luar.

Poin penting yang harus diingat:

  • Selalu allow SSH dulu sebelum mainan rules
  • IP forwarding harus aktif buat NAT
  • Rules iptables perlu disave biar persisten
  • Logging itu sahabat buat debug

Leave a Reply

Your email address will not be published. Required fields are marked *