Cara Mengonfigurasi Firewall dengan Firewalld di Linux (Panduan Lengkap)
Mengamankan server Linux Anda terhadap akses tidak sah dan lalu lintas berbahaya bukanlah pilihan — ini adalah tanggung jawab fundamental bagi setiap administrator sistem. Baik Anda menjalankan proyek pribadi, aplikasi bisnis, atau server web produksi, firewall yang dikonfigurasi dengan benar adalah pertahanan pertama dan paling kritis Anda. Firewalld adalah salah satu alat manajemen firewall paling powerful dan fleksibel yang tersedia di Linux, menawarkan manajemen aturan dinamis, kontrol lalu lintas berbasis zona, dan dukungan aturan kaya — semuanya tanpa memerlukan restart layanan penuh ketika perubahan diterapkan.
Panduan komprehensif ini memandu Anda melalui semua yang perlu Anda ketahui: menginstal Firewalld, memahami zona, mengelola layanan dan port, menulis aturan kaya, dan memantau firewall Anda secara real time. Jika Anda hosting di VPS atau Server Dedicated dari AlexHost, panduan ini akan membantu Anda mengunci lingkungan Anda dan mempertahankan postur keamanan yang kuat dan adaptif.
Apa Itu Firewalld dan Mengapa Anda Harus Menggunakannya?
Firewalld adalah daemon manajemen firewall dinamis yang tersedia di sebagian besar distribusi Linux utama, termasuk CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, dan semakin banyak juga di Debian dan Ubuntu. Berbeda dengan pendekatan iptables yang lebih lama — di mana setiap perubahan aturan memerlukan pembersihan dan pemuatan ulang seluruh ruleset — Firewalld menerapkan perubahan secara dinamis saat runtime tanpa mengganggu koneksi aktif.
Keuntungan Utama Firewalld
- Arsitektur berbasis zona — tetapkan tingkat kepercayaan yang berbeda untuk antarmuka jaringan atau rentang IP yang berbeda
- Pembaruan aturan dinamis — terapkan perubahan tanpa memulai ulang firewall atau menghapus koneksi yang ada
- Abstraksi layanan — kelola lalu lintas berdasarkan nama layanan (misalnya,
http,ssh) daripada nomor port mentah - Aturan kaya — tulis aturan kompleks dan bersyarat yang menargetkan IP, protokol, dan tindakan tertentu
- Integrasi D-Bus — memungkinkan aplikasi dan layanan lain berinteraksi dengan firewall secara terprogram
- Dukungan IPv4 dan IPv6 — kelola kedua keluarga protokol dari satu antarmuka
Prasyarat
Sebelum melanjutkan, pastikan Anda memiliki:
- Server Linux yang menjalankan CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian, atau Ubuntu
- Akses root atau
sudoke server - Pemahaman dasar tentang perintah terminal Linux
- Sesi SSH aktif (biarkan tetap terbuka sepanjang waktu — Anda akan memodifikasi aturan firewall)
> Peringatan Kritis: Selalu pastikan bahwa SSH (port 22 secara default) secara eksplisit diizinkan dalam aturan firewall Anda sebelum mengaktifkan Firewalld. Mengunci diri Anda keluar dari server jarak jauh adalah kesalahan yang umum dan dapat dihindari.
Langkah 1: Menginstal Firewalld
Firewalld disertakan dalam repositori default sebagian besar distribusi Linux utama. Gunakan pengelola paket yang sesuai untuk sistem Anda.
Pada CentOS / RHEL / Rocky Linux / AlmaLinux
sudo yum install firewalld -yAtau, pada versi yang lebih baru menggunakan DNF:
sudo dnf install firewalld -yPada Fedora
sudo dnf install firewalld -y
Pada Debian / Ubuntu
Meskipun Firewalld paling sering dikaitkan dengan sistem berbasis RHEL, ini sepenuhnya didukung pada distribusi berbasis Debian:
sudo apt update
sudo apt install firewalld -y> Catatan untuk pengguna Ubuntu/Debian: Jika ufw saat ini aktif di sistem Anda, nonaktifkan sebelum mengaktifkan Firewalld untuk menghindari konflik:
> “`bash
> sudo ufw disable
> “`
Langkah 2: Memulai dan Mengaktifkan Firewalld
Setelah instalasi, mulai layanan Firewalld dan konfigurasikan untuk diluncurkan secara otomatis saat boot sistem:
sudo systemctl start firewalld
sudo systemctl enable firewalldVerifikasi bahwa layanan berjalan dengan benar:
sudo systemctl status firewalldAnda harus melihat output serupa dengan:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since ...Jika status menunjukkan active (running), Firewalld beroperasi dan siap dikonfigurasi.
Langkah 3: Memahami Zona Firewalld
Model berbasis zona adalah fondasi dari arsitektur Firewalld. Sebuah zona mendefinisikan tingkat kepercayaan untuk koneksi jaringan atau antarmuka. Setiap zona berisi set aturannya sendiri yang menentukan lalu lintas mana yang diizinkan atau ditolak.

Zona Firewalld Bawaan
| Zona | Tingkat Kepercayaan | Kasus Penggunaan Umum |
|---|---|---|
drop | Terendah | Semua koneksi masuk dijatuhkan tanpa balasan |
block | Sangat Rendah | Koneksi masuk ditolak dengan pesan ICMP |
public | Rendah | Zona default untuk jaringan publik yang tidak dipercaya |
external | Rendah | Untuk antarmuka yang menghadap ke luar dengan penyamaran NAT |
dmz | Sedang | Server yang dapat diakses dari luar tetapi terisolasi secara internal |
work | Sedang-Tinggi | Jaringan kerja dengan kepercayaan sedang |
home | Tinggi | Jaringan rumah di mana host lain dipercaya |
internal | Tinggi | Jaringan internal, mirip dengan rumah |
trusted | Tertinggi | Semua koneksi diterima |
Periksa Zona Default Saat Ini
sudo firewall-cmd --get-default-zone
Daftar Semua Zona yang Tersedia
sudo firewall-cmd --get-zones
Lihat Zona Aktif Saat Ini dan Antarmukanya
sudo firewall-cmd --get-active-zonesContoh output:
public
interfaces: eth0
Langkah 4: Mengubah Zona Default
Contoh 1 — Mengatur Zona Default ke public (Direkomendasikan untuk VPS/Server Dedicated)
Untuk sebagian besar server yang menghadap internet, public adalah zona default yang sesuai. Ini menerapkan tingkat kepercayaan yang konservatif dan hanya memungkinkan lalu lintas yang secara eksplisit diizinkan:
sudo firewall-cmd --set-default-zone=publicVerifikasi perubahannya:
sudo firewall-cmd --get-default-zoneOutput yang diharapkan:
publicContoh 2 — Mengatur Zona Default ke home
Jika server Anda beroperasi di jaringan pribadi yang terpercaya (seperti lab rumah atau lingkungan pengembangan internal), zona home memungkinkan komunikasi yang lebih permisif antara host yang terpercaya:
sudo firewall-cmd --set-default-zone=homeVerifikasi:
sudo firewall-cmd --get-default-zoneOutput yang diharapkan:
homeContoh 3 — Mengatur Zona Default ke work
Untuk server di jaringan perusahaan atau kerja di mana kepercayaan sedang sesuai:
sudo firewall-cmd --set-default-zone=workVerifikasi:
sudo firewall-cmd --get-default-zoneOutput yang diharapkan:
workLangkah 5: Mengelola Layanan dengan Firewalld
Firewalld mencakup perpustakaan definisi layanan yang telah ditentukan sebelumnya yang memetakan nama layanan ke port dan protokol yang sesuai. Ini membuat jauh lebih mudah untuk mengelola aturan berdasarkan tujuan daripada nomor port mentah.
Daftar Semua Layanan yang Telah Ditentukan Sebelumnya
sudo firewall-cmd --get-servicesIzinkan Layanan di Zona
Untuk mengizinkan lalu lintas HTTP (port 80/TCP) di zona public secara permanen:
sudo firewall-cmd --zone=public --add-service=http --permanentUntuk mengizinkan lalu lintas HTTPS (port 443/TCP):
sudo firewall-cmd --zone=public --add-service=https --permanentUntuk mengizinkan SSH (port 22/TCP) — selalu pastikan ini diizinkan sebelum membuat perubahan lain:
sudo firewall-cmd --zone=public --add-service=ssh --permanentTerapkan Perubahan dengan Memuat Ulang Firewalld
Bendera --permanent menulis aturan ke konfigurasi persisten tetapi tidak menerapkannya segera ke firewall yang sedang berjalan. Selalu muat ulang setelah membuat perubahan permanen:
sudo firewall-cmd --reloadVerifikasi Layanan di Zona
sudo firewall-cmd --zone=public --list-services
Contoh output:
dhcpv6-client http https sshHapus Layanan dari Zona
Untuk menghapus HTTPS dari zona public:
sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reloadLangkah 6: Mengelola Port Secara Langsung
Dalam kasus di mana layanan tidak memiliki definisi Firewalld yang telah ditentukan sebelumnya, Anda dapat membuka atau menutup port tertentu secara langsung.
Buka Port Tertentu
Untuk membuka port 8080 melalui TCP di zona public:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reloadUntuk membuka port UDP (misalnya, port 53 untuk DNS):
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reloadUntuk membuka rentang port (misalnya, 6000–6100 TCP):
sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reloadTutup Port Tertentu
Untuk menutup port 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadDaftar Semua Port Terbuka di Zona
sudo firewall-cmd --zone=public --list-portsStep 7: Advanced Configuration with Rich Rules
Rich rules memberikan Anda kontrol granular dan bersyarat atas lalu lintas — jauh melampaui apa yang diizinkan oleh aturan layanan atau port sederhana. Mereka mendukung penyaringan berdasarkan IP sumber, IP tujuan, protokol, port, dan tindakan (accept, reject, drop, log).
Sintaks Rich Rule
rule [family="<ipv4|ipv6>"]
[source address="<IP/CIDR>"]
[destination address="<IP/CIDR>"]
[service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
[log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
[accept|reject|drop]Contoh 1 — Izinkan SSH dari Alamat IP Tertentu Saja
Ini adalah salah satu konfigurasi keamanan paling penting untuk server jarak jauh apa pun. Jika Anda mengelola server Anda dari alamat IP tetap, batasi akses SSH ke IP tersebut secara eksklusif:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reloadContoh 2 — Blokir Semua Lalu Lintas dari Alamat IP Tertentu
Untuk sepenuhnya memblokir alamat IP yang menghasilkan lalu lintas berbahaya:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadContoh 3 — Izinkan HTTP dari Subnet Tertentu
Untuk mengizinkan lalu lintas HTTP hanya dari subnet internal terpercaya (misalnya 192.168.1.0/24):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reloadContoh 4 — Batasi Laju Koneksi SSH untuk Mencegah Brute Force
Catat dan batasi upaya koneksi SSH untuk mengurangi paparan serangan brute-force:
sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reloadContoh 5 — Izinkan Port Tertentu dari IP Tertentu
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reloadDaftar Semua Rich Rules di Zona
sudo firewall-cmd --zone=public --list-rich-rulesHapus Rich Rule
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadLangkah 8: Memantau dan Mengaudit Firewall Anda
Meninjau konfigurasi firewall secara teratur sangat penting untuk mempertahankan postur keamanan yang kuat. Firewalld menyediakan beberapa perintah untuk memeriksa status aturan saat ini.
Lihat Konfigurasi Lengkap untuk Zona Default
sudo firewall-cmd --list-allContoh output:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="203.0.113.50" service name="ssh" acceptLihat Konfigurasi untuk Semua Zona
sudo firewall-cmd --list-all-zonesLihat Konfigurasi untuk Zona Tertentu
sudo firewall-cmd --zone=dmz --list-allPeriksa Apakah Layanan Tertentu Diizinkan
sudo firewall-cmd --zone=public --query-service=httpPeriksa Apakah Port Tertentu Terbuka
sudo firewall-cmd --zone=public --query-port=8080/tcpLangkah 9: Runtime vs. Permanent Rules — Memahami Perbedaannya
Firewalld beroperasi dengan dua lapisan konfigurasi yang berbeda:
| Lapisan | Flag | Persistensi | Use Case |
|---|---|---|---|
| Runtime | *(no flag)* | Hilang saat reload/reboot | Menguji rules secara sementara |
| Permanent | --permanent | Bertahan setelah reload dan reboot | Konfigurasi produksi |
Best Practice Workflow
- Uji rule pada runtime terlebih dahulu (tanpa
--permanent) untuk memverifikasi bahwa rule berfungsi seperti yang diharapkan - Tambahkan rule secara permanen setelah dikonfirmasi
- Reload Firewalld untuk menyinkronkan konfigurasi runtime dan permanent
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http
# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
# Step 3: Reload to sync
sudo firewall-cmd --reloadAlternatifnya, terapkan rule permanent dan reload segera dalam satu workflow:
sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reloadLangkah 10: Menetapkan Antarmuka Jaringan ke Zona
Jika server Anda memiliki beberapa antarmuka jaringan (umum pada Dedicated Servers dengan NIC publik dan privat), Anda dapat menetapkan setiap antarmuka ke zona berbeda dengan tingkat kepercayaan berbeda.
Menetapkan Antarmuka ke Zona
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reloadMengubah Zona Antarmuka
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadMenghapus Antarmuka dari Zona
sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reloadLangkah 11: Mengaktifkan IP Masquerading dan Port Forwarding
Untuk server yang bertindak sebagai gateway atau menjalankan NAT (Network Address Translation), Firewalld mendukung masquerading dan port forwarding secara native.
Aktifkan Masquerading (NAT)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reloadForward Port (misalnya, Forward Port Eksternal 80 ke Port Internal 8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reloadForward Traffic ke Host Berbeda
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reloadKonfigurasi Keamanan Praktis untuk Server AlexHost
Jika Anda menjalankan web server, database server, atau application server pada infrastruktur AlexHost, berikut adalah konfigurasi Firewalld baseline yang direkomendasikan:
Konfigurasi Web Server Baseline
# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent
# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# Reload to apply
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-all> Pro Tip: Pasangkan konfigurasi firewall Anda dengan SSL Certificate yang valid untuk memastikan semua traffic web dienkripsi end-to-end. AlexHost menawarkan SSL certificates untuk semua lingkungan hosting.
Konfigurasi Database Server Baseline (MySQL/MariaDB)
# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null
sudo firewall-cmd --reloadKonfigurasi Server cPanel/WHM Baseline
Jika Anda menggunakan VPS dengan cPanel, Anda perlu membuka port yang diperlukan oleh cPanel dan WHM:
# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent # Webmail HTTPS
# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent
sudo firewall-cmd --reloadTroubleshooting Common Firewalld Issues
Issue 1: Firewalld Fails to Start
Check for conflicts with other firewall tools:
sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalldIssue 2: Rules Not Persisting After Reboot
Ensure you used the --permanent flag and reloaded:
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reloadThe --runtime-to-permanent command saves all current runtime rules to the permanent configuration.
Issue 3: Locked Out of SSH
If you accidentally blocked SSH access, you will need to access the server via console (available through AlexHost's VPS control panel) and run:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reloadIssue 4: Checking Firewalld Logs
sudo journalctl -u firewalld -fOr check the system log for firewall-related messages:
sudo grep -i firewall /var/log/messagesLembar Referensi Cepat Firewalld
| Tugas | Perintah |
|---|---|
| Periksa status | sudo systemctl status firewalld |
| Mulai Firewalld | sudo systemctl start firewalld |
| Hentikan Firewalld | sudo systemctl stop firewalld |
| Aktifkan saat boot | sudo systemctl enable firewalld |
| Dapatkan zona default | sudo firewall-cmd --get-default-zone |
| Daftar semua zona | sudo firewall-cmd --get-zones |
| Daftar zona aktif | sudo firewall-cmd --get-active-zones |
| Atur zona default | sudo firewall-cmd --set-default-zone=public |
| Tambahkan layanan | sudo firewall-cmd --zone=public --add-service=http --permanent |
| Hapus layanan | sudo firewall-cmd --zone=public --remove-service=http --permanent |
| Buka port | sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent |
| Tutup port | sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent |
| Daftar layanan | sudo firewall-cmd --zone=public --list-services |
| Daftar port | sudo firewall-cmd --zone=public --list-ports |
| Daftar semua aturan | sudo firewall-cmd --list-all |
| Tambahkan aturan rich | sudo firewall-cmd --zone=public --add-rich-rule='...' --permanent |
| Simpan aturan runtime | sudo firewall-cmd --runtime-to-permanent |
| Muat ulang Firewalld | sudo firewall-cmd --reload |
| Mode panik (blokir semua) | sudo firewall-cmd --panic-on |
| Nonaktifkan mode panik | sudo firewall-cmd --panic-off |
Kesimpulan
Firewalld adalah alat manajemen firewall yang luar biasa mampu dan fleksibel yang memberikan administrator sistem Linux kontrol yang presisi dan dinamis atas lalu lintas jaringan. Dengan menguasai zona, layanan, aturan port, dan aturan kaya, Anda dapat membangun arsitektur keamanan berlapis dan adaptif yang melindungi server Anda dari akses tidak sah, serangan brute-force, dan ancaman tingkat jaringan.
Prinsip-prinsip kunci untuk dibawa maju:
- Selalu izinkan SSH sebelum mengaktifkan firewall untuk menghindari mengunci diri sendiri
- Gunakan flag
--permanentuntuk semua aturan produksi, dan selalu diikuti dengan--reload - Batasi layanan sensitif (SSH, database, panel admin) ke alamat IP terpercaya tertentu menggunakan aturan kaya
- Tinjau aturan firewall Anda secara teratur — postur keamanan Anda harus berkembang seiring perubahan infrastruktur Anda
- Uji aturan saat runtime terlebih dahulu, kemudian buat permanen setelah diverifikasi
Baik Anda mengelola satu VPS atau armada Dedicated Servers, AlexHost menyediakan infrastruktur, performa, dan akses root penuh yang Anda butuhkan untuk menerapkan konfigurasi keamanan tingkat enterprise. Pasangkan setup Firewalld Anda dengan SSL Certificates untuk komunikasi terenkripsi dan jelajahi VPS Control Panels untuk manajemen server yang disederhanakan — semuanya tersedia di platform AlexHost yang terpercaya dan berkinerja tinggi.
untuk semua layanan hosting