<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.nftables.org/wiki-nftables/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fw</id>
	<title>nftables wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.nftables.org/wiki-nftables/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fw"/>
	<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php/Special:Contributions/Fw"/>
	<updated>2026-04-05T18:22:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=1166</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=1166"/>
		<updated>2025-07-14T14:49:18Z</updated>

		<summary type="html">&lt;p&gt;Fw: TCPOPTSTRIP is supported via nft_exthdr since 2022.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Mar/2022&lt;br /&gt;
&lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
&lt;br /&gt;
== Unsupported extensions ==&lt;br /&gt;
&lt;br /&gt;
=== matches: xt ===&lt;br /&gt;
&lt;br /&gt;
==== bpf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== rateest ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== string ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== u32 ====&lt;br /&gt;
* raw expressions?&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===&lt;br /&gt;
&lt;br /&gt;
==== CHECKSUM ====&lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====&lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].&lt;br /&gt;
==== IDLETIMER ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====&lt;br /&gt;
* consider native (need this?)&lt;br /&gt;
==== RATEEST ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== TTL ====&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
&lt;br /&gt;
==== NPT ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==&lt;br /&gt;
(Links updated via [http://nwl.cc/~n0-1/update_nftables_wiki_xlate_links.sh script].)&lt;br /&gt;
&lt;br /&gt;
=== matches: xt ===&lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Matching routing information]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_addrtype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cgroup.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Awaits support for cgroup2]&lt;br /&gt;
&lt;br /&gt;
==== cluster ====&lt;br /&gt;
* nft_hash&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cluster.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_headers#Matching_UDP.2FTCP_headers_in_the_same_rule|matching UDP/TCP headers in the same rule]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_comment.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== connbytes ====&lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connbytes.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connlabel ====&lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connlabel.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connlimit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connmark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_conntrack.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cpu.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== dccp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_dccp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_devgroup.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== dscp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_dscp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ecn ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_ecn.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== esp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_esp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== hashlimit ====&lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_hashlimit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== helper ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_helper.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_ipcomp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====&lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_iprange.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_length.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_limit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== mac ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_mac.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_mark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== multiport ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_multiport.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_owner.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : socket-exists]&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_pkttype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, since 5.0&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_policy.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== recent ====&lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== sctp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* nft_exthdr for --chunk-types&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_sctp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_socket.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_statistic.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.&lt;br /&gt;
==== state ====&lt;br /&gt;
* nft_ct&lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_tcp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== tcpmss ====&lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_tcpmss.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== time ====&lt;br /&gt;
* nft_meta, since 5.4&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_time.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== udp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_udp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===&lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====&lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_AUDIT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CLASSIFY ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_CLASSIFY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CONNMARK ====&lt;br /&gt;
* nft_ct&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_CONNMARK.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_DSCP.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_MARK.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== NETMAP ====&lt;br /&gt;
* nft_nat, upcoming 5.8&lt;br /&gt;
==== NFLOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_NFLOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== NFQUEUE ====&lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_NFQUEUE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_SYNPROXY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TEE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TPROXY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TRACE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====&lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TCPMSS.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TCPOPTSTRIP ====&lt;br /&gt;
* nft_exthdr, since 5.18&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== ah ====&lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_ah.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_icmp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====&lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_realm.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_ttl.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===&lt;br /&gt;
&lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ah  ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_ah.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_frag.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_hbh.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_hl.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_icmp6.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_mh.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_rt.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_DNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_LOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_MASQUERADE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_REDIRECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====&lt;br /&gt;
* nft_reject_ipv4, since 3.13.&lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_REJECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_SNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_DNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_LOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_MASQUERADE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_REDIRECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====&lt;br /&gt;
* nft_reject_ipv6, since 3.14.&lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_REJECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_SNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_ip.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_ip6.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_limit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_mark_m.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_pkttype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_vlan.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_dnat.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_snat.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_mark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_log.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_nflog.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==&lt;br /&gt;
&lt;br /&gt;
=== matches ===&lt;br /&gt;
&lt;br /&gt;
==== physdev ====&lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.&lt;br /&gt;
==== quota ====&lt;br /&gt;
* nfacct already provides quota support.&lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp&lt;br /&gt;
&lt;br /&gt;
=== targets ===&lt;br /&gt;
&lt;br /&gt;
==== CLUSTERIP ====&lt;br /&gt;
* deprecated by cluster match.&lt;br /&gt;
==== TOS ====&lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== ULOG ====&lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=1165</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=1165"/>
		<updated>2025-07-14T14:47:20Z</updated>

		<summary type="html">&lt;p&gt;Fw: tcpoptstrip is supported since 2022, remove from unsupported list.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Mar/2022&lt;br /&gt;
&lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
&lt;br /&gt;
== Unsupported extensions ==&lt;br /&gt;
&lt;br /&gt;
=== matches: xt ===&lt;br /&gt;
&lt;br /&gt;
==== bpf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== rateest ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== string ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== u32 ====&lt;br /&gt;
* raw expressions?&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===&lt;br /&gt;
&lt;br /&gt;
==== CHECKSUM ====&lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====&lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].&lt;br /&gt;
==== IDLETIMER ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====&lt;br /&gt;
* consider native (need this?)&lt;br /&gt;
==== RATEEST ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== TTL ====&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
&lt;br /&gt;
==== NPT ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==&lt;br /&gt;
(Links updated via [http://nwl.cc/~n0-1/update_nftables_wiki_xlate_links.sh script].)&lt;br /&gt;
&lt;br /&gt;
=== matches: xt ===&lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Matching routing information]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_addrtype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cgroup.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Awaits support for cgroup2]&lt;br /&gt;
&lt;br /&gt;
==== cluster ====&lt;br /&gt;
* nft_hash&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cluster.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_headers#Matching_UDP.2FTCP_headers_in_the_same_rule|matching UDP/TCP headers in the same rule]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_comment.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== connbytes ====&lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connbytes.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connlabel ====&lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connlabel.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connlimit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_connmark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_conntrack.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_cpu.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== dccp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_dccp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_devgroup.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== dscp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_dscp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ecn ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_ecn.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== esp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_esp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== hashlimit ====&lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_hashlimit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== helper ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_helper.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_ipcomp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====&lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_iprange.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_length.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_limit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== mac ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_mac.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_mark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== multiport ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_multiport.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_owner.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported option : socket-exists]&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_pkttype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, since 5.0&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_policy.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== recent ====&lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== sctp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* nft_exthdr for --chunk-types&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_sctp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_socket.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_statistic.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.&lt;br /&gt;
==== state ====&lt;br /&gt;
* nft_ct&lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_tcp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== tcpmss ====&lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_tcpmss.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== time ====&lt;br /&gt;
* nft_meta, since 5.4&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_time.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== udp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_udp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===&lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====&lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_AUDIT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CLASSIFY ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_CLASSIFY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CONNMARK ====&lt;br /&gt;
* nft_ct&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_CONNMARK.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_DSCP.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_MARK.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== NETMAP ====&lt;br /&gt;
* nft_nat, upcoming 5.8&lt;br /&gt;
==== NFLOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_NFLOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== NFQUEUE ====&lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_NFQUEUE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_SYNPROXY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TEE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TPROXY.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====&lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TRACE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====&lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libxt_TCPMSS.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== ah ====&lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_ah.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_icmp.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====&lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_realm.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_ttl.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===&lt;br /&gt;
&lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ah  ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_ah.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_frag.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_hbh.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_hl.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_icmp6.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_mh.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_rt.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_DNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_LOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_MASQUERADE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_REDIRECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====&lt;br /&gt;
* nft_reject_ipv4, since 3.13.&lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_REJECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libipt_SNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_DNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_LOG.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_MASQUERADE.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_REDIRECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====&lt;br /&gt;
* nft_reject_ipv6, since 3.14.&lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_REJECT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
==== SNAT ====&lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libip6t_SNAT.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_ip.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_ip6.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_limit.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_mark_m.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_pkttype.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_vlan.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_dnat.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_snat.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_mark.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_log.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
* [https://git.netfilter.org/iptables/tree/extensions/libebt_nflog.txlate Examples from iptables-translate testsuite]&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==&lt;br /&gt;
&lt;br /&gt;
=== matches ===&lt;br /&gt;
&lt;br /&gt;
==== physdev ====&lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.&lt;br /&gt;
==== quota ====&lt;br /&gt;
* nfacct already provides quota support.&lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp&lt;br /&gt;
&lt;br /&gt;
=== targets ===&lt;br /&gt;
&lt;br /&gt;
==== CLUSTERIP ====&lt;br /&gt;
* deprecated by cluster match.&lt;br /&gt;
==== TOS ====&lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
&lt;br /&gt;
==== ULOG ====&lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Nftables_families&amp;diff=1134</id>
		<title>Nftables families</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Nftables_families&amp;diff=1134"/>
		<updated>2024-05-29T11:41:34Z</updated>

		<summary type="html">&lt;p&gt;Fw: inet ingress was added in d3519cb89f6d (v5.10-rc1)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://netfilter.org/ Netfilter] enables filtering at multiple [https://en.wikipedia.org/wiki/Internet_protocol_suite networking levels]. With iptables there is a separate tool for each level: &#039;&#039;iptables&#039;&#039;, &#039;&#039;ip6tables&#039;&#039;, &#039;&#039;arptables&#039;&#039;, &#039;&#039;ebtables&#039;&#039;. With nftables the multiple networking levels are abstracted into &#039;&#039;&#039;families&#039;&#039;&#039;, all of which are served by the single tool &#039;&#039;nft&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please note that what traffic/packets you see and at which point in the network stack depends on the [[Netfilter_hooks|&#039;&#039;&#039;hook&#039;&#039;&#039;]] you are using.&lt;br /&gt;
&lt;br /&gt;
Following are descriptions of current nftables families. Additional families may be added in the future.&lt;br /&gt;
&lt;br /&gt;
== ip ==&lt;br /&gt;
&lt;br /&gt;
Tables of this family see [https://en.wikipedia.org/wiki/IPv4 IPv4] traffic/packets.&lt;br /&gt;
The &#039;&#039;iptables&#039;&#039; tool is the legacy x_tables equivalent.&lt;br /&gt;
&lt;br /&gt;
== ip6 ==&lt;br /&gt;
&lt;br /&gt;
Tables of this family see [https://en.wikipedia.org/wiki/IPv6 IPv6] traffic/packets.&lt;br /&gt;
The &#039;&#039;ip6tables&#039;&#039; tool is the legacy x_tables equivalent.&lt;br /&gt;
&lt;br /&gt;
== inet ==&lt;br /&gt;
&lt;br /&gt;
Tables of this family see both IPv4 and IPv6 traffic/packets, simplifying dual stack support.&lt;br /&gt;
&lt;br /&gt;
Within a table of &#039;&#039;inet&#039;&#039; family, both IPv4 and IPv6 packets traverse the same rules. Rules for IPv4 packets don&#039;t affect IPv6 packets and vice-versa. Rules for both layer 3 protocols affect both. Use [[Matching_packet_headers#Matching_transport_protocol|meta l4proto]] to match on the layer 4 protocol regardless the packet is either IPv4 or IPv6.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
# This rule affects only IPv4 packets:&lt;br /&gt;
add rule inet filter input ip saddr 1.1.1.1 counter accept&lt;br /&gt;
&lt;br /&gt;
# This rule affects only IPv6 packets:&lt;br /&gt;
add rule inet filter input ip6 daddr fe00::2 counter accept&lt;br /&gt;
&lt;br /&gt;
# These rules affect both IPv4 and IPv6 packets:&lt;br /&gt;
add rule inet filter input ct state established,related counter accept&lt;br /&gt;
add rule inet filter input udp dport 53 accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
New in nftables 0.9.7 and Linux kernel 5.10 is the inet family [[Netfilter_hooks|&#039;&#039;ingress&#039;&#039;]] hook, which filters at the same location as the netdev &#039;&#039;ingress&#039;&#039; hook.&lt;br /&gt;
&lt;br /&gt;
== arp ==&lt;br /&gt;
&lt;br /&gt;
Tables of this family see [https://en.wikipedia.org/wiki/Address_Resolution_Protocol ARP]-level (i.e, L2) traffic, before any L3 handling is done by the kernel. The &#039;&#039;arptables&#039;&#039; tool is the legacy x_tables equivalent.&lt;br /&gt;
&lt;br /&gt;
== bridge ==&lt;br /&gt;
&lt;br /&gt;
Tables of this family see traffic/packets traversing [https://wiki.linuxfoundation.org/networking/bridge bridges] (i.e. switching). No assumptions are made about L3 protocols.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ebtables&#039;&#039; tool is the legacy x_tables equivalent. Some old x_tables modules such as &#039;&#039;physdev&#039;&#039; will also eventually be served from the nftables &#039;&#039;bridge&#039;&#039; family.&lt;br /&gt;
&lt;br /&gt;
Note that there is no nf_conntrack integration for the nftables &#039;&#039;bridge&#039;&#039; family.&lt;br /&gt;
&lt;br /&gt;
== netdev ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;netdev&#039;&#039; family is different from the others in that it is used to create base chains attached to a &#039;&#039;&#039;single network interface&#039;&#039;&#039;. Such base chains see &#039;&#039;&#039;all&#039;&#039;&#039; network traffic on the specified interface, with no assumptions about L2 or L3 protocols. Therefore you can filter ARP traffic from here. There is no legacy x_tables equivalent to the &#039;&#039;netdev&#039;&#039; family.&lt;br /&gt;
&lt;br /&gt;
The principal (only?) use for this family is for base chains using the [[Netfilter_hooks|&#039;&#039;ingress&#039;&#039; hook]], new in Linux kernel 4.2. Such &#039;&#039;ingress&#039;&#039; chains see network packets just after the NIC driver passes them up to the networking stack. This very early location in the packet path is ideal for dropping packets associated with [https://en.wikipedia.org/wiki/Denial-of-service_attack#Distributed_attack DDoS] attacks. Dropping packets from an &#039;&#039;ingress&#039;&#039; chain is twice as efficient as doing so from a &#039;&#039;prerouting&#039;&#039; chain.  (Do note that in an &#039;&#039;ingress&#039;&#039; chain, fragmented datagrams have not yet been reassembled. So, for example, matching ip saddr and daddr works for all ip packets, but matching L4 headers like udp dport works only for unfragmented packets, or the first fragment.)&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;ingress&#039;&#039; hook provides an alternative to &#039;&#039;tc&#039;&#039; ingress filtering. You still need &#039;&#039;tc&#039;&#039; for traffic shaping/queue management. &lt;br /&gt;
&lt;br /&gt;
You can also use the &#039;&#039;ingress&#039;&#039; hook for [[load balancing]], including Direct Server Return (DSR), [https://netdevconf.org/1.2/slides/oct6/08_nftables_Load_Balancing_with_nftables_II_Slides.pdf that has been reported to be 10x faster].&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Updating_sets_from_the_packet_path&amp;diff=1075</id>
		<title>Updating sets from the packet path</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Updating_sets_from_the_packet_path&amp;diff=1075"/>
		<updated>2023-02-27T08:28:56Z</updated>

		<summary type="html">&lt;p&gt;Fw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since nftables v0.7 you can update sets from the packet path, i.e., update the content of a set based on the packets the firewall is receiving.&lt;br /&gt;
&lt;br /&gt;
This usually used in combination with [[Element timeouts]], and one of the main use cases in to create dynamic black lists or ban lists.&lt;br /&gt;
&lt;br /&gt;
There are two main operations: &#039;&#039;&#039;add&#039;&#039;&#039; and &#039;&#039;&#039;update&#039;&#039;&#039;, which differs in how they modify any previous element timeout. The &#039;&#039;&#039;update&#039;&#039;&#039; command refreshes the element timeout for each packet seen, while &#039;&#039;&#039;add&#039;&#039;&#039; does not.&lt;br /&gt;
&lt;br /&gt;
An example using the &#039;&#039;&#039;update&#039;&#039;&#039; operation, with timeouts, follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 % nft add table filter&lt;br /&gt;
 % nft add chain filter input { type filter hook input priority 0\; }&lt;br /&gt;
 % nft add set filter myset { type inet_service\; flags timeout,dynamic\; }&lt;br /&gt;
 % nft add rule filter input set update tcp dport timeout 60s @myset&lt;br /&gt;
 % nft list ruleset&lt;br /&gt;
 table ip filter {&lt;br /&gt;
        set myset {&lt;br /&gt;
                type inet_service&lt;br /&gt;
                flags timeout&lt;br /&gt;
                elements = { http expires 9s}&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                update @myset { tcp dport timeout 1m }&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example uses the &#039;&#039;&#039;add&#039;&#039;&#039; operation in a set without timeouts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 % nft add table filter&lt;br /&gt;
 % nft add chain filter input { type filter hook input priority 0\; }&lt;br /&gt;
 % nft add set filter myset { type ipv4_addr\; }&lt;br /&gt;
 % nft add rule filter input set add ip saddr @myset&lt;br /&gt;
 % nft list ruleset&lt;br /&gt;
 table ip filter {&lt;br /&gt;
        set myset {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1 }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                add @myset { ip saddr }&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_updates_since_Linux_kernel_3.13&amp;diff=1074</id>
		<title>List of updates since Linux kernel 3.13</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_updates_since_Linux_kernel_3.13&amp;diff=1074"/>
		<updated>2023-01-18T16:11:00Z</updated>

		<summary type="html">&lt;p&gt;Fw: inner header matching&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A listing of the development progress.&lt;br /&gt;
&lt;br /&gt;
== 6.2 ==&lt;br /&gt;
&lt;br /&gt;
* Support for inner header matching, such as &amp;quot;udp dport 6081 geneve ip saddr 10.141.11.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 5.6 ==&lt;br /&gt;
&lt;br /&gt;
* Support for ranges (intervals) in concatenations&lt;br /&gt;
&lt;br /&gt;
== 4.16 ==&lt;br /&gt;
&lt;br /&gt;
* flowtable support&lt;br /&gt;
&lt;br /&gt;
== 4.15 ==&lt;br /&gt;
&lt;br /&gt;
* Fetch single elements of a set (i.e, nft get element)&lt;br /&gt;
&lt;br /&gt;
== 4.10 ==&lt;br /&gt;
&lt;br /&gt;
* notrack support&lt;br /&gt;
&lt;br /&gt;
== 4.3 ==&lt;br /&gt;
&lt;br /&gt;
* Enhancements for the limit expression, support for ratelimit bytes/time unit.&lt;br /&gt;
* Dup expression (equivalent to the &#039;&#039;TEE&#039;&#039; target in iptables) for IPv4 and IPv6.&lt;br /&gt;
* VLAN header matching support when NIC support offloads.&lt;br /&gt;
&lt;br /&gt;
== 4.2 ==&lt;br /&gt;
&lt;br /&gt;
* New &#039;netdev&#039; family for filtering from ingress.&lt;br /&gt;
* Context to x_tables extensions to know if they run from nft_compat.&lt;br /&gt;
&lt;br /&gt;
== 4.1 ==&lt;br /&gt;
&lt;br /&gt;
Major updates in the generic set infrastructure:&lt;br /&gt;
&lt;br /&gt;
* Concatenations.&lt;br /&gt;
* Timeout per set elements.&lt;br /&gt;
* Comments per set elements.&lt;br /&gt;
* Dynamic set instantiation.&lt;br /&gt;
&lt;br /&gt;
== 4.0 ==&lt;br /&gt;
&lt;br /&gt;
* Mostly fixes.&lt;br /&gt;
&lt;br /&gt;
== 3.19 ==&lt;br /&gt;
&lt;br /&gt;
* redirect support.&lt;br /&gt;
&lt;br /&gt;
== 3.18 ==&lt;br /&gt;
&lt;br /&gt;
* masquerading support.&lt;br /&gt;
* meta cpu, devgroup matching.&lt;br /&gt;
* reject bridge support.&lt;br /&gt;
* destroy table and its content, ie. &#039;&#039;nft flush ruleset&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== 3.17 ==&lt;br /&gt;
&lt;br /&gt;
* log and nflog support for ip, ip6, arp and bridge families.&lt;br /&gt;
&lt;br /&gt;
== 3.16 ==&lt;br /&gt;
&lt;br /&gt;
* connlabel support.&lt;br /&gt;
&lt;br /&gt;
== 3.15 ==&lt;br /&gt;
&lt;br /&gt;
* Comments per rule support.&lt;br /&gt;
* IPv4 reject support.&lt;br /&gt;
&lt;br /&gt;
== 3.14 ==&lt;br /&gt;
&lt;br /&gt;
* set packet mark support.&lt;br /&gt;
* nfqueue support (only for ip and ip6 families).&lt;br /&gt;
* rule tracing support.&lt;br /&gt;
* IPv6 and inet reject support.&lt;br /&gt;
&lt;br /&gt;
== 3.13 ==&lt;br /&gt;
&lt;br /&gt;
* nf_tables merged mainstream.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Quick_reference-nftables_in_10_minutes&amp;diff=1041</id>
		<title>Quick reference-nftables in 10 minutes</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Quick_reference-nftables_in_10_minutes&amp;diff=1041"/>
		<updated>2021-10-01T13:43:38Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Chains */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Find below some basic concepts to know before using nftables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; refers to a container of [[Configuring chains|chains]] with no specific semantics.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;chain&#039;&#039;&#039; within a [[Configuring tables|table]] refers to a container of [[Simple rule management|rules]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rule&#039;&#039;&#039; refers to an action to be configured within a &#039;&#039;chain&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= nft command line =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;nft&#039;&#039; is the command line tool in order to interact with nftables at userspace.&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;family&#039;&#039;&#039; refers to a one of the following table types: &#039;&#039;ip&#039;&#039;, &#039;&#039;arp&#039;&#039;, &#039;&#039;ip6&#039;&#039;, &#039;&#039;bridge&#039;&#039;, &#039;&#039;inet&#039;&#039;, &#039;&#039;netdev&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list tables [&amp;lt;family&amp;gt;]&lt;br /&gt;
% nft list table [&amp;lt;family&amp;gt;] &amp;lt;name&amp;gt; [-n] [-a]&lt;br /&gt;
% nft (add | delete | flush) table [&amp;lt;family&amp;gt;] &amp;lt;name&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument &#039;&#039;-n&#039;&#039; shows the addresses and other information that uses names in numeric format. The &#039;&#039;-a&#039;&#039; argument is used to display the &#039;&#039;handle&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Chains ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;type&#039;&#039;&#039; refers to the kind of chain to be created. Possible types are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;filter&#039;&#039;: Supported by &#039;&#039;arp&#039;&#039;, &#039;&#039;bridge&#039;&#039;, &#039;&#039;ip&#039;&#039;, &#039;&#039;ip6&#039;&#039; and &#039;&#039;inet&#039;&#039; table families.&lt;br /&gt;
* &#039;&#039;route&#039;&#039;: Mark packets (like mangle for the &#039;&#039;output&#039;&#039; hook, for other hooks use the type &#039;&#039;filter&#039;&#039; instead), supported by &#039;&#039;ip&#039;&#039; and &#039;&#039;ip6&#039;&#039;.&lt;br /&gt;
* &#039;&#039;nat&#039;&#039;: In order to perform Network Address Translation, supported by &#039;&#039;ip&#039;&#039; and &#039;&#039;ip6&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;hook&#039;&#039;&#039; refers to an specific stage of the packet while it&#039;s being processed through the kernel. More info in [[Netfilter_hooks|Netfilter hooks]].&lt;br /&gt;
&lt;br /&gt;
* The hooks for &#039;&#039;ip&#039;&#039;, &#039;&#039;ip6&#039;&#039; and &#039;&#039;inet&#039;&#039; families are: &#039;&#039;prerouting&#039;&#039;, &#039;&#039;input&#039;&#039;, &#039;&#039;forward&#039;&#039;, &#039;&#039;output&#039;&#039;, &#039;&#039;postrouting&#039;&#039;.&lt;br /&gt;
* The hooks for &#039;&#039;arp&#039;&#039; family are: &#039;&#039; input&#039;&#039;, &#039;&#039;output&#039;&#039;.&lt;br /&gt;
* The &#039;&#039;bridge&#039;&#039; family handles ethernet packets traversing bridge devices.&lt;br /&gt;
* The hook for &#039;&#039;netdev&#039;&#039; is: &#039;&#039;ingress&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;priority&#039;&#039;&#039; refers to a number used to order the chains or to set them between some Netfilter operations. Possible values are: &#039;&#039;NF_IP_PRI_CONNTRACK_DEFRAG (-400)&#039;&#039;, &#039;&#039;NF_IP_PRI_RAW (-300)&#039;&#039;, &#039;&#039;NF_IP_PRI_SELINUX_FIRST (-225)&#039;&#039;, &#039;&#039;NF_IP_PRI_CONNTRACK (-200)&#039;&#039;, &#039;&#039;NF_IP_PRI_MANGLE (-150)&#039;&#039;, &#039;&#039;NF_IP_PRI_NAT_DST (-100)&#039;&#039;, &#039;&#039;NF_IP_PRI_FILTER (0)&#039;&#039;, &#039;&#039;NF_IP_PRI_SECURITY (50)&#039;&#039;, &#039;&#039;NF_IP_PRI_NAT_SRC (100)&#039;&#039;, &#039;&#039;NF_IP_PRI_SELINUX_LAST (225)&#039;&#039;, &#039;&#039;NF_IP_PRI_CONNTRACK_HELPER (300)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;policy&#039;&#039;&#039; is the default verdict statement to control the flow in the base chain. Possible values are: &#039;&#039;accept&#039;&#039; (default) and &#039;&#039;drop&#039;&#039;. Warning: Setting the policy to &#039;&#039;drop&#039;&#039; discards all packets that&lt;br /&gt;
have not been accepted by the ruleset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft (add | create) chain [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt; [ { type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; [device &amp;lt;device&amp;gt;] priority &amp;lt;priority&amp;gt; \; [policy &amp;lt;policy&amp;gt; \;] } ]&lt;br /&gt;
% nft (delete | list | flush) chain [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
% nft rename chain [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt; &amp;lt;newname&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;handle&#039;&#039;&#039; is an internal number that identifies a certain &#039;&#039;rule&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;position&#039;&#039;&#039; is an internal number that is used to insert a &#039;&#039;rule&#039;&#039; before a certain &#039;&#039;handle&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; &amp;lt;matches&amp;gt; &amp;lt;statements&amp;gt;&lt;br /&gt;
% nft insert rule [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; [position &amp;lt;position&amp;gt;] &amp;lt;matches&amp;gt; &amp;lt;statements&amp;gt;&lt;br /&gt;
% nft replace rule [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; [handle &amp;lt;handle&amp;gt;] &amp;lt;matches&amp;gt; &amp;lt;statements&amp;gt;&lt;br /&gt;
% nft delete rule [&amp;lt;family&amp;gt;] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; [handle &amp;lt;handle&amp;gt;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;matches&#039;&#039;&#039; are clues used to access to certain packet information and create filters according to them.&lt;br /&gt;
&lt;br /&gt;
==== Ip ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|ip match&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;dscp &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip dscp cs1&lt;br /&gt;
ip dscp != cs1&lt;br /&gt;
ip dscp 0x38&lt;br /&gt;
ip dscp != 0x20&lt;br /&gt;
ip dscp {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, af11, af12, af13, af21, &lt;br /&gt;
af22, af23, af31, af32, af33, af41, af42, af43, ef}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;length &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Total packet length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip length 232&lt;br /&gt;
ip length != 233&lt;br /&gt;
ip length 333-435&lt;br /&gt;
ip length != 333-453&lt;br /&gt;
ip length { 333, 553, 673, 838}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id &amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
| IP ID&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip id 22&lt;br /&gt;
ip id != 233&lt;br /&gt;
ip id 33-45&lt;br /&gt;
ip id != 33-45&lt;br /&gt;
ip id { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;frag-off &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Fragmentation offset&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip frag-off 222&lt;br /&gt;
ip frag-off != 233&lt;br /&gt;
ip frag-off 33-45&lt;br /&gt;
ip frag-off != 33-45&lt;br /&gt;
ip frag-off { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ttl &amp;lt;ttl&amp;gt;&#039;&#039;&lt;br /&gt;
| Time to live&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip ttl 0&lt;br /&gt;
ip ttl 233&lt;br /&gt;
ip ttl 33-55&lt;br /&gt;
ip ttl != 45-50&lt;br /&gt;
ip ttl { 43, 53, 45 }&lt;br /&gt;
ip ttl { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;protocol &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| Upper layer protocol&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip protocol tcp&lt;br /&gt;
ip protocol 6&lt;br /&gt;
ip protocol != tcp&lt;br /&gt;
ip protocol { icmp, esp, ah, comp, udp, udplite, tcp, dccp, sctp }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;checksum&amp;gt;&#039;&#039;&lt;br /&gt;
| IP header checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip checksum 13172&lt;br /&gt;
ip checksum 22&lt;br /&gt;
ip checksum != 233&lt;br /&gt;
ip checksum 33-45&lt;br /&gt;
ip checksum != 33-45&lt;br /&gt;
ip checksum { 33, 55, 67, 88 }&lt;br /&gt;
ip checksum { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;saddr &amp;lt;ip source address&amp;gt;&#039;&#039;&lt;br /&gt;
| Source address&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip saddr 192.168.2.0/24&lt;br /&gt;
ip saddr != 192.168.2.0/24&lt;br /&gt;
ip saddr 192.168.3.1 ip daddr 192.168.3.100&lt;br /&gt;
ip saddr != 1.1.1.1&lt;br /&gt;
ip saddr 1.1.1.1&lt;br /&gt;
ip saddr &amp;amp; 0xff == 1&lt;br /&gt;
ip saddr &amp;amp; 0.0.0.255 &amp;lt; 0.0.0.127&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;daddr &amp;lt;ip destination address&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination address&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip daddr 192.168.0.1&lt;br /&gt;
ip daddr != 192.168.0.1&lt;br /&gt;
ip daddr 192.168.0.1-192.168.0.250&lt;br /&gt;
ip daddr 10.0.0.0-10.255.255.255&lt;br /&gt;
ip daddr 172.16.0.0-172.31.255.255&lt;br /&gt;
ip daddr 192.168.3.1-192.168.4.250&lt;br /&gt;
ip daddr != 192.168.0.1-192.168.0.250&lt;br /&gt;
ip daddr { 192.168.0.1-192.168.0.250 }&lt;br /&gt;
ip daddr { 192.168.5.1, 192.168.5.2, 192.168.5.3 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;version &amp;lt;version&amp;gt;&#039;&#039;&lt;br /&gt;
| Ip Header version&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip version 4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;header length&amp;gt;&#039;&#039;&lt;br /&gt;
| IP header length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip hdrlength 0&lt;br /&gt;
ip hdrlength 15&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Ip6 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|ip6 match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dscp &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 dscp cs1&lt;br /&gt;
ip6 dscp != cs1&lt;br /&gt;
ip6 dscp 0x38&lt;br /&gt;
ip6 dscp != 0x20&lt;br /&gt;
ip6 dscp {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, af11, af12, af13, af21, af22, af23, af31, af32, af33, af41, af42, af43, ef}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;flowlabel &amp;lt;label&amp;gt;&#039;&#039;&lt;br /&gt;
| Flow label&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 flowlabel 22&lt;br /&gt;
ip6 flowlabel != 233&lt;br /&gt;
ip6 flowlabel { 33, 55, 67, 88 }&lt;br /&gt;
ip6 flowlabel { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;length &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Payload length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 length 232&lt;br /&gt;
ip6 length != 233&lt;br /&gt;
ip6 length 333-435&lt;br /&gt;
ip6 length != 333-453&lt;br /&gt;
ip6 length { 333, 553, 673, 838}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;header&amp;gt;&#039;&#039;&lt;br /&gt;
| Next header type (Upper layer protocol number)&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 nexthdr {esp, udp, ah, comp, udplite, tcp, dccp, sctp, icmpv6}&lt;br /&gt;
ip6 nexthdr esp&lt;br /&gt;
ip6 nexthdr != esp&lt;br /&gt;
ip6 nexthdr { 33-44 }&lt;br /&gt;
ip6 nexthdr 33-44&lt;br /&gt;
ip6 nexthdr != 33-44&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hoplimit &amp;lt;hoplimit&amp;gt;&#039;&#039;&lt;br /&gt;
| Hop limit&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 hoplimit 1&lt;br /&gt;
ip6 hoplimit != 233&lt;br /&gt;
ip6 hoplimit 33-45&lt;br /&gt;
ip6 hoplimit != 33-45&lt;br /&gt;
ip6 hoplimit {33, 55, 67, 88}&lt;br /&gt;
ip6 hoplimit {33-55}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;saddr &amp;lt;ip source address&amp;gt;&#039;&#039;&lt;br /&gt;
| Source Address&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 saddr 1234:1234:1234:1234:1234:1234:1234:1234&lt;br /&gt;
ip6 saddr ::1234:1234:1234:1234:1234:1234:1234&lt;br /&gt;
ip6 saddr ::/64&lt;br /&gt;
ip6 saddr ::1 ip6 daddr ::2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;daddr &amp;lt;ip destination address&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination Address&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 daddr 1234:1234:1234:1234:1234:1234:1234:1234&lt;br /&gt;
ip6 daddr != ::1234:1234:1234:1234:1234:1234:1234-1234:1234::1234:1234:1234:1234:1234&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;version &amp;lt;version&amp;gt;&#039;&#039;&lt;br /&gt;
| IP header version&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6 version 6&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Tcp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|tcp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dport &amp;lt;destination port&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp dport 22&lt;br /&gt;
tcp dport != 33-45&lt;br /&gt;
tcp dport { 33-55 }&lt;br /&gt;
tcp dport {telnet, http, https }&lt;br /&gt;
tcp dport vmap { 22 : accept, 23 : drop }&lt;br /&gt;
tcp dport vmap { 25:accept, 28:drop }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sport &amp;lt; source port&amp;gt;&#039;&#039;&lt;br /&gt;
| Source port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp sport 22&lt;br /&gt;
tcp sport != 33-45&lt;br /&gt;
tcp sport { 33, 55, 67, 88}&lt;br /&gt;
tcp sport { 33-55}&lt;br /&gt;
tcp sport vmap { 25:accept, 28:drop }&lt;br /&gt;
tcp sport 1024 tcp dport 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sequence &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Sequence number&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp sequence 22&lt;br /&gt;
tcp sequence != 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ackseq &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Acknowledgement number&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp ackseq 22&lt;br /&gt;
tcp ackseq != 33-45&lt;br /&gt;
tcp ackseq { 33, 55, 67, 88 }&lt;br /&gt;
tcp ackseq { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;flags &amp;lt;flags&amp;gt;&#039;&#039;&lt;br /&gt;
| TCP flags&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp flags { fin, syn, rst, psh, ack, urg, ecn, cwr}&lt;br /&gt;
tcp flags cwr&lt;br /&gt;
tcp flags != cwr&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;window &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Window&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp window 22&lt;br /&gt;
tcp window != 33-45&lt;br /&gt;
tcp window { 33, 55, 67, 88 }&lt;br /&gt;
tcp window { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;checksum&amp;gt;&#039;&#039;&lt;br /&gt;
| IP header checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp checksum 22&lt;br /&gt;
tcp checksum != 33-45&lt;br /&gt;
tcp checksum { 33, 55, 67, 88 }&lt;br /&gt;
tcp checksum { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;urgptr &amp;lt;pointer&amp;gt;&#039;&#039;&lt;br /&gt;
| Urgent pointer&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp urgptr 22&lt;br /&gt;
tcp urgptr != 33-45&lt;br /&gt;
tcp urgptr { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;doff &amp;lt;offset&amp;gt;&#039;&#039;&lt;br /&gt;
| Data offset&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcp doff 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Udp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|udp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dport &amp;lt;destination port&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udp dport 22&lt;br /&gt;
udp dport != 33-45&lt;br /&gt;
udp dport { 33-55 }&lt;br /&gt;
udp dport {telnet, http, https }&lt;br /&gt;
udp dport vmap { 22 : accept, 23 : drop }&lt;br /&gt;
udp dport vmap { 25:accept, 28:drop }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sport &amp;lt; source port&amp;gt;&#039;&#039;&lt;br /&gt;
| Source port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udp sport 22&lt;br /&gt;
udp sport != 33-45&lt;br /&gt;
udp sport { 33, 55, 67, 88}&lt;br /&gt;
udp sport { 33-55}&lt;br /&gt;
udp sport vmap { 25:accept, 28:drop }&lt;br /&gt;
udp sport 1024 tcp dport 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;length &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Total packet length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udp length 6666&lt;br /&gt;
udp length != 50-65&lt;br /&gt;
udp length { 50, 65 }&lt;br /&gt;
udp length { 35-50 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;checksum&amp;gt;&#039;&#039;&lt;br /&gt;
| UDP checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udp checksum 22&lt;br /&gt;
udp checksum != 33-45&lt;br /&gt;
udp checksum { 33, 55, 67, 88 }&lt;br /&gt;
udp checksum { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Udplite ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|udplite match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dport &amp;lt;destination port&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udplite dport 22&lt;br /&gt;
udplite dport != 33-45&lt;br /&gt;
udplite dport { 33-55 }&lt;br /&gt;
udplite dport {telnet, http, https }&lt;br /&gt;
udplite dport vmap { 22 : accept, 23 : drop }&lt;br /&gt;
udplite dport vmap { 25:accept, 28:drop }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sport &amp;lt; source port&amp;gt;&#039;&#039;&lt;br /&gt;
| Source port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udplite sport 22&lt;br /&gt;
udplite sport != 33-45&lt;br /&gt;
udplite sport { 33, 55, 67, 88}&lt;br /&gt;
udplite sport { 33-55}&lt;br /&gt;
udplite sport vmap { 25:accept, 28:drop }&lt;br /&gt;
udplite sport 1024 tcp dport 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;checksum&amp;gt;&#039;&#039;&lt;br /&gt;
| Checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
udplite checksum 22&lt;br /&gt;
udplite checksum != 33-45&lt;br /&gt;
udplite checksum { 33, 55, 67, 88 }&lt;br /&gt;
udplite checksum { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sctp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|sctp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dport &amp;lt;destination port&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp dport 22&lt;br /&gt;
sctp dport != 33-45&lt;br /&gt;
sctp dport { 33-55 }&lt;br /&gt;
sctp dport {telnet, http, https }&lt;br /&gt;
sctp dport vmap { 22 : accept, 23 : drop }&lt;br /&gt;
sctp dport vmap { 25:accept, 28:drop }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sport &amp;lt; source port&amp;gt;&#039;&#039;&lt;br /&gt;
| Source port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp sport 22&lt;br /&gt;
sctp sport != 33-45&lt;br /&gt;
sctp sport { 33, 55, 67, 88}&lt;br /&gt;
sctp sport { 33-55}&lt;br /&gt;
sctp sport vmap { 25:accept, 28:drop }&lt;br /&gt;
sctp sport 1024 tcp dport 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;checksum&amp;gt;&#039;&#039;&lt;br /&gt;
| Checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp checksum 22&lt;br /&gt;
sctp checksum != 33-45&lt;br /&gt;
sctp checksum { 33, 55, 67, 88 }&lt;br /&gt;
sctp checksum { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;vtag &amp;lt;tag&amp;gt;&#039;&#039;&lt;br /&gt;
| Verification tag&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp vtag 22&lt;br /&gt;
sctp vtag != 33-45&lt;br /&gt;
sctp vtag { 33, 55, 67, 88 }&lt;br /&gt;
sctp vtag { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;chunk &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| Existence of a chunk with given type in packet&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp chunk init exists&lt;br /&gt;
sctp chunk error missing&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;chunk &amp;lt;type&amp;gt; &amp;lt;field&amp;gt;&#039;&#039;&lt;br /&gt;
| A chunk&#039;s field value (implies chunk existence)&lt;br /&gt;
|&amp;lt;sourcex lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sctp chunk init flags 0x1&lt;br /&gt;
sctp chunk data tsn 0x23&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dccp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|dccp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dport &amp;lt;destination port&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dccp dport 22&lt;br /&gt;
dccp dport != 33-45&lt;br /&gt;
dccp dport { 33-55 }&lt;br /&gt;
dccp dport {telnet, http, https }&lt;br /&gt;
dccp dport vmap { 22 : accept, 23 : drop }&lt;br /&gt;
dccp dport vmap { 25:accept, 28:drop }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sport &amp;lt; source port&amp;gt;&#039;&#039;&lt;br /&gt;
| Source port&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dccp sport 22&lt;br /&gt;
dccp sport != 33-45&lt;br /&gt;
dccp sport { 33, 55, 67, 88}&lt;br /&gt;
dccp sport { 33-55}&lt;br /&gt;
dccp sport vmap { 25:accept, 28:drop }&lt;br /&gt;
dccp sport 1024 tcp dport 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| Type of packet&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dccp type {request, response, data, ack, dataack, closereq, close, reset, sync, syncack}&lt;br /&gt;
dccp type request&lt;br /&gt;
dccp type != request&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ah ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|ah match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| AH header length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ah hdrlength 11-23&lt;br /&gt;
ah hdrlength != 11-23&lt;br /&gt;
ah hdrlength {11, 23, 44 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;reserved &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ah reserved 22&lt;br /&gt;
ah reserved != 33-45&lt;br /&gt;
ah reserved {23, 100 }&lt;br /&gt;
ah reserved { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;spi &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ah spi 111&lt;br /&gt;
ah spi != 111-222&lt;br /&gt;
ah spi {111, 122 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sequence &amp;lt;sequence&amp;gt;&#039;&#039;&lt;br /&gt;
| Sequence Number&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ah sequence 123&lt;br /&gt;
ah sequence {23, 25, 33}&lt;br /&gt;
ah sequence != 23-33&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Esp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|esp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;spi &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
esp spi 111&lt;br /&gt;
esp spi != 111-222&lt;br /&gt;
esp spi {111, 122 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sequence &amp;lt;sequence&amp;gt;&#039;&#039;&lt;br /&gt;
| Sequence Number&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
esp sequence 123&lt;br /&gt;
esp sequence {23, 25, 33}&lt;br /&gt;
esp sequence != 23-33&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Comp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|comp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| Next header protocol (Upper layer protocol)&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
comp nexthdr != esp&lt;br /&gt;
comp nexthdr {esp, ah, comp, udp, udplite, tcp, tcp, dccp, sctp}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;flags &amp;lt;flags&amp;gt;&#039;&#039;&lt;br /&gt;
| Flags&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
comp flags 0x0&lt;br /&gt;
comp flags != 0x33-0x45&lt;br /&gt;
comp flags {0x33, 0x55, 0x67, 0x88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cpi &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Compression Parameter Index&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
comp cpi 22&lt;br /&gt;
comp cpi != 33-45&lt;br /&gt;
comp cpi {33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Icmp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|icmp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp type {echo-reply, destination-unreachable, source-quench, redirect, echo-request, time-exceeded, parameter-problem, timestamp-request, timestamp-reply, info-request, info-reply, address-mask-request, address-mask-reply, router-advertisement, router-solicitation}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;code &amp;lt;code&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet code&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp code 111&lt;br /&gt;
icmp code != 33-55&lt;br /&gt;
icmp code { 2, 4, 54, 33, 56}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp checksum 12343&lt;br /&gt;
icmp checksum != 11-343&lt;br /&gt;
icmp checksum { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet id&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp id 12343&lt;br /&gt;
icmp id != 11-343&lt;br /&gt;
icmp id { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sequence &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet sequence&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp sequence 12343&lt;br /&gt;
icmp sequence != 11-343&lt;br /&gt;
icmp sequence { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mtu &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet mtu&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp mtu 12343&lt;br /&gt;
icmp mtu != 11-343&lt;br /&gt;
icmp mtu { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;gateway &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMP packet gateway&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmp gateway 12343&lt;br /&gt;
icmp gateway != 11-343&lt;br /&gt;
icmp gateway { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Icmpv6 ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|icmpv6 match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 type {destination-unreachable, packet-too-big, time-exceeded, echo-request, echo-reply, mld-listener-query, mld-listener-report, mld-listener-reduction, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, nd-redirect, parameter-problem, router-renumbering}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;code &amp;lt;code&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet code&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 code 4&lt;br /&gt;
icmpv6 code 3-66&lt;br /&gt;
icmpv6 code {5, 6, 7}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet checksum&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 checksum 12343&lt;br /&gt;
icmpv6 checksum != 11-343&lt;br /&gt;
icmpv6 checksum { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet id&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 id 12343&lt;br /&gt;
icmpv6 id != 11-343&lt;br /&gt;
icmpv6 id { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;sequence &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet sequence&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 sequence 12343&lt;br /&gt;
icmpv6 sequence != 11-343&lt;br /&gt;
icmpv6 sequence { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mtu &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet mtu&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 mtu 12343&lt;br /&gt;
icmpv6 mtu != 11-343&lt;br /&gt;
icmpv6 mtu { 1111, 222, 343 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;max-delay &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| ICMPv6 packet max delay&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
icmpv6 max-delay 33-45&lt;br /&gt;
icmpv6 max-delay != 33-45&lt;br /&gt;
icmpv6 max-delay {33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ether ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|ether match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;saddr &amp;lt;mac address&amp;gt;&#039;&#039;&lt;br /&gt;
| Source mac address&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ether saddr 00:0f:54:0c:11:04&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ether type vlan&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Dst ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|dst match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;proto&amp;gt;&#039;&#039;&lt;br /&gt;
| Next protocol header&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dst nexthdr { udplite, ipcomp, udp, ah, sctp, esp, dccp, tcp, ipv6-icmp}&lt;br /&gt;
dst nexthdr 22&lt;br /&gt;
dst nexthdr != 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Header Length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dst hdrlength 22&lt;br /&gt;
dst hdrlength != 33-45&lt;br /&gt;
dst hdrlength { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Frag ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|frag match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;proto&amp;gt;&#039;&#039;&lt;br /&gt;
| Next protocol header&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frag nexthdr { udplite, comp, udp, ah, sctp, esp, dccp, tcp, ipv6-icmp, icmp}&lt;br /&gt;
frag nexthdr 6&lt;br /&gt;
frag nexthdr != 50-51&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;reserved &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frag reserved 22&lt;br /&gt;
frag reserved != 33-45&lt;br /&gt;
frag reserved { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;frag-off &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frag frag-off 22&lt;br /&gt;
frag frag-off != 33-45&lt;br /&gt;
frag frag-off { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;more-fragments &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frag more-fragments 0&lt;br /&gt;
frag more-fragments 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frag id 1&lt;br /&gt;
frag id 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hbh ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|hbh match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;proto&amp;gt;&#039;&#039;&lt;br /&gt;
| Next protocol header&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hbh nexthdr { udplite, comp, udp, ah, sctp, esp, dccp, tcp, icmpv6}&lt;br /&gt;
hbh nexthdr 22&lt;br /&gt;
hbh nexthdr != 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Header Length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hbh hdrlength 22&lt;br /&gt;
hbh hdrlength != 33-45&lt;br /&gt;
hbh hdrlength { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Mh ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|mh match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;proto&amp;gt;&#039;&#039;&lt;br /&gt;
| Next protocol header&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mh nexthdr { udplite, ipcomp, udp, ah, sctp, esp, dccp, tcp, ipv6-icmp }&lt;br /&gt;
mh nexthdr 22&lt;br /&gt;
mh nexthdr != 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Header Length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mh hdrlength 22&lt;br /&gt;
mh hdrlength != 33-45&lt;br /&gt;
mh hdrlength { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mh type {binding-refresh-request, home-test-init, careof-test-init, home-test, careof-test, binding-update, binding-acknowledgement, binding-error, fast-binding-update, fast-binding-acknowledgement, fast-binding-advertisement, experimental-mobility-header, home-agent-switch-message}&lt;br /&gt;
mh type home-agent-switch-message&lt;br /&gt;
mh type != home-agent-switch-message&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;reserved &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mh reserved 22&lt;br /&gt;
mh reserved != 33-45&lt;br /&gt;
mh reserved { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;checksum &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mh checksum 22&lt;br /&gt;
mh checksum != 33-45&lt;br /&gt;
mh checksum { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rt ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|rt match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nexthdr &amp;lt;proto&amp;gt;&#039;&#039;&lt;br /&gt;
| Next protocol header&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rt nexthdr { udplite, ipcomp, udp, ah, sctp, esp, dccp, tcp, ipv6-icmp }&lt;br /&gt;
rt nexthdr 22&lt;br /&gt;
rt nexthdr != 33-45&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hdrlength &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Header Length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rt hdrlength 22&lt;br /&gt;
rt hdrlength != 33-45&lt;br /&gt;
rt hdrlength { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rt type 22&lt;br /&gt;
rt type != 33-45&lt;br /&gt;
rt type { 33, 55, 67, 88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;seg-left &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rt seg-left 22&lt;br /&gt;
rt seg-left != 33-45&lt;br /&gt;
rt seg-left { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vlan ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|vlan match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Vlan tag ID&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vlan id 4094&lt;br /&gt;
vlan id 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cfi &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vlan cfi 0&lt;br /&gt;
vlan cfi 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;pcp &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
vlan pcp 7&lt;br /&gt;
vlan pcp 3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Arp ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|arp match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;ptype &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Payload type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arp ptype 0x0800&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;htype &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Header type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arp htype 1&lt;br /&gt;
arp htype != 33-45&lt;br /&gt;
arp htype { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;hlen &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Header Length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arp hlen 1&lt;br /&gt;
arp hlen != 33-45&lt;br /&gt;
arp hlen { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;plen &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Payload length&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arp plen 1&lt;br /&gt;
arp plen != 33-45&lt;br /&gt;
arp plen { 33, 55, 67, 88}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;operation &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arp operation {nak, inreply, inrequest, rreply, rrequest, reply, request}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ct ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|ct match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;state &amp;lt;state&amp;gt;&#039;&#039;&lt;br /&gt;
| State of the connection&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct state { new, established, related, untracked }&lt;br /&gt;
ct state != related&lt;br /&gt;
ct state established&lt;br /&gt;
ct state 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;direction &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| Direction of the packet relative to the connection&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct direction original&lt;br /&gt;
ct direction != original&lt;br /&gt;
ct direction {reply, original}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;status &amp;lt;status&amp;gt;&#039;&#039;&lt;br /&gt;
| Status of the connection&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct status expected&lt;br /&gt;
(ct status &amp;amp; expected) != expected&lt;br /&gt;
ct status {expected,seen-reply,assured,confirmed,snat,dnat,dying}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mark [set] &amp;lt;mark&amp;gt;&#039;&#039;&lt;br /&gt;
| Mark of the connection&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct mark 0&lt;br /&gt;
ct mark or 0x23 == 0x11&lt;br /&gt;
ct mark or 0x3 != 0x1&lt;br /&gt;
ct mark and 0x23 == 0x11&lt;br /&gt;
ct mark and 0x3 != 0x1&lt;br /&gt;
ct mark xor 0x23 == 0x11&lt;br /&gt;
ct mark xor 0x3 != 0x1&lt;br /&gt;
ct mark 0x00000032&lt;br /&gt;
ct mark != 0x00000032&lt;br /&gt;
ct mark 0x00000032-0x00000045&lt;br /&gt;
ct mark != 0x00000032-0x00000045&lt;br /&gt;
ct mark {0x32, 0x2222, 0x42de3}&lt;br /&gt;
ct mark {0x32-0x2222, 0x4444-0x42de3}&lt;br /&gt;
ct mark set 0x11 xor 0x1331&lt;br /&gt;
ct mark set 0x11333 and 0x11&lt;br /&gt;
ct mark set 0x12 or 0x11&lt;br /&gt;
ct mark set 0x11&lt;br /&gt;
ct mark set mark&lt;br /&gt;
ct mark set mark map { 1 : 10, 2 : 20, 3 : 30 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;expiration &amp;lt;time&amp;gt;&#039;&#039;&lt;br /&gt;
| Connection expiration time&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct expiration 30&lt;br /&gt;
ct expiration 30s&lt;br /&gt;
ct expiration != 233&lt;br /&gt;
ct expiration != 3m53s&lt;br /&gt;
ct expiration 33-45&lt;br /&gt;
ct expiration 33s-45s&lt;br /&gt;
ct expiration != 33-45&lt;br /&gt;
ct expiration != 33s-45s&lt;br /&gt;
ct expiration {33, 55, 67, 88}&lt;br /&gt;
ct expiration { 1m7s, 33s, 55s, 1m28s}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;helper &amp;quot;&amp;lt;helper&amp;gt;&amp;quot;&#039;&#039;&lt;br /&gt;
| Helper associated with the connection&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct helper &amp;quot;ftp&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] bytes &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original bytes &amp;gt; 100000&lt;br /&gt;
ct bytes &amp;gt; 100000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] packets &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct reply packets &amp;lt; 100&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] ip saddr &amp;lt;ip source address&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original ip saddr 192.168.0.1&lt;br /&gt;
ct reply ip saddr 192.168.0.1&lt;br /&gt;
ct original ip saddr 192.168.1.0/24&lt;br /&gt;
ct reply ip saddr 192.168.1.0/24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] ip daddr &amp;lt;ip destination address&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original ip daddr 192.168.0.1&lt;br /&gt;
ct reply ip daddr 192.168.0.1&lt;br /&gt;
ct original ip daddr 192.168.1.0/24&lt;br /&gt;
ct reply ip daddr 192.168.1.0/24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] l3proto &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original l3proto ipv4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] protocol &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original protocol 6&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] proto-dst &amp;lt;port&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct original proto-dst 22&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;[original | reply] proto-src &amp;lt;port&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct reply proto-src 53&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| | &#039;&#039;count [over] &amp;lt;number of connections&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ct count over 2&lt;br /&gt;
&lt;br /&gt;
tcp dport 22 add @ssh_flood { ip saddr ct count over 2 } reject&lt;br /&gt;
[ which requires an existing ssh_flood set, ie. add set filter ssh_flood { type ipv4_addr; flags dynamic; } ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Meta ====&lt;br /&gt;
&lt;br /&gt;
[[Matching packet metainformation|&#039;&#039;meta&#039;&#039;]] matches packet by metainformation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|meta match&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;iifname &amp;lt;input interface name&amp;gt;&#039;&#039;&lt;br /&gt;
| Input interface name&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta iifname &amp;quot;eth0&amp;quot;&lt;br /&gt;
meta iifname != &amp;quot;eth0&amp;quot;&lt;br /&gt;
meta iifname {&amp;quot;eth0&amp;quot;, &amp;quot;lo&amp;quot;}&lt;br /&gt;
meta iifname &amp;quot;eth*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;oifname &amp;lt;output interface name&amp;gt;&#039;&#039;&lt;br /&gt;
| Output interface name&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta oifname &amp;quot;eth0&amp;quot;&lt;br /&gt;
meta oifname != &amp;quot;eth0&amp;quot;&lt;br /&gt;
meta oifname {&amp;quot;eth0&amp;quot;, &amp;quot;lo&amp;quot;}&lt;br /&gt;
meta oifname &amp;quot;eth*&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;iif &amp;lt;input interface index&amp;gt;&#039;&#039;&lt;br /&gt;
| Input interface index&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta iif eth0&lt;br /&gt;
meta iif != eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;oif &amp;lt;output interface index&amp;gt;&#039;&#039;&lt;br /&gt;
| Output interface index&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta oif lo&lt;br /&gt;
meta oif != lo&lt;br /&gt;
meta oif {eth0, lo}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;iiftype &amp;lt;input interface type&amp;gt;&#039;&#039;&lt;br /&gt;
| Input interface type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta iiftype {ether, ppp, ipip, ipip6, loopback, sit, ipgre}&lt;br /&gt;
meta iiftype != ether&lt;br /&gt;
meta iiftype ether&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;oiftype &amp;lt;output interface type&amp;gt;&#039;&#039;&lt;br /&gt;
| Output interface hardware type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta oiftype {ether, ppp, ipip, ipip6, loopback, sit, ipgre}&lt;br /&gt;
meta oiftype != ether&lt;br /&gt;
meta oiftype ether&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;length &amp;lt;length&amp;gt;&#039;&#039;&lt;br /&gt;
| Length of the packet in bytes&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta length 1000&lt;br /&gt;
meta length != 1000&lt;br /&gt;
meta length &amp;gt; 1000&lt;br /&gt;
meta length 33-45&lt;br /&gt;
meta length != 33-45&lt;br /&gt;
meta length { 33, 55, 67, 88 }&lt;br /&gt;
meta length { 33-55, 67-88 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;protocol &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| ethertype protocol&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta protocol ip&lt;br /&gt;
meta protocol != ip&lt;br /&gt;
meta protocol { ip, arp, ip6, vlan }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;nfproto &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta nfproto ipv4&lt;br /&gt;
meta nfproto != ipv6&lt;br /&gt;
meta nfproto { ipv4, ipv6 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;l4proto &amp;lt;protocol&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta l4proto 22&lt;br /&gt;
meta l4proto != 233&lt;br /&gt;
meta l4proto 33-45&lt;br /&gt;
meta l4proto { 33, 55, 67, 88 }&lt;br /&gt;
meta l4proto { 33-55 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mark [set] &amp;lt;mark&amp;gt;&#039;&#039;&lt;br /&gt;
| Packet mark&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta mark 0x4&lt;br /&gt;
meta mark 0x00000032&lt;br /&gt;
meta mark and 0x03 == 0x01&lt;br /&gt;
meta mark and 0x03 != 0x01&lt;br /&gt;
meta mark != 0x10&lt;br /&gt;
meta mark or 0x03 == 0x01&lt;br /&gt;
meta mark or 0x03 != 0x01&lt;br /&gt;
meta mark xor 0x03 == 0x01&lt;br /&gt;
meta mark xor 0x03 != 0x01&lt;br /&gt;
meta mark set 0xffffffc8 xor 0x16&lt;br /&gt;
meta mark set 0x16 and 0x16&lt;br /&gt;
meta mark set 0xffffffe9 or 0x16&lt;br /&gt;
meta mark set 0xffffffde and 0x16&lt;br /&gt;
meta mark set 0x32 or 0xfffff&lt;br /&gt;
meta mark set 0xfffe xor 0x16&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;priority [set] &amp;lt;priority&amp;gt;&#039;&#039;&lt;br /&gt;
| tc class id&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta priority none&lt;br /&gt;
meta priority 0x1:0x1&lt;br /&gt;
meta priority 0x1:0xffff&lt;br /&gt;
meta priority 0xffff:0xffff&lt;br /&gt;
meta priority set 0x1:0x1&lt;br /&gt;
meta priority set 0x1:0xffff&lt;br /&gt;
meta priority set 0xffff:0xffff&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;skuid &amp;lt;user id&amp;gt;&#039;&#039;&lt;br /&gt;
| UID associated with originating socket&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta skuid {bin, root, daemon}&lt;br /&gt;
meta skuid root&lt;br /&gt;
meta skuid != root&lt;br /&gt;
meta skuid lt 3000&lt;br /&gt;
meta skuid gt 3000&lt;br /&gt;
meta skuid eq 3000&lt;br /&gt;
meta skuid 3001-3005&lt;br /&gt;
meta skuid != 2001-2005&lt;br /&gt;
meta skuid { 2001-2005 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;skgid &amp;lt;group id&amp;gt;&#039;&#039;&lt;br /&gt;
| GID associated with originating socket&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta skgid {bin, root, daemon}&lt;br /&gt;
meta skgid root&lt;br /&gt;
meta skgid != root&lt;br /&gt;
meta skgid lt 3000&lt;br /&gt;
meta skgid gt 3000&lt;br /&gt;
meta skgid eq 3000&lt;br /&gt;
meta skgid 3001-3005&lt;br /&gt;
meta skgid != 2001-2005&lt;br /&gt;
meta skgid { 2001-2005 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;rtclassid &amp;lt;class&amp;gt;&#039;&#039;&lt;br /&gt;
| Routing realm&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta rtclassid cosmos&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;pkttype &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| Packet type&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta pkttype broadcast&lt;br /&gt;
meta pkttype != broadcast&lt;br /&gt;
meta pkttype { broadcast, unicast, multicast}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cpu &amp;lt;cpu index&amp;gt;&#039;&#039;&lt;br /&gt;
| CPU ID&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta cpu 1&lt;br /&gt;
meta cpu != 1&lt;br /&gt;
meta cpu 1-3&lt;br /&gt;
meta cpu != 1-2&lt;br /&gt;
meta cpu { 2,3 }&lt;br /&gt;
meta cpu { 2-3, 5-7 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;iifgroup &amp;lt;input group&amp;gt;&#039;&#039;&lt;br /&gt;
| Input interface group&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta iifgroup 0&lt;br /&gt;
meta iifgroup != 0&lt;br /&gt;
meta iifgroup default&lt;br /&gt;
meta iifgroup != default&lt;br /&gt;
meta iifgroup {default}&lt;br /&gt;
meta iifgroup { 11,33 }&lt;br /&gt;
meta iifgroup {11-33}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;oifgroup &amp;lt;group&amp;gt;&#039;&#039;&lt;br /&gt;
| Output interface group&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta oifgroup 0&lt;br /&gt;
meta oifgroup != 0&lt;br /&gt;
meta oifgroup default&lt;br /&gt;
meta oifgroup != default&lt;br /&gt;
meta oifgroup {default}&lt;br /&gt;
meta oifgroup { 11,33 }&lt;br /&gt;
meta oifgroup {11-33}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cgroup &amp;lt;group&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
meta cgroup 1048577&lt;br /&gt;
meta cgroup != 1048577&lt;br /&gt;
meta cgroup { 1048577, 1048578 }&lt;br /&gt;
meta cgroup 1048577-1048578&lt;br /&gt;
meta cgroup != 1048577-1048578&lt;br /&gt;
meta cgroup {1048577-1048578}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Statements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;statement&#039;&#039;&#039; is the action performed when the packet match the rule. It could be &#039;&#039;terminal&#039;&#039; and &#039;&#039;non-terminal&#039;&#039;. In a certain rule we can consider several non-terminal statements but only a single terminal statement.&lt;br /&gt;
&lt;br /&gt;
==== Verdict statements ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;verdict statement&#039;&#039;&#039; alters control flow in the ruleset and issues policy decisions for packets. The valid verdict statements are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;accept&#039;&#039;: Accept the packet and stop the remain rules evaluation.&lt;br /&gt;
* &#039;&#039;drop&#039;&#039;: Drop the packet and stop the remain rules evaluation.&lt;br /&gt;
* &#039;&#039;queue&#039;&#039;: Queue the packet to userspace and stop the remain rules evaluation.&lt;br /&gt;
* &#039;&#039;continue&#039;&#039;: Continue the ruleset evaluation with the next rule.&lt;br /&gt;
* &#039;&#039;return&#039;&#039;: Return from the current chain and continue at the next rule of the last chain. In a base chain it is equivalent to accept&lt;br /&gt;
* &#039;&#039;jump &amp;lt;chain&amp;gt;&#039;&#039;: Continue at the first rule of &amp;lt;chain&amp;gt;. It will continue at the next rule after a return statement is issued&lt;br /&gt;
* &#039;&#039;goto &amp;lt;chain&amp;gt;&#039;&#039;: Similar to jump, but after the new chain the evaluation will continue at the last chain instead of the one containing the goto statement&lt;br /&gt;
&lt;br /&gt;
==== Log ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|log statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;level [over] &amp;lt;value&amp;gt; &amp;lt;unit&amp;gt; [burst &amp;lt;value&amp;gt; &amp;lt;unit&amp;gt;]&#039;&#039;&lt;br /&gt;
| Log level&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
log&lt;br /&gt;
log level emerg&lt;br /&gt;
log level alert&lt;br /&gt;
log level crit&lt;br /&gt;
log level err&lt;br /&gt;
log level warn&lt;br /&gt;
log level notice&lt;br /&gt;
log level info&lt;br /&gt;
log level debug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;group &amp;lt;value&amp;gt; [queue-threshold &amp;lt;value&amp;gt;] [snaplen &amp;lt;value&amp;gt;] [prefix &amp;quot;&amp;lt;prefix&amp;gt;&amp;quot;]&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
log prefix aaaaa-aaaaaa group 2 snaplen 33&lt;br /&gt;
log group 2 queue-threshold 2&lt;br /&gt;
log group 2 snaplen 33&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Reject ====&lt;br /&gt;
&lt;br /&gt;
The default &#039;&#039;&#039;reject&#039;&#039;&#039; will be the ICMP type &#039;&#039;&#039;port-unreachable&#039;&#039;&#039;. The &#039;&#039;&#039;icmpx&#039;&#039;&#039; is only used for inet family support.&lt;br /&gt;
&lt;br /&gt;
More information on the [[Rejecting_traffic]] page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|reject statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;with &amp;lt;protocol&amp;gt; type &amp;lt;type&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reject&lt;br /&gt;
reject with icmp type host-unreachable&lt;br /&gt;
reject with icmp type net-unreachable&lt;br /&gt;
reject with icmp type prot-unreachable&lt;br /&gt;
reject with icmp type port-unreachable&lt;br /&gt;
reject with icmp type net-prohibited&lt;br /&gt;
reject with icmp type host-prohibited&lt;br /&gt;
reject with icmp type admin-prohibited&lt;br /&gt;
reject with icmpv6 type no-route&lt;br /&gt;
reject with icmpv6 type admin-prohibited&lt;br /&gt;
reject with icmpv6 type addr-unreachable&lt;br /&gt;
reject with icmpv6 type port-unreachable&lt;br /&gt;
reject with icmpx type host-unreachable&lt;br /&gt;
reject with icmpx type no-route&lt;br /&gt;
reject with icmpx type admin-prohibited&lt;br /&gt;
reject with icmpx type port-unreachable&lt;br /&gt;
ip protocol tcp reject with tcp reset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Counter ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|counter statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;packets &amp;lt;packets&amp;gt; bytes &amp;lt;bytes&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
counter&lt;br /&gt;
counter packets 0 bytes 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Limit ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|limit statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;rate [over] &amp;lt;value&amp;gt; &amp;lt;unit&amp;gt; [burst &amp;lt;value&amp;gt; &amp;lt;unit&amp;gt;]&#039;&#039;&lt;br /&gt;
| Rate limit&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
limit rate 400/minute&lt;br /&gt;
limit rate 400/hour&lt;br /&gt;
limit rate over 40/day&lt;br /&gt;
limit rate over 400/week&lt;br /&gt;
limit rate over 1023/second burst 10 packets&lt;br /&gt;
limit rate 1025 kbytes/second&lt;br /&gt;
limit rate 1023000 mbytes/second&lt;br /&gt;
limit rate 1025 bytes/second burst 512 bytes&lt;br /&gt;
limit rate 1025 kbytes/second burst 1023 kbytes&lt;br /&gt;
limit rate 1025 mbytes/second burst 1025 kbytes&lt;br /&gt;
limit rate 1025000 mbytes/second burst 1023 mbytes&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Nat ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|nat statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;dnat to &amp;lt;destination address&amp;gt;&#039;&#039;&lt;br /&gt;
| Destination address translation&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnat to 192.168.3.2&lt;br /&gt;
dnat to ct mark map { 0x00000014 : 1.2.3.4}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;snat to &amp;lt;ip source address&amp;gt;&#039;&#039;&lt;br /&gt;
| Source address translation&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
snat to 192.168.3.2&lt;br /&gt;
snat to 2001:838:35f:1::-2001:838:35f:2:::100&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;masquerade [&amp;lt;type&amp;gt;] [to :&amp;lt;port&amp;gt;]&#039;&#039;&lt;br /&gt;
| Masquerade&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
masquerade&lt;br /&gt;
masquerade persistent,fully-random,random&lt;br /&gt;
masquerade to :1024&lt;br /&gt;
masquerade to :1024-2048&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Queue ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|queue statement&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;num &amp;lt;value&amp;gt; &amp;lt;scheduler&amp;gt;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
queue&lt;br /&gt;
queue num 2&lt;br /&gt;
queue num 2-3&lt;br /&gt;
queue num 4-5 fanout bypass&lt;br /&gt;
queue num 4-5 fanout&lt;br /&gt;
queue num 4-5 bypass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extras ==&lt;br /&gt;
&lt;br /&gt;
=== Export Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft export (xml | json)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Monitor Events ===&lt;br /&gt;
&lt;br /&gt;
Monitor events from Netlink creating filters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft monitor [new | destroy] [tables | chains | sets | rules | elements] [xml | json]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Nft scripting =&lt;br /&gt;
&lt;br /&gt;
== List ruleset ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list ruleset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flush ruleset ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft flush ruleset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Load ruleset ==&lt;br /&gt;
&lt;br /&gt;
Create a command batch file and load it with the nft interpreter,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% echo &amp;quot;flush ruleset&amp;quot; &amp;gt; /etc/nftables.rules&lt;br /&gt;
% echo &amp;quot;add table filter&amp;quot; &amp;gt;&amp;gt; /etc/nftables.rules&lt;br /&gt;
% echo &amp;quot;add chain filter input&amp;quot; &amp;gt;&amp;gt; /etc/nftables.rules&lt;br /&gt;
% echo &amp;quot;add rule filter input meta iifname lo accept&amp;quot; &amp;gt;&amp;gt; /etc/nftables.rules&lt;br /&gt;
% nft -f /etc/nftables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or create an executable nft script file,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/nftables.rules&lt;br /&gt;
&amp;gt; #!/usr/local/sbin/nft -f&lt;br /&gt;
&amp;gt; flush ruleset&lt;br /&gt;
&amp;gt; add table filter&lt;br /&gt;
&amp;gt; add chain filter input&lt;br /&gt;
&amp;gt; add rule filter input meta iifname lo accept&lt;br /&gt;
&amp;gt; EOF&lt;br /&gt;
% chmod u+x /etc/nftables.rules&lt;br /&gt;
% /etc/nftables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or create an executable nft script file from an already created ruleset,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list ruleset &amp;gt; /etc/nftables.rules&lt;br /&gt;
% nft flush ruleset&lt;br /&gt;
% nft -f /etc/nftables.rules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== Simple IP/IPv6 Firewall ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table firewall {&lt;br /&gt;
  chain incoming {&lt;br /&gt;
    type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
    # established/related connections&lt;br /&gt;
    ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
    # loopback interface&lt;br /&gt;
    iifname lo accept&lt;br /&gt;
&lt;br /&gt;
    # icmp&lt;br /&gt;
    icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
    # open tcp ports: sshd (22), httpd (80)&lt;br /&gt;
    tcp dport {ssh, http} accept&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table ip6 firewall {&lt;br /&gt;
  chain incoming {&lt;br /&gt;
    type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
    # established/related connections&lt;br /&gt;
    ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
    # invalid connections&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
    # loopback interface&lt;br /&gt;
    iifname lo accept&lt;br /&gt;
&lt;br /&gt;
    # icmp&lt;br /&gt;
    # routers may also want: mld-listener-query, nd-router-solicit&lt;br /&gt;
    icmpv6 type {echo-request,nd-neighbor-solicit} accept&lt;br /&gt;
&lt;br /&gt;
    # open tcp ports: sshd (22), httpd (80)&lt;br /&gt;
    tcp dport {ssh, http} accept&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Conntrack_helpers&amp;diff=808</id>
		<title>Conntrack helpers</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Conntrack_helpers&amp;diff=808"/>
		<updated>2021-03-12T11:22:55Z</updated>

		<summary type="html">&lt;p&gt;Fw: add explicit warning wrt. helper use on routers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some internet protocols use multiple ports that are negotiated between endpoints during the initial connection. Netfilter&#039;s [[Connection_Tracking_System|connection tracking system]] uses protocol helpers that look inside these negotiation packets to determine which ports will be part of the connection. The ct helper tells conntrack to expect packets to these ports; when such packets arrive conntrack assigns them &#039;&#039;related&#039;&#039; status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enable a conntrack helper in your ruleset:&lt;br /&gt;
# Add a &#039;&#039;ct helper &amp;lt;my_ct_helper&amp;gt;&#039;&#039; stateful object which specifies the in-kernel name of the ct helper to use.&lt;br /&gt;
# Add a filter rule for the initial protocol negotiation connection, using a &#039;&#039;ct helper set &amp;quot;&amp;lt;my_ct_helper&amp;gt;&amp;quot;&#039;&#039; statement to specify which ct helper to use.&lt;br /&gt;
# Add filter rules as necessary to allow initial, established and related packets through your firewall.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following heavily-commented example shows how to enable a helper for [https://en.wikipedia.org/wiki/File_Transfer_Protocol ftp] traffic to the usual tcp/21 port:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
table inet stateful_ftp {&lt;br /&gt;
&lt;br /&gt;
    # 1. ct helper stateful object&lt;br /&gt;
    #   &amp;quot;ftp-standard&amp;quot; is the name of this ct helper stateful object.&lt;br /&gt;
    #   &amp;quot;ftp&amp;quot; is the in-kernel name of the ct helper for ftp.&lt;br /&gt;
    ct helper ftp-standard {&lt;br /&gt;
        type &amp;quot;ftp&amp;quot; protocol tcp;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    chain PRE {&lt;br /&gt;
        type filter hook prerouting priority filter;&lt;br /&gt;
&lt;br /&gt;
        # 2. Rule for initial ftp connection (control channel), specifying ct helper stateful object to use.&lt;br /&gt;
        #    NOTE &amp;quot;ftp-standard&amp;quot; is the name of the ct helper stateful object.&lt;br /&gt;
        tcp dport 21 ct helper set &amp;quot;ftp-standard&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # Example (partial) input filter base chain.&lt;br /&gt;
    #   NOTE default policy drop - we have to explicitly accept all allowed packets.&lt;br /&gt;
    chain IN {&lt;br /&gt;
        type filter hook input priority filter; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # 3a. Rule for ftp control channel.&lt;br /&gt;
        #     NOTE conntrack works here without needing helper.&lt;br /&gt;
        tcp dport 21 ct state new,established accept&lt;br /&gt;
&lt;br /&gt;
        # 3b. Rule for related packets on ftp data channel.&lt;br /&gt;
        #     NOTE in-kernel ct helper name &amp;quot;ftp&amp;quot; is used here;&lt;br /&gt;
        #          trying to use ct helper stateful object name &amp;quot;ftp-standard&amp;quot; will NOT work.&lt;br /&gt;
        ct helper &amp;quot;ftp&amp;quot; accept        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further comments on above example:&lt;br /&gt;
* Rule 2 enables our &#039;&#039;ftp-standard&#039;&#039; ct helper in a &#039;&#039;prerouting&#039;&#039; chain. This makes the ct helper available to both forwarded and input traffic flows. If for some reason you want the ct helper to only be available for forwarded OR input flows, you can put Rule 2 in a &#039;&#039;forward&#039;&#039; or &#039;&#039;input&#039;&#039; chain, respectively.&lt;br /&gt;
* You may want to be more restrictive in Rule 3b. For example if you are using ftp passive mode you could use &lt;br /&gt;
&amp;lt;source&amp;gt;ct state related ip daddr $ftphost ct helper &amp;quot;ftp&amp;quot; tcp dport { 1024-65535 } accept&amp;lt;/source&amp;gt; and drop other tcp-related traffic.&lt;br /&gt;
&lt;br /&gt;
If the helper is needed for a host behind a stateful router its criticial to limit the helper assigment and the &amp;quot;releated&amp;quot; connections to the specific server.&lt;br /&gt;
This is because helpers may allow arbitrary port forwarding, much like allowing untrusted remote hosts to inject &amp;quot;dnat&amp;quot;-based port forwarding rules.&lt;br /&gt;
&lt;br /&gt;
You can read more on how to enable conntrack helpers in a secure way [https://github.com/regit/secure-conntrack-helpers/blob/master/secure-conntrack-helpers.rst here].&lt;br /&gt;
&lt;br /&gt;
= Supported conntrack helpers =&lt;br /&gt;
&lt;br /&gt;
Conntrack provides the following helpers:&lt;br /&gt;
&lt;br /&gt;
* FTP&lt;br /&gt;
* TFTP&lt;br /&gt;
* NetBIOS&lt;br /&gt;
* IRC&lt;br /&gt;
* SIP&lt;br /&gt;
* H.323&lt;br /&gt;
* SNMP&lt;br /&gt;
* PPTP&lt;br /&gt;
* SANE&lt;br /&gt;
* Amanda&lt;br /&gt;
&lt;br /&gt;
The [https://conntrack-tools.netfilter.org/manual.html#helpers conntrackd] daemon also provides support for userspace helpers, such as:&lt;br /&gt;
&lt;br /&gt;
* DHCPv6&lt;br /&gt;
* MDNS&lt;br /&gt;
* SLP&lt;br /&gt;
* SSDP&lt;br /&gt;
* RPC&lt;br /&gt;
* NFS version 3&lt;br /&gt;
* Oracle TNS&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Bridge_filtering&amp;diff=582</id>
		<title>Bridge filtering</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Bridge_filtering&amp;diff=582"/>
		<updated>2020-11-26T22:12:55Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Examples ==&lt;br /&gt;
&lt;br /&gt;
Filter on TCP destination port in ipv4 packets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft add rule bridge filter forward ether type ip tcp dport 22 accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accept arp packet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft add rule bridge filter forward ether type arp accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Bridge_filtering&amp;diff=581</id>
		<title>Bridge filtering</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Bridge_filtering&amp;diff=581"/>
		<updated>2020-11-26T22:12:13Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Limitation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Examples ==&lt;br /&gt;
&lt;br /&gt;
Filter on TCP destination port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft add rule bridge filter forward ether type ip tcp dport 22 accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accept arp packet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft add rule bridge filter forward ether type arp accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Matching_packet_metainformation&amp;diff=580</id>
		<title>Matching packet metainformation</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Matching_packet_metainformation&amp;diff=580"/>
		<updated>2020-11-26T22:11:47Z</updated>

		<summary type="html">&lt;p&gt;Fw: fix in/output bridge keywords.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The meta selectors allows you to match ([[Setting_packet_metainformation |and in some cases, set]]) packet metainformation.&lt;br /&gt;
&lt;br /&gt;
= The meta selectors =&lt;br /&gt;
&lt;br /&gt;
We have 2 types of meta statement, qualified and unqualified. Qualified ones require you use the &#039;&#039;&#039;meta&#039;&#039;&#039; keyword, and for unqualified ones it can be skipped.&lt;br /&gt;
&lt;br /&gt;
* qualified meta statements:&lt;br /&gt;
** length -- packet lenght&lt;br /&gt;
** protocol -- packet protocol (as in skb-&amp;gt;protocol)&lt;br /&gt;
** nfproto -- netfilter packet protocol family (like ipv4, ipv6, etc..).&lt;br /&gt;
** l4proto -- layer 4 protocol (tcp, udp, etc..)&lt;br /&gt;
** priority -- packet priority, tc handle. [[Setting_packet_metainformation |Can be set]].&lt;br /&gt;
** random -- match against a single/simple random number&lt;br /&gt;
** secmark -- packet secmark. [[Setting_packet_metainformation |Can be set]].&lt;br /&gt;
** ibrvproto -- match the bridge protocol&lt;br /&gt;
** ibrpvid -- match the bridge pvid&lt;br /&gt;
&lt;br /&gt;
* unqualified meta statements:&lt;br /&gt;
** mark -- packet mark. [[Setting_packet_metainformation |Can be set]].&lt;br /&gt;
** iif -- input interface index&lt;br /&gt;
** iifname -- input interface name&lt;br /&gt;
** iiftype -- input interface type&lt;br /&gt;
** oif -- output interface index&lt;br /&gt;
** oifname -- output interface name&lt;br /&gt;
** oiftype -- output interface type&lt;br /&gt;
** skuid -- socket uid&lt;br /&gt;
** skgid -- socket gid&lt;br /&gt;
** nftrace -- [[Ruleset_debug/tracing|nftrace debugging]] bit. [[Setting_packet_metainformation |Can be set]].&lt;br /&gt;
** rtclassid -- realm&lt;br /&gt;
** ibriport -- input bridge port&lt;br /&gt;
** obriport -- output bridge port&lt;br /&gt;
** ibrname -- input bridge name&lt;br /&gt;
** obrname -- output bridge name&lt;br /&gt;
** pkttype -- packet type. [[Setting_packet_metainformation |Can be set]].&lt;br /&gt;
** cpu -- cpu number&lt;br /&gt;
** iifgroup -- input interface group&lt;br /&gt;
** oifgroup -- output interface group&lt;br /&gt;
** cgroup -- cgroup number&lt;br /&gt;
** ipsec -- ipsec (secpath) packet or not&lt;br /&gt;
** time -- packet timestamp&lt;br /&gt;
** day -- packet timestamp&lt;br /&gt;
** hour -- packet timestamp&lt;br /&gt;
&lt;br /&gt;
= Matching packets by interface name =&lt;br /&gt;
&lt;br /&gt;
You can use one of the following selectors to match the interface name:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;iifname&#039;&#039;, to match the input network interface name.&lt;br /&gt;
* &#039;&#039;oifname&#039;&#039;, to match the output network interface name.&lt;br /&gt;
* &#039;&#039;iif&#039;&#039;, to match the interface index of the network interface name. This is faster than &#039;&#039;iifname&#039;&#039; as it only has to compare a 32-bits unsigned integer instead of a string. The interface index is dynamically allocated, so don&#039;t use this for interfaces that are dynamically created and destroyed, eg. &#039;&#039;ppp0&#039;&#039;.&lt;br /&gt;
* &#039;&#039;oif&#039;&#039;, like &#039;&#039;iif&#039;&#039; but it matches the output network interface index.&lt;br /&gt;
&lt;br /&gt;
An example usage of the interface name is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter input meta oifname lo accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule accepts all traffic for the loopback pseudodevice &#039;&#039;lo&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Matching packets by packet mark =&lt;br /&gt;
&lt;br /&gt;
You can match packets whose mark is 123 with the following rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft add rule filter output meta mark 123 counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Matching packets the socket UID =&lt;br /&gt;
&lt;br /&gt;
You can use your user name to match traffic, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output meta skuid pablo counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or the 32-bits unsigned integer (UID) in case there is no entry in /etc/passwd for a given user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output meta skuid 1000 counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s just generate some HTTP traffic to test this rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% wget --spider http://www.google.com&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, if you check the counters, you can verify that the packets are matching that rule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list table filter&lt;br /&gt;
table ip filter {&lt;br /&gt;
        chain output {&lt;br /&gt;
                 type filter hook output priority 0;&lt;br /&gt;
                 skuid pablo counter packets 7 bytes 510&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain input {&lt;br /&gt;
                 type filter hook input priority 0;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: Beware if you test this with &#039;&#039;ping&#039;&#039;, it is usually installed with suid so that traffic will match the root user (uid=0).&lt;br /&gt;
&lt;br /&gt;
= Matching packet priority =&lt;br /&gt;
&lt;br /&gt;
* Since nftables v0.7 you can match the packet priority, the tc classid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
% nft add rule filter forward meta priority abcd:1234&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Packet without set priority can be matched using meta priority none&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
% nft add rule filter forward meta priority none&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Operations_at_ruleset_level&amp;diff=579</id>
		<title>Operations at ruleset level</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Operations_at_ruleset_level&amp;diff=579"/>
		<updated>2020-11-23T16:15:39Z</updated>

		<summary type="html">&lt;p&gt;Fw: xml/json export is not longer supported.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using native nft syntax ==&lt;br /&gt;
&lt;br /&gt;
Linux Kernel 3.18 includes some improvements regarding the available operations to manage your ruleset as a whole.&lt;br /&gt;
&lt;br /&gt;
=== listing ===&lt;br /&gt;
&lt;br /&gt;
Listing the complete ruleset:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft list ruleset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Listing the ruleset per family:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft list ruleset arp&lt;br /&gt;
 % nft list ruleset ip&lt;br /&gt;
 % nft list ruleset ip6&lt;br /&gt;
 % nft list ruleset bridge&lt;br /&gt;
 % nft list ruleset inet&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
These commands will print all tables/chains/sets/rules of the given family.&lt;br /&gt;
&lt;br /&gt;
=== flushing ===&lt;br /&gt;
&lt;br /&gt;
In addition, you can also flush (erase, delete, wipe) the complete ruleset:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft flush ruleset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Also per family:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft flush ruleset arp&lt;br /&gt;
 % nft flush ruleset ip&lt;br /&gt;
 % nft flush ruleset ip6&lt;br /&gt;
 % nft flush ruleset bridge&lt;br /&gt;
 % nft flush ruleset inet&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== backup/restore ===&lt;br /&gt;
&lt;br /&gt;
You can combine these two commands above to backup your ruleset:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % echo &amp;quot;nft flush ruleset&amp;quot; &amp;gt; backup.nft&lt;br /&gt;
 % nft list ruleset &amp;gt;&amp;gt; backup.nft&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
And load it [[Atomic_rule_replacement|atomically]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft -f backup.nft&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Listing in JSON format ==&lt;br /&gt;
&lt;br /&gt;
You can also export your ruleset in JSON format, just pass the&lt;br /&gt;
&#039;--json&#039; option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 % nft --json list ruleset &amp;gt; ruleset.json&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Some related information you may want to read:&lt;br /&gt;
&lt;br /&gt;
* [[Atomic rule replacement]]&lt;br /&gt;
* [[Scripting]]&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Performing_Network_Address_Translation_(NAT)&amp;diff=512</id>
		<title>Performing Network Address Translation (NAT)</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Performing_Network_Address_Translation_(NAT)&amp;diff=512"/>
		<updated>2020-06-23T22:00:10Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Incompatibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;nat&#039;&#039; chain type allows you to perform NAT. This chain type comes with special semantics:&lt;br /&gt;
&lt;br /&gt;
* The first packet of a flow is used to look up for a matching rule which sets up the NAT binding for this flow. This also manipulates this first packet accordingly.&lt;br /&gt;
* No rule lookup happens for follow up packets in the flow: the NAT engine uses the NAT binding information already set up by the first packet to perform the packet manipulation.&lt;br /&gt;
&lt;br /&gt;
Adding a NAT rule to a filter type chain will result in an error.&lt;br /&gt;
&lt;br /&gt;
= Stateful NAT =&lt;br /&gt;
&lt;br /&gt;
The stateful NAT involves the nf_conntrack kernel engine to match/set packet stateful information and will engage according to the state of connections.&lt;br /&gt;
This is the most common way of performing NAT and the approach we recommend you to follow.&lt;br /&gt;
&lt;br /&gt;
Be aware that &#039;&#039;&#039;with kernel versions before 4.18, you have to register the prerouting/postrouting chains even if you have no rules there&#039;&#039;&#039; since these chain will invoke the NAT engine for the packets coming in the reply direction. The remaining documentation in this article assumes a newer kernel which doesn&#039;t require this inconvenience anymore.&lt;br /&gt;
&lt;br /&gt;
== Source NAT ==&lt;br /&gt;
&lt;br /&gt;
If you want to source NAT the traffic that leaves from your local area network to the Internet, you can create a new table &#039;&#039;nat&#039;&#039; with the postrouting chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table nat&lt;br /&gt;
% nft &#039;add chain nat postrouting { type nat hook postrouting priority 100 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, add the following rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matches for all traffic from the 192.168.1.0/24 network to the interface &#039;&#039;eth0&#039;&#039;. The IPv4 address 1.2.3.4 is used as source for the packets that match this rule.&lt;br /&gt;
&lt;br /&gt;
== Destination NAT ==&lt;br /&gt;
&lt;br /&gt;
You need to add the following table and chain configuration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table nat&lt;br /&gt;
% nft &#039;add chain nat prerouting { type nat hook prerouting priority -100; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can add the following rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add rule nat prerouting iif eth0 tcp dport { 80, 443 } dnat 192.168.1.120&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This redirects the incoming traffic for TCP ports 80 and 443 to 192.168.1.120.&lt;br /&gt;
&lt;br /&gt;
== Masquerading ==&lt;br /&gt;
&lt;br /&gt;
NOTE: &#039;&#039;masquerade&#039;&#039; is available starting with Linux Kernel 3.18.&lt;br /&gt;
&lt;br /&gt;
Masquerade is a special case of SNAT, where the source address is automagically set to the address of the output interface. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting masquerade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;masquerade&#039;&#039; only makes sense from postrouting chain of NAT type.&lt;br /&gt;
&lt;br /&gt;
== Redirect ==&lt;br /&gt;
&lt;br /&gt;
NOTE: &#039;&#039;redirect&#039;&#039; is available starting with Linux Kernel 3.19.&lt;br /&gt;
&lt;br /&gt;
By using redirect, packets will be forwarded to local machine. Is a special case of DNAT where the destination is the current machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat prerouting redirect&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example redirects 22/tcp traffic to 2222/tcp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat prerouting tcp dport 22 redirect to 2222&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that: &#039;&#039;redirect&#039;&#039; only makes sense in a prerouting chain of NAT type.&lt;br /&gt;
&lt;br /&gt;
== NAT flags ==&lt;br /&gt;
&lt;br /&gt;
Since Linux kernel 3.18, you can combine the following flags with your NAT statements:&lt;br /&gt;
&lt;br /&gt;
* random: randomize source port mapping.&lt;br /&gt;
* fully-random: full port randomization.&lt;br /&gt;
* persistent: gives a client the same source-/destination-address for each connection.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting masquerade random,persistent&lt;br /&gt;
% nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4 fully-random&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inet family NAT ==&lt;br /&gt;
&lt;br /&gt;
Since Linux kernel 5.2, there is support for performing stateful NAT in &#039;&#039;inet&#039;&#039; family chains. Syntax and semantics are equivalent to &#039;&#039;ip&#039;&#039;/&#039;&#039;ip6&#039;&#039; families; the only exception being if IP addresses are specified, a prefix of either &#039;&#039;ip&#039;&#039; or &#039;&#039;ip6&#039;&#039; to clarify the address family is required:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule inet nat prerouting dnat ip to 10.0.0.2&lt;br /&gt;
% nft add rule inet nat prerouting dnat ip6 to feed::c0fe&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Incompatibilities ==&lt;br /&gt;
&lt;br /&gt;
You cannot use iptables and nft to perform NAT at the same time before kernel 4.18. So make sure that the &#039;&#039;iptable_nat&#039;&#039; module is unloaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% rmmod iptable_nat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With later kernels, it is possible to use iptables and nftables nat at the same time.&lt;br /&gt;
The nat chains are consulted according to their priorities, the first matching rule&lt;br /&gt;
that adds a nat mapping (dnat, snat, masquerade) is the one that will be used for the connection.&lt;br /&gt;
&lt;br /&gt;
= Stateless NAT =&lt;br /&gt;
&lt;br /&gt;
This type of NAT just modifies each packet according to your rules without any other state/connection tracking.&lt;br /&gt;
&lt;br /&gt;
This is valid for 1:1 mappings and is faster than stateful NAT. However, it&#039;s easy to shoot yourself in the foot.&lt;br /&gt;
If your environment doesn&#039;t require this approach, better stick to stateful NAT.&lt;br /&gt;
&lt;br /&gt;
You have to disable connection tracking for modified packets.&lt;br /&gt;
&lt;br /&gt;
The example below sets IP/port for each packet (also valid in IPv6):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
% nft add rule ip raw prerouting ip protocol tcp ip daddr set 192.168.1.100 tcp dport set 10 notrack&lt;br /&gt;
% nft add rule ip6 raw prerouting ip6 nexthdr tcp ip6 daddr set fe00::1 tcp dport set 10 notrack&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to check our documentation regarding [[Mangle packet header fields | mangling packets]] and [[setting packet connection tracking metainformation]].&lt;br /&gt;
&lt;br /&gt;
To use this feature you require nftables &amp;gt;=0.7 and linux kernel &amp;gt;= 4.9.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Performing_Network_Address_Translation_(NAT)&amp;diff=511</id>
		<title>Performing Network Address Translation (NAT)</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Performing_Network_Address_Translation_(NAT)&amp;diff=511"/>
		<updated>2020-06-23T21:51:21Z</updated>

		<summary type="html">&lt;p&gt;Fw: change quoting style to single-quotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;nat&#039;&#039; chain type allows you to perform NAT. This chain type comes with special semantics:&lt;br /&gt;
&lt;br /&gt;
* The first packet of a flow is used to look up for a matching rule which sets up the NAT binding for this flow. This also manipulates this first packet accordingly.&lt;br /&gt;
* No rule lookup happens for follow up packets in the flow: the NAT engine uses the NAT binding information already set up by the first packet to perform the packet manipulation.&lt;br /&gt;
&lt;br /&gt;
Adding a NAT rule to a filter type chain will result in an error.&lt;br /&gt;
&lt;br /&gt;
= Stateful NAT =&lt;br /&gt;
&lt;br /&gt;
The stateful NAT involves the nf_conntrack kernel engine to match/set packet stateful information and will engage according to the state of connections.&lt;br /&gt;
This is the most common way of performing NAT and the approach we recommend you to follow.&lt;br /&gt;
&lt;br /&gt;
Be aware that &#039;&#039;&#039;with kernel versions before 4.18, you have to register the prerouting/postrouting chains even if you have no rules there&#039;&#039;&#039; since these chain will invoke the NAT engine for the packets coming in the reply direction. The remaining documentation in this article assumes a newer kernel which doesn&#039;t require this inconvenience anymore.&lt;br /&gt;
&lt;br /&gt;
== Source NAT ==&lt;br /&gt;
&lt;br /&gt;
If you want to source NAT the traffic that leaves from your local area network to the Internet, you can create a new table &#039;&#039;nat&#039;&#039; with the postrouting chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table nat&lt;br /&gt;
% nft &#039;add chain nat postrouting { type nat hook postrouting priority 100 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, add the following rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This matches for all traffic from the 192.168.1.0/24 network to the interface &#039;&#039;eth0&#039;&#039;. The IPv4 address 1.2.3.4 is used as source for the packets that match this rule.&lt;br /&gt;
&lt;br /&gt;
== Destination NAT ==&lt;br /&gt;
&lt;br /&gt;
You need to add the following table and chain configuration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table nat&lt;br /&gt;
% nft &#039;add chain nat prerouting { type nat hook prerouting priority -100; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can add the following rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add rule nat prerouting iif eth0 tcp dport { 80, 443 } dnat 192.168.1.120&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This redirects the incoming traffic for TCP ports 80 and 443 to 192.168.1.120.&lt;br /&gt;
&lt;br /&gt;
== Masquerading ==&lt;br /&gt;
&lt;br /&gt;
NOTE: &#039;&#039;masquerade&#039;&#039; is available starting with Linux Kernel 3.18.&lt;br /&gt;
&lt;br /&gt;
Masquerade is a special case of SNAT, where the source address is automagically set to the address of the output interface. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting masquerade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;masquerade&#039;&#039; only makes sense from postrouting chain of NAT type.&lt;br /&gt;
&lt;br /&gt;
== Redirect ==&lt;br /&gt;
&lt;br /&gt;
NOTE: &#039;&#039;redirect&#039;&#039; is available starting with Linux Kernel 3.19.&lt;br /&gt;
&lt;br /&gt;
By using redirect, packets will be forwarded to local machine. Is a special case of DNAT where the destination is the current machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat prerouting redirect&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example redirects 22/tcp traffic to 2222/tcp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat prerouting tcp dport 22 redirect to 2222&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that: &#039;&#039;redirect&#039;&#039; only makes sense in a prerouting chain of NAT type.&lt;br /&gt;
&lt;br /&gt;
== NAT flags ==&lt;br /&gt;
&lt;br /&gt;
Since Linux kernel 3.18, you can combine the following flags with your NAT statements:&lt;br /&gt;
&lt;br /&gt;
* random: randomize source port mapping.&lt;br /&gt;
* fully-random: full port randomization.&lt;br /&gt;
* persistent: gives a client the same source-/destination-address for each connection.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule nat postrouting masquerade random,persistent&lt;br /&gt;
% nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4 fully-random&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inet family NAT ==&lt;br /&gt;
&lt;br /&gt;
Since Linux kernel 5.2, there is support for performing stateful NAT in &#039;&#039;inet&#039;&#039; family chains. Syntax and semantics are equivalent to &#039;&#039;ip&#039;&#039;/&#039;&#039;ip6&#039;&#039; families; the only exception being if IP addresses are specified, a prefix of either &#039;&#039;ip&#039;&#039; or &#039;&#039;ip6&#039;&#039; to clarify the address family is required:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule inet nat prerouting dnat ip to 10.0.0.2&lt;br /&gt;
% nft add rule inet nat prerouting dnat ip6 to feed::c0fe&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Incompatibilities ==&lt;br /&gt;
&lt;br /&gt;
You cannot use iptables and nft to perform NAT at the same time. So make sure that the &#039;&#039;iptable_nat&#039;&#039; module is unloaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% rmmod iptable_nat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stateless NAT =&lt;br /&gt;
&lt;br /&gt;
This type of NAT just modifies each packet according to your rules without any other state/connection tracking.&lt;br /&gt;
&lt;br /&gt;
This is valid for 1:1 mappings and is faster than stateful NAT. However, it&#039;s easy to shoot yourself in the foot.&lt;br /&gt;
If your environment doesn&#039;t require this approach, better stick to stateful NAT.&lt;br /&gt;
&lt;br /&gt;
You have to disable connection tracking for modified packets.&lt;br /&gt;
&lt;br /&gt;
The example below sets IP/port for each packet (also valid in IPv6):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
% nft add rule ip raw prerouting ip protocol tcp ip daddr set 192.168.1.100 tcp dport set 10 notrack&lt;br /&gt;
% nft add rule ip6 raw prerouting ip6 nexthdr tcp ip6 daddr set fe00::1 tcp dport set 10 notrack&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to check our documentation regarding [[Mangle packet header fields | mangling packets]] and [[setting packet connection tracking metainformation]].&lt;br /&gt;
&lt;br /&gt;
To use this feature you require nftables &amp;gt;=0.7 and linux kernel &amp;gt;= 4.9.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=510</id>
		<title>Configuring chains</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=510"/>
		<updated>2020-06-23T21:50:01Z</updated>

		<summary type="html">&lt;p&gt;Fw: convert quoting style to single-quotes, some shells such as zsh also require quoting of curly braces. route/nat now work with inet family.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As in &#039;&#039;iptables&#039;&#039;, you attach your [[Simple rule management|rules]] to chains. However, contrary to the &#039;&#039;iptables&#039;&#039; modus operandi, the &#039;&#039;nftables&#039;&#039; infrastructure comes with no predefined chains, so you need to register your base chains in first place before you can add any rule. This allows very flexible configurations.&lt;br /&gt;
&lt;br /&gt;
= Adding base chains =&lt;br /&gt;
&lt;br /&gt;
The syntax to add base chains is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain [&amp;lt;family&amp;gt;] &amp;lt;table-name&amp;gt; &amp;lt;chain-name&amp;gt; { type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; priority &amp;lt;value&amp;gt; \; [policy &amp;lt;policy&amp;gt;] } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base chains are those that are registered into the [[Netfilter hooks]], ie. these chains see packets flowing through your Linux TCP/IP stack.&lt;br /&gt;
&lt;br /&gt;
The following example show how you can add new base chains to the &#039;&#039;foo&#039;&#039; table through the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add chain ip foo input { type filter hook input priority 0 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: nft re-uses special characters, such as curly braces and the semicolon.I&lt;br /&gt;
f you are running these commands from a shell such as &#039;&#039;bash&#039;&#039;, all the special characters need&lt;br /&gt;
to be escaped.  The most simple way to prevent the shell from attempting to parse the nft syntax&lt;br /&gt;
is to quote everything withing single quotes.  Alternatively, you can run the command&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft -i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and run nft in interactive mode.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;add chain&#039;&#039; command registers the &#039;&#039;input&#039;&#039; chain, that it attached to the &#039;&#039;input&#039;&#039; hook so it will see packets that are addressed to the local processes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;priority&#039;&#039; is important since it determines the ordering of the chains, thus, if you have several chains in the &#039;&#039;input&#039;&#039; hook, you can decide which one sees packets before another.&lt;br /&gt;
For example, input chains with priorities -12, -1, 0, 10 would be consulted exactly in that order.  Its possible to give two base chains the same priority, but there&lt;br /&gt;
is no guaranteed evaluation order of base chains with identical priority that are attached to the same hook location.&lt;br /&gt;
&lt;br /&gt;
If you want to use &#039;&#039;nftables&#039;&#039; to filter traffic for desktop Linux computers, ie. a computer which does not forward traffic, you can also register the output chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add chain ip foo output { type filter hook output priority 0 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you are ready to filter incoming (directed to local processes) and outgoing (generated by local processes) traffic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;: If you don&#039;t include the chain configuration that is specified enclosed in the curly braces, you are creating a non-base chain that will not see any packets (similar to &#039;&#039;iptables -N chain-name&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Since nftables 0.5, you can also specify the default policy for base chains as in &#039;&#039;iptables&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add chain ip foo output { type filter hook output priority 0 ; policy accept; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in &#039;&#039;iptables&#039;&#039;, the two possible default policies are &#039;&#039;accept&#039;&#039; and &#039;&#039;drop&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When adding a chain on &#039;&#039;&#039;ingress&#039;&#039;&#039; hook, it is mandatory to specify the device where the chain will be attached: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft &#039;add chain netdev foo dev0filter { type filter hook ingress device eth0 priority 0 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Base chain types ==&lt;br /&gt;
&lt;br /&gt;
The possible chain types are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039;, which is obviously used to filter packets. This is supported by the arp, bridge, ip, ip6 and inet table families.&lt;br /&gt;
* &#039;&#039;&#039;route&#039;&#039;&#039;, which is used to reroute packets if any relevant IP header field or the packet mark is modified. If you are familiar with &#039;&#039;iptables&#039;&#039;, this chain type provides equivalent semantics to the &#039;&#039;mangle&#039;&#039; table but only for the &#039;&#039;output&#039;&#039; hook (for other hooks use type &#039;&#039;filter&#039;&#039; instead). This is supported by the ip, ip6 and inet table families.&lt;br /&gt;
* &#039;&#039;&#039;nat&#039;&#039;&#039;, which is used to perform Networking Address Translation (NAT). The first packet that belongs to a flow always hits this chain, follow up packets not. Therefore, never use this chain for filtering. This is supported by the ip, ip6 and inet table families.&lt;br /&gt;
&lt;br /&gt;
== Base chain hooks ==&lt;br /&gt;
&lt;br /&gt;
The possible hooks that you can use when you configure your chain are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;prerouting&#039;&#039;&#039;: the routing decision for those packets didn&#039;t happen yet, so you don&#039;t know if they are addressed to the local or remote systems.&lt;br /&gt;
* &#039;&#039;&#039;input&#039;&#039;&#039;: It happens after the routing decision, you can see packets that are directed to the local system and processes running in system.&lt;br /&gt;
* &#039;&#039;&#039;forward&#039;&#039;&#039;: It also happens after the routing decision, you can see packet that are not directed to the local machine.&lt;br /&gt;
* &#039;&#039;&#039;output&#039;&#039;&#039;: to catch packets that are originated from processes in the local machine.&lt;br /&gt;
* &#039;&#039;&#039;postrouting&#039;&#039;&#039;: After the routing decision for packets leaving the local system.&lt;br /&gt;
* &#039;&#039;&#039;ingress&#039;&#039;&#039; (only available at the &#039;&#039;netdev&#039;&#039; family): Since Linux kernel 4.2, you can filter traffic way before prerouting, after the packet is passed up from the NIC driver. So you have an alternative to &#039;&#039;tc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Base chain priority ==&lt;br /&gt;
&lt;br /&gt;
The priority can be used to order the chains or to put them before or after some Netfilter internal operations. For example, a chain on the &#039;&#039;prerouting&#039;&#039; hook with the priority &#039;&#039;-300&#039;&#039; will be placed before connection tracking operations. &lt;br /&gt;
&lt;br /&gt;
For reference, here&#039;s the list of different priority used in iptables:&lt;br /&gt;
&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_DEFRAG (-400): priority of defragmentation&lt;br /&gt;
* NF_IP_PRI_RAW (-300): traditional priority of the raw table placed before connection tracking operation&lt;br /&gt;
* NF_IP_PRI_SELINUX_FIRST (-225): SELinux operations&lt;br /&gt;
* NF_IP_PRI_CONNTRACK (-200): Connection tracking operations&lt;br /&gt;
* NF_IP_PRI_MANGLE (-150): mangle operation&lt;br /&gt;
* NF_IP_PRI_NAT_DST (-100): destination NAT&lt;br /&gt;
* NF_IP_PRI_FILTER (0): filtering operation, the filter table&lt;br /&gt;
* NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example&lt;br /&gt;
* NF_IP_PRI_NAT_SRC (100): source NAT&lt;br /&gt;
* NF_IP_PRI_SELINUX_LAST (225): SELinux at packet exit&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_HELPER (300): connection tracking at exit&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: if a packet gets accepted and there is another base chain in the same hook which is ordered with a later priority, the packet will be evaluated &#039;&#039;&#039;again&#039;&#039;&#039;.&lt;br /&gt;
That is, packets will traverse chains in a given hook, until it is dropped or no more base chains exist. Drops take instant effect, no further rules or chains are evaluated.&lt;br /&gt;
&lt;br /&gt;
Example ruleset of this behavior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
        # this chain is evaluated first due to priority&lt;br /&gt;
        chain ssh {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                # ssh packet accepted&lt;br /&gt;
                tcp dport ssh accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # this chain is evaluated last due to priority&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 1; policy drop;&lt;br /&gt;
                # the same ssh packet is dropped here by means of default policy&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If priority of the &#039;input chain&#039; above would be changed to -1, all packets would&lt;br /&gt;
be dropped.&lt;br /&gt;
&lt;br /&gt;
== Base chain policy ==&lt;br /&gt;
&lt;br /&gt;
This is the default verdict that will be applied to packets reaching the end of the chain (i.e, no more rules to be evaluated against).&lt;br /&gt;
&lt;br /&gt;
Currently there are 2 policies: &#039;&#039;&#039;accept&#039;&#039;&#039; (default) or &#039;&#039;&#039;drop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;accept&#039;&#039; verdict means that the packet will keep traversing the network stack (default).&lt;br /&gt;
* The &#039;&#039;drop&#039;&#039; verdict means that the packet is discarded if the packet reaches the end of the base chain.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: If no policy is explicitly selected, the default policy &#039;&#039;&#039;accept&#039;&#039;&#039; will be used.&lt;br /&gt;
&lt;br /&gt;
= Adding non-base chains =&lt;br /&gt;
&lt;br /&gt;
You can also create non-base chains as in &#039;&#039;iptables&#039;&#039; via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip &amp;lt;table_name&amp;gt; &amp;lt;chain_name&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this chain does &#039;&#039;&#039;not&#039;&#039;&#039; see any traffic as it is not attached to any hook, but it can be very useful to arrange your rule-set in a tree of chains by using the [[jumping to chain|jump to chain]] action.&lt;br /&gt;
&lt;br /&gt;
The chain name is an arbitrary string, with arbitrary case.&lt;br /&gt;
&lt;br /&gt;
= Deleting chains =&lt;br /&gt;
&lt;br /&gt;
You can delete the chains that you don&#039;t need, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only condition is that the chain you want to delete needs to be empty, otherwise the kernel will tell you that such chain is in used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;cmdline&amp;gt;:1:1-28: Error: Could not delete chain: Device or resource busy&lt;br /&gt;
delete chain ip foo input&lt;br /&gt;
^^^^^^^^^^^^^^^^^^^^^^^^^&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will have to [[Simple rule management|flush the ruleset]] in that chain before you can remove the chain.&lt;br /&gt;
&lt;br /&gt;
= Flushing chain =&lt;br /&gt;
&lt;br /&gt;
You can also flush the content of a chain. If you want to flush all the rule in the chain &#039;&#039;input&#039;&#039; of the &#039;&#039;foo&#039;&#039; table, you have to type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush chain foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example configuration: Filtering traffic for your standalone computer =&lt;br /&gt;
&lt;br /&gt;
You can create a table with two base chains to define rule to filter traffic coming to and leaving from your computer, asumming IPv4 connectivity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft &#039;add chain ip filter input { type filter hook input priority 0 ; }&#039;&lt;br /&gt;
% nft &#039;add chain ip filter output { type filter hook output priority 0 ; }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you can start attaching [[Simple rule management|rules]] to these two base chains. Note that you don&#039;t need the &#039;&#039;forward&#039;&#039; chain in this case since this example assumes that you&#039;re configuring nftables to filter traffic for a standalone computer that doesn&#039;t behave as router.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=509</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=509"/>
		<updated>2020-06-17T16:43:30Z</updated>

		<summary type="html">&lt;p&gt;Fw: NETMAP is now supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                                                                            &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, since 5.0&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== time ====&lt;br /&gt;
* nft_meta, since 5.4&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat, upcoming 5.8              &lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Updating_sets_from_the_packet_path&amp;diff=480</id>
		<title>Updating sets from the packet path</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Updating_sets_from_the_packet_path&amp;diff=480"/>
		<updated>2019-12-04T11:53:22Z</updated>

		<summary type="html">&lt;p&gt;Fw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since nftables v0.7 you can update sets from the packet path, i.e., update the content of a set based on the packets the firewall is receiving.&lt;br /&gt;
&lt;br /&gt;
This usually used in combination with [[Element timeouts]], and one of the main use cases in to create dynamic black lists or ban lists.&lt;br /&gt;
&lt;br /&gt;
There are two main operations: &#039;&#039;&#039;add&#039;&#039;&#039; and &#039;&#039;&#039;update&#039;&#039;&#039;, which differs in how they modify any previous element timeout. The &#039;&#039;&#039;update&#039;&#039;&#039; command refreshes the element timeout for each packet seen, while &#039;&#039;&#039;add&#039;&#039;&#039; does not.&lt;br /&gt;
&lt;br /&gt;
An example using the &#039;&#039;&#039;update&#039;&#039;&#039; operation, with timeouts, follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 % nft add table filter&lt;br /&gt;
 % nft add chain filter input { type filter hook input priority 0\; }&lt;br /&gt;
 % nft add set filter myset { type inet_service\; flags timeout\; }&lt;br /&gt;
 % nft add rule filter input set update tcp dport timeout 60s @myset&lt;br /&gt;
 % nft list ruleset&lt;br /&gt;
 table ip filter {&lt;br /&gt;
        set myset {&lt;br /&gt;
                type inet_service&lt;br /&gt;
                flags timeout&lt;br /&gt;
                elements = { http expires 9s}&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                update @myset { tcp dport timeout 1m }&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example uses the &#039;&#039;&#039;add&#039;&#039;&#039; operation in a set without timeouts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
 % nft add table filter&lt;br /&gt;
 % nft add chain filter input { type filter hook input priority 0\; }&lt;br /&gt;
 % nft add set filter myset { type ipv4_addr\; }&lt;br /&gt;
 % nft add rule filter input set add ip saddr @myset&lt;br /&gt;
 % nft list ruleset&lt;br /&gt;
 table ip filter {&lt;br /&gt;
        set myset {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1 }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                add @myset { ip saddr }&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Matching_routing_information&amp;diff=476</id>
		<title>Matching routing information</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Matching_routing_information&amp;diff=476"/>
		<updated>2019-11-15T16:00:25Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* fib */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with linux 4.10 and nftables v0.7, there are new mechanisms to match several routing information related to packets and the firewall machine.&lt;br /&gt;
&lt;br /&gt;
== nexthop ==&lt;br /&gt;
&lt;br /&gt;
The directly connected IP address that an outgoing packet is sent to, which can be used either&lt;br /&gt;
for matching or accounting, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule filter postrouting ip daddr 192.168.1.0/24 rt nexthop != 192.168.0.1 drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will drop any traffic to 192.168.1.0/24 that is not routed via 192.168.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule filter postrouting flow table acct { rt nexthop timeout 600s counter }&lt;br /&gt;
nft add rule ip6 filter postrouting flow table acct { rt nexthop timeout 600s counter }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These rules count outgoing traffic per nexthop. Note that the timeout releases an entry if no traffic&lt;br /&gt;
is seen for this nexthop within 10 minutes.&lt;br /&gt;
&lt;br /&gt;
General syntax is: &#039;&#039;&#039;rt&#039;&#039;&#039; &#039;&#039;key&#039;&#039; operator &#039;&#039;expression&#039;&#039;, where:&lt;br /&gt;
&lt;br /&gt;
* key: classid, nexthop&lt;br /&gt;
* operator: eq, neq, gt, lt, gte, lte, vmap, map&lt;br /&gt;
&lt;br /&gt;
== fib ==&lt;br /&gt;
&lt;br /&gt;
The fib statement can be used to obtain the output interface from the route table based on either source&lt;br /&gt;
or destination address of a packet.&lt;br /&gt;
&lt;br /&gt;
This can be used to e.g. add reverse path filtering, or eg. drop if not coming from the same interface packet arrived on:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule x prerouting fib saddr . iif oif eq 0 drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accept only if from eth:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule x prerouting fib saddr . iif oif eq &amp;quot;eth0&amp;quot; accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Accept if from any valid interface:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule x prerouting fib saddr oif accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Querying of address type is also supported, this can be used to only accept packets to addresses configured in the same&lt;br /&gt;
interface, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft add rule x prerouting fib daddr . iif type local accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its also possible to use verdict maps, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
nft &#039;add rule x prerouting fib saddr . mark oif vmap { &amp;quot;eth0&amp;quot; : drop, &amp;quot;ppp0&amp;quot; : accept }&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This takes the packet source address and queries the routing table&lt;br /&gt;
for the output interface index that would be used to send a packet&lt;br /&gt;
to that address.  The packets destination address is used as source&lt;br /&gt;
address.  The &amp;quot;. mark&amp;quot; syntax tells the fib expression it should also&lt;br /&gt;
consider the packet mark when the fib is queried.&lt;br /&gt;
Likewise, &amp;quot;iif&amp;quot; and &amp;quot;oif&amp;quot; tell fib to consider the packets in and output&lt;br /&gt;
interface on lookup.&lt;br /&gt;
&lt;br /&gt;
General syntax is: &#039;&#039;&#039;fib&#039;&#039;&#039; &#039;&#039;key&#039;&#039; &#039;&#039;data&#039;&#039; operator &#039;&#039;expression&#039;&#039;, where:&lt;br /&gt;
&lt;br /&gt;
* key: saddr, daddr, mark, iif, oif (use &#039;.&#039; for concatenations to represent tuples)&lt;br /&gt;
* data: oif, oifname, (address) type&lt;br /&gt;
* operator: eq, neq, vmap, map&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=466</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=466"/>
		<updated>2019-10-10T15:33:06Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* policy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, since 5.0&lt;br /&gt;
&lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== time ====&lt;br /&gt;
* nft_meta, upcoming 5.4&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=465</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=465"/>
		<updated>2019-10-10T15:32:43Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* tcpmss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== time ====&lt;br /&gt;
* nft_meta, upcoming 5.4&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=464</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=464"/>
		<updated>2019-10-10T15:31:28Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* tproxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=463</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=463"/>
		<updated>2019-10-10T15:31:09Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* SECMARK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
&lt;br /&gt;
==== SYNPROXY ====&lt;br /&gt;
* nft_synproxy, since 5.3&lt;br /&gt;
&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=462</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=462"/>
		<updated>2019-10-10T15:29:30Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* TPROXY */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=461</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=461"/>
		<updated>2019-10-10T15:29:13Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* tproxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=460</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=460"/>
		<updated>2019-10-10T15:28:57Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* tcpmss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy, since 4.19&lt;br /&gt;
&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=459</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=459"/>
		<updated>2019-10-10T15:27:45Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* statistic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
&lt;br /&gt;
==== tproxy ====&lt;br /&gt;
* nft_tproxy&lt;br /&gt;
&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=458</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=458"/>
		<updated>2019-10-10T15:27:04Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* SET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=457</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=457"/>
		<updated>2019-10-10T15:26:48Z</updated>

		<summary type="html">&lt;p&gt;Fw: time is now supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=456</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=456"/>
		<updated>2019-10-10T15:26:30Z</updated>

		<summary type="html">&lt;p&gt;Fw: synproxy is now supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=455</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=455"/>
		<updated>2019-10-04T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Anonymous sets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;nftables&#039;&#039; comes with a built-in generic set infrastructure that allows you to use &#039;&#039;&#039;any&#039;&#039;&#039; supported selector to build sets. This infrastructure makes possible the representation of [[dictionaries]] and [[maps]].&lt;br /&gt;
&lt;br /&gt;
The set elements are internally represented using performance data structures such as hashtables and red-black trees.&lt;br /&gt;
&lt;br /&gt;
= Anonymous sets =&lt;br /&gt;
&lt;br /&gt;
Anonymous sets are those that are:&lt;br /&gt;
&lt;br /&gt;
* Bound to a rule, if the rule is removed, that set is released too.&lt;br /&gt;
* They have no specific name, the kernel internally allocates an identifier.&lt;br /&gt;
* They cannot be updated. So you cannot add and delete elements from it once it is bound to a rule.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to create a simple set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip filter output tcp dport { 22, 23 } counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule above catches all traffic going to TCP ports 22 and 23, in case of matching the counters are updated.&lt;br /&gt;
&lt;br /&gt;
Eric Leblond in his [https://home.regit.org/2014/01/why-you-will-love-nftables/ Why you will love nftables] article shows a very simple example to compare iptables with nftables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be expressed in &#039;&#039;nftables&#039;&#039; with a couple of rules that provide a set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip6 filter input tcp dport {telnet, http, https} accept&lt;br /&gt;
% nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Named sets =&lt;br /&gt;
&lt;br /&gt;
You can create the named sets with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter blackhole { type ipv4_addr\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;blackhole&#039;&#039; is the name of the set in this case. The &#039;&#039;type&#039;&#039; option indicates the data type that this set stores, which is an IPv4 address in this case. Current maximum name length is 16 characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.3.4 }&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can use it from the rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip filter input ip saddr @blackhole drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named sets can be updated anytime, so you can add and delete element from them.&lt;br /&gt;
&lt;br /&gt;
= Named sets specifications =&lt;br /&gt;
&lt;br /&gt;
Sets specifications are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039;, is obligatory and determines the data type of the set elements. Supported data types currently are:&lt;br /&gt;
** &#039;&#039;ipv4_addr&#039;&#039;: IPv4 address&lt;br /&gt;
** &#039;&#039;ipv6_addr&#039;&#039;: IPv6 address.&lt;br /&gt;
** &#039;&#039;ether_addr&#039;&#039;: Ethernet address.&lt;br /&gt;
** &#039;&#039;inet_proto&#039;&#039;: Inet protocol type.&lt;br /&gt;
** &#039;&#039;inet_service&#039;&#039;: Internet service (read tcp port for example)&lt;br /&gt;
** &#039;&#039;mark&#039;&#039;: Mark type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;timeout&#039;&#039;&#039;, it determines how long an element stays in the set. The time string respects the format: &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add set ip filter ports {type inet_service \; timeout 3h45s \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands create a table named &#039;&#039;filter&#039;&#039; and add a set named &#039;&#039;ports&#039;&#039; to it, where elements are deleted after 3 hours and 45 seconds of being added.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039;, the available flags are:&lt;br /&gt;
** &#039;&#039;constant&#039;&#039; - set content may not change while bound&lt;br /&gt;
** &#039;&#039;interval&#039;&#039; - set contains intervals&lt;br /&gt;
** &#039;&#039;timeout&#039;&#039; - elements can be added with a timeout&lt;br /&gt;
&lt;br /&gt;
Multiple flags should be separated by comma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter flags_set {type ipv4_addr\; flags constant, interval\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc-interval&#039;&#039;&#039;, stands for garbage collection interval, can only be used if &#039;&#039;timeout&#039;&#039; or &#039;&#039;flags timeout&#039;&#039; are active. The interval follows the same format of &#039;&#039;timeouts&#039;&#039; time string &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;elements&#039;&#039;&#039;, initialize the set with some elements in it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command creates a set name &#039;&#039;daddrs&#039;&#039; with elements &#039;&#039;192.168.1.1&#039;&#039;, which stays in it for 10s, and &#039;&#039;192.168.1.2&#039;&#039;, which stays for 30s.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter saddrs {type ipv4_addr \; size 2 \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;policy&#039;&#039;&#039;, determines set selection policy. Available values are:&lt;br /&gt;
** &#039;&#039;performance&#039;&#039; [default]&lt;br /&gt;
** &#039;&#039;memory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Listing named sets =&lt;br /&gt;
&lt;br /&gt;
You can list the content of a named set via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list set ip filter myset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=454</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=454"/>
		<updated>2019-10-04T15:29:24Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Listing named sets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;nftables&#039;&#039; comes with a built-in generic set infrastructure that allows you to use &#039;&#039;&#039;any&#039;&#039;&#039; supported selector to build sets. This infrastructure makes possible the representation of [[dictionaries]] and [[maps]].&lt;br /&gt;
&lt;br /&gt;
The set elements are internally represented using performance data structures such as hashtables and red-black trees.&lt;br /&gt;
&lt;br /&gt;
= Anonymous sets =&lt;br /&gt;
&lt;br /&gt;
Anonymous sets are those that are:&lt;br /&gt;
&lt;br /&gt;
* Bound to a rule, if the rule is removed, that set is released too.&lt;br /&gt;
* They have no specific name, the kernel internally allocates an identifier.&lt;br /&gt;
* They cannot be updated. So you cannot add and delete elements from it once it is bound to a rule.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to create a simple set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output tcp dport { 22, 23 } counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule above catches all traffic going to TCP ports 22 and 23, in case of matching the counters are updated.&lt;br /&gt;
&lt;br /&gt;
Eric Leblond in his [https://home.regit.org/2014/01/why-you-will-love-nftables/ Why you will love nftables] article shows a very simple example to compare iptables with nftables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be expressed in &#039;&#039;nftables&#039;&#039; with a couple of rules that provide a set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip6 filter input tcp dport {telnet, http, https} accept&lt;br /&gt;
% nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Named sets =&lt;br /&gt;
&lt;br /&gt;
You can create the named sets with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter blackhole { type ipv4_addr\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;blackhole&#039;&#039; is the name of the set in this case. The &#039;&#039;type&#039;&#039; option indicates the data type that this set stores, which is an IPv4 address in this case. Current maximum name length is 16 characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.3.4 }&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can use it from the rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip filter input ip saddr @blackhole drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named sets can be updated anytime, so you can add and delete element from them.&lt;br /&gt;
&lt;br /&gt;
= Named sets specifications =&lt;br /&gt;
&lt;br /&gt;
Sets specifications are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039;, is obligatory and determines the data type of the set elements. Supported data types currently are:&lt;br /&gt;
** &#039;&#039;ipv4_addr&#039;&#039;: IPv4 address&lt;br /&gt;
** &#039;&#039;ipv6_addr&#039;&#039;: IPv6 address.&lt;br /&gt;
** &#039;&#039;ether_addr&#039;&#039;: Ethernet address.&lt;br /&gt;
** &#039;&#039;inet_proto&#039;&#039;: Inet protocol type.&lt;br /&gt;
** &#039;&#039;inet_service&#039;&#039;: Internet service (read tcp port for example)&lt;br /&gt;
** &#039;&#039;mark&#039;&#039;: Mark type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;timeout&#039;&#039;&#039;, it determines how long an element stays in the set. The time string respects the format: &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add set ip filter ports {type inet_service \; timeout 3h45s \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands create a table named &#039;&#039;filter&#039;&#039; and add a set named &#039;&#039;ports&#039;&#039; to it, where elements are deleted after 3 hours and 45 seconds of being added.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039;, the available flags are:&lt;br /&gt;
** &#039;&#039;constant&#039;&#039; - set content may not change while bound&lt;br /&gt;
** &#039;&#039;interval&#039;&#039; - set contains intervals&lt;br /&gt;
** &#039;&#039;timeout&#039;&#039; - elements can be added with a timeout&lt;br /&gt;
&lt;br /&gt;
Multiple flags should be separated by comma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter flags_set {type ipv4_addr\; flags constant, interval\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc-interval&#039;&#039;&#039;, stands for garbage collection interval, can only be used if &#039;&#039;timeout&#039;&#039; or &#039;&#039;flags timeout&#039;&#039; are active. The interval follows the same format of &#039;&#039;timeouts&#039;&#039; time string &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;elements&#039;&#039;&#039;, initialize the set with some elements in it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command creates a set name &#039;&#039;daddrs&#039;&#039; with elements &#039;&#039;192.168.1.1&#039;&#039;, which stays in it for 10s, and &#039;&#039;192.168.1.2&#039;&#039;, which stays for 30s.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter saddrs {type ipv4_addr \; size 2 \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;policy&#039;&#039;&#039;, determines set selection policy. Available values are:&lt;br /&gt;
** &#039;&#039;performance&#039;&#039; [default]&lt;br /&gt;
** &#039;&#039;memory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Listing named sets =&lt;br /&gt;
&lt;br /&gt;
You can list the content of a named set via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list set ip filter myset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=453</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=453"/>
		<updated>2019-10-04T15:29:12Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Named sets specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;nftables&#039;&#039; comes with a built-in generic set infrastructure that allows you to use &#039;&#039;&#039;any&#039;&#039;&#039; supported selector to build sets. This infrastructure makes possible the representation of [[dictionaries]] and [[maps]].&lt;br /&gt;
&lt;br /&gt;
The set elements are internally represented using performance data structures such as hashtables and red-black trees.&lt;br /&gt;
&lt;br /&gt;
= Anonymous sets =&lt;br /&gt;
&lt;br /&gt;
Anonymous sets are those that are:&lt;br /&gt;
&lt;br /&gt;
* Bound to a rule, if the rule is removed, that set is released too.&lt;br /&gt;
* They have no specific name, the kernel internally allocates an identifier.&lt;br /&gt;
* They cannot be updated. So you cannot add and delete elements from it once it is bound to a rule.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to create a simple set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output tcp dport { 22, 23 } counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule above catches all traffic going to TCP ports 22 and 23, in case of matching the counters are updated.&lt;br /&gt;
&lt;br /&gt;
Eric Leblond in his [https://home.regit.org/2014/01/why-you-will-love-nftables/ Why you will love nftables] article shows a very simple example to compare iptables with nftables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be expressed in &#039;&#039;nftables&#039;&#039; with a couple of rules that provide a set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip6 filter input tcp dport {telnet, http, https} accept&lt;br /&gt;
% nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Named sets =&lt;br /&gt;
&lt;br /&gt;
You can create the named sets with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter blackhole { type ipv4_addr\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;blackhole&#039;&#039; is the name of the set in this case. The &#039;&#039;type&#039;&#039; option indicates the data type that this set stores, which is an IPv4 address in this case. Current maximum name length is 16 characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.3.4 }&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can use it from the rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip filter input ip saddr @blackhole drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named sets can be updated anytime, so you can add and delete element from them.&lt;br /&gt;
&lt;br /&gt;
= Named sets specifications =&lt;br /&gt;
&lt;br /&gt;
Sets specifications are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039;, is obligatory and determines the data type of the set elements. Supported data types currently are:&lt;br /&gt;
** &#039;&#039;ipv4_addr&#039;&#039;: IPv4 address&lt;br /&gt;
** &#039;&#039;ipv6_addr&#039;&#039;: IPv6 address.&lt;br /&gt;
** &#039;&#039;ether_addr&#039;&#039;: Ethernet address.&lt;br /&gt;
** &#039;&#039;inet_proto&#039;&#039;: Inet protocol type.&lt;br /&gt;
** &#039;&#039;inet_service&#039;&#039;: Internet service (read tcp port for example)&lt;br /&gt;
** &#039;&#039;mark&#039;&#039;: Mark type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;timeout&#039;&#039;&#039;, it determines how long an element stays in the set. The time string respects the format: &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add set ip filter ports {type inet_service \; timeout 3h45s \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands create a table named &#039;&#039;filter&#039;&#039; and add a set named &#039;&#039;ports&#039;&#039; to it, where elements are deleted after 3 hours and 45 seconds of being added.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039;, the available flags are:&lt;br /&gt;
** &#039;&#039;constant&#039;&#039; - set content may not change while bound&lt;br /&gt;
** &#039;&#039;interval&#039;&#039; - set contains intervals&lt;br /&gt;
** &#039;&#039;timeout&#039;&#039; - elements can be added with a timeout&lt;br /&gt;
&lt;br /&gt;
Multiple flags should be separated by comma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter flags_set {type ipv4_addr\; flags constant, interval\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc-interval&#039;&#039;&#039;, stands for garbage collection interval, can only be used if &#039;&#039;timeout&#039;&#039; or &#039;&#039;flags timeout&#039;&#039; are active. The interval follows the same format of &#039;&#039;timeouts&#039;&#039; time string &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;elements&#039;&#039;&#039;, initialize the set with some elements in it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command creates a set name &#039;&#039;daddrs&#039;&#039; with elements &#039;&#039;192.168.1.1&#039;&#039;, which stays in it for 10s, and &#039;&#039;192.168.1.2&#039;&#039;, which stays for 30s.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter saddrs {type ipv4_addr \; size 2 \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;policy&#039;&#039;&#039;, determines set selection policy. Available values are:&lt;br /&gt;
** &#039;&#039;performance&#039;&#039; [default]&lt;br /&gt;
** &#039;&#039;memory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Listing named sets =&lt;br /&gt;
&lt;br /&gt;
You can list the content of a named set via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list set filter myset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=452</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=452"/>
		<updated>2019-10-04T15:28:16Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Named sets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;nftables&#039;&#039; comes with a built-in generic set infrastructure that allows you to use &#039;&#039;&#039;any&#039;&#039;&#039; supported selector to build sets. This infrastructure makes possible the representation of [[dictionaries]] and [[maps]].&lt;br /&gt;
&lt;br /&gt;
The set elements are internally represented using performance data structures such as hashtables and red-black trees.&lt;br /&gt;
&lt;br /&gt;
= Anonymous sets =&lt;br /&gt;
&lt;br /&gt;
Anonymous sets are those that are:&lt;br /&gt;
&lt;br /&gt;
* Bound to a rule, if the rule is removed, that set is released too.&lt;br /&gt;
* They have no specific name, the kernel internally allocates an identifier.&lt;br /&gt;
* They cannot be updated. So you cannot add and delete elements from it once it is bound to a rule.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to create a simple set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output tcp dport { 22, 23 } counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule above catches all traffic going to TCP ports 22 and 23, in case of matching the counters are updated.&lt;br /&gt;
&lt;br /&gt;
Eric Leblond in his [https://home.regit.org/2014/01/why-you-will-love-nftables/ Why you will love nftables] article shows a very simple example to compare iptables with nftables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be expressed in &#039;&#039;nftables&#039;&#039; with a couple of rules that provide a set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip6 filter input tcp dport {telnet, http, https} accept&lt;br /&gt;
% nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Named sets =&lt;br /&gt;
&lt;br /&gt;
You can create the named sets with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter blackhole { type ipv4_addr\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;blackhole&#039;&#039; is the name of the set in this case. The &#039;&#039;type&#039;&#039; option indicates the data type that this set stores, which is an IPv4 address in this case. Current maximum name length is 16 characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.3.4 }&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can use it from the rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip filter input ip saddr @blackhole drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named sets can be updated anytime, so you can add and delete element from them.&lt;br /&gt;
&lt;br /&gt;
= Named sets specifications =&lt;br /&gt;
&lt;br /&gt;
Sets specifications are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039;, is obligatory and determines the data type of the set elements. Supported data types currently are:&lt;br /&gt;
** &#039;&#039;ipv4_addr&#039;&#039;: IPv4 address&lt;br /&gt;
** &#039;&#039;ipv6_addr&#039;&#039;: IPv6 address.&lt;br /&gt;
** &#039;&#039;ether_addr&#039;&#039;: Ethernet address.&lt;br /&gt;
** &#039;&#039;inet_proto&#039;&#039;: Inet protocol type.&lt;br /&gt;
** &#039;&#039;inet_service&#039;&#039;: Internet service (read tcp port for example)&lt;br /&gt;
** &#039;&#039;mark&#039;&#039;: Mark type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;timeout&#039;&#039;&#039;, it determines how long an element stays in the set. The time string respects the format: &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table filter&lt;br /&gt;
% nft add set filter ports {type inet_service \; timeout 3h45s \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands create a table named &#039;&#039;filter&#039;&#039; and add a set named &#039;&#039;ports&#039;&#039; to it, where elements are deleted after 3 hours and 45 seconds of being added.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039;, the available flags are:&lt;br /&gt;
** &#039;&#039;constant&#039;&#039; - set content may not change while bound&lt;br /&gt;
** &#039;&#039;interval&#039;&#039; - set contains intervals&lt;br /&gt;
** &#039;&#039;timeout&#039;&#039; - elements can be added with a timeout&lt;br /&gt;
&lt;br /&gt;
Multiple flags should be separated by comma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter flags_set {type ipv4_addr\; flags constant, interval\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc-interval&#039;&#039;&#039;, stands for garbage collection interval, can only be used if &#039;&#039;timeout&#039;&#039; or &#039;&#039;flags timeout&#039;&#039; are active. The interval follows the same format of &#039;&#039;timeouts&#039;&#039; time string &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;elements&#039;&#039;&#039;, initialize the set with some elements in it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command creates a set name &#039;&#039;daddrs&#039;&#039; with elements &#039;&#039;192.168.1.1&#039;&#039;, which stays in it for 10s, and &#039;&#039;192.168.1.2&#039;&#039;, which stays for 30s.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter saddrs {type ipv4_addr \; size 2 \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;policy&#039;&#039;&#039;, determines set selection policy. Available values are:&lt;br /&gt;
** &#039;&#039;performance&#039;&#039; [default]&lt;br /&gt;
** &#039;&#039;memory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Listing named sets =&lt;br /&gt;
&lt;br /&gt;
You can list the content of a named set via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list set filter myset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=451</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Sets&amp;diff=451"/>
		<updated>2019-10-04T15:27:37Z</updated>

		<summary type="html">&lt;p&gt;Fw: add family to add set/element commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;nftables&#039;&#039; comes with a built-in generic set infrastructure that allows you to use &#039;&#039;&#039;any&#039;&#039;&#039; supported selector to build sets. This infrastructure makes possible the representation of [[dictionaries]] and [[maps]].&lt;br /&gt;
&lt;br /&gt;
The set elements are internally represented using performance data structures such as hashtables and red-black trees.&lt;br /&gt;
&lt;br /&gt;
= Anonymous sets =&lt;br /&gt;
&lt;br /&gt;
Anonymous sets are those that are:&lt;br /&gt;
&lt;br /&gt;
* Bound to a rule, if the rule is removed, that set is released too.&lt;br /&gt;
* They have no specific name, the kernel internally allocates an identifier.&lt;br /&gt;
* They cannot be updated. So you cannot add and delete elements from it once it is bound to a rule.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to create a simple set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule filter output tcp dport { 22, 23 } counter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rule above catches all traffic going to TCP ports 22 and 23, in case of matching the counters are updated.&lt;br /&gt;
&lt;br /&gt;
Eric Leblond in his [https://home.regit.org/2014/01/why-you-will-love-nftables/ Why you will love nftables] article shows a very simple example to compare iptables with nftables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT&lt;br /&gt;
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which can be expressed in &#039;&#039;nftables&#039;&#039; with a couple of rules that provide a set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip6 filter input tcp dport {telnet, http, https} accept&lt;br /&gt;
% nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Named sets =&lt;br /&gt;
&lt;br /&gt;
You can create the named sets with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set ip filter blackhole { type ipv4_addr\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &#039;&#039;blackhole&#039;&#039; is the name of the set in this case. The &#039;&#039;type&#039;&#039; option indicates the data type that this set stores, which is an IPv4 address in this case. Current maximum name length is 16 characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.3.4 }&lt;br /&gt;
% nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you can use it from the rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add rule ip input ip saddr @blackhole drop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named sets can be updated anytime, so you can add and delete element from them.&lt;br /&gt;
&lt;br /&gt;
= Named sets specifications =&lt;br /&gt;
&lt;br /&gt;
Sets specifications are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039;, is obligatory and determines the data type of the set elements. Supported data types currently are:&lt;br /&gt;
** &#039;&#039;ipv4_addr&#039;&#039;: IPv4 address&lt;br /&gt;
** &#039;&#039;ipv6_addr&#039;&#039;: IPv6 address.&lt;br /&gt;
** &#039;&#039;ether_addr&#039;&#039;: Ethernet address.&lt;br /&gt;
** &#039;&#039;inet_proto&#039;&#039;: Inet protocol type.&lt;br /&gt;
** &#039;&#039;inet_service&#039;&#039;: Internet service (read tcp port for example)&lt;br /&gt;
** &#039;&#039;mark&#039;&#039;: Mark type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;timeout&#039;&#039;&#039;, it determines how long an element stays in the set. The time string respects the format: &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table filter&lt;br /&gt;
% nft add set filter ports {type inet_service \; timeout 3h45s \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands create a table named &#039;&#039;filter&#039;&#039; and add a set named &#039;&#039;ports&#039;&#039; to it, where elements are deleted after 3 hours and 45 seconds of being added.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;flags&#039;&#039;&#039;, the available flags are:&lt;br /&gt;
** &#039;&#039;constant&#039;&#039; - set content may not change while bound&lt;br /&gt;
** &#039;&#039;interval&#039;&#039; - set contains intervals&lt;br /&gt;
** &#039;&#039;timeout&#039;&#039; - elements can be added with a timeout&lt;br /&gt;
&lt;br /&gt;
Multiple flags should be separated by comma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter flags_set {type ipv4_addr\; flags constant, interval\;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc-interval&#039;&#039;&#039;, stands for garbage collection interval, can only be used if &#039;&#039;timeout&#039;&#039; or &#039;&#039;flags timeout&#039;&#039; are active. The interval follows the same format of &#039;&#039;timeouts&#039;&#039; time string &#039;&#039;&amp;quot;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;dv&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;hv&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;mv&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;s&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;elements&#039;&#039;&#039;, initialize the set with some elements in it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter daddrs {type ipv4_addr \; flags timeout \; elements={192.168.1.1 timeout 10s, 192.168.1.2 timeout 30s} \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command creates a set name &#039;&#039;daddrs&#039;&#039; with elements &#039;&#039;192.168.1.1&#039;&#039;, which stays in it for 10s, and &#039;&#039;192.168.1.2&#039;&#039;, which stays for 30s.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;, limits the maximum number of elements of the set. To create a set with maximum 2 elements type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add set filter saddrs {type ipv4_addr \; size 2 \;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;policy&#039;&#039;&#039;, determines set selection policy. Available values are:&lt;br /&gt;
** &#039;&#039;performance&#039;&#039; [default]&lt;br /&gt;
** &#039;&#039;memory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Listing named sets =&lt;br /&gt;
&lt;br /&gt;
You can list the content of a named set via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft list set filter myset&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Netfilter_hooks&amp;diff=397</id>
		<title>Netfilter hooks</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Netfilter_hooks&amp;diff=397"/>
		<updated>2019-06-27T14:29:33Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Ingress hook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are familiar with Netfilter, don&#039;t worry, most of the infrastructure remains the same. &#039;&#039;nftables&#039;&#039; reuses the existing hook infrastructure, [http://people.netfilter.org/pablo/docs/login.pdf Connection Tracking System], NAT engine, logging infrastructure, userspace queueing and so on. Therefore, &#039;&#039;&#039;we have only replaced the packet classification framework&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For those unfamiliar with Netfilter, we provide ASCII art to represent our hooks:&lt;br /&gt;
&lt;br /&gt;
                                              Local&lt;br /&gt;
                                             process&lt;br /&gt;
                                               ^  |      .-----------.&lt;br /&gt;
                    .-----------.              |  |      |  Routing  |&lt;br /&gt;
                    |           |-----&amp;gt; input /    \---&amp;gt; |  Decision |----&amp;gt; output \&lt;br /&gt;
 --&amp;gt; prerouting ---&amp;gt;|  Routing  |                        .-----------.              \&lt;br /&gt;
                    | Decision  |                                                     --&amp;gt; postrouting&lt;br /&gt;
                    |           |                                                    /&lt;br /&gt;
                    |           |---------------&amp;gt; forward --------------------------- &lt;br /&gt;
                    .-----------.&lt;br /&gt;
&lt;br /&gt;
Basically, traffic flowing to the local machine in the input path see the prerouting and input hooks. Then, the traffic that is generated by local processes follows the output and postrouting path.&lt;br /&gt;
&lt;br /&gt;
If you configure your Linux box to behave as router, do not forget to enable forwarding via:&lt;br /&gt;
&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
And then, the packets that are not addressed to your local system will be seen from the forward hook. In summary, packets that are not addressed to local processes follow this path: prerouting, forward and postrouting.&lt;br /&gt;
&lt;br /&gt;
= Ingress hook =&lt;br /&gt;
&lt;br /&gt;
Since Linux kernel 4.2, Netfilter also comes with an ingress hook that you can use from nftables. So the big picture now look like this:&lt;br /&gt;
                                                          &lt;br /&gt;
                                  .-----------.             &lt;br /&gt;
                                  |           |-----&amp;gt; input ...&lt;br /&gt;
 ---&amp;gt; ingress ---&amp;gt; prerouting ---&amp;gt;|  Routing  |&lt;br /&gt;
                                  | Decision  |&lt;br /&gt;
                                  |           |&lt;br /&gt;
                                  |           |-----&amp;gt; forward ...&lt;br /&gt;
                                  .-----------.&lt;br /&gt;
&lt;br /&gt;
You can use this new ingress hook to filter traffic from Layer 2. This new hook comes before prerouting, so this allows you to enforce very early filtering policies. This new hook basically provides an alternative to &#039;&#039;&#039;tc&#039;&#039;&#039; ingress filtering. You still need tc for traffic shaping/queue management.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=359</id>
		<title>Configuring chains</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=359"/>
		<updated>2019-01-31T22:51:27Z</updated>

		<summary type="html">&lt;p&gt;Fw: drop is terminal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As in &#039;&#039;iptables&#039;&#039;, you attach your [[Simple rule management|rules]] to chains. However, contrary to the &#039;&#039;iptables&#039;&#039; modus operandi, the &#039;&#039;nftables&#039;&#039; infrastructure comes with no predefined chains, so you need to register your base chains in first place before you can add any rule. This allows very flexible configurations.&lt;br /&gt;
&lt;br /&gt;
= Adding base chains =&lt;br /&gt;
&lt;br /&gt;
The syntax to add base chains is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain [&amp;lt;family&amp;gt;] &amp;lt;table-name&amp;gt; &amp;lt;chain-name&amp;gt; { type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; priority &amp;lt;value&amp;gt; \; [policy &amp;lt;policy&amp;gt;] } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base chains are those that are registered into the [[Netfilter hooks]], ie. these chains see packets flowing through your Linux TCP/IP stack.&lt;br /&gt;
&lt;br /&gt;
The following example show how you can add new base chains to the &#039;&#039;foo&#039;&#039; table through the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo input { type filter hook input priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: You have to escape the semicolon if you are running this command from &#039;&#039;bash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This command registers the &#039;&#039;input&#039;&#039; chain, that it attached to the &#039;&#039;input&#039;&#039; hook so it will see packets that are addressed to the local processes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;priority&#039;&#039; is important since it determines the ordering of the chains, thus, if you have several chains in the &#039;&#039;input&#039;&#039; hook, you can decide which one sees packets before another.&lt;br /&gt;
&lt;br /&gt;
If you want to use &#039;&#039;nftables&#039;&#039; to filter traffic for desktop Linux computers, ie. a computer which does not forward traffic, you can also register the output chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you are ready to filter incoming (directed to local processes) and outgoing (generated by local processes) traffic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;: If you don&#039;t include the chain configuration that is specified enclosed in the curly braces, you are creating a non-base chain that will not see any packets (similar to &#039;&#039;iptables -N chain-name&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Since nftables 0.5, you can also specify the default policy for base chains as in &#039;&#039;iptables&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; policy accept\; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in &#039;&#039;iptables&#039;&#039;, the two possible default policies are &#039;&#039;accept&#039;&#039; and &#039;&#039;drop&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When adding a chain on &#039;&#039;&#039;ingress&#039;&#039;&#039; hook, it is mandatory to specify the device where the chain will be attached: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain netdev foo dev0filter { type filter hook ingress device eth0 priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Base chain types ==&lt;br /&gt;
&lt;br /&gt;
The possible chain types are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039;, which is obviously used to filter packets. This is supported by the arp, bridge, ip, ip6 and inet table families.&lt;br /&gt;
* &#039;&#039;&#039;route&#039;&#039;&#039;, which is used to reroute packets if any relevant IP header field or the packet mark is modified. If you are familiar with &#039;&#039;iptables&#039;&#039;, this chain type provides equivalent semantics to the &#039;&#039;mangle&#039;&#039; table but only for the &#039;&#039;output&#039;&#039; hook (for other hooks use type &#039;&#039;filter&#039;&#039; instead). This is supported by the ip and ip6 table families.&lt;br /&gt;
* &#039;&#039;&#039;nat&#039;&#039;&#039;, which is used to perform Networking Address Translation (NAT). The first packet that belongs to a flow always hits this chain, follow up packets not. Therefore, never use this chain for filtering. This is supported by the ip and ip6 table families.&lt;br /&gt;
&lt;br /&gt;
== Base chain hooks ==&lt;br /&gt;
&lt;br /&gt;
The possible hooks that you can use when you configure your chain are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;prerouting&#039;&#039;&#039;: the routing decision for those packets didn&#039;t happen yet, so you don&#039;t know if they are addressed to the local or remote systems.&lt;br /&gt;
* &#039;&#039;&#039;input&#039;&#039;&#039;: It happens after the routing decision, you can see packets that are directed to the local system and processes running in system.&lt;br /&gt;
* &#039;&#039;&#039;forward&#039;&#039;&#039;: It also happens after the routing decision, you can see packet that are not directed to the local machine.&lt;br /&gt;
* &#039;&#039;&#039;output&#039;&#039;&#039;: to catch packets that are originated from processes in the local machine.&lt;br /&gt;
* &#039;&#039;&#039;postrouting&#039;&#039;&#039;: After the routing decision for packets leaving the local system.&lt;br /&gt;
* &#039;&#039;&#039;ingress&#039;&#039;&#039; (only available at the &#039;&#039;netdev&#039;&#039; family): Since Linux kernel 4.2, you can filter traffic way before prerouting, after the packet is passed up from the NIC driver. So you have an alternative to &#039;&#039;tc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Base chain priority ==&lt;br /&gt;
&lt;br /&gt;
The priority can be used to order the chains or to put them before or after some Netfilter internal operations. For example, a chain on the &#039;&#039;prerouting&#039;&#039; hook with the priority &#039;&#039;-300&#039;&#039; will be placed before connection tracking operations. &lt;br /&gt;
&lt;br /&gt;
For reference, here&#039;s the list of different priority used in iptables:&lt;br /&gt;
&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_DEFRAG (-400): priority of defragmentation&lt;br /&gt;
* NF_IP_PRI_RAW (-300): traditional priority of the raw table placed before connection tracking operation&lt;br /&gt;
* NF_IP_PRI_SELINUX_FIRST (-225): SELinux operations&lt;br /&gt;
* NF_IP_PRI_CONNTRACK (-200): Connection tracking operations&lt;br /&gt;
* NF_IP_PRI_MANGLE (-150): mangle operation&lt;br /&gt;
* NF_IP_PRI_NAT_DST (-100): destination NAT&lt;br /&gt;
* NF_IP_PRI_FILTER (0): filtering operation, the filter table&lt;br /&gt;
* NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example&lt;br /&gt;
* NF_IP_PRI_NAT_SRC (100): source NAT&lt;br /&gt;
* NF_IP_PRI_SELINUX_LAST (225): SELinux at packet exit&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_HELPER (300): connection tracking at exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: if a packet gets accepted and there is another base chain in the same hook which is ordered with a later priority, the packet will be evaluated &#039;&#039;&#039;again&#039;&#039;&#039;.&lt;br /&gt;
That is, packets will traverse chains in a given hook, until it is dropped or no more base chains exist. Drops take instant effect, no further rules or chains are evaluated.&lt;br /&gt;
&lt;br /&gt;
Example ruleset of this behavior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
        # this chain is evaluated first due to priority&lt;br /&gt;
        chain ssh {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                # ssh packet accepted&lt;br /&gt;
                tcp dport ssh accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # this chain is evaluated last due to priority&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 1; policy drop;&lt;br /&gt;
                # the same ssh packet is dropped here by means of default policy&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If priority of the &#039;input chain&#039; above would be changed to -1, all packets would&lt;br /&gt;
be dropped.&lt;br /&gt;
&lt;br /&gt;
== Base chain policy ==&lt;br /&gt;
&lt;br /&gt;
This is the default verdict that will be applied to packets reaching the end of the chain (i.e, no more rules to be evaluated against).&lt;br /&gt;
Currently there are 2 policies: &#039;&#039;&#039;accept&#039;&#039;&#039; or &#039;&#039;&#039;drop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;accept&#039;&#039; verdict means that the packet will keep traversing the network stack.&lt;br /&gt;
* The &#039;&#039;drop&#039;&#039; verdict means that the packet is discarded if the packet reaches the end of the base chain.&lt;br /&gt;
&lt;br /&gt;
= Adding non-base chains =&lt;br /&gt;
&lt;br /&gt;
You can also create non-base chains as in &#039;&#039;iptables&#039;&#039; via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo test&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this chain does &#039;&#039;&#039;not&#039;&#039;&#039; see any traffic as it is not attached to any hook, but it can be very useful to arrange your rule-set in a tree of chains by using the [[jumping to chain|jump to chain]] action.&lt;br /&gt;
&lt;br /&gt;
= Deleting chains =&lt;br /&gt;
&lt;br /&gt;
You can delete the chains that you don&#039;t need, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only condition is that the chain you want to delete needs to be empty, otherwise the kernel will tell you that such chain is in used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;cmdline&amp;gt;:1:1-28: Error: Could not delete chain: Device or resource busy&lt;br /&gt;
delete chain ip foo input&lt;br /&gt;
^^^^^^^^^^^^^^^^^^^^^^^^^&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will have to [[Simple rule management|flush the ruleset]] in that chain before you can remove the chain.&lt;br /&gt;
&lt;br /&gt;
= Flushing chain =&lt;br /&gt;
&lt;br /&gt;
You can also flush the content of a chain. If you want to flush all the rule in the chain &#039;&#039;input&#039;&#039; of the &#039;&#039;foo&#039;&#039; table, you have to type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush chain foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example configuration: Filtering traffic for your standalone computer =&lt;br /&gt;
&lt;br /&gt;
You can create a table with two base chains to define rule to filter traffic coming to and leaving from your computer, asumming IPv4 connectivity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add chain ip filter input { type filter hook input priority 0 \; }&lt;br /&gt;
% nft add chain ip filter output { type filter hook output priority 0 \; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you can start attaching [[Simple rule management|rules]] to these two base chains. Note that you don&#039;t need the &#039;&#039;forward&#039;&#039; chain in this case since this example assumes that you&#039;re configuring nftables to filter traffic for a standalone computer that doesn&#039;t behave as router.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=350</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=350"/>
		<updated>2019-01-03T10:13:04Z</updated>

		<summary type="html">&lt;p&gt;Fw: move secmark/connsecmark target to supported section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct, since 4.20&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== SECMARK ====&lt;br /&gt;
* nft_meta, since 4.20&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=348</id>
		<title>Configuring chains</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=348"/>
		<updated>2018-11-14T16:08:05Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Base chain priority */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As in &#039;&#039;iptables&#039;&#039;, you attach your [[Simple rule management|rules]] to chains. However, contrary to the &#039;&#039;iptables&#039;&#039; modus operandi, the &#039;&#039;nftables&#039;&#039; infrastructure comes with no predefined chains, so you need to register your base chains in first place before you can add any rule. This allows very flexible configurations.&lt;br /&gt;
&lt;br /&gt;
= Adding base chains =&lt;br /&gt;
&lt;br /&gt;
The syntax to add base chains is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain [&amp;lt;family&amp;gt;] &amp;lt;table-name&amp;gt; &amp;lt;chain-name&amp;gt; { type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; priority &amp;lt;value&amp;gt; \; [policy &amp;lt;policy&amp;gt;] } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base chains are those that are registered into the [[Netfilter hooks]], ie. these chains see packets flowing through your Linux TCP/IP stack.&lt;br /&gt;
&lt;br /&gt;
The following example show how you can add new base chains to the &#039;&#039;foo&#039;&#039; table through the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo input { type filter hook input priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: You have to escape the semicolon if you are running this command from &#039;&#039;bash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This command registers the &#039;&#039;input&#039;&#039; chain, that it attached to the &#039;&#039;input&#039;&#039; hook so it will see packets that are addressed to the local processes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;priority&#039;&#039; is important since it determines the ordering of the chains, thus, if you have several chains in the &#039;&#039;input&#039;&#039; hook, you can decide which one sees packets before another.&lt;br /&gt;
&lt;br /&gt;
If you want to use &#039;&#039;nftables&#039;&#039; to filter traffic for desktop Linux computers, ie. a computer which does not forward traffic, you can also register the output chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you are ready to filter incoming (directed to local processes) and outgoing (generated by local processes) traffic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;: If you don&#039;t include the chain configuration that is specified enclosed in the curly braces, you are creating a non-base chain that will not see any packets (similar to &#039;&#039;iptables -N chain-name&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Since nftables 0.5, you can also specify the default policy for base chains as in &#039;&#039;iptables&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; policy accept\; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in &#039;&#039;iptables&#039;&#039;, the two possible default policies are &#039;&#039;accept&#039;&#039; and &#039;&#039;drop&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When adding a chain on &#039;&#039;&#039;ingress&#039;&#039;&#039; hook, it is mandatory to specify the device where the chain will be attached: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain netdev foo dev0filter { type filter hook ingress device eth0 priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Base chain types ==&lt;br /&gt;
&lt;br /&gt;
The possible chain types are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039;, which is obviously used to filter packets. This is supported by the arp, bridge, ip, ip6 and inet table families.&lt;br /&gt;
* &#039;&#039;&#039;route&#039;&#039;&#039;, which is used to reroute packets if any relevant IP header field or the packet mark is modified. If you are familiar with &#039;&#039;iptables&#039;&#039;, this chain type provides equivalent semantics to the &#039;&#039;mangle&#039;&#039; table but only for the &#039;&#039;output&#039;&#039; hook (for other hooks use type &#039;&#039;filter&#039;&#039; instead). This is supported by the ip and ip6 table families.&lt;br /&gt;
* &#039;&#039;&#039;nat&#039;&#039;&#039;, which is used to perform Networking Address Translation (NAT). The first packet that belongs to a flow always hits this chain, follow up packets not. Therefore, never use this chain for filtering. This is supported by the ip and ip6 table families.&lt;br /&gt;
&lt;br /&gt;
== Base chain hooks ==&lt;br /&gt;
&lt;br /&gt;
The possible hooks that you can use when you configure your chain are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;prerouting&#039;&#039;&#039;: the routing decision for those packets didn&#039;t happen yet, so you don&#039;t know if they are addressed to the local or remote systems.&lt;br /&gt;
* &#039;&#039;&#039;input&#039;&#039;&#039;: It happens after the routing decision, you can see packets that are directed to the local system and processes running in system.&lt;br /&gt;
* &#039;&#039;&#039;forward&#039;&#039;&#039;: It also happens after the routing decision, you can see packet that are not directed to the local machine.&lt;br /&gt;
* &#039;&#039;&#039;output&#039;&#039;&#039;: to catch packets that are originated from processes in the local machine.&lt;br /&gt;
* &#039;&#039;&#039;postrouting&#039;&#039;&#039;: After the routing decision for packets leaving the local system.&lt;br /&gt;
* &#039;&#039;&#039;ingress&#039;&#039;&#039; (only available at the &#039;&#039;netdev&#039;&#039; family): Since Linux kernel 4.2, you can filter traffic way before prerouting, after the packet is passed up from the NIC driver. So you have an alternative to &#039;&#039;tc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Base chain priority ==&lt;br /&gt;
&lt;br /&gt;
The priority can be used to order the chains or to put them before or after some Netfilter internal operations. For example, a chain on the &#039;&#039;prerouting&#039;&#039; hook with the priority &#039;&#039;-300&#039;&#039; will be placed before connection tracking operations. &lt;br /&gt;
&lt;br /&gt;
For reference, here&#039;s the list of different priority used in iptables:&lt;br /&gt;
&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_DEFRAG (-400): priority of defragmentation&lt;br /&gt;
* NF_IP_PRI_RAW (-300): traditional priority of the raw table placed before connection tracking operation&lt;br /&gt;
* NF_IP_PRI_SELINUX_FIRST (-225): SELinux operations&lt;br /&gt;
* NF_IP_PRI_CONNTRACK (-200): Connection tracking operations&lt;br /&gt;
* NF_IP_PRI_MANGLE (-150): mangle operation&lt;br /&gt;
* NF_IP_PRI_NAT_DST (-100): destination NAT&lt;br /&gt;
* NF_IP_PRI_FILTER (0): filtering operation, the filter table&lt;br /&gt;
* NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example&lt;br /&gt;
* NF_IP_PRI_NAT_SRC (100): source NAT&lt;br /&gt;
* NF_IP_PRI_SELINUX_LAST (225): SELinux at packet exit&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_HELPER (300): connection tracking at exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: if a packet gets accepted and there is another base chain in the same hook which is ordered with a later priority, the packet will be evaluated &#039;&#039;&#039;again&#039;&#039;&#039;.&lt;br /&gt;
That is, packets will traverse chains in a given hook, until it is dropped or no more base chains exist. Drops take instant effect, no further rules or chains are evaluated.&lt;br /&gt;
&lt;br /&gt;
Example ruleset of this behavior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
        # this chain is evaluated first due to priority&lt;br /&gt;
        chain ssh {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                # ssh packet accepted&lt;br /&gt;
                tcp dport ssh accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # this chain is evaluated last due to priority&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 1; policy drop;&lt;br /&gt;
                # the same ssh packet is dropped here by means of default policy&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If priority of the &#039;input chain&#039; above would be changed to -1, all packets would&lt;br /&gt;
be dropped.&lt;br /&gt;
&lt;br /&gt;
== Base chain policy ==&lt;br /&gt;
&lt;br /&gt;
This is the default verdict that will be applied to packets reaching the end of the chain (i.e, no more rules to be evaluated against).&lt;br /&gt;
Currently there are 2 policies: &#039;&#039;&#039;accept&#039;&#039;&#039; or &#039;&#039;&#039;drop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;accept&#039;&#039; verdict means that the packet will keep traversing the network stack.&lt;br /&gt;
* The &#039;&#039;drop&#039;&#039; verdict means that the packet is discarded when this hook traversal is ended if no other verdict is applied later on (for example, in a higher priority chain in the same hook).&lt;br /&gt;
&lt;br /&gt;
= Adding non-base chains =&lt;br /&gt;
&lt;br /&gt;
You can also create non-base chains as in &#039;&#039;iptables&#039;&#039; via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo test&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this chain does &#039;&#039;&#039;not&#039;&#039;&#039; see any traffic as it is not attached to any hook, but it can be very useful to arrange your rule-set in a tree of chains by using the [[jumping to chain|jump to chain]] action.&lt;br /&gt;
&lt;br /&gt;
= Deleting chains =&lt;br /&gt;
&lt;br /&gt;
You can delete the chains that you don&#039;t need, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only condition is that the chain you want to delete needs to be empty, otherwise the kernel will tell you that such chain is in used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;cmdline&amp;gt;:1:1-28: Error: Could not delete chain: Device or resource busy&lt;br /&gt;
delete chain ip foo input&lt;br /&gt;
^^^^^^^^^^^^^^^^^^^^^^^^^&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will have to [[Simple rule management|flush the ruleset]] in that chain before you can remove the chain.&lt;br /&gt;
&lt;br /&gt;
= Flushing chain =&lt;br /&gt;
&lt;br /&gt;
You can also flush the content of a chain. If you want to flush all the rule in the chain &#039;&#039;input&#039;&#039; of the &#039;&#039;foo&#039;&#039; table, you have to type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush chain foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example configuration: Filtering traffic for your standalone computer =&lt;br /&gt;
&lt;br /&gt;
You can create a table with two base chains to define rule to filter traffic coming to and leaving from your computer, asumming IPv4 connectivity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add chain ip filter input { type filter hook input priority 0 \; }&lt;br /&gt;
% nft add chain ip filter output { type filter hook output priority 0 \; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you can start attaching [[Simple rule management|rules]] to these two base chains. Note that you don&#039;t need the &#039;&#039;forward&#039;&#039; chain in this case since this example assumes that you&#039;re configuring nftables to filter traffic for a standalone computer that doesn&#039;t behave as router.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=347</id>
		<title>Configuring chains</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Configuring_chains&amp;diff=347"/>
		<updated>2018-11-14T15:15:18Z</updated>

		<summary type="html">&lt;p&gt;Fw: drops are instant, there is no re-evaluation by other hooks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As in &#039;&#039;iptables&#039;&#039;, you attach your [[Simple rule management|rules]] to chains. However, contrary to the &#039;&#039;iptables&#039;&#039; modus operandi, the &#039;&#039;nftables&#039;&#039; infrastructure comes with no predefined chains, so you need to register your base chains in first place before you can add any rule. This allows very flexible configurations.&lt;br /&gt;
&lt;br /&gt;
= Adding base chains =&lt;br /&gt;
&lt;br /&gt;
The syntax to add base chains is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain [&amp;lt;family&amp;gt;] &amp;lt;table-name&amp;gt; &amp;lt;chain-name&amp;gt; { type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; priority &amp;lt;value&amp;gt; \; [policy &amp;lt;policy&amp;gt;] } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base chains are those that are registered into the [[Netfilter hooks]], ie. these chains see packets flowing through your Linux TCP/IP stack.&lt;br /&gt;
&lt;br /&gt;
The following example show how you can add new base chains to the &#039;&#039;foo&#039;&#039; table through the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo input { type filter hook input priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: You have to escape the semicolon if you are running this command from &#039;&#039;bash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This command registers the &#039;&#039;input&#039;&#039; chain, that it attached to the &#039;&#039;input&#039;&#039; hook so it will see packets that are addressed to the local processes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;priority&#039;&#039; is important since it determines the ordering of the chains, thus, if you have several chains in the &#039;&#039;input&#039;&#039; hook, you can decide which one sees packets before another.&lt;br /&gt;
&lt;br /&gt;
If you want to use &#039;&#039;nftables&#039;&#039; to filter traffic for desktop Linux computers, ie. a computer which does not forward traffic, you can also register the output chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you are ready to filter incoming (directed to local processes) and outgoing (generated by local processes) traffic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;: If you don&#039;t include the chain configuration that is specified enclosed in the curly braces, you are creating a non-base chain that will not see any packets (similar to &#039;&#039;iptables -N chain-name&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Since nftables 0.5, you can also specify the default policy for base chains as in &#039;&#039;iptables&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo output { type filter hook output priority 0 \; policy accept\; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As in &#039;&#039;iptables&#039;&#039;, the two possible default policies are &#039;&#039;accept&#039;&#039; and &#039;&#039;drop&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When adding a chain on &#039;&#039;&#039;ingress&#039;&#039;&#039; hook, it is mandatory to specify the device where the chain will be attached: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain netdev foo dev0filter { type filter hook ingress device eth0 priority 0 \; } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Base chain types ==&lt;br /&gt;
&lt;br /&gt;
The possible chain types are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039;, which is obviously used to filter packets. This is supported by the arp, bridge, ip, ip6 and inet table families.&lt;br /&gt;
* &#039;&#039;&#039;route&#039;&#039;&#039;, which is used to reroute packets if any relevant IP header field or the packet mark is modified. If you are familiar with &#039;&#039;iptables&#039;&#039;, this chain type provides equivalent semantics to the &#039;&#039;mangle&#039;&#039; table but only for the &#039;&#039;output&#039;&#039; hook (for other hooks use type &#039;&#039;filter&#039;&#039; instead). This is supported by the ip and ip6 table families.&lt;br /&gt;
* &#039;&#039;&#039;nat&#039;&#039;&#039;, which is used to perform Networking Address Translation (NAT). The first packet that belongs to a flow always hits this chain, follow up packets not. Therefore, never use this chain for filtering. This is supported by the ip and ip6 table families.&lt;br /&gt;
&lt;br /&gt;
== Base chain hooks ==&lt;br /&gt;
&lt;br /&gt;
The possible hooks that you can use when you configure your chain are:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;prerouting&#039;&#039;&#039;: the routing decision for those packets didn&#039;t happen yet, so you don&#039;t know if they are addressed to the local or remote systems.&lt;br /&gt;
* &#039;&#039;&#039;input&#039;&#039;&#039;: It happens after the routing decision, you can see packets that are directed to the local system and processes running in system.&lt;br /&gt;
* &#039;&#039;&#039;forward&#039;&#039;&#039;: It also happens after the routing decision, you can see packet that are not directed to the local machine.&lt;br /&gt;
* &#039;&#039;&#039;output&#039;&#039;&#039;: to catch packets that are originated from processes in the local machine.&lt;br /&gt;
* &#039;&#039;&#039;postrouting&#039;&#039;&#039;: After the routing decision for packets leaving the local system.&lt;br /&gt;
* &#039;&#039;&#039;ingress&#039;&#039;&#039; (only available at the &#039;&#039;netdev&#039;&#039; family): Since Linux kernel 4.2, you can filter traffic way before prerouting, after the packet is passed up from the NIC driver. So you have an alternative to &#039;&#039;tc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Base chain priority ==&lt;br /&gt;
&lt;br /&gt;
The priority can be used to order the chains or to put them before or after some Netfilter internal operations. For example, a chain on the &#039;&#039;prerouting&#039;&#039; hook with the priority &#039;&#039;-300&#039;&#039; will be placed before connection tracking operations. &lt;br /&gt;
&lt;br /&gt;
For reference, here&#039;s the list of different priority used in iptables:&lt;br /&gt;
&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_DEFRAG (-400): priority of defragmentation&lt;br /&gt;
* NF_IP_PRI_RAW (-300): traditional priority of the raw table placed before connection tracking operation&lt;br /&gt;
* NF_IP_PRI_SELINUX_FIRST (-225): SELinux operations&lt;br /&gt;
* NF_IP_PRI_CONNTRACK (-200): Connection tracking operations&lt;br /&gt;
* NF_IP_PRI_MANGLE (-150): mangle operation&lt;br /&gt;
* NF_IP_PRI_NAT_DST (-100): destination NAT&lt;br /&gt;
* NF_IP_PRI_FILTER (0): filtering operation, the filter table&lt;br /&gt;
* NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example&lt;br /&gt;
* NF_IP_PRI_NAT_SRC (100): source NAT&lt;br /&gt;
* NF_IP_PRI_SELINUX_LAST (225): SELinux at packet exit&lt;br /&gt;
* NF_IP_PRI_CONNTRACK_HELPER (300): connection tracking at exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: if a packet gets accepted and there is another base chain in the same hook which is ordered with a later priority, the packet will be evaluated &#039;&#039;&#039;again&#039;&#039;&#039;.&lt;br /&gt;
This is, the packet will traverse all the chains in a given hook, until it is dropped or no more base chains exist.&lt;br /&gt;
&lt;br /&gt;
Example ruleset of this behavior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
        # this chain is evaluated first due to priority&lt;br /&gt;
        chain ssh {&lt;br /&gt;
                type filter hook input priority 0; policy accept;&lt;br /&gt;
                # ssh packet accepted&lt;br /&gt;
                tcp dport ssh accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # this chain is evaluated last due to priority&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 1; policy drop;&lt;br /&gt;
                # the same ssh packet is dropped here by means of default policy&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Base chain policy ==&lt;br /&gt;
&lt;br /&gt;
This is the default verdict that will be applied to packets reaching the end of the chain (i.e, no more rules to be evaluated against).&lt;br /&gt;
Currently there are 2 policies: &#039;&#039;&#039;accept&#039;&#039;&#039; or &#039;&#039;&#039;drop&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;accept&#039;&#039; verdict means that the packet will keep traversing the network stack.&lt;br /&gt;
* The &#039;&#039;drop&#039;&#039; verdict means that the packet is discarded when this hook traversal is ended if no other verdict is applied later on (for example, in a higher priority chain in the same hook).&lt;br /&gt;
&lt;br /&gt;
= Adding non-base chains =&lt;br /&gt;
&lt;br /&gt;
You can also create non-base chains as in &#039;&#039;iptables&#039;&#039; via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add chain ip foo test&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this chain does &#039;&#039;&#039;not&#039;&#039;&#039; see any traffic as it is not attached to any hook, but it can be very useful to arrange your rule-set in a tree of chains by using the [[jumping to chain|jump to chain]] action.&lt;br /&gt;
&lt;br /&gt;
= Deleting chains =&lt;br /&gt;
&lt;br /&gt;
You can delete the chains that you don&#039;t need, eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The only condition is that the chain you want to delete needs to be empty, otherwise the kernel will tell you that such chain is in used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft delete chain ip foo input&lt;br /&gt;
&amp;lt;cmdline&amp;gt;:1:1-28: Error: Could not delete chain: Device or resource busy&lt;br /&gt;
delete chain ip foo input&lt;br /&gt;
^^^^^^^^^^^^^^^^^^^^^^^^^&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will have to [[Simple rule management|flush the ruleset]] in that chain before you can remove the chain.&lt;br /&gt;
&lt;br /&gt;
= Flushing chain =&lt;br /&gt;
&lt;br /&gt;
You can also flush the content of a chain. If you want to flush all the rule in the chain &#039;&#039;input&#039;&#039; of the &#039;&#039;foo&#039;&#039; table, you have to type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush chain foo input&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example configuration: Filtering traffic for your standalone computer =&lt;br /&gt;
&lt;br /&gt;
You can create a table with two base chains to define rule to filter traffic coming to and leaving from your computer, asumming IPv4 connectivity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
% nft add table ip filter&lt;br /&gt;
% nft add chain ip filter input { type filter hook input priority 0 \; }&lt;br /&gt;
% nft add chain ip filter output { type filter hook output priority 0 \; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you can start attaching [[Simple rule management|rules]] to these two base chains. Note that you don&#039;t need the &#039;&#039;forward&#039;&#039; chain in this case since this example assumes that you&#039;re configuring nftables to filter traffic for a standalone computer that doesn&#039;t behave as router.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=345</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=345"/>
		<updated>2018-10-29T17:18:32Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* matches: xt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct                                                                      &lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SECMARK ====                                                                &lt;br /&gt;
* nft_meta_target&lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta&lt;br /&gt;
==== policy ====&lt;br /&gt;
* nft_xfrm, upcoming linux 4.20 (5.0?)                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=344</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=344"/>
		<updated>2018-10-29T17:17:09Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* policy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct                                                                      &lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interface&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SECMARK ====                                                                &lt;br /&gt;
* nft_meta_target&lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16.&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18.&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18.  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18.&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14.    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash.&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17.                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14.&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3.&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14.&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13.                                         &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.  &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13.    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17.  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18.&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19.&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14.                     &lt;br /&gt;
* nft_reject_inet, since 3.14.&lt;br /&gt;
* nft_reject_bridge, since 3.18.    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13.&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=340</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=340"/>
		<updated>2018-08-18T22:18:33Z</updated>

		<summary type="html">&lt;p&gt;Fw: update &amp;#039;date&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: Aug/2018&lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct                                                                      &lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interfac&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SECMARK ====                                                                &lt;br /&gt;
* nft_meta_target&lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16 (Florian Westphal).&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18 (Valentina Giusti/Ana Rey).&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18 (Ana Rey).  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== policy ====&lt;br /&gt;
* consider native interface. Refer to [[Configuring_chains#Base_chain_policy]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18 (Phil Sutter)&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash (Laura Garcia)&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14 (Eric Leblond).&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3 (Pablo Neira)&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13 (Patrick McHardy/Eric Leblond).                                         &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14 (Patrick McHardy/Eric Leblond)                     &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=339</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=339"/>
		<updated>2018-08-18T22:12:02Z</updated>

		<summary type="html">&lt;p&gt;Fw: update list of supported targets and matches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: 2016/Jan/11                                                        &lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct                                                                      &lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interfac&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SECMARK ====                                                                &lt;br /&gt;
* nft_meta_target&lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel. Refer to [[Routing_information]].&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta. Refer to [[Quick_reference-nftables_in_10_minutes#Meta]].&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira). Refer to [[Matching_packet_header_fields#Matching_UDP.2FTCP_headers_in_the_same_rule]].&lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel. Refer to [[Meters]].&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16 (Florian Westphal).&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18 (Valentina Giusti/Ana Rey).&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18 (Ana Rey).  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== policy ====&lt;br /&gt;
* consider native interface. Refer to [[Configuring_chains#Base_chain_policy]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== AUDIT ====                                                              &lt;br /&gt;
* nft_log, since 4.18 (Phil Sutter)&lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
* nft_ct&lt;br /&gt;
==== DSCP ====                                                                                                                    &lt;br /&gt;
==== HL ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== HMARK ====&lt;br /&gt;
* nft_meta + nft_hash (Laura Garcia)&lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).&lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14 (Eric Leblond).&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3 (Pablo Neira)&lt;br /&gt;
==== TPROXY ====&lt;br /&gt;
* nft_tproxy, upcoming release (4.19)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13 (Patrick McHardy/Eric Leblond).                                         &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14 (Patrick McHardy/Eric Leblond)                     &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=337</id>
		<title>Supported features compared to xtables</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=Supported_features_compared_to_xtables&amp;diff=337"/>
		<updated>2018-08-18T22:03:42Z</updated>

		<summary type="html">&lt;p&gt;Fw: remove implemented targets/matches from unsupported section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Last update: 2016/Jan/11                                                        &lt;br /&gt;
                                                                                 &lt;br /&gt;
This page tracks the list of supported and unsupported extensions with comments and suggestions.&lt;br /&gt;
                                                                                 &lt;br /&gt;
== Unsupported extensions ==                                                     &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== bpf ====                                                                    &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== cluster ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== rateest ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== string ====                                                                 &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== time ====&lt;br /&gt;
* consider native interface                                                    &lt;br /&gt;
==== u32 ====                                                                    &lt;br /&gt;
* raw expressions?                                                               &lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                         &lt;br /&gt;
==== CHECKSUM ====                                                               &lt;br /&gt;
* add nft_payload.&lt;br /&gt;
* To the day, the only use case for this was DHCP clients not working with partial checksums. That should be fixed nowadays.&lt;br /&gt;
* See https://lwn.net/Articles/396466/ and https://www.spinics.net/lists/kvm/msg37660.html&lt;br /&gt;
* See https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/930962 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832090&lt;br /&gt;
&lt;br /&gt;
==== CONNSECMARK ====&lt;br /&gt;
* nft_ct                                                                      &lt;br /&gt;
==== CT ====                                                                     &lt;br /&gt;
* nft_ct_target. Refer to [[Matching_connection_tracking_stateful_metainformation]].                                              &lt;br /&gt;
==== IDLETIMER ====                                                              &lt;br /&gt;
* consider native interfac&lt;br /&gt;
==== LED ====                                                                    &lt;br /&gt;
* consider native (need this?)                                                   &lt;br /&gt;
==== NETMAP ====                                                                 &lt;br /&gt;
* nft_nat.                                                                       &lt;br /&gt;
==== RATEEST ====                                                                &lt;br /&gt;
* consider native interface                                                      &lt;br /&gt;
==== SECMARK ====                                                                &lt;br /&gt;
* nft_meta_target&lt;br /&gt;
==== SET ====                                                                 &lt;br /&gt;
* consider native interface &lt;br /&gt;
==== SYNPROXY ====                                                                 &lt;br /&gt;
* consider native interface                                                                 &lt;br /&gt;
==== TCPOPTSTRIP ====                                                            &lt;br /&gt;
* consider native interface, need to extend nft_exthdr.c&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== TTL ====&lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets: ipv6 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== NPT ====                                                                    &lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== arpreply ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
&lt;br /&gt;
=== watchers: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== log ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
==== nflog ====&lt;br /&gt;
* nft_log&lt;br /&gt;
&lt;br /&gt;
=== targets: arp ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Supported extensions ==                                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches: xt ===                                                              &lt;br /&gt;
&lt;br /&gt;
==== addrtype ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== cgroup ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
[Awaits support for cgroup2]                                                                             &lt;br /&gt;
==== comment ====&lt;br /&gt;
* Built-in support via NFTA_RULE_USERDATA, since 3.15 (Pablo Neira).             &lt;br /&gt;
==== connbytes ====                                                              &lt;br /&gt;
* nft_ct, 4.5 kernel&lt;br /&gt;
==== connlabel ====                                                              &lt;br /&gt;
* nft_meta, since 3.16 (Florian Westphal).&lt;br /&gt;
==== connlimit ====&lt;br /&gt;
* consider native interface. Refer to [[Meters]].&lt;br /&gt;
==== connmark ====&lt;br /&gt;
* nft_meta.&lt;br /&gt;
==== conntrack ====&lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== cpu ====&lt;br /&gt;
* nft_meta, since 3.18 (Valentina Giusti/Ana Rey).&lt;br /&gt;
==== dccp ====                                                                   &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
[Unsupported option : dccp-option]&lt;br /&gt;
==== devgroup ====                                                               &lt;br /&gt;
* nft_meta, since 3.18 (Ana Rey).  &lt;br /&gt;
==== dscp ====                                              &lt;br /&gt;
* nft_payload.&lt;br /&gt;
==== ecn ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== esp ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== hashlimit ====                                                              &lt;br /&gt;
* meter statement. Refer to [[Meters]].&lt;br /&gt;
==== helper ====                                                                 &lt;br /&gt;
* nft_ct.&lt;br /&gt;
==== ipcomp ====&lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option : compres]&lt;br /&gt;
==== iprange ====                                                                &lt;br /&gt;
* nft_payload, through native range support. To emulate iptables --ports you need two rules.                                                   &lt;br /&gt;
==== ipvs ====&lt;br /&gt;
* consider native interface. Refer to [[Load balancing]].&lt;br /&gt;
==== length ====                                                                 &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== limit ====                                                                  &lt;br /&gt;
* nft_limit. Refer to [[Stateful objects]].&lt;br /&gt;
==== mac ====                                                                    &lt;br /&gt;
* nft_payload.                                                                   &lt;br /&gt;
==== mark ====                                                                   &lt;br /&gt;
* nft_meta.                                                                      &lt;br /&gt;
==== multiport ====                                                              &lt;br /&gt;
* nft_payload. &lt;br /&gt;
[Unsupported option : ports]                                                                                         &lt;br /&gt;
==== nfacct ====&lt;br /&gt;
* consider native interface. Refer to [[Stateful objects]].&lt;br /&gt;
==== osf ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== owner ====                                                                  &lt;br /&gt;
* nft_meta. &lt;br /&gt;
[Unsupported option : socket-exists]                                                                     &lt;br /&gt;
==== pkttype ====                                                                &lt;br /&gt;
* nft_meta                                                                                                                 &lt;br /&gt;
==== sctp ====                                                                   &lt;br /&gt;
* nft_payload.&lt;br /&gt;
[Unsupported option: --chunk-types]&lt;br /&gt;
==== socket ====&lt;br /&gt;
* consider native interface&lt;br /&gt;
==== statistic ====&lt;br /&gt;
* nft_numgen. Refer to [[Load balancing]].&lt;br /&gt;
==== policy ====&lt;br /&gt;
* consider native interface. Refer to [[Configuring_chains#Base_chain_policy]].&lt;br /&gt;
==== recent ====                                                                 &lt;br /&gt;
* consider native interface. Refer to [[Sets]].&lt;br /&gt;
==== set ====&lt;br /&gt;
* Use native nf_tables set infrastructure.                                       &lt;br /&gt;
==== state ====                                                                  &lt;br /&gt;
* nft_ct                                                                         &lt;br /&gt;
==== tcp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
==== tcpmss ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
==== udp ====                                                                 &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
=== targets: xt ===                                                              &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLASSIFY ====                                                               &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).    &lt;br /&gt;
==== CONNMARK ====                                                                                                                    &lt;br /&gt;
==== MARK ====                                                                   &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).                                       &lt;br /&gt;
==== NFLOG ====                                                                  &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).                                             &lt;br /&gt;
==== NFQUEUE ====                                                                &lt;br /&gt;
* nft_queue, since 3.14 (Eric Leblond). &#039;&#039;&#039;Bridge support still missing&#039;&#039;&#039;.&lt;br /&gt;
==== TEE ====&lt;br /&gt;
* nft_dup, since 4.3 (Pablo Neira)&lt;br /&gt;
==== TRACE ====                                                                  &lt;br /&gt;
* nft_meta, since 3.14 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
==== TCPMSS ====                                                                 &lt;br /&gt;
* nft_exthdr, since 4.14&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ah ====                                                                     &lt;br /&gt;
* nft_payload + nft_cmp&lt;br /&gt;
==== icmp ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported codes: network-unreachable, host-unreachable, protocol-unreachable, port-unreachable, fragmentation-needed, source-route-failed, network-unknown, host-unknown, network-prohibited, host-prohibited, TOS-network-unreachable, TOS-host-unreachable, communication-prohibited, host-precedence-violation, precedence-cutoff, network-redirect, host-redirect, TOS-network-redirect, TOS-host-redirect, ttl-zero-during-transit, ttl-zero-during-reassembly, ip-header-bad and required-option-missing ]&lt;br /&gt;
==== realm ====                                                                  &lt;br /&gt;
* nft_meta, through NFT_META_RTCLASSID. &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel&lt;br /&gt;
==== ttl ====&lt;br /&gt;
&lt;br /&gt;
=== matches: ipv6 ===                                                            &lt;br /&gt;
            &lt;br /&gt;
==== rp_filter ====&lt;br /&gt;
* nft_fib, starting with 4.10 kernel                                                                    &lt;br /&gt;
==== ah  ====                                                                    &lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== eui64 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
==== frag ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== hbh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
HBH options are not supported yet.&lt;br /&gt;
[Unsupported option: --hbh-opts]&lt;br /&gt;
==== hl ==== &lt;br /&gt;
* nft_payload.    &lt;br /&gt;
==== icmp6 ====&lt;br /&gt;
* nft_payload + nft_cmp.&lt;br /&gt;
[Unsupported icmpv6 codes: no-route, communication-prohibited, beyond-scope, address-unreachable, port-unreachable, failed-policy, reject-route, ttl-zero-during-transit, ttl-zero-during-reassembly, bad-header, unknown-header-type and unknown-option]&lt;br /&gt;
==== ipv6header ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
==== mh ====&lt;br /&gt;
* nft_exthdr + nft_cmp.&lt;br /&gt;
[Needs bug fixation for option mh-type with range]&lt;br /&gt;
==== rt ====&lt;br /&gt;
* nft_exthdr + nft_cmp&lt;br /&gt;
[Unsupported options: --rt-0-res, --rt-0-addrs, --rt-0-not-strict]&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===&lt;br /&gt;
==== ECN ====                                                                    &lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== DNAT ====    &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====                                                                    &lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====&lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====&lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                 &lt;br /&gt;
* nft_reject_ipv4, since 3.13 (Patrick McHardy/Eric Leblond).                                         &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                            &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv6 ===&lt;br /&gt;
==== DNAT ====&lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).    &lt;br /&gt;
==== LOG ====&lt;br /&gt;
* nft_log, since 3.17 (Pablo Neira).  &lt;br /&gt;
[Unsupported options : log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode]&lt;br /&gt;
==== MASQUERADE ====                                                             &lt;br /&gt;
* nft_masq, since 3.18 (Arturo Borrero).&lt;br /&gt;
==== REDIRECT ====                                                               &lt;br /&gt;
* nft_redirect, since 3.19 (Arturo Borrero).&lt;br /&gt;
&lt;br /&gt;
==== REJECT ====                                                                                   &lt;br /&gt;
* nft_reject_ipv6, since 3.14 (Patrick McHardy/Eric Leblond)                     &lt;br /&gt;
* nft_reject_inet, since 3.14 (Patrick McHardy).&lt;br /&gt;
* nft_reject_bridge, since 3.18 (Pablo Neira)    &lt;br /&gt;
==== SNAT ====                                                                                                                          &lt;br /&gt;
* nft_nat, since 3.13 (Tomasz Bursztyka).&lt;br /&gt;
&lt;br /&gt;
=== matches: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== 802.3 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== among ====&lt;br /&gt;
* sets&lt;br /&gt;
&lt;br /&gt;
==== arp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== ip6 ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== limit ====&lt;br /&gt;
* nft_limit&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
==== pkttype ====&lt;br /&gt;
* nft_meta&lt;br /&gt;
&lt;br /&gt;
==== stp ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== vlan ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== targets: bridge ===&lt;br /&gt;
&lt;br /&gt;
==== dnat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== snat ====&lt;br /&gt;
* nft_payload&lt;br /&gt;
&lt;br /&gt;
==== redirect ====&lt;br /&gt;
* nft_payload + nft_meta (pkttype set unicast)&lt;br /&gt;
&lt;br /&gt;
==== mark ====&lt;br /&gt;
* nft_mark&lt;br /&gt;
&lt;br /&gt;
== Deprecated extensions ==                                                      &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== matches ===                                                                  &lt;br /&gt;
 &lt;br /&gt;
==== physdev ====                                                                &lt;br /&gt;
* br_netfilter aims to be deprecated by nftables.                                                                                &lt;br /&gt;
==== quota ====                                                                  &lt;br /&gt;
* nfacct already provides quota support.  &lt;br /&gt;
==== tos ====&lt;br /&gt;
* deprecated by dscp                                       &lt;br /&gt;
                                                                                 &lt;br /&gt;
=== targets ===                                                                  &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== CLUSTERIP ====                                                              &lt;br /&gt;
* deprecated by cluster match.                                                   &lt;br /&gt;
==== TOS ====                                                                 &lt;br /&gt;
* deprecated by DSCP&lt;br /&gt;
&lt;br /&gt;
=== targets: ipv4 ===                                                            &lt;br /&gt;
                                                                                 &lt;br /&gt;
==== ULOG ====                                                                   &lt;br /&gt;
* Removed from tree since 3.17.&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=287</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=287"/>
		<updated>2018-02-18T22:06:33Z</updated>

		<summary type="html">&lt;p&gt;Fw: MARK target seems fully supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* ipcomp&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* MARK&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Partially translatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
====xt====&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option]&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr]&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports]&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists]&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types]&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
* ipv6header&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=286</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=286"/>
		<updated>2018-02-18T22:05:58Z</updated>

		<summary type="html">&lt;p&gt;Fw: mark appears fully supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* ipcomp&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Partially translatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
====xt====&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option]&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr]&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports]&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists]&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types]&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
* ipv6header&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=285</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=285"/>
		<updated>2018-02-18T21:41:35Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Targets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* ipcomp&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Partially translatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
====xt====&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option]&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr]&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports]&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists]&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types]&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
* MARK&lt;br /&gt;
[--set-mark and --set-xmark options are not fully supported] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
* ipv6header&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=284</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=284"/>
		<updated>2018-02-18T21:41:18Z</updated>

		<summary type="html">&lt;p&gt;Fw: split partial and untranslateable options.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* ipcomp&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Partially translatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
====xt====&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option]&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr]&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports]&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists]&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types]&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
* MARK&lt;br /&gt;
[--set-mark and --set-xmark options are not fully supported] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
* ipv6header&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=283</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=283"/>
		<updated>2018-02-18T10:13:36Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* xt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* ipcomp&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option] (partial translations available)&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr] (partial translations available)&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports] (partial translations available)&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists] (partial translations available)&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types] (partial translations available)&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* ipv6header&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
[Requires bug fixing]&lt;br /&gt;
* MARK&lt;br /&gt;
[--set-mark and --set-xmark options are not fully supported] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=282</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=282"/>
		<updated>2018-02-18T10:13:10Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* Matches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option] (partial translations available)&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr] (partial translations available)&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports] (partial translations available)&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists] (partial translations available)&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types] (partial translations available)&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* ipv6header&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
[Requires bug fixing]&lt;br /&gt;
* MARK&lt;br /&gt;
[--set-mark and --set-xmark options are not fully supported] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
	<entry>
		<id>http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=281</id>
		<title>List of available translations via iptables-translate tool</title>
		<link rel="alternate" type="text/html" href="http://wiki.nftables.org/wiki-nftables/index.php?title=List_of_available_translations_via_iptables-translate_tool&amp;diff=281"/>
		<updated>2018-02-18T08:39:47Z</updated>

		<summary type="html">&lt;p&gt;Fw: /* xt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following &#039;&#039;&#039;matches and targets&#039;&#039;&#039; (in alphabetic order) can be fully translated via iptables-translate tool:&lt;br /&gt;
== Translatable extensions ==&lt;br /&gt;
=== Matches === &lt;br /&gt;
====xt====&lt;br /&gt;
&lt;br /&gt;
* comment&lt;br /&gt;
* connlabel&lt;br /&gt;
* connmark&lt;br /&gt;
* conntrack&lt;br /&gt;
* cpu&lt;br /&gt;
* devgroup&lt;br /&gt;
* dscp&lt;br /&gt;
* esp&lt;br /&gt;
* helper&lt;br /&gt;
* iprange&lt;br /&gt;
* length&lt;br /&gt;
* limit&lt;br /&gt;
* mac&lt;br /&gt;
* mark&lt;br /&gt;
* pkttype&lt;br /&gt;
* state&lt;br /&gt;
* tcp&lt;br /&gt;
* udp&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* realm&lt;br /&gt;
* ttl&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* ah&lt;br /&gt;
* frag&lt;br /&gt;
* hbh&lt;br /&gt;
* hl&lt;br /&gt;
* mh&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* NFLOG&lt;br /&gt;
* NFQUEUE&lt;br /&gt;
* TEE&lt;br /&gt;
* TRACE&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
&lt;br /&gt;
* DNAT&lt;br /&gt;
* MASQUERADE&lt;br /&gt;
* REDIRECT&lt;br /&gt;
* REJECT&lt;br /&gt;
* SNAT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following &#039;&#039;&#039;matches&#039;&#039;&#039; and &#039;&#039;&#039;targets&#039;&#039;&#039; are yet to be translated:&lt;br /&gt;
&lt;br /&gt;
== Untranslatable extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Matches ===&lt;br /&gt;
&lt;br /&gt;
====xt====&lt;br /&gt;
* cgroup&lt;br /&gt;
[Waiting for support of cgroup2 path-based in nft]&lt;br /&gt;
* dccp&lt;br /&gt;
[Waiting for support of --dccp-option] (partial translations available)&lt;br /&gt;
* ecn&lt;br /&gt;
[Waiting for support of --ecn-tcp-ece and --ecn-tcp-cwr] (partial translations available)&lt;br /&gt;
* ipcomp&lt;br /&gt;
[Waiting for support of --compres] (partial translations available)&lt;br /&gt;
* multiport&lt;br /&gt;
[Waiting for support of --ports] (partial translations available)&lt;br /&gt;
* owner&lt;br /&gt;
[Waiting for support of --socket-exists] (partial translations available)&lt;br /&gt;
* sctp&lt;br /&gt;
[Waiting for support of --chunk-types] (partial translations available)&lt;br /&gt;
* set&lt;br /&gt;
[Waiting for support]&lt;br /&gt;
: Suggestions for adding support:&lt;br /&gt;
:* Add counters to each element of a set. A counter contains the number of packets that matched an element and the total number of bytes. There must be the option of enabling or disabling the update of counters&#039; values at will. Also counters&#039; values must be accesible in order to do comparisons.&lt;br /&gt;
:* Sets must include different types of elements. Sets must have support for the &amp;quot;nomatch&amp;quot; flag.&lt;br /&gt;
[[User:Robgc|Robgc]] ([[User talk:Robgc|talk]]) 21:48, 21 September 2016 (CEST)&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
*icmp&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
&lt;br /&gt;
====ip6====&lt;br /&gt;
*icmp6&lt;br /&gt;
[Waiting for support of packet types]&lt;br /&gt;
* ipv6header&lt;br /&gt;
* rt&lt;br /&gt;
[Waiting for support of --rt-0-res, --rt-0-addrs, --rt-0-not-strict] (partial translations available)&lt;br /&gt;
&lt;br /&gt;
=== Targets ===&lt;br /&gt;
====xt====&lt;br /&gt;
* CLASSIFY&lt;br /&gt;
[Requires bug fixing]&lt;br /&gt;
* MARK&lt;br /&gt;
[--set-mark and --set-xmark options are not fully supported] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
* CONNMARK&lt;br /&gt;
[Waiting for support of --save-mark, --restore-mark, --set-mark and --set-xmark] (partial translations available)&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-mark is used you must only specify the mark.&amp;lt;br/&amp;gt;&lt;br /&gt;
If --set-xmark is used you must specify the mark and the mask.&lt;br /&gt;
&lt;br /&gt;
====ip====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;br /&gt;
====ip6====&lt;br /&gt;
* LOG&lt;br /&gt;
[Waiting for support of log-tcp-sequence, log-tcp-options, log-ip-options, log-uid, log-macdecode] (partial translations available)&lt;/div&gt;</summary>
		<author><name>Fw</name></author>
	</entry>
</feed>