Langsung ke konten
Linux

nftables Linux: Mengenal Firewall Modern Linux, Instalasi, Konfigurasi, Simulasi, dan Cheatsheet

Oktober 5, 2026 · 14 menit baca · Walid Umar

Keamanan server Linux tidak cukup hanya dengan menggunakan password yang kuat, SSH key, atau melakukan update sistem secara rutin. Salah satu lapisan pertahanan yang sangat penting adalah firewall.

Firewall bertugas mengontrol lalu lintas jaringan yang masuk, keluar, maupun diteruskan oleh server. Dengan firewall yang dikonfigurasi dengan benar, administrator dapat menentukan layanan mana yang boleh diakses dan trafik mana yang harus ditolak.

Di dunia Linux, administrator jaringan sudah lama mengenal iptables. Namun, Linux modern juga menyediakan framework firewall yang lebih baru dan fleksibel, yaitu nftables.

Perintah nft merupakan antarmuka pengguna untuk mengelola aturan firewall berbasis nftables. Framework ini dirancang sebagai penerus berbagai keluarga firewall lama seperti iptables, ip6tables, arptables, dan ebtables.

Secara sederhana, jika firewall adalah satpam sebuah server, maka nftables adalah sistem aturan yang menentukan siapa yang boleh masuk, siapa yang harus ditolak, dan jalur mana yang boleh dilewati.

Artikel ini membahas nftables dari dasar hingga praktik, mulai dari instalasi, konsep arsitektur, konfigurasi firewall sederhana, simulasi membuka port SSH dan HTTP, filtering berdasarkan IP, hingga cheatsheet parameter penting yang sering digunakan administrator Linux.

Catatan: contoh konfigurasi di artikel ini ditujukan untuk pembelajaran dan lab. Sebelum menerapkan firewall pada server produksi, pastikan Anda memiliki akses console atau out-of-band management agar tidak terkunci dari server akibat aturan yang salah.


Apa Itu nftables?

nftables adalah framework filtering paket jaringan pada Linux yang digunakan untuk membuat firewall, NAT, packet filtering, dan berbagai aturan manipulasi trafik jaringan.

Pengelolaan nftables dilakukan menggunakan command-line tool:

nft

Contoh:

sudo nft list ruleset

Perintah tersebut digunakan untuk melihat ruleset nftables yang sedang aktif.

Berbeda dengan firewall yang hanya menyediakan aturan sederhana allow atau deny, nftables memiliki konsep yang lebih terstruktur.

Beberapa komponen penting nftables antara lain:

Ruleset
   │
   ├── Table
   │    │
   │    ├── Chain
   │    │     │
   │    │     └── Rule
   │    │
   │    └── Chain
   │
   └── Table

Struktur ini membuat konfigurasi firewall menjadi lebih modular.


Mengapa nftables Penting untuk Linux Modern?

Salah satu alasan utama mempelajari nftables adalah karena teknologi firewall Linux terus berkembang.

Administrator Linux yang hanya mengandalkan sintaks iptables dapat mengalami kesulitan ketika harus memahami sistem firewall modern.

nftables menawarkan beberapa konsep penting:

  • Satu framework untuk berbagai jenis filtering.
  • Ruleset lebih terstruktur.
  • Syntax yang relatif konsisten.
  • Mendukung IPv4 dan IPv6.
  • Mendukung NAT.
  • Mendukung sets dan maps.
  • Dapat melakukan filtering berdasarkan interface.
  • Mendukung filtering berdasarkan port dan protocol.
  • Dapat digunakan untuk firewall server maupun router.
  • Mendukung konfigurasi yang lebih kompleks.

Contoh konsep filtering:

Internet
   │
   ▼
┌───────────────┐
│ Linux Server  │
│   nftables    │
└───────┬───────┘
        │
 ┌──────┼─────────┐
 ▼      ▼         ▼
SSH    HTTP      HTTPS
22      80        443
ALLOW   ALLOW     ALLOW

Port lain dapat ditolak secara default.


Instalasi nftables

Pada banyak distribusi Linux modern, paket nftables tersedia langsung melalui repository resmi.

Instalasi di Debian dan Ubuntu

Jalankan:

sudo apt update
sudo apt install nftables

Periksa versi:

nft --version

Contoh output:

nftables v1.x.x

Aktifkan service:

sudo systemctl enable nftables

Kemudian jalankan:

sudo systemctl start nftables

Periksa status:

sudo systemctl status nftables

Instalasi nftables di Rocky Linux

Pada sistem berbasis RHEL seperti Rocky Linux, nftables juga tersedia melalui repository sistem.

sudo dnf install nftables

Aktifkan service:

sudo systemctl enable --now nftables

Periksa status:

sudo systemctl status nftables

Mengecek Ruleset nftables

Sebelum melakukan perubahan, biasakan memeriksa konfigurasi:

sudo nft list ruleset

Jika belum ada konfigurasi firewall, output dapat terlihat kosong atau hanya berisi ruleset yang dibuat oleh komponen lain.

Untuk melihat tabel:

sudo nft list tables

Untuk melihat chain:

sudo nft list chains

Memahami Table, Chain, dan Rule

Tiga konsep dasar yang wajib dipahami:

Table

Table adalah wadah untuk chain.

Contoh:

sudo nft add table inet filter

Kita menggunakan family inet agar satu table dapat digunakan untuk IPv4 dan IPv6.

Chain

Chain berisi aturan firewall.

Contoh:

sudo nft add chain inet filter input

Chain input digunakan untuk trafik yang menuju host lokal.

Rule

Rule menentukan tindakan terhadap paket.

Contoh:

sudo nft add rule inet filter input tcp dport 22 accept

Artinya:

Jika trafik TCP menuju port 22, izinkan.


Mengenal Chain Input, Output, dan Forward

Dalam firewall Linux terdapat tiga jalur trafik yang sangat penting.

                  Internet
                     │
                     ▼
               ┌───────────┐
               │  Linux    │
               │  Server   │
               └───────────┘
                ▲    │    ▲
                │    │    │
             INPUT OUTPUT │
                │    │    │
                └────┴────┘
                   FORWARD

INPUT

Digunakan untuk trafik yang masuk menuju server.

Contoh:

Client → SSH Server

OUTPUT

Digunakan untuk trafik yang keluar dari server.

Contoh:

Server → DNS Server
Server → Internet

FORWARD

Digunakan ketika Linux meneruskan paket dari satu interface ke interface lain.

Contoh:

LAN → Linux Router → Internet

Membuat Firewall Dasar

Sekarang kita membuat simulasi firewall sederhana.

Misalnya server memiliki:

IP Server : 192.168.10.10
SSH       : 22
HTTP      : 80
HTTPS     : 443

Tujuannya:

  • Mengizinkan loopback.
  • Mengizinkan koneksi yang sudah established.
  • Mengizinkan SSH.
  • Mengizinkan HTTP.
  • Mengizinkan HTTPS.
  • Menolak trafik lainnya.

Langkah 1 — Membuat Table

sudo nft add table inet filter

Periksa:

sudo nft list tables

Langkah 2 — Membuat Chain Input

sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'

Bagian penting:

type filter
hook input
priority 0
policy drop

policy drop berarti trafik yang tidak cocok dengan rule akan ditolak secara default.

Ini merupakan pendekatan default-deny.


Langkah 3 — Mengizinkan Loopback

Loopback digunakan oleh sistem lokal.

Tambahkan:

sudo nft add rule inet filter input iif lo accept

Tanpa aturan ini, aplikasi tertentu dapat mengalami masalah komunikasi internal.


Langkah 4 — Mengizinkan Established dan Related

Gunakan:

sudo nft add rule inet filter input ct state established,related accept

Rule ini sangat penting.

Misalnya server membuat koneksi keluar ke suatu layanan dan kemudian menerima response. Connection tracking dapat mengenali bahwa paket tersebut merupakan bagian dari koneksi yang sudah ada.


Langkah 5 — Membuka SSH

Untuk SSH:

sudo nft add rule inet filter input tcp dport 22 accept

Sekarang koneksi ke:

TCP/22

akan diperbolehkan.


Langkah 6 — Membuka HTTP

sudo nft add rule inet filter input tcp dport 80 accept

Langkah 7 — Membuka HTTPS

sudo nft add rule inet filter input tcp dport 443 accept

Melihat Konfigurasi

Gunakan:

sudo nft list ruleset

Secara konsep hasilnya:

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

        iif "lo" accept
        ct state established,related accept
        tcp dport 22 accept
        tcp dport 80 accept
        tcp dport 443 accept
    }
}

Mengizinkan Ping

Secara default, policy drop dapat menyebabkan ICMP tidak diperbolehkan.

Untuk mengizinkan IPv4 ping:

sudo nft add rule inet filter input ip protocol icmp accept

Untuk IPv6:

sudo nft add rule inet filter input ip6 nexthdr icmpv6 accept

Karena kita menggunakan family inet, kedua aturan dapat dikelola dalam table yang sama.


Membatasi SSH Berdasarkan IP

Dalam lingkungan produksi, membuka SSH dari seluruh internet bukan selalu pendekatan yang ideal.

Misalnya hanya jaringan:

192.168.10.0/24

yang boleh mengakses SSH.

Rule:

sudo nft add rule inet filter input ip saddr 192.168.10.0/24 tcp dport 22 accept

Sekarang hanya host dari subnet tersebut yang cocok dengan rule tersebut.

Contoh:

192.168.10.20 → SSH → ALLOW
192.168.10.50 → SSH → ALLOW

10.10.10.20 → SSH → DROP

Filtering Berdasarkan Interface

Misalnya SSH hanya boleh melalui interface LAN:

eth0

Gunakan:

sudo nft add rule inet filter input iifname "eth0" tcp dport 22 accept

Ini berguna pada server dengan beberapa interface.

Contoh:

Internet
   │
   ▼
eth1
   │
Linux Server
   │
eth0
   │
LAN Management

SSH dapat dibatasi hanya melalui interface management.


Mengizinkan Beberapa Port Sekaligus

nftables mendukung set.

Contoh:

sudo nft add rule inet filter input tcp dport { 22, 80, 443 } accept

Artinya port:

22
80
443

diizinkan.

Cara ini lebih ringkas dibanding membuat tiga rule terpisah.


Membuat Set IP Address

Jika terdapat beberapa IP administrator:

192.168.10.10
192.168.10.11
192.168.10.12

Anda dapat membuat set:

sudo nft add set inet filter admin_ips '{ type ipv4_addr; }'

Tambahkan IP:

sudo nft add element inet filter admin_ips '{ 192.168.10.10, 192.168.10.11, 192.168.10.12 }'

Kemudian gunakan:

sudo nft add rule inet filter input ip saddr @admin_ips tcp dport 22 accept

Pendekatan ini lebih mudah dikelola ketika daftar IP bertambah.


Membuat Rule Menggunakan File Konfigurasi

Untuk konfigurasi permanen, sebaiknya ruleset tidak hanya dibuat secara manual menggunakan command satu per satu.

Pada Debian/Ubuntu, konfigurasi dapat ditempatkan dalam:

/etc/nftables.conf

Contoh konfigurasi:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {

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

        iif "lo" accept

        ct state established,related accept

        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        tcp dport 22 accept
        tcp dport 80 accept
        tcp dport 443 accept
    }

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

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

Setelah menyimpan file, validasi konfigurasi:

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

Jika tidak ada error, load konfigurasi:

sudo nft -f /etc/nftables.conf

Simulasi Kasus: Web Server Linux

Misalnya kita memiliki server:

IP       : 10.10.10.10
SSH      : 22
HTTP     : 80
HTTPS    : 443
DNS      : 53

Server tersebut menjalankan:

Nginx
SSH

Kita ingin:

SSH       → Allow
HTTP      → Allow
HTTPS     → Allow
Ping      → Allow
Lainnya   → Drop

Konfigurasinya:

table inet filter {

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

        iif "lo" accept

        ct state established,related accept

        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        tcp dport { 22, 80, 443 } accept
    }

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

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

Menghapus Rule

Salah satu hal penting ketika menggunakan nftables adalah mengetahui cara menghapus rule.

Tampilkan handle:

sudo nft -a list chain inet filter input

Contoh:

tcp dport 22 accept # handle 8
tcp dport 80 accept # handle 9
tcp dport 443 accept # handle 10

Hapus rule berdasarkan handle:

sudo nft delete rule inet filter input handle 8

Ini lebih aman daripada menghapus seluruh chain jika hanya satu rule yang ingin diubah.


Menghapus Chain

sudo nft delete chain inet filter input

Namun chain harus tidak lagi memiliki rule atau dependency yang menghalangi penghapusan.


Menghapus Table

Untuk menghapus seluruh table:

sudo nft delete table inet filter

Hati-hati menggunakan perintah ini pada server produksi.


Flush Rules

Untuk menghapus seluruh ruleset:

sudo nft flush ruleset

Perintah ini sangat berbahaya jika dilakukan melalui SSH tanpa memastikan akses console tersedia.

Server dapat langsung kehilangan akses jaringan.


Mengecek Counter Paket

Counter berguna untuk mengetahui apakah rule benar-benar menerima trafik.

Gunakan:

sudo nft list ruleset

Contoh:

tcp dport 22 counter packets 152 bytes 18720 accept

Informasi tersebut membantu troubleshooting.

Jika counter tetap:

packets 0

mungkin rule tersebut tidak pernah terkena trafik.


Logging Trafik

nftables juga dapat digunakan untuk mencatat trafik.

Contoh:

sudo nft add rule inet filter input tcp dport 22 log prefix "NFT SSH: " accept

Kemudian periksa log menggunakan:

sudo journalctl -k

Atau:

sudo journalctl -f

Logging sebaiknya digunakan secara selektif. Logging semua paket pada server dengan trafik tinggi dapat menghasilkan volume log yang sangat besar.


NAT dengan nftables

nftables juga dapat digunakan untuk Network Address Translation.

Contoh struktur:

Internet
    │
    ▼
Linux Router
    │
    ├── LAN 192.168.10.0/24
    └── Server

Untuk konfigurasi NAT, digunakan table family ip atau inet sesuai kebutuhan dan chain NAT yang sesuai.

Contoh masquerade:

table ip nat {

    chain postrouting {
        type nat hook postrouting priority 100;

        oifname "eth0" masquerade
    }
}

Pada router Linux, jangan lupa mengaktifkan IP forwarding:

sudo sysctl -w net.ipv4.ip_forward=1

Untuk konfigurasi permanen, atur parameter tersebut pada konfigurasi sysctl.


nftables vs iptables

Perbandingan konsep:

Aspekiptablesnftables
FrameworkLegacy/older interfaceModern framework
Commandiptablesnft
StrukturChain dan ruleTable, chain, set, rule
IPv4/IPv6Tool terpisahDapat dikelola dengan inet
SetsTerbatas dibanding nftablesDukungan kuat
SyntaxLebih panjang untuk beberapa kasusLebih konsisten
NATDidukungDidukung
Firewall modernMasih ditemukanDirancang sebagai penerus

Perlu dipahami bahwa migrasi dari iptables ke nftables bukan sekadar mengganti kata iptables menjadi nft.

Struktur dan sintaksnya berbeda.


Best Practice nftables

Beberapa praktik yang sebaiknya diterapkan:

Gunakan default deny

Untuk server yang membutuhkan kontrol ketat:

policy drop;

Namun pastikan rule penting sudah dibuat sebelum menerapkan policy tersebut.

Izinkan established dan related

Gunakan:

ct state established,related accept

Jangan membuka port tanpa kebutuhan

Jika server hanya menjalankan HTTPS, tidak ada alasan membuka banyak port tambahan.

Batasi akses administratif

SSH dapat dibatasi berdasarkan:

  • IP sumber.
  • subnet.
  • interface.
  • VPN.
  • management network.

Gunakan sets

Untuk daftar IP atau port yang cukup banyak, gunakan sets.

Validasi sebelum reload

Gunakan:

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

Simpan konfigurasi

Jangan mengandalkan konfigurasi runtime saja.

Simpan ruleset pada:

/etc/nftables.conf

Siapkan akses console

Sangat penting ketika melakukan perubahan firewall melalui SSH.


Kesalahan yang Sering Terjadi

1. Mengaktifkan policy drop terlalu cepat

Kesalahan:

policy drop;

tanpa mengizinkan SSH.

Akibatnya:

SSH Connection → DROP

Administrator dapat terkunci dari server.

Solusi: pastikan rule management dibuat terlebih dahulu dan siapkan console access.


2. Lupa Loopback

Tanpa:

iif "lo" accept

aplikasi tertentu dapat mengalami gangguan komunikasi internal.


3. Tidak Mengizinkan Established Connection

Jika rule connection tracking tidak dibuat, koneksi yang sudah terbentuk dapat mengalami masalah tergantung desain ruleset.

Gunakan:

ct state established,related accept

4. Salah Menentukan Interface

Contoh:

iifname "eth0"

Padahal server menggunakan:

ens18

Akibatnya rule tidak pernah match.

Periksa interface:

ip addr

atau:

ip link

5. Membuka Port Terlalu Banyak

Contoh buruk:

tcp dport { 1-65535 } accept

Ini secara praktis menghilangkan fungsi filtering.

Gunakan prinsip:

Allow what is required, deny what is not required.


6. Tidak Melakukan Validasi Konfigurasi

Sebelum menerapkan file:

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

Gunakan validasi ini untuk menangkap syntax error.


Troubleshooting nftables

Jika firewall tidak bekerja sesuai harapan, lakukan pemeriksaan secara bertahap.

Pertama:

sudo nft list ruleset

Kemudian periksa interface:

ip addr

Periksa koneksi:

ss -tulpn

Periksa routing:

ip route

Periksa log:

sudo journalctl -k

Gunakan counter:

sudo nft -a list ruleset

Jika perlu melihat paket secara langsung:

sudo tcpdump -ni any port 22

Kombinasi nft, ss, ip, dan tcpdump sangat berguna untuk troubleshooting firewall Linux.


Cheatsheet nftables

Berikut beberapa perintah yang sering digunakan.

Melihat versi

nft --version

Melihat seluruh ruleset

sudo nft list ruleset

Melihat table

sudo nft list tables

Membuat table

sudo nft add table inet filter

Membuat input chain

sudo nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }'

Allow loopback

sudo nft add rule inet filter input iif lo accept

Allow established connection

sudo nft add rule inet filter input ct state established,related accept

Allow SSH

sudo nft add rule inet filter input tcp dport 22 accept

Allow HTTP

sudo nft add rule inet filter input tcp dport 80 accept

Allow HTTPS

sudo nft add rule inet filter input tcp dport 443 accept

Allow multiple ports

sudo nft add rule inet filter input tcp dport { 22, 80, 443 } accept

Allow source network

sudo nft add rule inet filter input ip saddr 192.168.10.0/24 accept

Delete rule

sudo nft delete rule inet filter input handle 8

Flush chain

sudo nft flush chain inet filter input

Flush seluruh ruleset

sudo nft flush ruleset

Check configuration

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

Load configuration

sudo nft -f /etc/nftables.conf

Enable service

sudo systemctl enable nftables

Start service

sudo systemctl start nftables

Check service

sudo systemctl status nftables

Workflow Troubleshooting Firewall Linux

Workflow yang praktis:

1. Cek service
       ↓
2. Cek port
       ↓
3. Cek interface
       ↓
4. Cek routing
       ↓
5. Cek nftables ruleset
       ↓
6. Cek rule counter
       ↓
7. Capture packet dengan tcpdump
       ↓
8. Analisis log
       ↓
9. Perbaiki rule
       ↓
10. Validasi & test kembali

Jangan langsung mengubah banyak rule sekaligus. Perubahan bertahap membuat proses troubleshooting jauh lebih mudah.


Kesimpulan

nftables merupakan salah satu teknologi penting yang perlu dipahami oleh administrator Linux modern.

Konsep dasarnya sebenarnya cukup sederhana:

Table
  ↓
Chain
  ↓
Rule
  ↓
Match
  ↓
Action

Dengan memahami struktur tersebut, administrator dapat membangun firewall yang lebih terorganisasi.

Beberapa konsep yang wajib dikuasai adalah:

  • table
  • chain
  • rule
  • hook
  • policy
  • accept
  • drop
  • reject
  • ct state
  • set
  • counter
  • log
  • NAT
  • filtering IPv4 dan IPv6

Mulailah dari firewall sederhana, uji di virtual machine atau lab PNETLab, kemudian tingkatkan kompleksitas konfigurasi secara bertahap.

Untuk lingkungan produksi, selalu lakukan validasi konfigurasi dan pastikan tersedia akses console sebelum menerapkan perubahan firewall yang berpotensi memutus koneksi administratif.

FAQ

Pertanyaan: Apa itu nftables?

Jawaban: nftables adalah framework firewall modern di Linux untuk melakukan packet filtering, firewalling, NAT, dan pengelolaan trafik jaringan.

Pertanyaan: Apakah nftables menggantikan iptables?

Jawaban: nftables dirancang sebagai penerus teknologi firewall Linux sebelumnya, termasuk interface iptables. Namun, kompatibilitas dan mekanisme backend dapat berbeda antar distribusi.

Pertanyaan: Apakah nftables tersedia di Ubuntu dan Debian?

Jawaban: Ya. nftables tersedia melalui repository resmi dan dapat dipasang menggunakan package manager seperti apt.

Pertanyaan: Bagaimana cara melihat konfigurasi nftables?

Jawaban: Gunakan perintah sudo nft list ruleset untuk menampilkan ruleset aktif.

Pertanyaan: Bagaimana cara membuka port 22 menggunakan nftables?

Jawaban: Gunakan rule seperti sudo nft add rule inet filter input tcp dport 22 accept, setelah table dan chain yang sesuai tersedia.

Pertanyaan: Apa fungsi policy drop?

Jawaban: policy drop menjadikan drop sebagai kebijakan default ketika paket tidak cocok dengan rule yang mengizinkannya.

Pertanyaan: Apa fungsi ct state established,related?

Jawaban: Rule tersebut memungkinkan paket yang merupakan bagian dari koneksi yang sudah terbentuk atau berkaitan dengan koneksi tersebut.

Pertanyaan: Apakah nftables dapat digunakan untuk NAT?

Jawaban: Ya. nftables dapat digunakan untuk berbagai kebutuhan NAT seperti masquerading dan destination NAT.

Pertanyaan: Bagaimana cara menguji konfigurasi nftables sebelum diterapkan?

Jawaban: Gunakan sudo nft -c -f /etc/nftables.conf untuk melakukan pemeriksaan konfigurasi tanpa menerapkannya.

Pertanyaan: Apakah nftables cocok untuk server produksi?

Jawaban: Ya, tetapi konfigurasi harus dirancang dan diuji dengan hati-hati. Akses console atau out-of-band management sangat disarankan sebelum mengubah firewall melalui SSH.

Dukung kami dengan Subscribe & Join Membership channel YouTube | Walid Umar

Akses video pembelajaran eksklusif, materi persiapan UKK (Uji Kompetensi Siswa) dan Penyelesaian Soal LKS ITNSA

Tinggalkan komentar

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

Dilindungi Oleh
Shield Security