Port-Forwarding

OpenBSD pf 埠轉發多條規則

  • July 27, 2011

我在 OpenBSD 防火牆後面有幾十台伺服器,帶有埠轉發功能。大多數規則非常相似,僅在 IP 或有時在轉發的埠上有所不同,因此我想壓縮它們以消除過多的重複,但我發現不可能使用帶有規則的表。rdr-to有什麼辦法可以改進這個配置嗎?是否可以選擇使用pf宏一次生成多個規則?我目前無法使用外部預處理器。

範例規則集:

pass in  on $extif proto tcp from any     to 10.0.0.213   port {25,80,443} rdr-to 172.16.1.193
pass in  on $intif proto tcp from $intnet to 10.0.0.213   port {25,80,443} rdr-to 172.16.1.193
pass out on $intif proto tcp from any     to 172.16.1.193 port {25,80,443} received-on $intif nat-to $intif

pass in  on $extif proto tcp from any     to 10.0.0.214   port {25,80,443} rdr-to 172.16.1.194
pass in  on $intif proto tcp from $intnet to 10.0.0.214   port {25,80,443} rdr-to 172.16.1.194
pass out on $intif proto tcp from any     to 172.16.1.194 port {25,80,443} received-on $intif nat-to $intif

pass in  on $extif proto tcp from any     to 10.0.0.215   port {25,80,443,3389} rdr-to 172.16.1.195
pass in  on $intif proto tcp from $intnet to 10.0.0.215   port {25,80,443,3389} rdr-to 172.16.1.195
pass out on $intif proto tcp from any     to 172.16.1.195 port {25,80,443,3389} received-on $intif nat-to $intif

從 pf.conf(5) 聯機幫助頁:

轉換選項僅適用於通過指定介面的數據包,如果未指定介面,則轉換適用於所有介面上的數據包。例如,將外部介面上的埠 80 重定向到內部 Web 伺服器僅適用於來自外部的連接。從本地主機到外部介面地址的連接不會被重定向,因為這些數據包實際上並不通過外部介面。重定向不能通過它們到達的介面將數據包反射回來,它們只能被重定向到連接到不同介面的主機或防火牆本身。

您可以通過不指定要在哪個介面上進行重定向並允許 pf 為您評估它來壓縮您的一些規則。

例如:

pass in on $extif proto tcp from any to 10.0.0.213 port {25,80,443} rdr-to 172.16.1.193
pass in on $intif proto tcp from $intnet to 10.0.0.213 port {25,80,443} rdr-to 172.16.1.193

可以重寫為:

pass in proto tcp from any to 10.0.0.213 port {25, 80, 443} rdr-to 172.16.1.193
  • 發往 10.0.0.213 的入站流量$extif將被重定向到 172.16.1.193。
  • 發往 10.0.0.213 的入站流量$intif將被重定向到 172.16.1.193。
  • 這也將允許不屬於其中的流量也被$intnet愉快地重定向。這可能是可取的,也可能是不可取的。

在沒有看到您的整個規則集或真正知道您要完成什麼的情況下,我只能提供一個概念驗證範例。

最後一點:我真的會避免這樣做。有一種趨勢(至少我有)希望通過讓一條規則做的比“一件事”多來編寫盡可能少的規則。這是不好的。防火牆已經非常複雜,而且似乎總是配置錯誤;為什麼要通過制定拜占庭規則集來讓自己變得更難?具有更簡單規則的更長規則集將更易於理解、維護和調試。避免過於聰明的誘惑。

引用自:https://serverfault.com/questions/293276