Openbsd

基於 DHCP/DNS 的 OpenBSD pf NAT 規則

  • April 14, 2019

我安裝了一個 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 規則中使用這個宏來使它很容易改變。

引用自:https://unix.stackexchange.com/questions/178172