3 # nftables ruleset for an End Node acting as a workstation in a LAN.
5 # Copyright (C) 2018 Antonio Ospite <ao2@ao2.it>
6 # SPDX-License-Identifier: MIT
9 # https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes#Simple_IP.2FIPv6_Firewall
10 # https://wiki.archlinux.org/index.php/Nftables#Workstation
11 # https://stosb.com/blog/explaining-my-configs-nftables/
17 define common_open_ports = {
20 5298, # Link-local XMPP, for backward compatibility, XEP-0174
42 type filter hook input priority 0;
44 ct state established,related accept
46 ct state new jump in-new
50 ip protocol icmp icmp type {
55 destination-unreachable
58 # ICMPv6 configuration based on:
59 # https://github.com/intel/intel-iot-refkit/blob/master/meta-refkit-core/recipes-security/nftables-settings-default/files/firewall.template
60 ip6 nexthdr ipv6-icmp icmpv6 type {
65 destination-unreachable,
69 # Allow auto configuration support.
70 ip6 nexthdr ipv6-icmp icmpv6 type {
75 } ip6 hoplimit 255 accept
77 # Allow multicast listener discovery on link-local addresses.
78 # RFC2710 specifies that a Hop-by-Hop Options header is used.
79 hbh nexthdr ipv6-icmp icmpv6 type {
82 mld-listener-reduction
83 } ip6 saddr fe80::/10 accept
85 # Allow multicast router discovery messages on link-local addresses (hop limit 1).
86 ip6 nexthdr ipv6-icmp icmpv6 type {
89 } ip6 hoplimit 1 ip6 saddr fe80::/10 accept
91 # Allow IGMPv3 queries.
92 ip protocol igmp ip daddr 224.0.0.1 accept
94 # Silently drop other incoming broadcast and multicast traffic.
95 meta pkttype {broadcast, multicast} drop
97 limit rate 3/minute burst 10 packets log prefix "[INPUT]: "
102 # Silently drop DHCPv4 Discover and Request packets from other clients.
103 ip saddr 0.0.0.0 ip daddr 255.255.255.255 udp sport bootpc udp dport bootps drop
105 # Silently drop DHCPv6 from other clients.
106 ip6 saddr fe80::/64 ip6 daddr fe80::/64 udp sport dhcpv6-client udp dport dhcpv6-server drop
108 # mDNS (ZeroConf/Bonjour)
109 ip daddr 224.0.0.251 udp dport mdns accept
110 ip6 daddr ff02::fb udp dport mdns accept
112 # SSDP: https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol
113 ip daddr 239.255.255.250 udp dport 1900 accept
119 } udp dport 1900 accept
121 tcp dport @tcp_open_ports tcp flags & (fin | syn | rst | ack) == syn accept
122 udp dport @udp_open_ports accept
126 type filter hook forward priority 0;
127 limit rate 3/minute burst 10 packets log prefix "[FORWARD]: "
132 type filter hook output priority 0;