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
| Tool | Deskripsi | Cocok Buat |
|---|---|---|
| UFW | Wrapper di atas iptables, sintaksnya simpel | Pemula, setup basic firewall |
| iptables | Firewall tradisional Linux, powerful tapi sintaks kompleks | User intermediate-advanced |
| nftables | Pengganti iptables di Ubuntu 22.04+, lebih efisien | User 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?
| Jenis | Fungsi | Contoh Penggunaan |
|---|---|---|
| SNAT (Source NAT) | Ganti IP source paket yang keluar | Share internet ke LAN, IP private jadi IP public |
| DNAT (Destination NAT) | Ganti IP tujuan paket yang masuk | Port 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 NATPOSTROUTING: 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.8atau 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