iptables
, ip6tables
, arptables
, dan ebtables
.
nft
. Debian Buster menggunakan kerangka kerja nftables secara default.
#
apt install -y nftables
Reading package lists... Done ... #
systemctl enable nftables.service
Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.
ip
, ip6
, inet
, arp
dan bridge
. ip
digunakan jika keluarga tidak dinyatakan.
accept
, drop
, queue
, continue
, return
, jump chain
, dan goto chain
.
iptables-translate
dan ip6tables-translate
dapat digunakan untuk menerjemahkan perintah iptables lama ke dalam sintaks nftables baru. Seluruh aturan juga dapat diterjemahkan, dalam hal ini kita memigrasi peraturan yang dikonfigurasi dalam satu komputer yang dipasangi Docker:
#
iptables-save > iptables-ruleset.txt
#
iptables-restore-translate -f iptables-ruleset.txt
# Translated by iptables-restore-translate v1.8.2 on Thu Jul 18 10:39:33 2019 add table ip filter add chain ip filter INPUT { type filter hook input priority 0; policy accept; } add chain ip filter FORWARD { type filter hook forward priority 0; policy drop; } add chain ip filter OUTPUT { type filter hook output priority 0; policy accept; } add chain ip filter DOCKER add chain ip filter DOCKER-ISOLATION-STAGE-1 add chain ip filter DOCKER-ISOLATION-STAGE-2 add chain ip filter DOCKER-USER add rule ip filter FORWARD counter jump DOCKER-USER add rule ip filter FORWARD counter jump DOCKER-ISOLATION-STAGE-1 add rule ip filter FORWARD oifname "docker0" ct state related,established counter accept add rule ip filter FORWARD oifname "docker0" counter jump DOCKER add rule ip filter FORWARD iifname "docker0" oifname != "docker0" counter accept add rule ip filter FORWARD iifname "docker0" oifname "docker0" counter accept add rule ip filter DOCKER-ISOLATION-STAGE-1 iifname "docker0" oifname != "docker0" counter jump DOCKER-ISOLATION-STAGE-2 add rule ip filter DOCKER-ISOLATION-STAGE-1 counter return add rule ip filter DOCKER-ISOLATION-STAGE-2 oifname "docker0" counter drop add rule ip filter DOCKER-ISOLATION-STAGE-2 counter return add rule ip filter DOCKER-USER counter return add table ip nat add chain ip nat PREROUTING { type nat hook prerouting priority -100; policy accept; } add chain ip nat INPUT { type nat hook input priority 100; policy accept; } add chain ip nat POSTROUTING { type nat hook postrouting priority 100; policy accept; } add chain ip nat OUTPUT { type nat hook output priority -100; policy accept; } add chain ip nat DOCKER add rule ip nat PREROUTING fib daddr type local counter jump DOCKER add rule ip nat POSTROUTING oifname != "docker0" ip saddr 172.17.0.0/16 counter masquerade add rule ip nat OUTPUT ip daddr != 127.0.0.0/8 fib daddr type local counter jump DOCKER add rule ip nat DOCKER iifname "docker0" counter return # Completed on Thu Jul 18 10:39:33 2019 #
iptables-restore-translate -f iptables-ruleset.txt > ruleset.nft
#
nft -f ruleset.nft
#
nft list ruleset
table ip filter { chain INPUT { type filter hook input priority 0; policy accept; } chain FORWARD { type filter hook forward priority 0; policy drop; counter packets 0 bytes 0 jump DOCKER-USER counter packets 0 bytes 0 jump DOCKER-ISOLATION-STAGE-1 oifname "docker0" ct state related,established counter packets 0 bytes 0 accept oifname "docker0" counter packets 0 bytes 0 jump DOCKER iifname "docker0" oifname != "docker0" counter packets 0 bytes 0 accept iifname "docker0" oifname "docker0" counter packets 0 bytes 0 accept } chain OUTPUT { type filter hook output priority 0; policy accept; } chain DOCKER { } chain DOCKER-ISOLATION-STAGE-1 { iifname "docker0" oifname != "docker0" counter packets 0 bytes 0 jump DOCKER-ISOLATION-STAGE-2 counter packets 0 bytes 0 return } chain DOCKER-ISOLATION-STAGE-2 { oifname "docker0" counter packets 0 bytes 0 drop counter packets 0 bytes 0 return } chain DOCKER-USER { counter packets 0 bytes 0 return } } table ip nat { chain PREROUTING { type nat hook prerouting priority -100; policy accept; fib daddr type local counter packets 0 bytes 0 jump DOCKER } chain INPUT { type nat hook input priority 100; policy accept; } chain POSTROUTING { type nat hook postrouting priority 100; policy accept; oifname != "docker0" ip saddr 172.17.0.0/16 counter packets 0 bytes 0 masquerade } chain OUTPUT { type nat hook output priority -100; policy accept; ip daddr != 127.0.0.0/8 fib daddr type local counter packets 0 bytes 0 jump DOCKER } chain DOCKER { iifname "docker0" counter packets 0 bytes 0 return } } table ip mangle { chain PREROUTING { type filter hook prerouting priority -150; policy accept; } chain INPUT { type filter hook input priority -150; policy accept; } chain FORWARD { type filter hook forward priority -150; policy accept; } chain OUTPUT { type route hook output priority -150; policy accept; } chain POSTROUTING { type filter hook postrouting priority -150; policy accept; } }
iptables-nft
, ip6tables-nft
, arptables-nft
, ebtables-nft
adalah versi iptables yang menggunakan API nftables, sehingga pengguna dapat tetap menggunakan sintaks iptables lama dengan mereka, tapi itu tidak dianjurkan; alat ini hanya boleh digunakan untuk kesesuaian ke belakang.
nft
memungkinkan memanipulasi tabel, rantai, dan aturan. Opsi table
mendukung beberapa operasi: add
, create
, delete
, list
, dan flush
. nft add table ip6 mangle
menambahkan tabel baru dari keluarga ip6
.
filter
, Anda dapat mengeksekusi perintah berikut (perhatikan bahwa titik koma di-escape dengan garis miring terbalik saat menggunakan Bash):
#
nft add chain filter input { type filter hook input priority 0 \; }
nft add rule [family] table chain handle handle pernyataan
.
insert
mirip dengan perintah add
, namun aturan yang diberikan ditambahkan ke awal rantai atau sebelum aturan dengan handle yang diberikan bukan pada akhir atau setelah aturan itu. Sebagai contoh, perintah berikut ini memasukkan aturan sebelum aturan dengan handler nomor 8:
#
nft insert rule filter output position 8 ip daddr 127.0.0.8 drop
nft
yang dieksekusi tidak membuat perubahan permanen untuk konfigurasi, sehingga mereka akan hilang jika mereka tidak disimpan. Aturan firewall terletak di /etc/nftables.conf
. Sebuah cara sederhana untuk menyimpan konfigurasi firewall saat ini secara permanen adalah dengan mengeksekusi nft list ruleset > /etc/nftables.conf
sebagai root.
nft
memungkinkan lebih banyak operasi, lihat halaman manual nft(8) untuk informasi lebih lanjut.
/etc/nftables.conf
dan mengeksekusi systemctl enable nftables.service
sebagai root. Anda dapat menghentikan firewall dengan mengeksekusi ruleset flush pemanggilan
sebagai root.
up
dari berkas /etc/network/interfaces
. Pada contoh berikut, skrip disimpan di bawah /usr/local/etc/arrakis.fw
.
Contoh 14.1. berkas interface
yang memanggil skrip firewall
auto eth0 iface eth0 inet static address 192.168.0.1 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 up /usr/local/etc/arrakis.fw