如何配置 UFW 以允许 IP 转发?

Ste*_* RC 29 iptables firewall ufw ip-forward

我的家庭服务器上安装了 UFW、OpenVPN 和 Virtualbox。我为我的虚拟机来宾 (vboxnet0) 设置了一个仅主机网络,IP 范围设置为 10.0.1.0,另一个 IP 范围 10.0.0.0 配置在 OpenVPN 连接的另一端。

IP 转发是在主机上配置的,因此当 UFW 被禁用时,它们可以毫无问题地相互通信。但是,我想运行 UFW,因为该主机可以通过网络访问,并且我想要一些访问控制。

如何配置 UFW 以允许此类流量?

我尝试了以下各种组合:但ufw allow allow in|out on vboxnet0|tun0没有成功。

我的UFW规则是:

root@gimli:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
Anywhere                   ALLOW       10.0.0.0/16
Anywhere on vboxnet0       ALLOW       Anywhere
Anywhere on tun0           ALLOW       Anywhere

Anywhere                   ALLOW OUT   Anywhere on vboxnet0
Anywhere                   ALLOW OUT   Anywhere on tun0
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

小智 28

现在有可能 - 来自 ufw 手册页:

不以主机本身为目的地的流量规则,而是应通过防火墙路由/转发的流量的规则,应在规则前指定 route 关键字(路由规则与 PF 语法明显不同,而是考虑 netfilter FORWARD 链约定) . 例如:

     ufw route allow in on eth1 out on eth2
Run Code Online (Sandbox Code Playgroud)

这将允许所有路由到 eth2 并进入 eth1 的流量穿过防火墙。

     ufw route allow in on eth0 out on eth1 to 12.34.45.67 port 80 proto tcp
Run Code Online (Sandbox Code Playgroud)

此规则允许进入 eth0 的任何数据包穿过 eth1 上的防火墙到达 12.34.45.67 上的 tcp 端口 80。

除了路由规则和策略,您还必须设置 IP 转发。这可以通过在 /etc/ufw/sysctl.conf 中设置以下内容来完成:

     net/ipv4/ip_forward=1
     net/ipv6/conf/default/forwarding=1
     net/ipv6/conf/all/forwarding=1
Run Code Online (Sandbox Code Playgroud)

然后重启防火墙:

     ufw disable
     ufw enable
Run Code Online (Sandbox Code Playgroud)

请注意,设置内核可调参数是特定于操作系统的,并且 ufw sysctl 设置可能会被覆盖。有关详细信息,请参阅 sysctl 手册页。

  • 这应该是新接受的答案 (3认同)
  • 对于我们这些想要允许 OpenVPN 服务器上的 OpenVPN 客户端之间的 tcp 流量的人来说,这是可行的。例如:ufw route allow in on tun0 out on tun0 (2认同)

Ste*_* RC 26

我想到了。

编辑/etc/default/ufw并设置DEFAULT_FORWARD_POLICYACCEPT

DEFAULT_FORWARD_POLICY="ACCEPT"
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法只允许它转发特定端口,而不是将其设置为接受所有内容? (14认同)
  • 可以通过 CLI 使用“sudo ufwdefaultallowrouted”更改默认策略 (4认同)

小智 13

这个 ufw 命令对我来说效果很好: sudo ufw default allow FORWARD

为确保更改已应用:sudo service ufw restart


小智 8

如果您在 /etc/default/ufw 中将 DEFAULT_FORWARD_POLICY 设置为 ACCEPT,则防火墙将转发所有数据包,而不管用户界面的设置如何。

我认为用户界面仅用于简单的输入/输出过滤。对于转发,您需要在 /etc/ufw/before.rules 中添加 iptables 规则,如下所示:

-A ufw-before-forward -i eth1 -p tcp -d 192.168.1.11 --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

您可能已经有一个规则允许从内向外的连接,另一个允许来自相关和已建立的 tcp 会话的数据包重新进入。

我不是 iptables 专家,我花了很长时间才弄明白(使用 ip6tables,但应该是相似的)。也许这不是您的情况所需要的全部。

最好的问候