Nftables Tutorialtutorial

Nftables Tutorialtutorial

nftablesnftables tutorialtutorial Pablo Neira Ayuso <[email protected]> Userday Netfilter - June 2016 Netherlands Why this? – Abuse of copy and paste from iptables iptables ip6tables arptables ebtables x_tables – In the late 90s people were happy with shell scripts – Avoid linear ruleset representations: Use concatenations and maps. – Better incremental updates. – Simplify dual stack IPv4/IPv6 administration and layer 2. – No more dash dash spellings. ByeBye bye bye iptables iptables Let's look at internals... ● Simple like... ”Consul” The Educated Monkey. “Computing Device” by William H. Robertson (1823-1898) – Specific purpose VM ● 22 instructions ● 32/128 addressable regs ● Very simple bytecode verifications ● Extensible like... – Netlink socket interface Let's look at internals... (2) Kernel Netlink nftables nft libnftnl sockets VM Userspace syscalls nftables internals First off: ● nft --debug=netlink add rule ip foo bar ct state new \ First off: ip saddr 192.168.0.0-192.168.0.13 tcp dport 22 accept specifyspecify family, family, tabletable and and ip foo bar chainchain [ ct load state => reg 1 ] [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ] [ cmp neq reg 1 0x00000000 ] [ payload load 4b @ network header + 12 => reg 1 ] [ cmp gte reg 1 0x0000a8c0 ] [ cmp lte reg 1 0x0d00a8c0 ] [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] [ payload load 2b @ transport header + 2 => reg 1 ] [ cmp eq reg 1 0x00001600 ] [ immediate reg 0 accept ] nftables internals ● nft --debug=netlink add rule ip foo bar ct state new \ ip saddr 192.168.0.0-192.168.0.13 tcp dport 22 accept ip foo bar [ ct load state => reg 1 ] [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ] [ cmp neq reg 1 0x00000000 ] [ payload load 4b @ network header + 12 => reg 1 ] [ cmp gte reg 1 0x0000a8c0 ] [ cmp lte reg 1 0x0d00a8c0 ] [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] [ payload load 2b @ transport header + 2 => reg 1 ] [ cmp eq reg 1 0x00001600 ] [ immediate reg 0 accept ] nftables internals ip saddr packet ● nft --debug=netlink add rule ip foo bar ct state new \ ip saddr 192.168.0.0-192.168.0.13 tcp dport 22 accept reg1 reg2 ... regN ip foo bar reg1 >=x && reg1 <= x [ ct load state => reg 1 ] [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ] [ cmp neq reg 1 0x00000000 ] [ payload load 4b @ network header + 12 => reg 1 ] [ cmp gte reg 1 0x0000a8c0 ] [ cmp lte reg 1 0x0d00a8c0 ] [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] [ payload load 2b @ transport header + 2 => reg 1 ] [ cmp eq reg 1 0x00001600 ] [ immediate reg 0 accept ] nftables internals AutomaticAutomatic dependency dependency generation (in yellow): ● generation (in yellow): nft --debug=netlink add rule ip foo bar ct state new \ ip protocol tcp ip saddr 192.168.0.0-192.168.0.13 tcp dport 22 accept ip protocol tcp andand match match for for ip foo bar destinationdestination port port (in (in blue) blue) [ ct load state => reg 1 ] [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ] [ cmp neq reg 1 0x00000000 ] [ payload load 4b @ network header + 12 => reg 1 ] [ cmp gte reg 1 0x0000a8c0 ] [ cmp lte reg 1 0x0d00a8c0 ] [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] [ payload load 2b @ transport header + 2 => reg 1 ] [ cmp eq reg 1 0x00001600 ] [ immediate reg 0 accept ] nftables internals ● nft --debug=netlink add rule ip foo bar ct state new \ ip saddr 192.168.0.0-192.168.0.13 tcp dport 22 accept Ok,Ok, let's let's accept accept thisthis packet! packet! ip foo bar [ ct load state => reg 1 ] [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ] [ cmp neq reg 1 0x00000000 ] [ payload load 4b @ network header + 12 => reg 1 ] [ cmp gte reg 1 0x0000a8c0 ] [ cmp lte reg 1 0x0d00a8c0 ] [ payload load 1b @ network header + 9 => reg 1 ] [ cmp eq reg 1 0x00000006 ] [ payload load 2b @ transport header + 2 => reg 1 ] [ cmp eq reg 1 0x00001600 ] [ immediate reg 0 accept ] Tables, chains and rules ● nft add table ip foo TablesTables are are empty empty byby default default and and they they have have ● nft add chain ip foo bar { \ nono special special semantics semantics type filter hook input priority 0; policy drop; \ } ● nft add rule ip foo bar \ ct state established,related accept nft add rule ip foo bar \ ct state new tcp dport 22 accept Table ip foo Tables, chains and rules ● nft add table ip foo BaseBase chains chains see see traffic traffic fromfrom the the specific specific hook hook and priority ● nft add chain ip foo bar { \ and priority type filter hook input priority 0; policy drop; \ } ● nft add rule ip foo bar \ ct state established,related accept nft add rule ip foo bar \ ct state new tcp dport 22 accept Table ip foo Chain bar Tables, chains and rules ● nft add table ip foo YouYou can can append append new new rulesrules and and insert insert them them ● nft add chain ip foo bar { \ type filter hook input priority 0; policy drop; \ } ● nft add rule ip foo bar \ ct state established,related accept nft add rule ip foo bar \ ct state new tcp dport 22 accept Table ip foo Chain bar Rule Rule Expressions ● nft add rule ip foo bar tcp dport != 80 ● Comparison:Comparison: eq, eq, neq, neq, nft add rule ip foo bar tcp dport 1-1024 SimpleSimple comparisons comparisons gt,gt, gte, gte, lt, lt, lte lte ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Expressions ● nft add rule ip foo bar tcp dport != 80 ● nft add rule ip foo bar tcp dport 1-1024 RangeRange ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Expressions ● nft add rule ip foo bar tcp dport != 80 ● nft add rule ip foo bar tcp dport 1-1024 PrefixesPrefixes ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Expressions ● nft add rule ip foo bar tcp dport != 80 ● nft add rule ip foo bar tcp dport 1-1024 FlagsFlags ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Expressions ● nft add rule ip foo bar tcp dport != 80 ● nft add rule ip foo bar tcp dport 1-1024 BitwiseBitwise + + comparison comparison ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Expressions ● nft add rule ip foo bar tcp dport != 80 ● nft add rule ip foo bar tcp dport 1-1024 SetSet value value ● nft add rule ip foo bar meta skuid 1000-1100 ● nft add rule ip foo bar ip daddr 192.168.10.0/24 ● nft add rule ip foo bar meta mark 0xffffff00/24 ● nft add rule ip foo bar ct state new,established ● nft add rule ip foo bar ct mark and 0xffff == 0x123 ● nft add rule ip foo bar ct mark set 10 ● nft add rule ip foo bar ct mark set meta mark Rules ● Counters are optional (unlike iptables) – nft add rule ip foo bar counter I Ialways always wanted wanted to to loglog and and drop drop with with ● Several actions in one rule oneone single single rule, rule, heh heh – nft add rule ip foo bar ct state invalid \ log prefix “invalid: “ drop ● Interactive mode (no autocompletion yet) – nft -i nft> add table foo Sets and maps ● nft add rule ip foo bar tcp dport { 22, 80, 443 } counter ● nft add set ip foo whitelist { type ipv4_addr \; } nft add rule ip foo bar ip daddr @whitelist counter accept nft add element ip foo whitelist { \ TheThe use use of of brackets brackets from from 192.168.0.1, \ rulesrules result result in in 192.168.0.10 \ anan implicit implicit set set definition definition } ● nft add table ip nat nft add chain ip nat post { \ type nat hook postrouting priority 0\; } nft add rule ip nat post snat ip saddr map { \ 1.1.1.0/24 : 192.168.3.11 , \ 2.2.2.0/24 : 192.168.3.12 \ } Sets and maps ● nft add rule ip foo bar tcp dport { 22, 80, 443 } counter ● nft add set ip foo whitelist { type ipv4_addr \; } nft add rule ip foo bar ip daddr @whitelist counter accept nft add element ip foo whitelist { \ SetSet declarations declarations require require 192.168.0.1, \ aa name name and and datatype datatype for for 192.168.0.10 \ elementselements } ● nft add table ip nat nft add chain ip nat post { \ type nat hook postrouting priority 0\; } nft add rule ip nat post snat ip saddr map { \ 1.1.1.0/24 : 192.168.3.11 , \ 2.2.2.0/24 : 192.168.3.12 \ } Sets and maps ● nft add rule ip foo bar tcp dport { 22, 80, 443 } counter ● nft

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    33 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us