nftables Linux: Mengenal Firewall Modern Linux, Instalasi, Konfigurasi, Simulasi, dan Cheatsheet
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:
| Aspek | iptables | nftables |
|---|---|---|
| Framework | Legacy/older interface | Modern framework |
| Command | iptables | nft |
| Struktur | Chain dan rule | Table, chain, set, rule |
| IPv4/IPv6 | Tool terpisah | Dapat dikelola dengan inet |
| Sets | Terbatas dibanding nftables | Dukungan kuat |
| Syntax | Lebih panjang untuk beberapa kasus | Lebih konsisten |
| NAT | Didukung | Didukung |
| Firewall modern | Masih ditemukan | Dirancang 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:
tablechainrulehookpolicyacceptdroprejectct statesetcounterlog- 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