Keamanan

Firewall VPS: UFW, iptables, atau nftables?

30 October 2026 6 min baca
Firewall VPS: UFW, iptables, atau nftables?

Banyak pemilik VPS menganggap firewall sebagai fitur opsional karena "server saya belum ada yang menyerang". Kenyataannya, serangan otomatis tidak memilih target: pemindaian terhadap seluruh rentang IPv4 berjalan terus-menerus. Firewall adalah satu-satunya lapisan yang menolak trafik sebelum menyentuh aplikasi Anda. Artikel ini membandingkan UFW, iptables, dan nftables, lalu memberi resep konfigurasi yang bisa langsung dipakai.

1. Layer Firewall di Linux: Dari Kernel ke Antarmuka

Di dalam kernel Linux, penyaringan paket dilakukan oleh subsystem netfilter. Yang kita perkenalkan sehari-hari hanyalah cara menuliskan aturannya:

  • iptables —perangkat klasik berbasis tabel filter dengan chain INPUT, FORWARD, OUTPUT. Sangat fleksibel, tetapi aturan dibaca dan ditulis ulang per baris sehingga perubahan besar terasa lambat.
  • nftables — penerus resmi iptables, memakai objek table, chain, set, dan map yang bisa diperbarui secara atomik.
  • UFW (Uncomplicated Firewall) — lapisan perintah ramah manusia yang di Ubuntu kini menulis aturannya ke nftables.
  • firewalld — umum di RHEL/Fedora/AlmaLinux, bekerja dengan konsep zone dan service.

Di Ubuntu 22.04 ke atas, perintah ufw memakai nftables sebagai backend. Artinya Anda tetap bisa menambah aturan manual dengan nft untuk kasus yang tidak dijangkau UFW.

2. Kebijakan Dasar: Default Deny, Izinkan yang Perlu

Urutan pengerjaan yang aman — dan ini penting agar Anda tidak terkunci di luar server — adalah membiarkan SSH sebelum mengaktifkan policy deny. Bila SSH Anda masih pakai password, selesaikan dulu langkah di Mengamankan SSH dengan Kunci Ed25519 dan Fail2ban.

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw enable
ufw status numbered

Layanan web menambah dua port saja:

ufw allow 80/tcp  comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'

Prinsip yang sama berlaku di semua tools: daftar izin harus pendek. Bila daftar Anda sudah panjang, biasanya itu tanda bahwa ada layanan yang sebaiknya tidak perlu punya IP publik.

3. Port yang Tidak Boleh Dibuka ke Publik

Inilah sumber insiden paling sering ditemukan pada VPS yang dijual sebagai "sudah include panel":

  • 3306 MySQL / MariaDB
  • 5432 PostgreSQL
  • 6379 Redis — tanpa autentikasi, satu permintaan cukup untuk menanam kunci SSH lewat CONFIG SET dir.
  • 27017 MongoDB
  • 9200 / 9300 Elasticsearch
  • 2375 Docker API tanpa TLS — langsung memberi kontrol container penuh.
  • 139 / 445 SMB — Windows VPS yang mengekspos file sharing ke internet praktis mengundang ransomware.

Verifikasi apa yang benar-benar mendengar di seluruh antarmuka:

ss -tulpn | grep LISTEN
nmap -sT -p 1-10000 IP_VPS_ANDA

Perlu dicatat: memeriksa dari luar jauh lebih jujur daripada memeriksa dari dalam. Basis data internal sebaiknya diikat ke 127.0.0.1 atau ke IP privat antar-server, bukan dilindungi firewall saja.

4. Membatasi Sumber Akses dengan Aturan Bersyarat

Beberapa layanan memang perlu akses eksternal, tapi cukup dari alamat tertentu:

ufw allow from 203.0.113.10 to any port 3306 proto tcp comment 'App server only'
ufw allow from 10.0.0.0/24 to any port 5601 proto tcp comment 'Kantor via VPN'

Rate limit membantu meredam floods pada layanan yang tidak punya proteksi sendiri:

ufw limit 22/tcp
ufw route allow proto tcp from any to any port 22

Untuk kebutuhan yang lebih spesifik — menolak satu negara, menutup user-agent scraping, atau menahan koneksi setengah jadi — UFW bukan alat yang tepat. Turunlah ke nftables atau letakkan aturan di level aplikasi/CDN.

5. Setara di iptables

Bila VPS Anda memakai image lama, distro non-Ubuntu, atau Anda ingin memahami apa yang sebenarnya dilakukan UFW, bentuk iptables-nya seperti ini:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22  -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80  -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4

Baris ESTABLISHED,RELATED adalah kunci yang sering terlupa: tanpa itu, respons dari server ikut dibuang sehingga koneksi terlihat "kadang berhasil kadang tidak". Simpan aturan agar bertahan reboot:

apt -y install iptables-persistent
netfilter-persistent save

6. Setara di nftables

nftables memakai sintaks yang lebih ringkas dan mendukung set untuk banyak alamat tanpa membayar performa:

table inet fw {
    set ssh_allow {
        type ipv4_addr . inet_service
        elements = { 203.0.113.10 . 22, 198.51.100.5 . 22 }
    }

    chain input {
        type filter hook input priority 0; policy drop;
        iif "lo" accept
        ct state established,related accept
        meta l4proto tcp th dport 22 accept
        meta l4proto tcp th dport { 80, 443 } accept
        ip protocol icmp icmp type echo-request accept
        limit rate 25/second burst 20 packets accept
        counter log prefix "NFT-DROP: " drop
    }
}

Simpan sebagai /etc/nftables.conf lalu aktifkan dengan nft -f /etc/nftables.conf dan systemctl enable nftables. Muat aturan baru tanpa memutus koneksi berjalan:

nft -c -f /etc/nftables.conf   # cek sintaks
nft delete table inet fw
nft -f /etc/nftables.conf      # muat ulang atomik

7. Jangan Lupa OUTPUT dan IPv6

Firewall default-deny pada INPUT tidak mencegah malware menghubungi server command-and-control di luar. Kebanyakan panduan menutup mata untuk OUTPUT karena terlalu membatasi, tapi minimal catat yang anomali. Untuk IPv6, banyak image VPS memasang ruleset hanya untuk IPv4 sehingga port 443 IPv6 tetap terbuka lebar.

Bila layanan Anda tidak menyiapkan IPv6, tutup total:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Atau tambah chain ip6 yang policy-nya drop agar ufw ikut menulis aturan IPv6 — UFW modern sudah menangani ini secara default.

8. Firewall Provider dan Keamanan VPS Windows

Selain firewall di dalam OS, hampir semua provider menyediakan security group atau cloud firewall di level hypervisor. Aturannya bekerja sebelum trafik menyentuh VPS Anda, jadi penolakan di sana lebih murah daripada pembuangan paket di kernel. Kombinasi terbaik: kelompok keamanan provider untuk batasan kasar, firewall OS untuk kebijakan detail. Untuk Windows, tambahkan juga firewall profil Domain/Private/Public bawaannya; perbandingan perilaku kedua OS ada di VPS Windows vs VPS Linux. Jangan lupa bahwa firewall di dalam OS tetap menjadi bagian tanggung jawab Anda, bukan provider — lihat Model Tanggung Jawab Bersama Keamanan VPS.

9. Menguji Firewall Tanpa Mengunci Diri

Bereksperimen dengan firewall hanya aman bila Anda punya jalur darurat. Lakukan ini sebelum perubahan besar:

  • Buka sesi konsol provider (VNC/Rescue) agar tetap bisa masuk bila SSH tertutup.
  • Jangan langsung default deny incoming tanpa menutupi port login yang sebenarnya Anda pakai.
  • Pakai at untuk rollback otomatis: echo "iptables -P INPUT ACCEPT" | at now + 5 minutes
  • Uji dari jaringan lain, bukan hanya dari server itu sendiri.

Routine check bulanan yang cukup satu menit:

ufw status verbose
nft list ruleset | head -40
ss -tulpn | grep LISTEN

Kesimpulan

Pilih alat sesuai kenyamanan: UFW untuk server tunggal dengan kebutuhan standar, nftables bila Anda butuh set alamat, rate limit, dan aturan atomik, iptables bila mewarisi skrip lama. Yang menentukan keamanan bukan alatnya, melainkan disiplin default-deny dan keberanian menutup port yang tidak Anda kenal. Setelah firewall rapi, lanjutkan ke 10 Langkah Hardening VPS untuk lapisan di atasnya.

Artikel terkait: Memahami Bandwidth Unmetered pada VPS | Serangan DDoS: Jenis, Deteksi, dan Mitigasi

Iklan