Server tanpa firewall adalah target empuk. Episode ini membahas nftables sebagai firewall modern, iptables untuk kompatibilitas, UFW sebagai frontend yang mudah, fail2ban untuk brute-force, dan strategi membatasi port yang terekspos ke publik.

Setelah server LEMP kalian berjalan, inilah saatnya menguncinya. Episode 13 membahas firewall di Artix: nftables sebagai penerus modern iptables, iptables untuk kompatibilitas, UFW sebagai frontend yang ramah, dan fail2ban untuk memblokir percobaan brute-force.
Di Artix, firewall juga dijalankan sebagai service init. Perbedaan penting: nftables dan iptables bisa bentrok jika diaktifkan bersamaan. Kita akan memilih satu pendekatan, menulis aturannya, dan memastikan aturan itu bertahan setelah reboot.
nftables menggantikan iptables dengan bahasa yang lebih seragam. Konfigurasi didefinisikan dalam tables, yang berisi chains, yang berisi rules. Aturan ditulis di /etc/nftables.conf dan dimuat oleh service nftables.
Buka port SSH dan web dengan konfigurasi berikut:
table inet filter {
chain input {
type filter hook input priority filter;
policy drop;
ct state established,related accept
iif "lo" accept
tcp dport { 22, 80, 443 } accept
}
}policy drop berarti semua traffic masuk ditolak kecuali yang dikecualikan. Baris ct state established,related accept mengizinkan respons dari koneksi yang sudah dibuat.
Setelah menulis aturan, tes lalu aktifkan service:
sudo nft -c -f /etc/nftables.conf
sudo rc-update add nftables default
sudo rc-service nftables start
sudo nft list rulesetnft -c -f /etc/nftables.conf memeriksa sintaks tanpa menerapkan. Baris terakhir menampilkan seluruh aturan yang aktif — kebiasaan verifikasi yang sebaiknya selalu dilakukan.
Beberapa skrip lama dan aplikasi masih mengasumsikan iptables. nftables di kernel modern menyediakan iptables-nft, backend kompatibilitas yang menjalankan perintah iptables di atas mesin nftables. Artinya kalian bisa memakai sintaks lama tanpa dua stack terpisah.
Contoh setara untuk membuka port:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -P INPUT DROPPerintah iptables -A INPUT menambahkan aturan ke chain INPUT. Kebijakan default diubah ke DROP sebagai baris terakhir.
Aturan iptables tidak bertahan reboot secara otomatis. Simpan dengan iptables-save dan muat saat boot:
sudo iptables-save > /etc/iptables/iptables.rules
sudo rc-update add iptables defaultService iptables di OpenRC memuat file /etc/iptables/iptables.rules saat start. Pastikan file tersimpan sebelum reboot, atau aturan hilang.
Uncomplicated Firewall menyederhanakan manajemen lewat perintah intuitif. Di belakang layar, UFW memakai iptables. Ini pilihan tepat untuk kalian yang ingin aturan firewall tanpa menulis banyak baris.
Aktifkan dan buka port dengan UFW:
sudo pacman -S ufw ufw-openrc
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo rc-service ufw statusufw default deny incoming menetapkan kebijakan menolak semua lalu lintas masuk. Perintah ufw allow membuka port yang kalian butuhkan satu per satu.
Verifikasi status dan aturan yang aktif:
sudo ufw status verboseOutput ufw status verbose menampilkan kebijakan default dan daftar port yang terbuka. Jika diinginkan, cek log penolakan di /var/log/ufw.log untuk melihat aktivitas mencurigakan.
Fail2ban memantau log dan memblokir IP yang melakukan percobaan login berulang. Install beserta service-nya:
sudo pacman -S fail2ban fail2ban-openrcAktifkan jail dasar untuk SSH dengan membuat file /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 1hSetelah menulis file, restart fail2ban dan cek status:
sudo rc-service fail2ban restart
sudo fail2ban-client status sshdOutput fail2ban-client status sshd menampilkan jumlah IP yang diblokir. Perhatikan bahwa fail2ban memakai nftables atau iptables sebagai backend bannya.
Aturan pertama firewall: hanya buka port yang benar-benar dibutuhkan. Untuk server LEMP dari episode 12, daftar minimalnya adalah 22 untuk SSH, 80 dan 443 untuk web. Semua port lain ditolak default.
Untuk database yang hanya dipakai lokal, jangan buka port 3306 ke publik sama sekali. Untuk layanan admin, pertimbangkan membatasi IP asal:
sudo ufw allow from 203.0.113.10 to any port 8080 proto tcpPerintah ufw allow from 203.0.113.10 hanya mengizinkan IP kantor mengakses port admin. Ini menyusutkan permukaan serangan secara drastis.
Setelah semua diatur, verifikasi dari perspektif luar. Kalau nmap belum terinstall, tambahkan dan pindai mesin kalian:
sudo pacman -S nmap
nmap -p- 203.0.113.50Output nmap -p- 203.0.113.50 menampilkan semua port terbuka di mesin target. Bandingkan dengan daftar yang seharusnya terbuka — jika ada yang mencurigakan, periksa service yang menjalankannya.
Episode 13 mengunci server kalian: nftables untuk firewall modern, iptables untuk kompatibilitas, UFW sebagai frontend, fail2ban untuk memblokir brute-force, dan strategi membatasi port hanya yang dibutuhkan.
Inti yang harus dibawa pulang:
/etc/nftables.conf.iptables-save agar tahan reboot.Di episode 14 selanjutnya kita akan membahas security dan hardening — policy sudo/doas, SSH hardening dengan key-only, verifikasi firewall, update rutin, serta audit dengan lynis dan rkhunter.