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 garis 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 Dedicated Server dari AlexHost, panduan ini akan membantu Anda mengamankan 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 di Debian dan Ubuntu juga. Tidak seperti pendekatan iptables yang lebih lama — di mana setiap perubahan aturan memerlukan flush dan reload seluruh ruleset — Firewalld menerapkan perubahan secara dinamis saat runtime tanpa mengganggu koneksi aktif.
Keuntungan Utama Firewalld
- Arsitektur berbasis zona — tetapkan tingkat kepercayaan yang berbeda ke antarmuka jaringan atau rentang IP yang berbeda
- Pembaruan aturan dinamis — terapkan perubahan tanpa restart firewall atau drop 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 spesifik, protokol, dan tindakan
- 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 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 sendiri dari server jarak jauh adalah kesalahan umum dan dapat dihindari.
Langkah 1: Menginstal Firewalld
Firewalld disertakan dalam repositori default sebagian besar distribusi Linux utama. Gunakan package manager yang sesuai untuk sistem Anda.
Di CentOS / RHEL / Rocky Linux / AlmaLinux
sudo yum install firewalld -yAtau, di versi yang lebih baru menggunakan DNF:
sudo dnf install firewalld -yDi Fedora
sudo dnf install firewalld -yDi 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 arsitektur Firewalld. Sebuah zona mendefinisikan tingkat kepercayaan untuk koneksi jaringan atau antarmuka. Setiap zona berisi set aturannya sendiri yang menentukan lalu lintas apa 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 keluar dengan masquerading NAT |
dmz | Menengah | Server yang dapat diakses dari luar tetapi terisolasi secara internal |
work | Menengah-Tinggi | Jaringan kerja dengan kepercayaan moderat |
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-zoneDaftar Semua Zona yang Tersedia
sudo firewall-cmd --get-zonesLihat Zona Aktif Saat Ini dan Antarmuka Mereka
sudo firewall-cmd --get-active-zonesContoh output:
public
interfaces: eth0Langkah 4: Mengubah Zona Default
Contoh 1 — Menetapkan Zona Default ke public (Direkomendasikan untuk VPS/Dedicated Servers)
Untuk sebagian besar server yang menghadap internet, public adalah zona default yang sesuai. Ini menerapkan tingkat kepercayaan konservatif dan hanya memungkinkan lalu lintas yang secara eksplisit diizinkan:
sudo firewall-cmd --set-default-zone=publicVerifikasi perubahan:
sudo firewall-cmd --get-default-zoneOutput yang diharapkan:
publicContoh 2 — Menetapkan Zona Default ke home
Jika server Anda beroperasi di jaringan pribadi yang dipercaya (seperti lab rumah atau lingkungan pengembangan internal), zona home memungkinkan komunikasi yang lebih permisif antara host yang dipercaya:
sudo firewall-cmd --set-default-zone=homeVerifikasi:
sudo firewall-cmd --get-default-zoneOutput yang diharapkan:
homeContoh 3 — Menetapkan Zona Default ke work
Untuk server di jaringan korporat atau kerja di mana kepercayaan moderat 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 maksud daripada nomor port mentah.
Daftar Semua Layanan yang Telah Ditentukan Sebelumnya
sudo firewall-cmd --get-servicesIzinkan Layanan di Zona
Untuk memungkinkan lalu lintas HTTP (port 80/TCP) di zona public secara permanen:
sudo firewall-cmd --zone=public --add-service=http --permanentUntuk memungkinkan lalu lintas HTTPS (port 443/TCP):
sudo firewall-cmd --zone=public --add-service=https --permanentUntuk memungkinkan 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
Flag --permanent menulis aturan ke konfigurasi persisten tetapi tidak menerapkannya segera ke firewall yang berjalan. Selalu muat ulang setelah membuat perubahan permanen:
sudo firewall-cmd --reloadVerifikasi Layanan di Zona
sudo firewall-cmd --zone=public --list-servicesContoh 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 spesifik secara langsung.
Buka Port Spesifik
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 Spesifik
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-portsLangkah 7: Konfigurasi Lanjutan dengan Aturan Kaya
Aturan kaya memberi Anda kontrol granular dan bersyarat atas lalu lintas — jauh melampaui apa yang memungkinkan aturan layanan atau port sederhana. Mereka mendukung penyaringan berdasarkan IP sumber, IP tujuan, protokol, port, dan tindakan (terima, tolak, jatuhkan, log).
Sintaks Aturan Kaya
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 Spesifik 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 itu 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 Spesifik
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 Spesifik
Untuk memungkinkan lalu lintas HTTP hanya dari subnet internal yang dipercaya (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 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 Spesifik dari IP Spesifik
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 Aturan Kaya di Zona
sudo firewall-cmd --zone=public --list-rich-rulesHapus Aturan Kaya
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
Secara teratur meninjau konfigurasi firewall Anda sangat penting untuk mempertahankan postur keamanan yang kuat. Firewalld menyediakan beberapa perintah untuk memeriksa status aturan Anda 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 Spesifik
sudo firewall-cmd --zone=dmz --list-allPeriksa Apakah Layanan Spesifik Diizinkan
sudo firewall-cmd --zone=public --query-service=httpPeriksa Apakah Port Spesifik Terbuka
sudo firewall-cmd --zone=public --query-port=8080/tcpLangkah 9: Aturan Runtime vs. Permanen — Memahami Perbedaannya
Firewalld beroperasi dengan dua lapisan konfigurasi yang berbeda:
| Lapisan | Flag | Persistensi | Kasus Penggunaan |
|---|---|---|---|
| Runtime | *(tidak ada flag)* | Hilang saat reload/reboot | Menguji aturan secara sementara |
| Permanen | --permanent | Bertahan reload dan reboot | Konfigurasi produksi |
Alur Kerja Best Practice
- Uji aturan pada runtime terlebih dahulu (tanpa
--permanent) untuk memverifikasi bahwa itu berfungsi seperti yang diharapkan - Tambahkan aturan secara permanen setelah dikonfirmasi
- Muat ulang Firewalld untuk menyinkronkan konfigurasi runtime dan permanen
# 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 aturan permanen dan muat ulang segera dalam satu alur kerja:
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 di Dedicated Servers dengan NIC publik dan pribadi), Anda dapat menetapkan setiap antarmuka ke zona berbeda dengan tingkat kepercayaan berbeda.
Tetapkan Antarmuka ke Zona
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reloadUbah Zona Antarmuka
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadHapus 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 --reloadTeruskan Port (misalnya, Teruskan 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 --reloadTeruskan Lalu Lintas 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 server web, server database, atau server aplikasi di infrastruktur AlexHost, berikut adalah konfigurasi Firewalld baseline yang direkomendasikan:
Konfigurasi Server Web 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 Sertifikat SSL yang valid untuk memastikan semua lalu lintas web dienkripsi end-to-end. AlexHost menawarkan sertifikat SSL untuk semua lingkungan hosting.
Konfigurasi Server Database 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 --reloadPemecahan Masalah Masalah Firewalld Umum
Masalah 1: Firewalld Gagal Dimulai
Periksa konflik dengan alat firewall lainnya:
sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalld