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 链约定) . 例如:
Run Code Online (Sandbox Code Playgroud)ufw route allow in on eth1 out on eth2这将允许所有路由到 eth2 并进入 eth1 的流量穿过防火墙。
Run Code Online (Sandbox Code Playgroud)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 中设置以下内容来完成:
Run Code Online (Sandbox Code Playgroud)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请注意,设置内核可调参数是特定于操作系统的,并且 ufw sysctl 设置可能会被覆盖。有关详细信息,请参阅 sysctl 手册页。
Ste*_* RC 26
我想到了。
编辑/etc/default/ufw并设置DEFAULT_FORWARD_POLICY为ACCEPT:
DEFAULT_FORWARD_POLICY="ACCEPT"
Run Code Online (Sandbox Code Playgroud)
小智 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,但应该是相似的)。也许这不是您的情况所需要的全部。
最好的问候