Halo, Kawan Belajar! Bayangkan VPS kamu seperti sebuah kantor yang punya banyak pintu. Tanpa firewall, semua pintu itu terbuka lebar untuk siapa saja, termasuk tamu yang tidak diundang. Di sinilah firewalld hadir sebagai penjaga pintu yang cerdas. Kamu punya kendali penuh untuk menentukan siapa yang boleh masuk, siapa yang harus ditolak, dan kapan aturan tersebut berlaku.
Di panduan ini, kita akan melakukan implementasi firewalld dari awal hingga konfigurasi siap produksi. Panduan ini mencakup berbagai distribusi Linux populer seperti Ubuntu, Debian, CentOS, AlmaLinux, Rocky Linux, RHEL, hingga Fedora.
Apa Itu firewalld?
firewalld adalah firewall management tool berbasis zona yang menjadi standar di banyak distribusi Linux modern. Tool ini bekerja di atas iptables atau nftables (tergantung versi OS), tapi menyediakan antarmuka yang jauh lebih ramah lewat perintah firewall-cmd.
Keunggulan utama firewalld dibanding mengelola iptables secara langsung adalah kemampuannya membedakan aturan sementara dan permanen. Aturan sementara langsung aktif tapi hilang saat server restart, sedangkan aturan permanen akan terus tersimpan dan baru aktif setelah di-reload. Fitur ini memungkinkan kamu untuk menguji aturan terlebih dahulu tanpa takut terkunci permanen dari server jika terjadi kesalahan konfigurasi.
UFW (Uncomplicated Firewall) dan firewalld sama-sama memudahkan pengelolaan firewall di Linux. UFW lebih simpel dan cocok untuk kebutuhan dasar, sementara firewalld lebih fleksibel berkat konsep zona dan dukungan rich rules yang kuat. Untuk VPS produksi dengan kebutuhan konfigurasi yang kompleks, firewalld adalah pilihan yang lebih scalable.
Mengenal Zona di firewalld
Konsep kunci dalam firewalld adalah zona. Setiap zona mendefinisikan tingkat kepercayaan terhadap koneksi yang masuk. Antarmuka jaringan pada server kamu (misalnya eth0) akan diasosiasikan dengan tepat satu zona.
| Zona | Tingkat Kepercayaan | Deskripsi |
|---|---|---|
| drop | Paling ketat | Semua paket masuk dibuang tanpa respons apapun. |
| block | Sangat ketat | Koneksi masuk ditolak dengan pesan ICMP. |
| public | Sedang (default) | Hanya service yang diizinkan yang bisa masuk. Zona ini cocok untuk VPS. |
| external | Sedang | Untuk konfigurasi NAT/masquerading, cocok sebagai router. |
| dmz | Sedang | Untuk server di area DMZ dengan akses yang dibatasi ketat. |
| work | Cukup percaya | Untuk jaringan kantor yang relatif dipercaya. |
| home | Percaya | Untuk jaringan rumah. |
| internal | Percaya | Mirip home, untuk jaringan internal organisasi. |
| trusted | Penuh | Semua koneksi diterima tanpa syarat. |
Untuk keperluan VPS publik, zona public adalah pilihan yang paling tepat dan secara otomatis sudah menjadi default.
Langkah 1: Instalasi firewalld
Cara instalasi firewalld berbeda tergantung pada distribusi Linux yang kamu gunakan. Silakan pilih metode yang sesuai dengan sistem operasi VPS kamu.
OS Ubuntu dan Debian
Pada Ubuntu dan Debian, firewalld tidak terinstall secara default. Kamu bisa menginstalnya lewat apt:
sudo apt update
sudo apt install firewalld -y
Ada dua hal krusial sebelum kamu lanjut. Pertama, jika saat ini UFW sedang aktif, pastikan kamu mematikannya terlebih dahulu dengan perintah
sudo ufw disable agar tidak memicu konflik aturan. Selain itu, pada Ubuntu/Debian, firewalld tidak otomatis mengizinkan SSH saat pertama kali diaktifkan. Pastikan kamu menambahkan izin SSH sebelum mengaktifkan firewalld (dibahas di Langkah 4).
OS AlmaLinux, Rocky Linux, dan RHEL
Pada keluarga distro RHEL, firewalld biasanya sudah terinstall. Jika belum, kamu bisa menginstalnya lewat dnf:
sudo dnf install firewalld -y
Khusus untuk CentOS 7 yang masih menggunakan yum:
sudo yum install firewalld -y
Pada AlmaLinux, Rocky Linux, dan RHEL 7 ke atas, firewalld biasanya sudah terinstall dan service SSH sudah diizinkan di zona
public secara default. Kamu bisa langsung lanjut ke Langkah 2 untuk memastikan statusnya.
OS Fedora
Fedora sudah menyertakan firewalld secara default sebagai bagian dari instalasi sistem. Kamu tidak perlu melakukan instalasi tambahan dan bisa langsung berlanjut ke Langkah 2.
Langkah 2: Aktifkan dan Jalankan firewalld
Langkah selanjutnya adalah mengaktifkan firewalld agar berjalan otomatis setiap kali server mengalami restart. Kamu bisa mengaktifkan sekaligus menjalankannya sekarang dengan perintah ini:
sudo systemctl enable --now firewalld
Perintah --now ini menggabungkan dua aksi sekaligus dalam satu baris, yaitu enable (aktif saat proses boot) dan start (jalankan seketika).
Jika kamu di Ubuntu atau Debian, jangan jalankan perintah di atas sekarang. Lanjutkan dulu ke Langkah 4 untuk menambahkan izin SSH, baru kembali ke sini untuk mengaktifkan firewalld. Mengaktifkan firewalld sebelum SSH diizinkan bisa memutus koneksi kamu ke server dan untuk pembenahannya perlu dilakukan via VNC Console.
Langkah 3: Cek Status firewalld
Selalu pastikan bahwa service telah berjalan dengan semestinya. Verifikasi status firewalld menggunakan perintah berikut:
sudo firewall-cmd --state
Jika outputnya menampilkan running, berarti sistem sudah bekerja. Jika yang muncul adalah not running, coba jalankan ulang servicenya menggunakan sudo systemctl start firewalld.
Kamu juga perlu mengecek zona apa yang sedang aktif beserta antarmuka jaringan yang menanganinya:
sudo firewall-cmd --get-active-zones
Langkah 4: Izinkan Port dan Service
Bagian ini adalah inti dari manajemen firewalld, yaitu menentukan akses mana yang diizinkan masuk ke server kamu. Terdapat dua metode yang bisa digunakan: berdasarkan nama service (lebih mudah dibaca) atau berdasarkan nomor port (sangat fleksibel). Silakan gunakan metode yang paling sesuai dengan kondisimu.
Mengizinkan Berdasarkan Nama Service
Sistem firewalld sudah mengenali ratusan profil service umum. Kamu bisa melihat daftar lengkapnya dengan perintah:
sudo firewall-cmd --get-services
Untuk mengizinkan service tertentu seperti akses remote (SSH) atau web server (HTTP dan HTTPS), gunakan deretan perintah berikut:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
Mengizinkan Berdasarkan Nomor Port
Jika aplikasi yang kamu jalankan menggunakan port kustom non-standar, misalnya Node.js yang berjalan di port 3000. Kamu bisa membuka port tersebut dengan cara ini:
sudo firewall-cmd --add-port=3000/tcp --permanent
Format penulisan port selalu menggunakan pola NOMOR/protokol. Protokol yang umum digunakan dalam dunia jaringan adalah tcp atau udp.
Sebelum mengaktifkan firewalld di Langkah 2, pastikan SSH sudah ditambahkan:
sudo firewall-cmd --add-service=ssh --permanentSetelah itu, baru aktifkan firewalld dengan kembali ke Langkah 2. Jika SSH kamu berjalan di port custom (bukan 22), ganti dengan:
sudo firewall-cmd --add-port=PORT_KAMU/tcp --permanent
Langkah 5: Blokir Port atau Alamat IP
Secara default, semua port yang belum diizinkan akan otomatis diblokir oleh firewalld di zona public. Namun, ada situasi di mana kamu perlu mencabut izin akses yang sebelumnya pernah dibuat, atau bahkan memblokir total akses dari sebuah alamat IP.
Mencabut Izin Port atau Service
sudo firewall-cmd --remove-service=http --permanent
sudo firewall-cmd --remove-port=3000/tcp --permanent
Memblokir Alamat IP Tertentu
Apabila ada IP mencurigakan yang terus mencoba mengakses server, kamu bisa memblokirnya secara spesifik menggunakan fitur rich rule:
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.1" reject' --permanent
Ganti 192.168.0.1 dengan IP target yang ingin kamu blokir.
Jika kamu ingin memblokir satu blok IP sekaligus, misalnya seluruh subnet
192.168.0.0/24, gunakan notasi CIDR di rich rule:sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" reject' --permanentPerbedaan
reject vs drop: reject mengirim pesan penolakan ke pengirim (lebih sopan, lebih cepat bagi client), sedangkan drop membuang paket tanpa respons (lebih tersembunyi, tapi client menunggu timeout).
Langkah 6: Reload dan Verifikasi Konfigurasi
Semua aturan yang ditambahkan menggunakan flag --permanent belum akan diterapkan secara nyata sampai kamu melakukan reload service-nya. Jalankan perintah ini:
sudo firewall-cmd --reload
Setelah itu, verifikasi secara menyeluruh semua aturan yang aktif pada zona utama server:
sudo firewall-cmd --list-all
Dari hasil output ini, kamu bisa melihat ringkasan penting pada bagian:
- services: Daftar service bawaan yang diberi akses masuk.
- ports: Deretan port kustom tambahan yang diizinkan.
- rich rules: Kondisi atau aturan spesifik, termasuk daftar alamat IP yang diblokir.
Jika kamu ingin cek aturan semua zona sekaligus (bukan hanya zona default), gunakan:
sudo firewall-cmd --list-all-zones
Troubleshooting
firewalld tidak bisa diaktifkan
Jika perintah systemctl start firewalld gagal, periksa apakah ada firewall lain yang membuat konflik:
sudo systemctl status ufw
sudo systemctl status iptables
Jika salah satunya aktif, pastikan kamu menonaktifkannya terlebih dahulu sebelum menjalankan firewalld:
sudo systemctl disable --now ufw
Koneksi SSH terputus setelah mengaktifkan firewalld
Ini adalah tanda bahwa port SSH belum diizinkan sebelum firewalld diaktifkan. Jika kamu memiliki akses via console VPS (bukan SSH), login via konsol tersebut lalu ketikkan:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
Apabila fitur konsol tersebut tidak tersedia, segera hubungi tim support provider VPS kamu untuk membuka akses.
Aturan baru tidak aktif setelah ditambahkan
Pastikan kamu menjalankan --reload setelah setiap perubahan dengan flag --permanent. Tanpa reload, aturan permanen tidak langsung aktif di sesi berjalan.
sudo firewall-cmd --reload
Memastikan port tertentu sudah diizinkan atau belum
Gunakan perintah query untuk pengecekan cepat tanpa perlu membaca list yang panjang:
sudo firewall-cmd --query-port=80/tcp
sudo firewall-cmd --query-service=ssh
Output yes menandakan port sudah diizinkan, sedangkan respons no berarti belum.
Kesimpulan
Sejauh ini kamu sudah berhasil mengimplementasikan firewalld di VPS Linux dari nol, Kawan Belajar! Mulai dari instalasi di berbagai distro, memahami konsep zona, mengizinkan dan memblokir port, hingga memverifikasi konfigurasi final.
Langkah selanjutnya yang bisa kamu eksplorasi adalah mengatur zone policy untuk komunikasi antar-zona, atau mengintegrasikan firewalld dengan fail2ban agar IP yang mencoba brute force SSH otomatis diblokir secara dinamis. Selamat mencoba, dan semoga server kamu makin aman!