ufw 路由允许从 wg0 进入,从 wg0 出站到 10.0.0.6/32

ufw 路由允许从 wg0 进入,从 wg0 出站到 10.0.0.6/32

我使用 WireGuard VPM 通过外部入口节点反向连接到我的家庭服务器。在该入口节点上,我尝试使用 ufw 添加防火墙规则。其目的是仅允许路由到一个且只有一个特定 IP(10.0.0.6)。

因此基本设置是:

10.0.0.1    entry node (publicly available, responsible for routing packets inside the VPN)
10.0.0.6    home server (should be reachable for any machine in the VPN)
10.0.0.13   any other peer (should not be reachable for other peers, therefor the ufw rule)

通过入口节点路由数据包工作正常,但防火墙规则不会拒绝其他目标 IP。

我的设置如下:

user@host:~$ sudo ufw route allow in on wg0 out on wg0 to 10.0.0.6/32
Rule added

->

user@host:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
...
[firewall rules]
...

10.0.0.6 on wg0        ALLOW FWD   Anywhere on wg0  

(注意:我删除了其他规则。它们与路由无关,只有 ALLOW IN / LIMIT IN 规则)

上面的输出清楚地显示了Default: .. deny (routed),而下面的输出声称所有链中的“接受”策略。

user@host:~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

令人惊讶的是,以下命令显示不同:

user@host:~$ sudo iptables -L
Chain INPUT (policy DROP)
...        

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ufw-before-logging-forward  all  --  anywhere             anywhere            
ufw-before-forward  all  --  anywhere             anywhere            
ufw-after-forward  all  --  anywhere             anywhere            
ufw-after-logging-forward  all  --  anywhere             anywhere            
ufw-reject-forward  all  --  anywhere             anywhere            
ufw-track-forward  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
...

askubuntu 上这个尚未回答的问题包含来自 saiarcot895 的评论,他似乎有一个相关的问题(这是我找到尝试前两个命令的想法的地方)。

无论我到目前为止尝试了什么,我仍然可以从家庭服务器 ping 10.0.0.13。

user@home-server:~$ ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=58.0 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=51.7 ms

然而,我预计这个 ping 包不会被路由,因此返回超时或类似信息。

我的问题是这是预期的行为吗?如果是,我该如何使用 ufw 创建相应的规则?

奇怪的是,我在遥远的互联网中找不到答案。但这应该很容易,所以我再次深入研究了 ufw 手册页。如果你有任何想法,请告诉我!

答案1

这是预期行为。请尝试使用除 之外的其他方法ping进行测试。例如,如果您有一个在 端口上运行的 Web 服务器8010.0.0.13请尝试curl 10.0.0.13在您的主服务器 ( 10.0.0.6) 上运行。

您的 UFW 命令ufw route allow in on wg0 out on wg0 to 10.0.0.6/32是正确的。它将允许发送到主机wg0接口的所有传入数据包从接口10.0.0.6转发到。UFW 还会自动设置防火墙规则,允许已建立连接的反向操作(即将数据包从 转发回已建立连接的原始源)。wg010.0.0.610.0.0.6

UFW 还始终允许某些 ICMP 数据包类型(例如ping请求使用的类型 8,“回显请求”)通过主机的所有接口转发。因此,无论您设置了什么 UFW 规则,您的入口节点都会将数据包转发ping到它可以连接的任何其他主机。

ping要默认停止 UFW 转发(IPv4)数据包,请编辑该/etc/ufw/before.rules文件并注释掉(即#在开头添加)此行:

#-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

对于pingIPv6,请编辑该/etc/ufw/before6.rules文件并注释掉以下行:

#-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-request -j ACCEPT
#-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-reply -j ACCEPT

然后重新启动UFW(例如sudo systemctl restart ufw)。

用于sudo iptables-save | grep -i forward检查iptables现在适用于您的链的 (IPv4) 规则FORWARD。在注释掉上述行之前,输出将如下所示:

:FORWARD DROP [0:0]
:ufw-after-forward - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-reject-forward - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-track-forward - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-logging-forward - [0:0]
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-skip-to-policy-forward -j DROP
-A ufw-user-forward -d 10.0.0.6/32 -i wg0 -o wg0 -j ACCEPT

注释掉该行并重新启动 UFW 后,输出应该不再列出该-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT规则。

相关内容