PENERAPAN FIREWALL PADA LINUX UBUNTU SERVER 24.04
Diperbarui: 4 November 2025
1. Kenapa Kita Harus Menerapkan Firewall Pada Server Kita?
Penerapan firewall pada server adalah garis pertahanan pertama dan paling fundamental dalam keamanan siber. Tanpa firewall, server akan terbuka lebar terhadap ancaman dari seluruh internet, terutama jika server menggunakan IP Publik, sangat rentan terhadap berbagai serangan siber di jaringan internet dunia.
2. Penerapan Firewall menggunakan UFW (Uncomplicated Firewall)
Instalasi UFW (jika belum terinstall), Meskipun UFW biasanya sudah terinstal secara default di Ubuntu, kalian dapat memastikannya atau menginstalnya dengan perintah ini.
sudo apt update
sudo apt install ufw
Memeriksa status UFW, Sebelum membuat perubahan, selalu periksa status UFW. Pada instalasi baru, statusnya kemungkinan besar adalah Status: inactive (Tidak aktif).
sudo ufw status verbose
Secara default, dianjurkan untuk memblokir semua koneksi masuk (incoming) dan mengizinkan semua koneksi keluar (outgoing) untuk server, karena server harus dapat berinisiatif terhubung ke luar (misalnya untuk memperbarui).
Perhatian: Jangan aktifkan UFW sebelum Anda mengizinkan koneksi SSH Anda!
sudo ufw default deny incoming
sudo ufw default allow outgoing
Dikarenakan pada rule sebelumnya akan melakukan drop semua koneksi dari luar, maka protokol remote seperti ssh juga ikut terblokir, dampaknya kita tidak bisa mengakses atau me-remote servernya, Untuk memastikan kita tetap bisa melakukan akses ke server kita, kita harus mengizinkan koneksi SSH (biasanya di Port 22) sebelum mengaktifkan UFW.
sudo ufw allow ssh
# ATAU
sudo ufw allow 22/tcp
Jika server kita juga menjalankan layanan lain (misalnya web server), kita juga harus mengizinkan port-port yang digunakan tersebut:
- HTTP (Port 80): sudo ufw allow http atau sudo ufw allow 80/tcp
- HTTPS (Port 443): sudo ufw allow https atau sudo ufw allow 443/tcp
Setelah semua aturan penting (terutama SSH) telah ditambahkan, kita dapat mengaktifkan firewall. Kita akan diminta untuk konfirmasi, ketik y dan tekan Enter.
sudo ufw enable
Perintah UFW lainnya.
| Perintah | Fungsi | Contoh |
|---|---|---|
sudo ufw allow [port/protokol] |
Mengizinkan koneksi ke port/protokol tertentu. | sudo ufw allow 80/tcp |
sudo ufw deny [port/protokol] |
Memblokir koneksi ke port/protokol tertentu. | sudo ufw deny 21/tcp |
sudo ufw allow from [IP] |
Mengizinkan koneksi dari IP spesifik. | sudo ufw allow from 192.168.1.100 |
sudo ufw allow from [IP] to any port [port]
|
Mengizinkan koneksi dari IP spesifik ke port tertentu. |
sudo ufw allow from 203.0.113.4 to any port 22
|
sudo ufw delete [aturan] |
Menghapus aturan (gunakan nomor dari
ufw status numbered).
|
sudo ufw delete 3 |
sudo ufw disable |
Menonaktifkan firewall. | |
sudo ufw reset |
Mereset UFW (menghapus semua aturan dan menonaktifkan). Gunakan dengan sangat hati-hati! |
3. Penerapan Firewall IPTables
IPTables adalah utilitas baris perintah yang telah lama menjadi standar untuk mengkonfigurasi firewall Netfilter. UFW sendiri hanyalah antarmuka yang menyederhanakan perintah IPTables.
Sebelum memahami IPTables secara dalam, kita harus tau tiga konsep intinya: Tabel (Tables), Rantai (Chains), dan Aturan (Rules).
| Komponen | Deskripsi | Fungsi |
|---|---|---|
| Tabel (Tables) | Kumpulan Rantai yang dikelompokkan berdasarkan tujuan spesifik. | Memisahkan aturan firewall, NAT, dan modifikasi paket. |
| Rantai (Chains) | Urutan aturan yang harus dilewati oleh paket. | Menentukan titik di mana paket dievaluasi dalam alur jaringan (flow). |
| Aturan (Rules) | Perintah tunggal yang menentukan kriteria pencocokan dan tindakan. | Mencocokkan paket (berdasarkan IP, port, protokol, dll.) dan memutuskan nasibnya. |
Tabel filter, Ini adalah tabel yang paling sering kita gunakan untuk membangun firewall.
| Chains | Kapan Digunakan | Tujuan |
|---|---|---|
| INPUT | Paket yang masuk ke server. | Melindungi layanan server (SSH, Web Server, Database). |
| OUTPUT | Paket yang keluar dari server | Mengontrol koneksi keluar (misalnya, server Anda menghubungi API eksternal). |
| FORWARD | Paket yang melewati server. | Mengontrol lalu lintas antar jaringan yang dilewati server. |
Tabel NAT (Network Address Translation), Digunakan untuk memodifikasi alamat IP atau port dalam header paket.
| Chains | Kapan Digunakan | Contoh |
|---|---|---|
| PREROUTING | Mengubah alamat tujuan sebelum keputusan routing. | Port Forwarding (misalnya, mengubah permintaan Port 80 dari internet menjadi Port 8080 di server lokal). |
| POSTROUTING | Mengubah alamat sumber setelah keputusan routing. | Masquerading (Berbagi internet/NAT). |
Targets, Setiap aturan yang cocok dengan paket harus mengambil tindakan. Keputusan utama yang sering digunakan adalah:
| Targets | Tindakan | Efek |
|---|---|---|
| ACCEPT | Izinkan paket. | Paket akan diizinkan untuk melalui server. (contohnya: ping akan replay) |
| DROP | Abaikan paket tanpa memberi tahu pengirim. | Koneksi akan timeout (penyerang tidak tahu server ada). |
| REJECT | Abaikan paket, tetapi kirim pemberitahuan (ICMP/TCP RST) ke pengirim. | Koneksi akan ditolak seketika (lebih informatif bagi pengirim). |
Sintaks perintah dasar dari IPTables
iptables [-t table] [-A/I/D chain] [kriteria] [-j target]
Pilihan opsi yang sering digunakan di sintaks iptables.
| Opsi | Keterangan |
|---|---|
| -t table | Menentukan tabel (default adalah filter). |
| -A chain | Menambahkan aturan ke akhir rantai. |
| -I chain | Menambahkan aturan ke awal rantai (sisip). |
| -D chain | Menghapus aturan. |
| -p protocol | Mencocokkan protokol (tcp, udp, icmp, all). |
| --dport N | Mencocokkan port tujuan (hanya dengan -p tcp atau -p udp). |
| -s IP/CIDR | Mencocokkan alamat sumber (Source). |
| -d IP/CIDR | Mencocokkan alamat tujuan (Destination). |
| -j target | Tentukan tindakan/keputusan. |
| -P | Menentukan tindakan akhir untuk semua paket yang tidak cocok dengan aturan manapun dalam rantai. |
Contoh konfigurasi awal (firewall dasar iptables). Atur kebijakan default, Kita ingin memblokir semua lalu lintas masuk dan forwarding secara default, dan hanya mengizinkan yang kita definisikan.
# Set default policy untuk DROP (blokir semua)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
# Izinkan semua lalu lintas keluar (default aman untuk server, agar server tetap bisa mengakses internet)
sudo iptables -P OUTPUT ACCEPT
Izinkan loopback (lokal), Lalu lintas loopback (lalu lintas internal) penting agar layanan server dapat berkomunikasi satu sama lain.
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
Izinkan Koneksi yang Ada dan Terkait (Stateful), Ini adalah aturan penting. Setelah koneksi diizinkan (misalnya, kita login SSH), semua paket yang merupakan bagian dari sesi yang sama diizinkan tanpa diperiksa lagi.
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Buka layanan penting, contohnya Port SSH (Port 22) dan HTTP/HTTPS (Web).
# Izinkan SSH (hanya TCP)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Izinkan HTTP (Port 80) dan HTTPS (Port 443)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Agar aturan tidak hilang setelah reboot (jika Anda menggunakan iptables-persistent) save dengen menggunakan perintah berikut:
sudo netfilter-persistent save
Untuk melihat apa saja aturan yang sudah kita buat, bisa menggunakan perintah berikut.
# Tampilkan aturan dalam format tabel (default filter)
sudo iptables -L -v -n