Iptables

如何使用匹配特定模式的 iptables 重定向數據包?(例如,帶有 UDP 的 QUERY 命令)

  • November 20, 2014

我有一個特定的數據包,我希望始終將其重定向到我的虛擬網路介面上的特定 IP。至於現在我的 iptables 是這樣設置的:

(命令,我現在使用 \ 使其更具可讀性,讀作“將下一行組合到這一行”:))對於允許的 IP:

iptables \
-t nat -A PREROUTING \
-i vmbr0 -p udp --dport 7777 \
-m set --match-set whitelist \
-j DNAT --to 192.168.0.1:7777

對於不允許的 IP:

iptables \
-t nat -A PREROUTING \
-i vmbr0 -p udp --dport 7777 \
-m set ! --match-set whitelist \
-j DNAT --to 192.168.0.1:7778

但是,無論白名單條目如何,我都想傳遞某個 udp 數據包(匹配一些十六進制,如果可能,最好使用萬用字元),我192.168.0.1:7777該怎麼做?

所以最終這將是結果:

在此處輸入圖像描述

得到我!:-) 我錯了。我想到的(-m string匹配擴展)是不可能的,我們在 nat 表中,只有“連接”的第一個數據包(即使是 udp)會通過這個表。所以我們不能檢查相同連接的所有數據包並只偏離一個。

您可以檢查匹配副檔名string( -m string)。

另請注意,DNAT 目標正在終止,這意味著如果數據包與 DNAT 目標匹配規則,則數據包將不會通過以下規則。

所以你可以選擇這種解決方案:

在您的 nat 表中:

第一條規則:你提到的第一條規則,匹配白名單

在這條規則之後仍然流過的包是不匹配白名單的包(更準確地說是埠 7777 的不匹配白名單的 UDP 包)。

第二條規則:在這裡你可以使用 -m 字元串。請注意,檢查數據包中的字元串可能會佔用大量資源。您可以匹配十六進製字元串(--hex-string選項),但我不知道此匹配擴展中的萬用字元。

第三條規則:可以簡化,因為終止目標 DNAT

希望這可以幫助。

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