Bagi seorang system administrator, firewall adalah garis pertahanan pertama yang menentukan apakah sebuah server bisa bertahan dari serangan atau justru menjadi pintu masuk bagi penyusup. Di ekosistem Ubuntu, hampir semua orang pernah mendengar satu nama: UFW, atau Uncomplicated Firewall.
Masalahnya, banyak pengguna Linux — baik pemula maupun yang sudah cukup lama bermain di server — menggunakan UFW hanya sebatas menjalankan perintah sudo ufw allow 22 tanpa benar-benar memahami apa yang terjadi di baliknya. Padahal, memahami cara kerja UFW secara mendalam akan sangat membantu ketika suatu saat rule yang dibuat tidak berjalan sesuai harapan, atau ketika harus melakukan debugging pada server produksi yang sedang mendapat serangan brute force.
Artikel ini akan membahas UFW secara menyeluruh: bagaimana paket data diperiksa, apa perbedaan mendasar antara rule Allow, Deny, Reject, dan Limit, serta bagaimana sebenarnya UFW berhubungan dengan iptables dan nftables yang bekerja di lapisan kernel. Jika Anda mengelola server Ubuntu, baik untuk keperluan web hosting, VPN, database, maupun infrastruktur DevOps, pemahaman ini akan menjadi fondasi penting dalam strategi keamanan jaringan Anda.
Pembahasan Utama
Apa Itu UFW?
UFW adalah alat berbasis command line yang dirancang untuk menyederhanakan pengelolaan firewall di Ubuntu dan turunan Debian lainnya. UFW bukan firewall yang berdiri sendiri secara independen di level kernel. Ia adalah front-end — sebuah lapisan antarmuka yang menerjemahkan perintah sederhana seperti ufw allow 80/tcp menjadi rule-rule kompleks yang sebenarnya dieksekusi oleh subsistem Netfilter di kernel Linux.
Dengan kata lain, UFW tidak memfilter paket data secara langsung. Ia hanya menyusun konfigurasi yang kemudian diterapkan melalui backend firewall yang sesungguhnya bekerja di kernel, yaitu iptables (atau nftables pada sistem yang lebih baru).
Bagaimana Paket Data Diperiksa
Setiap kali ada paket data yang masuk (incoming), keluar (outgoing), atau diteruskan (routed) melalui server, kernel Linux akan memeriksa paket tersebut melalui rangkaian hook Netfilter. Secara sederhana, alurnya seperti berikut:
- Paket data tiba di network interface.
- Kernel mencocokkan paket tersebut dengan rule-rule yang sudah didefinisikan, urut dari atas ke bawah.
- Begitu sebuah rule cocok (match), aksi pada rule tersebut langsung dieksekusi — proses pencocokan berhenti di situ.
- Jika tidak ada satupun rule yang cocok, paket akan mengikuti default policy (misalnya deny untuk incoming, allow untuk outgoing).
UFW sendiri bersifat stateful, artinya ia dapat mengenali konteks sebuah koneksi — apakah paket tersebut bagian dari koneksi baru, koneksi yang sudah terbentuk, atau koneksi terkait lainnya — dengan memanfaatkan fitur connection tracking (conntrack) di kernel. Ini membuat UFW cukup pintar: begitu Anda mengizinkan koneksi keluar ke sebuah server web, paket balasan dari server tersebut akan otomatis diizinkan masuk tanpa perlu rule tambahan.
Analoginya seperti satpam di sebuah gedung perkantoran. Satpam tidak hanya melihat siapa yang masuk, tapi juga mengingat siapa yang tadi keluar untuk urusan tertentu, sehingga saat orang itu kembali, satpam tidak perlu memeriksa ulang dari nol — cukup mencocokkan bahwa orang tersebut memang sedang dalam proses yang sama.
Rule Allow, Deny, Reject, dan Limit: Apa Bedanya?
Inilah bagian yang paling sering disalahpahami. Keempat action ini terlihat mirip, tapi punya efek yang cukup berbeda pada koneksi jaringan.
1. Allow Rule ini mengizinkan paket data untuk lewat sepenuhnya. Contoh penggunaan paling umum: membuka port SSH atau HTTP.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
2. Deny Rule ini menolak paket data secara diam-diam (silent drop). Paket yang datang akan langsung dibuang tanpa memberi tahu apapun kepada pengirim. Dari sudut pandang pihak yang mencoba terkoneksi, seolah-olah server tidak merespons sama sekali — koneksi akan menggantung hingga akhirnya timeout.
sudo ufw deny 23/tcp
Pendekatan ini sering dipilih untuk alasan keamanan, karena tidak memberikan informasi apapun kepada penyerang tentang status port tersebut — apakah tertutup, difilter, atau memang tidak ada layanan di sana.
3. Reject Mirip dengan deny, tapi rule ini secara aktif mengirimkan pesan penolakan ke pengirim (misalnya paket ICMP “port unreachable” atau TCP RST). Koneksi akan langsung ditolak dengan cepat, bukan menggantung sampai timeout.
sudo ufw reject 23/tcp
Reject biasanya lebih ramah untuk layanan internal — misalnya di jaringan kantor, agar aplikasi klien tidak menunggu lama saat mencoba mengakses port yang memang sengaja ditutup. Namun untuk server yang terekspos ke internet publik, deny sering lebih disukai karena tidak membocorkan informasi ke pihak luar.
4. Limit Ini adalah action khusus yang sangat berguna untuk mencegah serangan brute force, terutama pada layanan seperti SSH. Rule limit akan menghitung jumlah percobaan koneksi dari sebuah alamat IP dalam rentang waktu tertentu. Jika IP tersebut mencoba melakukan koneksi lebih dari ambang batas (secara default, enam kali dalam waktu 30 detik), UFW akan otomatis memblokir IP tersebut untuk sementara.
sudo ufw limit 22/tcp
Rule ini sangat direkomendasikan untuk port SSH pada server yang terekspos ke internet, karena secara signifikan mengurangi risiko serangan brute force otomatis tanpa harus memasang tool tambahan seperti Fail2Ban — meskipun kombinasi keduanya tetap lebih optimal untuk keamanan berlapis.
Hubungan UFW dengan iptables dan nftables
Untuk memahami posisi UFW secara utuh, penting untuk melihat gambaran besar arsitektur firewall di Linux.
Di dalam kernel Linux terdapat subsistem bernama Netfilter, yang bertugas memeriksa dan memutuskan nasib setiap paket jaringan yang melewati sistem. Untuk mengelola Netfilter ini, ada beberapa utilitas userspace yang bisa digunakan, dan dua yang paling relevan adalah:
- iptables — utilitas klasik yang sudah digunakan selama bertahun-tahun, dengan sintaks berbasis chain (INPUT, OUTPUT, FORWARD) dan table (filter, nat, mangle).
- nftables — penerus iptables yang diperkenalkan ke kernel Linux sejak versi 3.13 (2014), dirancang untuk mengurangi duplikasi kode dan meningkatkan performa dibanding iptables.
UFW pada dasarnya adalah lapisan abstraksi di atas kedua backend tersebut. Secara historis, UFW bekerja sebagai front-end untuk iptables. Namun seiring waktu, ekosistem Linux — termasuk Ubuntu — perlahan bertransisi ke nftables sebagai backend default untuk pengelolaan Netfilter, sering kali melalui lapisan kompatibilitas bernama iptables-nft, yang membuat perintah bergaya iptables tetap berfungsi tapi sebenarnya diterjemahkan menjadi rule nftables di belakang layar.
Kabar baiknya, sebagai pengguna UFW, Anda pada dasarnya tidak perlu tahu atau peduli backend mana yang sedang aktif di sistem Anda. Perintah ufw allow, ufw deny, atau ufw status akan tetap bekerja dengan cara yang sama, terlepas dari apakah di baliknya berjalan iptables murni, iptables-nft, atau backend nftables native. Inilah nilai jual utama UFW: menyembunyikan kompleksitas backend sambil tetap memanfaatkan seluruh kekuatan Netfilter.
Untuk melihat rule mentah yang sebenarnya dihasilkan UFW di backend, Anda bisa menjalankan:
sudo iptables -L -n -v
atau jika sistem sudah memakai backend nftables:
sudo nft list ruleset
Perintah ini berguna saat troubleshooting mendalam, misalnya ketika ingin memastikan urutan rule benar-benar sesuai dengan yang diharapkan.
Materi Praktis
Studi Kasus Sederhana: Mengamankan Server Web dengan SSH
Bayangkan Anda baru saja men-deploy VPS Ubuntu untuk menjalankan aplikasi web sederhana. Berikut langkah realistis mengamankannya dengan UFW:
- Izinkan trafik SSH agar Anda tidak terkunci dari server.
- Terapkan rule limit khusus untuk SSH guna mencegah brute force.
- Izinkan port HTTP dan HTTPS untuk lalu lintas web.
- Tetapkan default policy: deny semua incoming, allow semua outgoing.
- Aktifkan UFW.
Studi kasus ini akan dipraktikkan langkah demi langkah pada bagian tutorial berikut.
Tutorial Step-by-Step
Langkah 1 — Cek status dan instalasi UFW
sudo ufw status verbose
Pada Ubuntu, UFW umumnya sudah terpasang secara default namun dalam kondisi nonaktif.
Langkah 2 — Tetapkan default policy
sudo ufw default deny incoming
sudo ufw default allow outgoing
Ini adalah fondasi keamanan: semua koneksi masuk ditolak kecuali diizinkan secara eksplisit, sementara koneksi keluar dari server tetap bebas.
Langkah 3 — Izinkan SSH sebelum mengaktifkan firewall
sudo ufw allow OpenSSH
atau jika menggunakan port kustom:
sudo ufw allow 2222/tcp
Langkah ini wajib dilakukan sebelum mengaktifkan UFW, agar Anda tidak terkunci dari server sendiri.
Langkah 4 — Terapkan rate limiting pada SSH
sudo ufw limit OpenSSH
Langkah 5 — Izinkan port layanan web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Langkah 6 — Aktifkan UFW
sudo ufw enable
Langkah 7 — Verifikasi rule yang aktif
sudo ufw status numbered
Perintah ini menampilkan daftar rule beserta nomor urutnya, memudahkan Anda menghapus rule tertentu jika diperlukan menggunakan sudo ufw delete [nomor].
Kesalahan yang Sering Terjadi
1. Mengaktifkan UFW tanpa mengizinkan SSH terlebih dahulu Penyebab: Administrator langsung menjalankan ufw enable tanpa membuka port SSH. Dampak: Akses ke server terputus total, terutama fatal jika server berada di lokasi remote tanpa akses console fisik. Solusi: Selalu allow port SSH (atau port kustom yang digunakan) sebelum mengaktifkan UFW.
2. Menyamakan Deny dan Reject Penyebab: Anggapan bahwa kedua rule ini identik. Dampak: Pemilihan rule yang tidak sesuai konteks — misalnya memakai reject di server publik sehingga membocorkan informasi status port ke penyerang. Solusi: Pahami bahwa deny bersifat diam-diam sementara reject aktif memberi respons penolakan.
3. Tidak memperhatikan urutan rule Penyebab: Menambahkan rule baru tanpa memeriksa rule yang sudah ada. Dampak: Rule yang lebih umum bisa “menutupi” rule yang lebih spesifik karena pencocokan berhenti di rule pertama yang match. Solusi: Gunakan ufw status numbered secara rutin untuk memeriksa urutan rule.
4. Lupa menerapkan limit pada port yang sering diserang Penyebab: Hanya menggunakan allow untuk semua port termasuk SSH. Dampak: Server rentan terhadap serangan brute force otomatis. Solusi: Gunakan limit khusus untuk port-port sensitif seperti SSH.
5. Tidak memverifikasi rule di level backend saat troubleshooting Penyebab: Terlalu bergantung pada output UFW saja tanpa mengecek backend. Dampak: Kesulitan mendiagnosis masalah rule yang kompleks, terutama saat berinteraksi dengan Docker atau layanan lain yang juga memodifikasi Netfilter. Solusi: Sesekali periksa langsung dengan iptables -L -n -v atau nft list ruleset.
Tips dan Rekomendasi
- Selalu gunakan prinsip least privilege: hanya buka port yang benar-benar dibutuhkan.
- Kombinasikan UFW dengan Fail2Ban untuk perlindungan brute force yang lebih menyeluruh.
- Gunakan
ufw allow from [IP]untuk membatasi akses port administratif (seperti database) hanya dari IP tertentu, bukan dari mana saja. - Backup konfigurasi UFW secara berkala, terutama sebelum melakukan perubahan besar.
- Untuk server yang menjalankan Docker, perhatikan bahwa Docker memiliki cara sendiri memodifikasi rule Netfilter yang terkadang bisa “melewati” rule UFW — ini area yang butuh konfigurasi tambahan agar keduanya selaras.
- Uji perubahan rule pada sesi SSH terpisah sebelum menutup sesi yang sedang aktif, untuk menghindari terkunci dari server.

Kesimpulan
UFW hadir sebagai jembatan yang menyederhanakan pengelolaan firewall di Ubuntu tanpa mengorbankan kekuatan Netfilter yang bekerja di baliknya. Dengan memahami bagaimana paket diperiksa secara stateful, bagaimana perbedaan mendasar antara Allow, Deny, Reject, dan Limit, serta bagaimana UFW berelasi dengan iptables maupun nftables, Anda akan jauh lebih siap mengambil keputusan keamanan yang tepat untuk server yang dikelola.
Poin penting yang perlu diingat:
- UFW adalah front-end, bukan firewall independen — ia menerjemahkan rule ke backend iptables/nftables.
- Deny bersifat diam-diam, Reject aktif menolak, Limit membatasi laju koneksi untuk mencegah brute force.
- Selalu allow akses administratif sebelum mengaktifkan firewall.
- Backend boleh berbeda (iptables, iptables-nft, atau nftables native), tapi cara pakai UFW tetap konsisten.
Keamanan server bukan proses sekali jadi, melainkan kebiasaan yang harus terus dijaga dan dievaluasi seiring berkembangnya infrastruktur Anda.
Bagaimana pengalaman Anda mengelola UFW di server Ubuntu Anda sendiri? Pernahkah Anda terkunci dari server karena lupa membuka port SSH terlebih dahulu?
Tulis pengalaman atau pertanyaan Anda di kolom komentar — mari berdiskusi bersama! Jangan lupa bagikan artikel ini kepada rekan sysadmin lain yang mungkin membutuhkannya, dan jelajahi artikel-artikel terkait lainnya seputar Linux, networking, dan keamanan infrastruktur IT di blog ini.
Frequently Asked Questions (FAQ)
Pertanyaan: Apakah UFW adalah firewall yang berdiri sendiri? Jawaban: Bukan. UFW adalah front-end yang menyederhanakan pengelolaan iptables atau nftables, yang merupakan komponen sesungguhnya yang memfilter paket di level kernel.
Pertanyaan: Apa perbedaan utama antara Deny dan Reject di UFW? Jawaban: Deny menolak paket secara diam-diam tanpa memberi tahu pengirim, sementara Reject secara aktif mengirim pesan penolakan sehingga koneksi ditolak lebih cepat dan tidak menggantung.
Pertanyaan: Kapan sebaiknya menggunakan rule Limit? Jawaban: Rule Limit paling cocok digunakan pada port yang sering menjadi target brute force, seperti SSH, karena secara otomatis membatasi jumlah percobaan koneksi dari satu IP dalam rentang waktu tertentu.
Pertanyaan: Apakah UFW bekerja di atas iptables atau nftables? Jawaban: Keduanya bisa, tergantung konfigurasi sistem. Secara historis UFW menggunakan iptables, namun pada sistem yang lebih baru backend-nya dapat berjalan melalui nftables, baik lewat lapisan kompatibilitas iptables-nft maupun secara native, tanpa mengubah cara penggunaan perintah UFW.
Pertanyaan: Apa yang harus dilakukan sebelum mengaktifkan UFW pada server remote? Jawaban: Pastikan port SSH atau port administratif yang digunakan untuk mengakses server sudah di-allow terlebih dahulu, agar tidak terkunci dari server setelah UFW diaktifkan.
Sudah lebih paham cara kerja UFW sekarang? Yuk, tinggalkan komentar tentang pengalaman Anda mengonfigurasi firewall di server Ubuntu —
atau tanyakan hal yang masih membingungkan! Bagikan artikel ini ke rekan tim atau komunitas sysadmin Anda, dan terus ikuti konten-konten terbaru seputar Linux, networking, dan keamanan infrastruktur IT di blog ini.