Solved ZeroTier Flow Rules
-
Is anyone using ZeroTier flow rules yet?
I tried to set up a rule to allow ping, ssh, and RDP but broke ZeroTier.
I'm sure this is a stupid user error, but I'm tired and gave up for now.
This is the default rule set.
The manual: https://www.zerotier.com/manual/#3
-
Here's what I have so far.
# Whitelist only IPv4 (/ARP) and IPv6 traffic and allow only ZeroTier-assigned IP addresses drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 # or not chr ipauth # OR IP addresses are not authenticated (1.2.0+ only!) ; # Allow SSH and RDP by allowing all TCP packets (including SYN/!ACK) to these ports accept ipprotocol tcp and dport 22 or dport 3389 ; # Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above break # break can be overridden by a capability chr tcp_syn # TCP SYN (TCP flags will never match non-TCP packets) and not chr tcp_ack # AND not TCP ACK ; # Accept other packets accept;
-
Add "and" before "not ethertype arp" and "not ethertype ipv6"
-
@black3dynamite said in ZeroTier Flow Rules:
Add "and" before "not ethertype arp" and "not ethertype ipv6"
Yes, I have that as it is the default rule set. The above was a typo when I redid a the default after breaking things..
That is not my question though.
FYI, this is the full default rule set with comments on a new ZT network.
# # This is a default rule set that allows IPv4 and IPv6 traffic but otherwise # behaves like a standard Ethernet switch. # # Please keep in mind that ZeroTier versions prior to 1.2.0 do NOT support advanced # network rules. # # Since both senders and receivers enforce rules, you will get the following # behavior in a network with both old and new versions: # # (old: 1.1.14 and older, new: 1.2.0 and newer) # # old <--> old: No rules are honored. # old <--> new: Rules work but are only enforced by new side. Tags will NOT work, and # capabilities will only work if assigned to the new side. # new <--> new: Full rules engine support including tags and capabilities. # # We recommend upgrading all your devices to 1.2.0 as soon as convenient. Version # 1.2.0 also includes a significantly improved software update mechanism that is # turned on by default on Mac and Windows. (Linux and mobile are typically kept up # to date using package/app management.) # # # Allow only IPv4, IPv4 ARP, and IPv6 Ethernet frames. # drop not ethertype ipv4 and not ethertype arp and not ethertype ipv6 ; # # Uncomment to drop non-ZeroTier issued and managed IP addresses. # # This prevents IP spoofing but also blocks manual IP management at the OS level and # bridging unless special rules to exempt certain hosts or traffic are added before # this rule. # #drop # not chr ipauth #; # Accept anything else. This is required since default is 'drop'. accept;
-
This is strictly a guess by looking through their documentation as I do not have a ZT node here to test.
drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 accept # but accept ipprotocol rdp # RDP (not sure if this is both TCP AND UDP) accept # and accept ipprotocol icmp # ICMP accept; # This is required since default is 'drop'.
-
@manxam said in ZeroTier Flow Rules:
This is strictly a guess by looking through their documentation as I do not have a ZT node here to test.
drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 accept # but accept ipprotocol rdp # RDP (not sure if this is both TCP AND UDP) accept # and accept ipprotocol icmp # ICMP accept; # This is required since default is 'drop'.
Has soon as you add
accept;
those other accept rules isn't necessary. -
@black3dynamite said in ZeroTier Flow Rules:
@manxam said in ZeroTier Flow Rules:
This is strictly a guess by looking through their documentation as I do not have a ZT node here to test.
drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 accept # but accept ipprotocol rdp # RDP (not sure if this is both TCP AND UDP) accept # and accept ipprotocol icmp # ICMP accept; # This is required since default is 'drop'.
Has soon as you add
accept;
those other accept rules isn't necessary.Most examples have a break rule before the final accept.
-
That runs counterintuitive to their site and confused me as well.
They have a sample showing basic layout with the BLOCK at first, ACCEPT after and explain what they're allowing, and then at the end they have ACCEPT;They then go on to say that this blocks X, but allows Y. When, with that final ACCEPT, you'd think it would also allow Z.
I dunno..
EDIT : maybe I missed a "break"?
-
I am curious to see what works for @JaredBusch as I could see this coming in handy very soon...
-
Here's what I have so far.
# Whitelist only IPv4 (/ARP) and IPv6 traffic and allow only ZeroTier-assigned IP addresses drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 # or not chr ipauth # OR IP addresses are not authenticated (1.2.0+ only!) ; # Allow SSH and RDP by allowing all TCP packets (including SYN/!ACK) to these ports accept ipprotocol tcp and dport 22 or dport 3389 ; # Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above break # break can be overridden by a capability chr tcp_syn # TCP SYN (TCP flags will never match non-TCP packets) and not chr tcp_ack # AND not TCP ACK ; # Accept other packets accept;
-
@black3dynamite need ICMP also. I thought that was
accept icmp 4 -1 ;
but it did not work.
That or I broke something else at the time. Iw ill be back on this shortly myself. -
@JaredBusch said in ZeroTier Flow Rules:
@black3dynamite need ICMP also. I thought that was
accept icmp 4 -1 ;
but it did not work.
That or I broke something else at the time. Iw ill be back on this shortly myself.I was still able to ping without adding icmp.
-
-
@black3dynamite said in ZeroTier Flow Rules:
icmp 0 -1 and icmp 8 -1
ok I have RDP but no ping to a desktop.
but I can ssh and ping a server.
so likely my lack of ping is the windows firewall.So all working.
without the icmp rule.this looks all but identical to what I setup last night, but could not get working.
so I'm going with typo or something that was in the rules parser, but not right. -
Here is my updated rule set that I use on my personal ZT network.
# Whitelist only IPv4 (/ARP) and IPv6 traffic and allow only ZeroTier-assigned IP addresses drop # drop cannot be overridden by capabilities not ethertype ipv4 # frame is not ipv4 and not ethertype arp # AND is not ARP and not ethertype ipv6 # AND is not ipv6 # or not chr ipauth # OR IP addresses are not authenticated (1.2.0+ only!) ; # Allow SSH, SMTP, HTTP, HTTPS, and Cockpit by allowing all TCP packets (including SYN/!ACK) to these ports accept ipprotocol tcp and dport 22 or dport 25 or dport 80 or dport 443 or dport 9090 ; # Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above break # break can be overridden by a capability chr tcp_syn # TCP SYN (TCP flags will never match non-TCP packets) and not chr tcp_ack # AND not TCP ACK ; # Accept other packets accept;
-
Sorry about dragging this old topic back but, it is probably the most relevant to what I'm looking for.
I have been trying to get the ZeroTier FlowRules to work but must be doing something wrong. My ruleset is very close to what @JaredBusch has but, the ZeroTier nodes don't work as expected.
When I leave the final accept statement, ZeroTier passes all traffic. When I comment out that last accept all traffic stops.
# Allow only IPv4, IPv4 ARP # drop not ethertype ipv4 and not ethertype arp # Drop IPv6 Ethernet frames. # and not ethertype ipv6 ; # # # Uncomment to drop non-ZeroTier issued and managed IP addresses. # # This prevents IP spoofing but also blocks manual IP management at the OS level and # bridging unless special rules to exempt certain hosts or traffic are added before # this rule. # #drop # not chr ipauth #; accept ipprotocol tcp and dport 80 ; # Accept anything else. This is required since default is 'drop'. accept;
Any help on what I'm doing wrong will be greatly appreciated.