OpenBSD pf 基于 DHCP/DNS 的 NAT 规则

OpenBSD pf 基于 DHCP/DNS 的 NAT 规则

我在所有其他虚拟机前面安装了 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 规则中使用此宏以使其易于更改。

相关内容