Openbsd
基於 DHCP/DNS 的 OpenBSD pf NAT 規則
我安裝了一個 Proxmox 並在所有其他人面前安裝了一個 OpenBSD 虛擬機來扮演 NAT、防火牆、DNS 和 DHCP 的角色。
我有一個功能齊全的 DNS 和 DHCP。我的 DHCP 正在正確更新我的 DNS 記錄。我的 NAT 也執行良好,因為我的其他虛擬機可以訪問網際網路。
現在我想要一個有效的防火牆和傳入的 NAT 規則。
例如,我有一個名為 nginx 的 VM,雖然可以聯繫到它
nginx.local.lan
。簡而言之,這就是我想要做的:
- 將 80 和 443 埠重定向到我的
ngnix.local.lan
.- 阻止來自 WAN 介面 (em0) 的所有內容,除了 nat(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
我終於找到了一種方法來完成我之前所說的一切。我將解釋它:
在
/etc/pf.conf
:拒絕所有傳入流量
(區域網路介面除外)
block in all pass in quick on $int_if
第一行阻止一切,而第二行允許來自 LAN 介面的任何內容。如果您想知道
quick
關鍵字是什麼,請閱讀此內容。你怎麼能確定它在工作?只需做一個
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 規則中使用這個宏來使它很容易改變。