我在所有其他虚拟机前面安装了 Proxmox 和 OpenBSD VM,以发挥 NAT、防火墙、DNS 和 DHCP 的作用。
我有一个功能齐全的 DNS 和 DHCP。我的 DHCP 正在正确更新我的 DNS 记录。我的 NAT 也运行良好,因为我的其他虚拟机可以访问互联网。
现在我想要一个有效的防火墙和传入的 NAT 规则。
例如,我有一个名为 nginx 的虚拟机,可以通过 联系它nginx.local.lan
。
简而言之,这就是我想做的:
- 将 80 和 443 端口重定向到我的
ngnix.local.lan
. - 阻止来自 WAN 接口 (em0) 的所有内容,除了 natted(80 和 443 到 nginx)和 SSH 之外的内容。
- 但我还想允许来自 LAN 接口 (em1) 的所有内容。
这是我当前的pf.conf
文件:
set skip on lo
block return # block stateless traffic
pass # establish keep-state
# Define interfaces
ext_if=em0
int_if=em1
# Allow SSH connections
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
# Allow VMs to get out of the network
pass out on $ext_if inet from $int_if:network to any nat-to $ext_if
答案1
我终于找到了一种方法来完成我之前所说的一切。我要解释一下:
在/etc/pf.conf
:
拒绝所有传入流量
(LAN接口除外)
block in all
pass in quick on $int_if
第一行阻止所有内容,而第二行允许来自 LAN 接口的任何内容。如果您想知道quick
关键字是什么,请阅读这。
你怎么能确定它正在工作?只需执行 a pfctl -sr
,它应该输出类似以下内容:
block drop in all
pass in quick on em1 all flags S/SA
将 HTTP(S) 流量重定向到虚拟机
如前所述,我已经配置了有效的 DNS、DHCP、DDNS 设置。这意味着,如果我有一个请求 DHCP 租用的 nginx 虚拟机,它会自动将nginx.local.lan
域条目与租用的 IP 关联起来。
知道这一点后,我尝试使用宏在配置文件中使其变得优雅:
nginx_vm_map=80 443
pass in quick on $ext_if proto tcp from any to any port {$nginx_vm_map} rdr-to nginx.local.lan
第一行定义了我想要重定向到虚拟机的端口,然后我$nginx_vm_map
在 natting 规则中使用此宏以使其易于更改。