Port-Forwarding
OpenBSD pf 埠轉發多條規則
我在 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
愉快地重定向。這可能是可取的,也可能是不可取的。在沒有看到您的整個規則集或真正知道您要完成什麼的情況下,我只能提供一個概念驗證範例。
最後一點:我真的會避免這樣做。有一種趨勢(至少我有)希望通過讓一條規則做的比“一件事”多來編寫盡可能少的規則。這是不好的。防火牆已經非常複雜,而且似乎總是配置錯誤;為什麼要通過制定拜占庭規則集來讓自己變得更難?具有更簡單規則的更長規則集將更易於理解、維護和調試。避免過於聰明的誘惑。