keluaran penapis paket nftables 1.0.0

Keluaran penapis paket nftables 1.0.0 telah diterbitkan, menyatukan antara muka penapisan paket untuk IPv4, IPv6, ARP dan jambatan rangkaian (bertujuan untuk menggantikan iptables, ip6table, arptables dan ebtables). Perubahan yang diperlukan untuk keluaran nftables 1.0.0 untuk berfungsi disertakan dalam kernel Linux 5.13. Perubahan ketara dalam nombor versi tidak dikaitkan dengan sebarang perubahan asas, tetapi hanya akibat daripada penerusan penomboran yang konsisten dalam tatatanda perpuluhan (keluaran sebelumnya ialah 0.9.9).

Pakej nftables termasuk komponen penapis paket yang dijalankan dalam ruang pengguna, manakala kerja peringkat kernel disediakan oleh subsistem nf_tables, yang telah menjadi sebahagian daripada kernel Linux sejak keluaran 3.13. Tahap kernel hanya menyediakan antara muka bebas protokol generik yang menyediakan fungsi asas untuk mengekstrak data daripada paket, melaksanakan operasi data dan kawalan aliran.

Peraturan penapisan dan pengendali khusus protokol disusun menjadi kod bait dalam ruang pengguna, selepas itu kod bait ini dimuatkan ke dalam kernel menggunakan antara muka Netlink dan dilaksanakan dalam kernel dalam mesin maya khas yang mengingatkan BPF (Penapis Paket Berkeley). Pendekatan ini membolehkan anda mengurangkan dengan ketara saiz kod penapisan yang berjalan pada peringkat kernel dan memindahkan semua fungsi peraturan dan logik penghuraian untuk bekerja dengan protokol ke dalam ruang pengguna.

Inovasi utama:

  • Sokongan untuk elemen topeng β€œ*” telah ditambahkan pada senarai set, yang dicetuskan untuk mana-mana pakej yang tidak termasuk di bawah elemen lain yang ditakrifkan dalam set. jadual x { senarai sekatan peta { taip ipv4_addr : elemen selang bendera keputusan = { 192.168.0.0/16 : terima, 10.0.0.0/8 : terima, * : jatuhkan } } rantai y { taip cangkuk penapis keutamaan pra laluan 0; penerimaan dasar; ip saddr vmap @blocklist } }
  • Adalah mungkin untuk menentukan pembolehubah dari baris arahan menggunakan pilihan "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; kejatuhan dasar; } } # nft β€”define dev="{ eth0, eth1 }" -f test.nft
  • Dalam senarai peta, penggunaan ungkapan malar (stateful) dibenarkan: penapis inet jadual { map portmap { taip inet_service : elemen pembilang keputusan = { 22 paket pembilang 0 bait 0 : lompat ssh_input, * paket pembilang 0 bait 0 : jatuhkan } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; penerimaan dasar; iif vmap { "lo" : lompat wan_input } } }
  • Menambahkan arahan "list hooks" untuk memaparkan senarai pengendali bagi keluarga paket yang diberikan: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 rantai ip ab [nf_tables] +0000000300 rantai inet mz [nf_tables] } cangkuk ke hadapan { -0000000225 selinux_ipv4_forward 0000000000 rantai ip ac [nf_tables] } selinux_ipv0000000225_forward 4 cangkuk postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Blok baris gilir membenarkan ungkapan jhash, symhash dan numgen digabungkan untuk mengedarkan paket ke baris gilir dalam ruang pengguna. … gilir ke mod symhash 65536 … bendera gilir memintas ke mod numgen inc 65536 … gilir ke jhash oif . meta mark mod 32 "queue" juga boleh digabungkan dengan senarai peta untuk memilih baris gilir dalam ruang pengguna berdasarkan kekunci sewenang-wenangnya. ... bendera baris gilir memintas ke peta nama oif { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Ia adalah mungkin untuk mengembangkan pembolehubah yang termasuk senarai set ke dalam beberapa peta. takrifkan antara muka = ​​{ eth0, eth1 } jadual ip x { rantai y { type filter hook input priority 0; penerimaan dasar; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; penerimaan dasar; iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop } } }
  • Menggabungkan vmaps (peta keputusan) pada selang waktu dibenarkan: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : terima }
  • Sintaks yang dipermudahkan untuk pemetaan NAT. Dibenarkan untuk menentukan julat alamat: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } atau alamat IP eksplisit dan port: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 : . 80 } atau gabungan julat IP dan port: ... dnat to ip saddr . peta tcp dport { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Sumber: opennet.ru

Tambah komen