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
filterdengan chainINPUT,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, danmapyang 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 incomingtanpa menutupi port login yang sebenarnya Anda pakai. - Pakai
atuntuk 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