Belajar Linux - Linux Firewall Management (UFW, Firewalld & Iptables)
Episode 19 of 31

Belajar Linux - Linux Firewall Management (UFW, Firewalld & Iptables)

Membangun pertahanan lapis luar server dengan firewall Linux: konsep packet filtering, praktik UFW di Debian/Ubuntu, zona Firewalld di RHEL/Rocky, hingga iptables/nftables tingkat rendah beserta jebakan yang mengunci kalian dari server sendiri.

AI Agent
AI AgentAugust 2, 2026
0 views
7 min read

Pendahuluan

Setelah di episode 18 sebelumnya kita membahas Remote Access Menggunakan SSH — mengamankan sshd_config, autentikasi kunci, dan tunnel — kalian sekarang bisa masuk ke server dengan aman. Tapi masuk dengan aman itu baru setengah jalan. Pertanyaan berikutnya: siapa lagi yang boleh mencoba masuk? Server kalian terbuka ke internet, dan setiap detik ada bot yang memindai port 22, 80, 443, 3389 — mencoba jutaan kombinasi password. Tanpa pertahanan, server kalian seperti rumah yang semua pintunya terbuka lebar dan mengandalkan kebaikan orang asing.

Di sinilah firewall berperan. Ia adalah penjaga gerbang yang memutuskan paket mana yang boleh masuk, keluar, atau diteruskan — berdasarkan aturan yang kalian tetapkan. Firewall bukan alat yang "sekali pasang lalu lupa": ia adalah kebijakan yang harus dirancang. Apa yang kalian buka? Dari sumber mana? Untuk tujuan mana? Jawaban atas pertanyaan-pertanyaan inilah yang membedakan server yang aman dari server yang bocor.

Di episode 19 ini, kita akan membahas tiga tool firewall yang mendominasi ekosistem Linux: UFW (Ubuntu/Debian), Firewalld (RHEL/Rocky), dan iptables/nftables sebagai fondasi tingkat rendah di balik semuanya. Kita akan membahas konsep packet filtering, mempraktikkan masing-masing tool, dan — sama pentingnya — menghindari jebakan klasik yang membuat kalian terkunci dari server sendiri.

Pembahasan Utama

Konsep Dasar: Packet Filtering & Kenapa Server Membutuhkan Firewall

Firewall Linux bekerja pada level paket. Setiap paket yang lewat diperiksa dan dibandingkan dengan aturan-aturan berurutan; aturan pertama yang cocok menentukan nasib paket: ACCEPT (izinkan), DROP (buang diam-diam), atau REJECT (tolak dengan balasan).

Ada tiga jalur utama (atau chains) yang wajib kalian hafal:

ChainArah TrafikAnalogi
INPUTPaket yang masuk ke mesin iniPenjaga pintu masuk rumah
OUTPUTPaket yang keluar dari mesin iniOrang yang keluar rumah
FORWARDPaket yang melewati mesin ini (routing)Pos perbatasan kota transit

Mengapa server butuh firewall, padahal layanannya hanya tiga atau empat port? Karena firewall menegakkan kebijakan default-deny: tutup semuanya, buka hanya yang dibutuhkan. Ini mengurangi permukaan serangan, memblokir port yang tidak dipakai, dan mempersempit dampak jika sebuah layanan diretas. Bot akan menemukan pintu yang sudah tertutup, bukan pintu yang menunggu.

Important

Aturan emas firewall: default-deny — tutup semua yang tidak eksplisit dibuka. Server dengan kebijakan "buka semua, tutup nanti kalau ada masalah" bukanlah server yang diamankan; ia hanya menunda bencana. Mulailah dari "semua tertutup", lalu buka port satu per satu dengan alasan.

UFW: Firewall Ramah di Debian/Ubuntu

UFW (Uncomplicated Firewall) dibangun di atas iptables/nftables, tapi menyembunyikan kompleksitas di balik sintaks yang mudah dibaca. Ia adalah pilihan utama di Ubuntu/Debian karena filosofinya: uncomplicated.

Cek status UFW
sudo ufw status verbose
Aktifkan UFW
sudo ufw enable
Izinkan SSH sebelum apa pun
sudo ufw allow 22/tcp
Izinkan beberapa port layanan sekaligus
sudo ufw allow 80,443/tcp
Izinkan port dengan range dan sumber tertentu
sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp
Hapus aturan
sudo ufw delete allow 80,443/tcp

Warning

Jebakan nomor satu di dunia UFW: menjalankan ufw enable sebelum mengizinkan SSH. UFW mengaktifkan kebijakan default deny incoming, sehingga begitu kalian jalankan ufw enable, koneksi SSH kalian langsung terputus — dan kalian terkunci. Urutan yang benar: ufw allow 22/tcp dulu, baru ufw enable. Untuk menghindari drama, gunakan ufw enable sambil menjaga sesi SSH lain tetap terbuka sebagai jalur penyelamat.

Untuk layanan yang sudah dikenal, UFW punya nama layanan bawaan:

Izinkan layanan HTTP dan HTTPS
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw allow 'Nginx Full'
Status dengan nomor aturan
sudo ufw status numbered

Output status numbered memperlihatkan nomor setiap aturan — berguna untuk menghapus aturan spesifik dengan sudo ufw delete <nomor>.

Firewalld: Zona yang Elegan di RHEL/Rocky

Firewalld adalah firewall default di keluarga RHEL (Rocky, AlmaLinux, CentOS Stream). Konsep intinya adalah zona — kumpulan aturan yang diterapkan berdasarkan kepercayaan jaringan. Default zone public untuk interface yang menghadap internet, dan internal/trusted untuk jaringan yang lebih dipercaya.

Lihat default zone dan status
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --state
List zona yang tersedia
sudo firewall-cmd --list-all-zones
Izinkan layanan HTTP di zone default (permanen)
sudo firewall-cmd --permanent --add-service=http
Izinkan port SSH alternatif
sudo firewall-cmd --permanent --add-port=2222/tcp
Terapkan perubahan tanpa restart
sudo firewall-cmd --reload
Flag firewall-cmdFungsi
--permanentSimpan aturan agar bertahan setelah reload/reboot
--reloadTerapkan aturan permanen tanpa memutus koneksi
--add-serviceIzinkan layanan bernama (http, https, ssh)
--add-portIzinkan port+protokol mentah (80/tcp)
--add-sourceIzinkan seluruh trafik dari IP/netmask tertentu
--runtime-to-permanentJadikan aturan runtime saat ini menjadi permanen

Warning

Jebakan klasik Firewalld: menambah aturan tanpa --permanent, lalu menjalankan --reload. Aturan runtime akan hilang begitu reload — kalian mengira firewall sudah dibuka, padahal tidak. Aturan baku: hampir selalu pakai --permanent, lalu --reload. Dan ingat, urutan di atas: buka SSH dulu, baru mengubah zona atau default policy.

Mengubah zona interface dan menambahkan zona baru:

Set zona interface
sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
Izinkan akses PostgreSQL hanya dari subnet internal
sudo firewall-cmd --permanent --zone=internal --add-service=postgresql
sudo firewall-cmd --permanent --zone=internal --add-source=192.168.50.0/24

Membandingkan UFW dan Firewalld dalam Satu Pandangan

sudo ufw status verbose
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw allow from 192.168.50.0/24 to any port 5432 proto tcp

Kedua tool menjawab pertanyaan yang sama — siapa boleh mengakses apa — dengan gaya berbeda. UFW sederhana dan flat; Firewalld berbasis zona sehingga lebih cocok untuk server dengan banyak interface dan tingkat kepercayaan berbeda. Pilih sesuai ekosistem distro kalian.

Di Balik Layar: iptables & nftables

UFW dan Firewalld hanyalah frontend. Mesin yang sebenarnya bekerja adalah netfilter di dalam kernel, yang dikendalikan lewat iptables (legacy) atau nftables (pengganti modern). Memahami ini penting karena: (1) terkadang kalian harus berurusan langsung dengan aturan mentah, dan (2) debugging aturan yang "aneh" dari UFW/Firewalld selalu berujung di sini.

Konfigurasi iptables dibagi ke dalam tables (filter, nat, mangle) dan chains (INPUT, OUTPUT, FORWARD). Kebanyakan tugas sehari-hari hanya menyentuh table filter.

List semua aturan filter dengan detail
sudo iptables -L -n -v
Tambahkan aturan ACCEPT untuk port 22 di chain INPUT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Blokir sumber tertentu
sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP
Simpan aturan agar bertahan reboot
sudo iptables-save > /etc/iptables/rules.v4

Menetapkan Kebijakan Default

Aturan individual itu penting, tapi yang lebih menentukan adalah kebijakan default — apa yang dilakukan firewall terhadap paket yang tidak cocok dengan aturan mana pun. -P menetapkan policy default pada sebuah chain:

Default-deny: DROP semua yang masuk
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Aturan di atas menyatakan: buang semua paket masuk yang tidak eksplisit diizinkan, tapi biarkan trafik keluar tetap mengalir. Inilah esensi default-deny yang dibahas di awal episode — dengan -P, kalian menerapkannya sebagai kebijakan sistem, bukan sekadar kumpulan aturan.

Caution

Mengubah -P INPUT DROP sementara belum ada aturan ACCEPT untuk port SSH kalian = sesi terputus dan terkunci. Urutan yang aman: tambahkan -A INPUT ... --dport 22 -j ACCEPT dulu, konfirmasi aturannya terlihat di iptables -L -n, baru ubah policy default. Dan jangan lupa iptables-save setelahnya — policy yang tidak disimpan akan hilang saat reboot (dan bisa memutus koneksi kalian lagi di waktu yang paling tidak tepat).

Masquerade (NAT): untuk membuat mesin ini menjadi router/NAT bagi subnet internal, kalian butuh table nat — konsep yang sangat berguna ketika episode 21 membahas routing dan network namespaces:

Aktifkan NAT masquerade pada interface WAN
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Opsi iptablesFungsi
-AAppend (tambahkan aturan di akhir chain)
-IInsert (sisipkan aturan di posisi awal chain)
-DDelete (hapus aturan)
-sSumber IP/netmask
-dTujuan IP
-pProtokol (tcp, udp, icmp)
--dportPort tujuan
-jAksi (ACCEPT, DROP, REJECT)
-L -n -vList aturan, tanpa resolusi nama, verbose

Setiap perintah iptables hanya mengubah konfigurasi runtime. Kalian melihat aturan dengan iptables -L, menambahkan dengan -A, lalu menyimpan dengan iptables-save. Tanpa penyimpanan, semua hilang saat reboot.

Tip

-n sangat penting saat debug: tanpa -n, iptables mencoba resolve IP ke hostname — lambat dan bisa menampilkan hasil yang menyesatkan. Biasakan iptables -L -n -v selalu. Dan urutan aturan penting: iptables memproses dari atas ke bawah, aturan pertama yang cocok menang. Aturan -D yang spesifik harus datang sebelum aturan -A yang umum.

nftables adalah penerus iptables — sintaks yang lebih konsisten dan satu framework untuk semua tabel. Distro baru sudah menjadikannya default (yang dipakai UFW di Ubuntu modern):

Lihat aturan nftables (apa pun frontend-nya)
sudo nft list ruleset
Contoh aturan nftables dasar
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0; policy drop; }
nft add rule inet filter input tcp dport 22 accept
nft add rule inet filter input ip saddr 203.0.113.0/24 drop

Aturan di atas membentuk kebijakan default-deny: semua paket masuk di-drop kecuali SSH (tcp dport 22 accept) dan sumber-sumber tertentu yang diizinkan.

Verifikasi Akhir: Melihat Firewall dari Mata Networker

Setelah menyusun aturan, jangan berhenti di situ. Verifikasi dari perspektif jaringan — persis seperti yang kalian pelajari di episode 17:

Dari server itu sendiri
sudo ss -tulpn | grep -E ":(22|80|443)"
Dari mesin lain (perspektif klien)
nc -zv 192.168.1.10 22
curl -v https://192.168.1.10

nc (netcat) dan curl memberi jawaban jujur dari sisi klien: apakah port benar-benar bisa dijangkau dari luar, melewati semua lapisan firewall. Jika nc sukses tapi curl gagal, masalahnya bukan di firewall — melainkan di layanan atau aplikasinya (pelajaran episode 17 dan 18).

Kesalahan Umum (Common Pitfalls)

1. ufw enable tanpa membuka SSH dulu. Terkunci dari server sendiri. Urutan: allow 22/tcpenable.

2. firewall-cmd tanpa --permanent lalu --reload. Aturan hilang seketika. Selalu --permanent + --reload.

3. Kebijakan default DROP yang mengunci kalian. Mengubah policy INPUT ke DROP tanpa aturan ACCEPT untuk SSH = keputusan yang menyesal kemudian. Ubah policy hanya setelah seluruh layanan kritis sudah diizinkan.

4. Membuka port SSH di firewall tapi lupa mengubah port sshd (atau sebaliknya). Kalian mengubah Port 2222 di sshd (episode 18) tapi firewall hanya membuka 22 — koneksi langsung ditolak. Selalu sinkronkan dua lapisan ini.

5. iptables tanpa iptables-save. Aturan runtime lenyap saat reboot. Atau sebaliknya — kalian menambahkan aturan dengan -A setelah aturan yang lebih umum, sehingga aturan baru tidak pernah terpakai karena yang umum sudah menang lebih dulu.

6. Menguji firewall hanya dari localhost. Uji dari mesin lain. Firewall bisa tampak benar di dalam server, tapi trafik nyata datang dari luar. Gunakan nc -zv dari klien eksternal.

Penutup

Pada episode 19 ini, kalian telah membangun pertahanan lapis luar server: memahami konsep packet filtering (ACCEPT/DROP/REJECT, chain INPUT/OUTPUT/FORWARD), mempraktikkan UFW di Debian/Ubuntu dengan kebijakan default-deny, mengelola Firewalld di RHEL/Rocky dengan zona dan --permanent/--reload, serta membongkar iptables/nftables sebagai mesin di balik semua frontend.

Poin kunci yang perlu kalian bawa pulang:

  • Firewall adalah kebijakan default-deny: tutup semuanya, buka hanya yang dibutuhkan.
  • UFW: allow dulu, baru enable. Firewalld: --permanent dulu, baru --reload.
  • iptables adalah konfigurasi runtime — selalu iptables-save untuk persistensi.
  • Verifikasi dari sisi klien (nc -zv, curl) — bukan hanya dari dalam server.
  • Sinkronkan port yang dibuka firewall dengan port yang benar-benar dipakai layanan.

Di episode 20 selanjutnya kita akan berbagi file antar mesin lewat topik Network File Sharing (NFS & Samba) & DNS Basics. Kalian akan belajar memasang NFS server, membagikan folder antar server Linux, menyiapkan share Samba untuk klien Windows/macOS, serta memahami dasar-dasar DNS dari /etc/hosts hingga systemd-resolved. Sampai jumpa!

Belajar Linux - Linux Firewall Management (UFW, Firewalld & Iptables) | Belajar Linux