Juli 22, 2026
Gemini_Generated_Image_u8akbhu8akbhu8ak
Pelajari cara setup firewall nftables di Debian Linux dari nol hingga siap produksi. Panduan lengkap, aman, dan anti-lockout untuk sysadmin.

Setiap server yang terhubung ke internet, cepat atau lambat, akan menjadi sasaran percobaan akses tidak sah. Port scanning otomatis, brute force SSH, hingga eksploitasi layanan yang lupa ditutup adalah pemandangan sehari-hari di log server produksi mana pun. Di sinilah firewall berperan sebagai garis pertahanan pertama.

Di ekosistem Debian modern, nftables telah resmi menggantikan iptables sebagai framework filtering paket default sejak Debian 10, dan sepenuhnya matang di Debian 11 dan 12 (Bookworm). Bagi seorang sysadmin atau pemilik VPS, memahami nftables bukan lagi opsional—ini adalah kebutuhan dasar untuk menjaga server tetap aman.

Artikel ini akan membawa Anda dari nol: memahami konsep dasar nftables, menulis ruleset yang solid, membuatnya persisten setelah reboot, hingga menghindari kesalahan fatal yang paling sering membuat sysadmin pemula terkunci dari server mereka sendiri.

Apa itu nftables dan Mengapa Menggantikan iptables?

nftables adalah framework filtering paket generasi baru yang sudah menjadi bagian dari kernel Linux sejak versi 3.13. Dibandingkan iptables, nftables menawarkan beberapa keunggulan konkret:

  • Satu tool untuk semua: nft menggantikan iptables, ip6tables, arptables, dan ebtables sekaligus.
  • Sintaks yang lebih ringkas dan mudah dibaca, mendekati bahasa deklaratif.
  • Update ruleset yang atomik, sehingga tidak ada celah waktu di mana firewall dalam kondisi “setengah jadi”.
  • Performa lebih baik pada ruleset besar karena menggunakan struktur data yang lebih efisien di kernel.

Analoginya seperti ini: jika iptables adalah serangkaian instruksi yang dieksekusi satu per satu secara berurutan seperti resep masakan lama yang ditulis ulang setiap kali ada revisi, nftables lebih seperti blueprint terstruktur yang bisa dimuat ulang secara utuh dan konsisten dalam sekali proses.

Konsep Dasar: Table, Chain, dan Rule

Sebelum menulis satu baris konfigurasi pun, pahami tiga konsep inti nftables:

  • Table: wadah utama yang mengelompokkan chain berdasarkan family (ip, ip6, inet, arp, bridge). Family inet adalah yang paling praktis karena menangani IPv4 dan IPv6 sekaligus dalam satu ruleset.
  • Chain: kumpulan rule yang terhubung ke titik tertentu dalam alur paket (hook), misalnya input (paket masuk ke server), output (paket keluar dari server), dan forward (paket yang diteruskan, relevan jika server berfungsi sebagai router).
  • Rule: instruksi konkret yang mencocokkan kondisi tertentu (misalnya port, alamat IP, protokol) dan menentukan aksi (accept, drop, reject, jump, dll).

Contoh kasus sederhana: bayangkan sebuah kantor dengan resepsionis (chain input). Setiap tamu (paket) yang datang dicek berdasarkan daftar aturan (rule) yang berurutan—apakah punya janji temu (koneksi yang sudah established), apakah namanya ada di daftar tamu (IP yang diizinkan), atau apakah harus ditolak di pintu masuk.

Instalasi dan Aktivasi nftables di Debian

Kabar baiknya, di Debian 11 dan 12, paket nftables sudah terpasang secara default, namun layanannya belum aktif otomatis. Berikut langkah instalasi dan aktivasinya:

sudo apt update
sudo apt install nftables -y
sudo systemctl enable nftables.service
sudo systemctl start nftables.service

Cek statusnya dengan:

sudo systemctl status nftables.service

Karena nftables.service bertipe oneshot, statusnya akan menunjukkan active (exited). Ini normal—layanan ini hanya bertugas memuat ruleset dari file konfigurasi saat boot, bukan berjalan terus-menerus sebagai daemon.

Struktur File Konfigurasi /etc/nftables.conf

Semua ruleset persisten disimpan di /etc/nftables.conf. File default bawaan Debian biasanya terlihat seperti ini:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority filter;
    }
    chain forward {
        type filter hook forward priority filter;
    }
    chain output {
        type filter hook output priority filter;
    }
}

Baris flush ruleset penting agar setiap kali file ini dimuat, ruleset lama dibersihkan terlebih dahulu sebelum ruleset baru diterapkan—mencegah duplikasi rule.

Materi Praktis: Membangun Ruleset Server Produksi

Berikut adalah contoh ruleset yang realistis untuk server produksi (VPS web server dengan SSH, HTTP, dan HTTPS):

#!/usr/sbin/nft -f

flush ruleset

table inet filter {

    set allowed_ssh_ports {
        type inet_service
        elements = { 22 }
    }

    chain input {
        type filter hook input priority filter; policy drop;

        # Izinkan loopback
        iif "lo" accept

        # Izinkan koneksi yang sudah terjalin/terkait
        ct state established,related accept

        # Tolak paket invalid
        ct state invalid drop

        # Izinkan ICMP dasar (ping, diagnostik)
        ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
        ip6 nexthdr icmpv6 accept

        # Izinkan SSH dengan rate limit anti brute force
        tcp dport @allowed_ssh_ports ct state new limit rate 10/minute accept

        # Izinkan HTTP dan HTTPS
        tcp dport { 80, 443 } accept

        # Log sebelum drop (opsional, untuk audit)
        log prefix "nft-drop: " limit rate 5/minute
    }

    chain forward {
        type filter hook forward priority filter; policy drop;
    }

    chain output {
        type filter hook output priority filter; policy accept;
    }
}

Penjelasan singkat setiap bagian:

  • policy drop pada chain input berarti semua trafik ditolak secara default, kecuali diizinkan secara eksplisit—ini adalah prinsip default deny yang menjadi standar keamanan.
  • ct state established,related accept memastikan balasan dari koneksi yang sudah dibuat server tetap bisa masuk.
  • Rate limiting pada SSH mengurangi risiko brute force tanpa perlu tool tambahan seperti fail2ban (meskipun fail2ban tetap direkomendasikan sebagai lapisan tambahan).
  • chain output menggunakan policy accept karena umumnya server perlu bebas melakukan koneksi keluar (update paket, API call, dll), meski pada environment dengan kebutuhan keamanan ekstra, ini juga bisa diperketat.

Tutorial Step-by-Step: Dari Nol hingga Aktif

Langkah 1 — Backup konfigurasi lama

sudo cp /etc/nftables.conf /etc/nftables.conf.bak

Selalu backup sebelum mengubah apa pun yang berhubungan dengan akses jaringan ke server.

Langkah 2 — Edit file konfigurasi

sudo nano /etc/nftables.conf

Salin ruleset di atas, sesuaikan port SSH jika Anda menggunakan port non-default.

Langkah 3 — Validasi sintaks sebelum diterapkan

sudo nft -c -f /etc/nftables.conf

Flag -c (check) memvalidasi sintaks tanpa benar-benar menerapkan rule. Langkah ini krusial untuk mencegah error saat reload.

Langkah 4 — Uji coba di sesi berjalan (tanpa reboot)

Sebelum menerapkan permanen, uji di jendela terminal terpisah agar jika terjadi lockout, sesi SSH awal Anda masih terbuka:

sudo nft -f /etc/nftables.conf

Langkah 5 — Uji akses dari sesi baru

Buka terminal/SSH client baru dan coba login. Jika berhasil, konfigurasi aman diterapkan.

Langkah 6 — Aktifkan agar persisten setelah reboot

sudo systemctl enable nftables.service
sudo systemctl restart nftables.service

Langkah 7 — Verifikasi ruleset aktif

sudo nft list ruleset

Kesalahan yang Sering Terjadi

1. Lockout SSH karena policy drop diterapkan sebelum rule SSH ditambahkan

  • Penyebab: mengetik flush ruleset lalu langsung set policy drop tanpa rule SSH aktif dalam sesi yang sama.
  • Dampak: kehilangan akses total ke server, terutama fatal di VPS tanpa akses console.
  • Solusi: selalu uji di sesi SSH yang tetap terbuka, atau gunakan console provider VPS sebagai jaring pengaman, dan pertimbangkan at job yang otomatis flush rule jika sesi terputus dalam waktu tertentu.

2. Lupa menyimpan rule ke /etc/nftables.conf

  • Penyebab: mengedit ruleset langsung via nft add rule tanpa menuliskannya ke file konfigurasi.
  • Dampak: rule hilang setelah reboot server.
  • Solusi: selalu simpan hasil akhir ke /etc/nftables.conf, atau gunakan nft list ruleset > /etc/nftables.conf setelah menambahkan flush ruleset di awal.

3. Tidak memvalidasi sintaks sebelum reload

  • Penyebab: langsung systemctl restart nftables tanpa cek dengan nft -c -f.
  • Dampak: layanan gagal start, firewall tidak aktif sama sekali (lebih buruk dari salah konfigurasi).
  • Solusi: jadikan nft -c -f /etc/nftables.conf sebagai kebiasaan wajib sebelum restart service.

4. Konflik dengan firewalld atau UFW yang masih aktif

  • Penyebab: menginstal nftables di sistem yang sudah menjalankan UFW atau firewalld berbasis iptables-legacy.
  • Dampak: rule saling tumpang tindih, perilaku firewall tidak konsisten.
  • Solusi: pastikan hanya satu framework firewall yang aktif; nonaktifkan UFW/firewalld sebelum mengelola nftables secara manual.

5. Mengabaikan IPv6

  • Penyebab: hanya menulis rule untuk ip (IPv4) dan lupa ip6 atau tidak memakai family inet.
  • Dampak: server tetap terekspos lewat jalur IPv6 meski IPv4 sudah terkunci rapat.
  • Solusi: gunakan family inet yang mencakup IPv4 dan IPv6 sekaligus, seperti pada contoh ruleset di atas.

Tips dan Rekomendasi

  • Gunakan set (seperti allowed_ssh_ports pada contoh) untuk mengelompokkan port/IP yang sering diubah, sehingga maintenance lebih mudah tanpa mengedit banyak rule satu per satu.
  • Tambahkan rate limiting pada service yang sering menjadi target brute force (SSH, panel admin).
  • Kombinasikan nftables dengan fail2ban untuk pemblokiran IP otomatis berbasis pola log.
  • Aktifkan logging secukupnya (gunakan limit rate pada rule log agar tidak membanjiri disk).
  • Lakukan review ruleset berkala, terutama setelah menambah service baru di server.
  • Simpan salinan /etc/nftables.conf di sistem version control (misalnya git privat) agar perubahan mudah dilacak dan di-rollback.

Kesimpulan

nftables adalah fondasi firewall modern di Debian yang menawarkan sintaks lebih bersih, performa lebih baik, dan pengelolaan IPv4/IPv6 dalam satu tempat dibanding pendahulunya, iptables. Untuk server produksi, kuncinya bukan hanya menulis rule yang benar, tetapi juga disiplin dalam proses: validasi sintaks sebelum diterapkan, uji di sesi terpisah sebelum permanen, dan selalu simpan konfigurasi ke /etc/nftables.conf agar bertahan setelah reboot.

Poin penting yang perlu diingat:

  • Gunakan prinsip default deny (policy drop) dan izinkan hanya yang benar-benar dibutuhkan.
  • Selalu validasi (nft -c -f) sebelum reload untuk menghindari downtime atau lockout.
  • Jangan lupakan IPv6—gunakan family inet.
  • Backup dan version control konfigurasi firewall sama pentingnya dengan backup data.

Bagaimana pengalaman Anda mengelola firewall di server produksi—masih pakai iptables, sudah migrasi ke nftables, atau menggunakan UFW/firewalld?

Tulis di kolom komentar! Jika artikel ini membantu, jangan ragu untuk membagikannya ke rekan sysadmin Anda, dan jelajahi juga artikel terkait lainnya seputar Linux, networking, dan keamanan server di blog ini.


Frequently Asked Questions (FAQ)

Pertanyaan: Apa perbedaan utama nftables dengan iptables? Jawaban: nftables menggunakan satu tool (nft) untuk IPv4, IPv6, ARP, dan bridge sekaligus, dengan sintaks lebih ringkas dan update ruleset yang atomik, sedangkan iptables memerlukan tool terpisah untuk tiap protokol.

Pertanyaan: Apakah nftables sudah terinstal secara default di Debian 12? Jawaban: Ya, paket nftables sudah terpasang secara default di Debian 12, namun layanannya perlu diaktifkan manual dengan systemctl enable nftables.

Pertanyaan: Bagaimana cara membuat rule nftables tetap ada setelah reboot? Jawaban: Simpan seluruh ruleset ke file /etc/nftables.conf, lalu pastikan layanan nftables.service diaktifkan agar file tersebut dimuat otomatis saat boot.

Pertanyaan: Bagaimana cara menghindari lockout SSH saat mengonfigurasi firewall? Jawaban: Selalu uji ruleset baru di sesi SSH yang masih terbuka, validasi sintaks dengan nft -c -f, dan pastikan rule SSH sudah aktif sebelum menerapkan policy drop secara default.

Pertanyaan: Apakah nftables bisa digunakan bersama fail2ban? Jawaban: Bisa, dan justru direkomendasikan. fail2ban dapat mendeteksi pola serangan pada log dan menambahkan blokir IP secara dinamis ke dalam ruleset nftables.


Sudah coba terapkan konfigurasi di atas di server Anda?

Ceritakan pengalamannya di kolom komentar, ajukan pertanyaan jika ada yang masih membingungkan, dan bagikan artikel ini ke tim atau komunitas sysadmin Anda. Jangan lewatkan juga artikel-artikel lain seputar Linux server, networking, dan cybersecurity di blog ini—ikuti terus untuk update konten terbaru!


Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Dilindungi Oleh
Shield Security