2014-02-25 138 views
2

我有一個規則如下:關於iptables的 「-set-xmark」 有些問題

-A PREROUTING -d 10.228.20.15/32 -p tcp -m tcp --dport 80--tcp-flags FIN,SYN,RST,ACK SYN -j MARK --set-xmark 0x70/0xffffffff 

的人DOC如下解釋--set-xmark

零出的面具和XOR給出的位值轉化爲ctmark。

英語不是我的母語。任何人都可以幫助解釋什麼價值將被設置爲ctmark? 什麼零點意味着什麼?舉一個例子,將不勝感激。

回答

4

所以語法是--set-xmark value/mask。將得到的操作是:

ctmark = (ctmark AND NOT mask) XOR value 

零出對應於(ctmark AND NOT mask):如果在mask一個位被置位,則在ctmark相應比特將是零(前XOR)。

手冊頁還指出:

--and-mark bits 
    Binary AND the ctmark with bits. (Mnemonic for --set-xmark 
    0/invbits, where invbits is the binary negation of bits.) 

--or-mark bits 
    Binary OR the ctmark with bits. (Mnemonic for --set-xmark 
    bits/bits.) 

--xor-mark bits 
    Binary XOR the ctmark with bits. (Mnemonic for --set-xmark 
    bits/0.) 

您可以驗證上述對這些定義的操作:

--and-mark bits == --set-xmark 0/invbits 
    ctmark AND bits = (ctmark AND NOT invbits) XOR 0 
    -> bits = NOT invbits 
    -> anything XOR 0 = anything 
    so: ctmark AND bits = ctmark AND NOT NOT bits = ctmark AND bits 

--or-mark bits == --set-mark bits/bits 
    ctmark OR bits = (ctmark AND NOT bits) XOR bits 
    -> should be obvious based on boolean logic 

--xor-mark bits == -set-mark bits/0 
    ctmark XOR bits = (ctmark AND NOT 0) XOR bits 
    -> anything AND NOT 0 = anything 
+0

謝謝你的解釋。這對我的理解非常有幫助。 – harlan