我的家庭服务器上安装了 UFW、OpenVPN 和 Virtualbox。我为虚拟机客户机 (vboxnet0) 设置了一个仅主机网络,IP 范围为 10.0.1.0,在 OpenVPN 连接的另一端配置了另一个 IP 范围 10.0.0.0。
主机上配置了 IP 转发,因此当 UFW已禁用他们可以毫无问题地互相通信。但是,我想运行 UFW,因为此主机将可通过 Web 访问,并且我想要一些访问控制。
我该如何配置 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
任何帮助将不胜感激。
答案1
现在可以了 - 来自 ufw 手册页:
针对不是发往主机本身的流量,而是应该通过防火墙路由/转发的流量的规则应该在规则前指定路由关键字(路由规则与 PF 语法有很大不同,而是考虑了 netfilter FORWARD 链约定)。例如:
ufw route allow in on eth1 out on eth2
这将允许所有路由到 eth2 并进入 eth1 的流量穿越防火墙。
ufw route allow in on eth0 out on eth1 to 12.34.45.67 port 80 proto tcp
此规则允许任何从 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
然后重新启动防火墙:
ufw disable ufw enable
请注意,设置内核可调参数是特定于操作系统的,并且 ufw sysctl 设置可能会被覆盖。有关详细信息,请参阅 sysctl 手册页。
答案2
我想到了。
编辑/etc/default/ufw
并设置DEFAULT_FORWARD_POLICY
为接受:
DEFAULT_FORWARD_POLICY="ACCEPT"
答案3
这个 ufw 命令对我来说很好用:
sudo ufw default allow FORWARD
为确保更改已应用,请执行以下操作:sudo service ufw restart
答案4
如果在 /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
您可能已经有一条允许从内向外连接的规则和另一条允许来自相关和已建立的 TCP 会话的数据包返回的规则。
我不是 iptables 专家,我花了很长时间才弄清楚这一点(使用 ip6tables,但应该类似)。也许这不是你所需要的全部。
最好的问候