Firewall Di Linux Menggunakan nftables

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:

JenisMenangani PaketKeterangan
ipIPv4 saja(default jika tidak ditentukan)
ip6IPv6 saja
inetIPv4 dan IPv6 sekaligusDirekomendasikan agar lebih ringkas
arpPaket ARP (IPv4 Address Resolution)Untuk manajemen ARP
bridgePaket yang lewat interface bridgeDigunakan di bridge Linux
netdevPaket masuk (ingress) dari interface fisikCocok 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:

  1. Base chain
    • Titik masuk paket dari kernel (contoh: input, output, forward).
    • Wajib punya: type, hook, priority, dan policy.
  2. 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 ChainAddress FamilyHook TersediaFungsi
filterSemua (ip, ip6, inet)input, output, forward, dllChain standar untuk filtering paket
natip, ip6, inetprerouting, input, output, postroutingUntuk NAT, hanya memproses paket pertama (dengan conntrack)
routeip, ip6outputUntuk 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 PriorityNilai AngkaBisa Dipakai diHook
raw-300ip, ip6, inetsemua
mangle-150ip, ip6, inetsemua
dstnat-100ip, ip6, inetprerouting
filter0ip, ip6, inet, arp, netdevsemua
security50ip, ip6, inetsemua
srcnat100ip, ip6, inetpostrouting

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

        }
}