nftables adalah framework firewall modern di Linux yang menggantikan:
iptables
(IPv4)ip6tables
(IPv6)arptables
ebtables
Dirilis sejak kernel 3.13, dan sekarang menjadi standar default firewall di Debian, Ubuntu, CentOS, dan lainnya.
Table / nftables
Apa itu table di nftables?
Dalam nftables, table adalah semacam wadah atau ruang nama yang berisi:
- chain (rantai rule),
- rule (aturan),
- set (kumpulan nilai),
- dan objek lain.
Jenis Table Berdasarkan Address Family
Setiap table harus punya jenis alamat (address family) yang menentukan jenis paket apa yang akan diproses.
Berikut pilihannya:
Jenis | Menangani Paket | Keterangan |
---|---|---|
ip | IPv4 saja | (default jika tidak ditentukan) |
ip6 | IPv6 saja | |
inet | IPv4 dan IPv6 sekaligus | Direkomendasikan agar lebih ringkas |
arp | Paket ARP (IPv4 Address Resolution) | Untuk manajemen ARP |
bridge | Paket yang lewat interface bridge | Digunakan di bridge Linux |
netdev | Paket masuk (ingress) dari interface fisik | Cocok untuk filter awal |
Cara Menambahkan Table
Tergantung kamu membuatnya dengan syntax langsung (native config) atau melalui command di shell.
Di file konfigurasi:
table <jenis_alamat> <nama_table> {
}
Contoh:
table inet filter {
}
Di commandline atau shell
nft add table <jenis_alamat> <nama_table>
Contoh
nft add table inet filter
Chain
Dasar Chain di nftables
Dalam nftables, table berisi chain, dan chain berisi rule.
Terdapat dua jenis chain:
- Base chain
- Titik masuk paket dari kernel (contoh: input, output, forward).
- Wajib punya:
type
,hook
,priority
, danpolicy
.
- Regular chain
- Untuk mengatur rule agar lebih rapi.
- Bisa dijadikan tujuan
jump
, tapi tidak bisa jadi titik masuk. - Tidak perlu
type
,hook
, dan lainnya.
Cara Membuat Base Chain
Di file konfigurasi
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
}
}
Di command line / shell
nft add chain inet filter input { type filter hook input priority 0\; policy drop\; }
Tanda
\;
dipakai agar shell tidak salah menafsirkan titik koma.
Jenis Chain (type
) dan Hook yang Didukung
Tipe Chain | Address Family | Hook Tersedia | Fungsi |
---|---|---|---|
filter | Semua (ip , ip6 , inet ) | input , output , forward , dll | Chain standar untuk filtering paket |
nat | ip , ip6 , inet | prerouting , input , output , postrouting | Untuk NAT, hanya memproses paket pertama (dengan conntrack) |
route | ip , ip6 | output | Untuk trigger route lookup ulang jika IP header berubah |
Prioritas Chain (Chain Priorities)
Parameter priority
menentukan urutan eksekusi chain jika menggunakan hook yang sama.
Nilainya bisa berupa angka (misalnya 0
, -150
) atau nama standar seperti raw
, filter
, dsb.
Nama Priority | Nilai Angka | Bisa Dipakai di | Hook |
---|---|---|---|
raw | -300 | ip , ip6 , inet | semua |
mangle | -150 | ip , ip6 , inet | semua |
dstnat | -100 | ip , ip6 , inet | prerouting |
filter | 0 | ip , ip6 , inet , arp , netdev | semua |
security | 50 | ip , ip6 , inet | semua |
srcnat | 100 | ip , ip6 , inet | postrouting |
Semakin kecil angkanya, semakin awal dieksekusi.
Kebijakan Chain (Chain Policy)
policy
menentukan tindakan default jika tidak ada rule yang cocok.
Nilai yang bisa digunakan:
accept
→ izinkan (default)drop
→ tolak
Contoh
chain input {
type filter hook input priority 0;
policy drop;
}
——- PENJELASAN BELUM LENGKAP
Contoh Konfigurasi
table inet raw {
chain prerouting {
type filter hook prerouting priority raw;
# IPV4 PTP BGP UPSTREAM
ip protocol tcp ip daddr 10.120.84.14 tcp dport 179 ip saddr 10.120.84.13 accept
ip daddr 10.120.84.14 drop
# IPV6 PTP BGP UPSTREAM
ip6 nexthdr tcp ip6 daddr fd00:dead:bee::424:a tcp dport 179 ip6 saddr fd00:dead:bee::424:9 accept
ip6 daddr fd00:dead:bee::424:a drop
}
}