我正在尝试在 ZeroTier 网络上设置流规则,其中仅允许某些端口,并且不允许未标记为“操作员”的成员在彼此之间发起连接。
我正在寻找的特定功能类型:
这是我到目前为止所拥有的:
tag operator
id 0
flag 1 yes
default 0
;
# Drop traffic that isn't IPv4, ARP or IPv6
drop not ethertype ipv4 and not ethertype arp and not ethertype ipv6;
# Prevent IP spoofing
# NOTE: Blocks manual IP management at the OS level and bridging
drop not chr ipauth;
# Accept inbound connections on specific ports
accept dport 53 # DNS
accept dport 22 # SSH
accept dport 3389 # RDP
# Drop TCP SYN, !ACK packets (new connections) on other ports
break chr tcp_syn and not chr tcp_ack;
# Prevent non-operators from initiating connections
#break not tseq operator 1; # Doesn't work (not that this one seemed likely to work)
# Allow all other traffic
accept;
我尝试了许多不同的配置,但没有一个配置适用于我上面列出的所有情况。
我束手无策,不知道还能尝试什么。可能只是我的配置在其他地方遇到了另一个问题。
我将非常感谢任何有关这方面的帮助,因为我最近才开始学习如何编写流程规则。
提前谢谢您。
我 99% 确定我通过使用枚举并阅读了一些 TCP 连接来修复它。
tag device_type
id 0
enum 0 instrument
enum 1 operator
enum 2 superuser
;
drop
not ethertype ipv4 and not ethertype arp and not ethertype ipv6
or not chr ipauth # Prevent IP spoofing
or tseq device_type instrument and chr tcp_syn and not chr tcp_ack # Drop TCP SYN,!ACK packets (new connections) from instruments
;
# Accept inbound connections on specific ports
accept
ipprotocol tcp
and dport 22 # SSH
or dport 3389 # RDP
;
# Accept all connections from superusers
accept tseq device_type superuser;
# Drop TCP SYN,!ACK packets (new connections) on other ports
break chr tcp_syn and not chr tcp_ack;
accept;
我认为需要将规则放置在第一个
accept
之上。
我还删除了不必要的允许 DNS 端口条目并添加了超级用户枚举(因为为什么不呢)。
仪器仍然可以 ping 其他设备,但这完全没问题。
请随时就我如何改进这一点发表评论。