nftables adalah framework firewall modern di Linux yang menggantikan:
iptables(IPv4)ip6tables(IPv6)arptablesebtables
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
}
}