Cara Konfigurasi Firewalld di Rocky Linux 9
Firewall merupakan garis pertahanan pertama bagi server produksi Anda, namun manajemen aturan firewall seringkali rumit dan sulit dikelola. Firewalld menyederhanakan proses ini dengan menggunakan konsep zone dinamis, memungkinkan Anda mengatur tingkat keamanan yang berbeda tanpa harus me-restart layanan firewall.
Prasyaratโ
Sebelum memulai konfigurasi, pastikan Anda memiliki:
- Akses ke server Rocky Linux 9.
- Hak akses root atau sudo.
- Layanan Firewalld terinstal dan berjalan (biasanya disertakan secara default pada Rocky Linux).
Lingkungan Pengujianโ
Panduan ini diverifikasi menggunakan lingkungan berikut:
- Sistem Operasi: Rocky Linux 9.3
- Kernel: 5.14.0
- Versi Firewalld: 1.3.4
Cara Instalasi dan Mengaktifkan Firewalldโ
Meskipun secara default Firewalld disertakan pada instalasi Rocky Linux 9, jika server Anda menggunakan versi minimal, Anda perlu menginstalnya secara manual.
Verifikasi instalasi dan aktifkan layanan Firewalld agar berjalan secara otomatis saat sistem boot:
sudo dnf install firewalld -y
sudo systemctl enable --now firewalld
Verifikasi bahwa layanan telah berjalan:
sudo firewall-cmd --state
Output yang diharapkan:
running
Memahami Konsep Zone di Firewalldโ
Firewalld menggunakan sistem zone untuk menentukan tingkat kepercayaan jaringan pada setiap koneksi. Beberapa zone bawaan yang umum digunakan antara lain:
- drop: Membuang semua paket yang masuk secara diam-diam.
- block: Menolak semua koneksi masuk dan mengirimkan balasan
host-prohibited. - public: Zone default untuk antarmuka publik. Hanya menerima koneksi yang diizinkan secara eksplisit.
- trusted: Mengizinkan semua lalu lintas masuk.
Untuk melihat zone default yang aktif saat ini:
sudo firewall-cmd --get-default-zone
Untuk melihat semua aturan, port, dan layanan yang diizinkan pada zone yang sedang aktif:
sudo firewall-cmd --list-all
Menambahkan Aturan Layanan dan Port (Public Zone)โ
Sebagai contoh, jika Anda membangun web server menggunakan Nusa Cloud VPS, Anda harus membuka akses HTTP dan HTTPS agar website dapat diakses secara publik.
1. Menambahkan Layananโ
โ ๏ธ Peringatan: Hindari menutup port 22 atau layanan SSH tanpa membuat aturan pengganti. Kehilangan akses SSH akan membuat Anda terkunci dari server.
Buka akses HTTP dan HTTPS secara permanen:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
2. Menambahkan Port Spesifikโ
Jika Anda memiliki layanan kustom yang berjalan pada port 8080, tambahkan izin untuk port tersebut:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
3. Menerapkan Konfigurasiโ
Semua aturan yang ditambahkan menggunakan argumen --permanent memerlukan proses reload agar konfigurasi baru mulai diterapkan:
sudo firewall-cmd --reload
Menggunakan Rich Rules untuk Kontrol Aksesโ
Rich rules memberikan kemampuan untuk membuat konfigurasi yang sangat mendetail, seperti mengizinkan atau memblokir akses berdasarkan alamat IP pengirim.
1. Blokir Koneksi dari IP Tertentuโ
Untuk memblokir lalu lintas dari jaringan bermasalah (misalnya 203.0.113.50):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" drop' --permanent
sudo firewall-cmd --reload
2. Membatasi Akses SSHโ
Sebagai tindakan pengamanan ekstra, Anda bisa membatasi koneksi SSH agar hanya diterima dari alamat IP spesifik (contoh 198.51.100.20):
โ ๏ธ Peringatan: Menghapus layanan SSH dari public zone akan menolak seluruh koneksi masuk SSH. Terapkan rich rule terlebih dahulu sebelum Anda menghapus aturan SSH default.
# Mengizinkan akses SSH hanya untuk IP yang ditentukan
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.20" service name="ssh" accept' --permanent
# Menghapus layanan SSH publik secara global
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
# Menerapkan pengaturan baru
sudo firewall-cmd --reload
Konfigurasi Port Forwardingโ
Firewalld mampu meneruskan lalu lintas jaringan masuk dari sebuah port ke port lainnya. Ini sering dimanfaatkan untuk mengarahkan port 80 ke server aplikasi yang berjalan pada port non-privilege seperti 8080.
Tahap pertama adalah mengaktifkan fungsionalitas masquerading:
sudo firewall-cmd --zone=public --add-masquerade --permanent
Langkah berikutnya, tambahkan aturan forwarding trafik dari port 80 menuju port 8080:
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload
Menjalankan Panic Mode (Darurat)โ
Saat sistem menghadapi ancaman ekstrem, Firewalld menyertakan mode panik yang akan langsung menolak semua koneksi jaringan, termasuk koneksi yang sudah terbuka.
Aktifkan mode perlindungan darurat:
sudo firewall-cmd --panic-on
Kembalikan ke status normal:
sudo firewall-cmd --panic-off
Troubleshootingโ
Gejala Umumโ
- Layanan Eksternal Terputus: Website berjalan lancar saat dicek menggunakan
curl localhost, tetapi tidak dapat diakses melalui internet (timeout). - Koneksi Remote Gagal: Koneksi SSH langsung tertolak setelah memodifikasi layanan pada zone public.
- Pesan Warning ALREADY_ENABLED: Terjadi ketika mengeksekusi perintah untuk memasukkan layanan atau port tertentu.
Kemungkinan Penyebabโ
- Port atau layanan baru telah dimasukkan tanpa opsi
--permanent, atau firewall belum menerima perintah reload. - Kebijakan layanan SSH terhapus dari zone tanpa mendefinisikan rich rule sebagai pengganti.
- Konfigurasi yang Anda coba instruksikan sudah tercatat dalam aturan operasional Firewalld.
Diagnostikโ
Lakukan inspeksi terhadap daftar aturan yang berjalan di sistem saat ini:
sudo firewall-cmd --list-all
Inspeksi juga konfigurasi rich rule Anda untuk menemukan adanya kesalahan penulisan alamat IP:
sudo firewall-cmd --list-rich-rules
Perbaikanโ
-
Layanan Belum Diaktifkan: Pastikan kembali aturan didefinisikan secara permanen dan firewall di-reload:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload -
Hilangnya Akses SSH: Jika server Anda menggunakan lingkungan virtualisasi seperti Nusa Cloud VPS, akses melalui konsol darurat dari Client Area untuk mengembalikan aturan:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload -
Mereset Konfigurasi Rusak: Apabila terdapat kesalahan sintaks mendalam yang membuat pengaturan tidak bisa dipulihkan dengan mudah, timpa konfigurasi public zone menggunakan versi bawaan instalasi murni:
sudo cp /usr/lib/firewalld/zones/public.xml /etc/firewalld/zones/
sudo firewall-cmd --reload
Pengujian Fungsionalโ
Lakukan validasi bahwa port baru telah dibuka dan siap menerima request dengan metode di bawah ini. Pengujian ini tidak cukup hanya mengandalkan pengecekan lokal melainkan harus dilakukan dari terminal atau perangkat klien eksternal.
- Instal Netcat jika belum tersedia (paket
nmap-ncatpada Rocky Linux):
sudo dnf install -y nmap-ncat
- Hubungi spesifik port eksternal menggunakan Netcat (
nc):
# Ubah alamat IP sesuai dengan alamat server Anda
nc -zv 203.0.113.100 80
- Buktikan berjalannya sistem pemblokiran (blocking) alamat IP:
Buka koneksi
curldari server spesifik yang alamat IP-nya Anda targetkan pada konfigurasi drop rule:
curl -I http://203.0.113.100
Permintaan jaringan tersebut seharusnya mendapatkan respon gagal berupa kegagalan koneksi batas waktu.
Verifikasiโ
Setelah seluruh proses adaptasi berjalan sukses, luangkan waktu untuk memastikan struktur firewall akhir beroperasi sesuai dengan instruksi yang diharapkan.
- Amati kebijakan firewall saat ini untuk melihat kompilasi hasil pengaturan:
sudo firewall-cmd --list-all
Output yang diharapkan:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client http https
ports: 8080/tcp
protocols:
forward: yes
masquerade: yes
forward-ports:
port=80:proto=tcp:toport=8080:toaddr=
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="198.51.100.20" service name="ssh" accept
rule family="ipv4" source address="203.0.113.50" drop
- Tinjau bahwa status eksekusi layanan dikonfigurasi berjalan secara default (otomatis) semenjak OS selesai booting.
sudo systemctl is-enabled firewalld
Output ini bernilai enabled tanpa adanya log tambahan.
