如何將多個埠上的標記數據包重定向到一個 IP 地址
我已經設置了這個規則:
-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j internet -A internet -j MARK --set-xmark 0x63/0xffffffff
擷取埠 80 上的傳入流量並將其發送以進行標記。它可以工作,但現在我想編輯它以擷取除 53(DNS)、DHCP 服務埠和其他埠之外的所有埠。在我的 iptables 下方,我有
-A PREROUTING -i vboxnet0 -p tcp -m mark --mark 0x63 -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1
這會擷取所有帶有標記的 tcp 流量,並以埠 80 為目的地,並將其 DNAT 到本地 IP。我想編輯它以包括除 3(DNS)、DHCP 服務埠和其他一些埠之外的所有埠。
一些好的指針代替對兩個規則集中第一個 -m 和第二個 -m 之間差異的小解釋也可以讓我走上正確的軌道。
了解您的規則
與大多數事情一樣,了解防火牆規則如何工作的第一步是檢查
man
頁面 (man iptables
)。在man
頁面中,您會發現:-m, –match 匹配
指定要使用的匹配項,即測試特定屬性的擴展模組。這組匹配構成了呼叫目標的條件。匹配項按照命令行中的指定從頭到尾進行評估,並以短路方式工作,即如果一個擴展產生錯誤,評估將停止。
在頁面底部附近,
man
您還會發現:匹配和目標擴展
iptables 可以使用擴展的數據包匹配和目標模組。iptables-extensions(8) 聯機幫助頁中提供了這些列表。
因此,該
iptables-extensions
man
頁面將為您提供有關您的-m
選擇真正在做什麼的詳細資訊。那裡的一些小片段:標記
$$ ! $$–標記值$$ /mask $$ …
tcp
$$ ! $$–destination-port,–dport 埠$$ :port $$ …
脫氧核糖核酸
此目標僅在 nat 表、PREROUTING 和 OUTPUT 鏈以及僅從這些鏈呼叫的使用者定義鏈中有效。它指定應該修改數據包的目標地址(並且此連接中的所有未來數據包也將被破壞),並且應該停止檢查規則。它採用以下選項:
–to-destination
$$ ipaddr[-ipaddr $$]$$ :port[-port $$] …
標記
此目標用於設置與數據包關聯的 Netfilter 標記值。例如,它可以與基於 fwmark 的路由結合使用(需要 iproute2)。如果您打算這樣做,請注意需要在 mangle 表的 PREROUTING 鏈中設置標記以影響路由。標記欄位為 32 位寬。
–set-xmark 值
$$ /mask $$
簡單來說,
-m
options 將匹配選項添加到iptables
. 但是該man
頁面還列出了一些非標準目標(包括DNAT
您正在使用的目標。該怎麼辦
現在,將所有這些放在一起,我假設您正在使用的表是
nat
唯一可以與DNAT
目標一起使用的表。似乎也不需要標記流量。它只是被標記,以便您可以
nat
使用數據包,但您可以只nat
使用數據包而不是標記它開始。例如:
-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1
您可以指定多個規則來覆蓋多個埠,還可以使用 指定埠範圍
[port]:[port]
,或使用 負匹配!
。例如,要將規則應用於除
53
(domain) 和22
(ssh) 之外的所有埠,您可以執行以下操作:-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 53 -j DNAT --to-destination 192.168.56.1 -A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 22 -j DNAT --to-destination 192.168.56.1
如果您要過濾掉很多埠,這可能會變得很麻煩,但這就是
iptables
. 我建議檢查/etc/services
以獲取埠映射列表,這樣您就可以避免影響某些服務/協議。