為什麼 iptables 收不到標記的封包?

為什麼 iptables 收不到標記的封包?

我正在學習 ping 命令選項。在其中我找到了 -m 選項來設定封包的標記。

以下命令將標記為 10 的資料包傳送至 192.168.2.65。

ping -m 10 192.168.2.65

使用下面的命令我可以在目的地接收該資料包。

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

但上面的命令並沒有收到標記的資料包。上面的 iptables 指令不回傳任何內容。

注意:我們都擁有 root 權限。

答案1

此標記是內部的,不包含在資料包或其任何標頭中的任何位置。

INPUT這意味著在進行實際的出站連線時它會遺失,並且在目標伺服器的表中不可見,但您會在OUTPUT發起電腦的表中看到它。

在 ping 中支援標記的目的是允許出站路由規則。

答案2

@Julie Pelletier 的答案 100% 正確,但您可能不太理解。

首先,正如評論中多次提到的,標記是不是放入線路上的乙太網路封包中。因此,如果您從伺服器 A ping 伺服器 B,伺服器 B 將永遠無法偵測到該標記。如果你想做任何事情,你必須單獨使用伺服器 A。因此,您必須將規則插入/附加到 OUTPUT 鏈寄件人看到任何東西。

現在,讓我們看看如何使用iptables。首先,我們想查看 OUTPUT 中哪些規則處於活動狀態:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
root@roran:~#

好吧,沒有規則。讓我們定義一個規則:

root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#

如您所見,沒有輸出。但核心表現在有一個條目:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

“pkts”和“bytes”列均為 0,因為還沒有資料包發出。現在,ping 另一台伺服器,沒有設定標記:

root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]

之後,內核表仍然沒有匹配任何內容:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

接下來,嘗試使用標記集進行 ping 操作:

root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]

再看一下表格:

root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                           
    1    84 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0  mark match 0xa
root@roran:~#

現在,該規則已找到一個資料包,該資料包有 84 位元組。

如果你想嘗試一下,在此之後,請iptables -F OUTPUT清除表格;iptables -I OUTPUT -m mark --mark 0x0a -j REJECT為了防止標記的資料包從您的電腦流出,請對另一台有或沒有標記的電腦執行 ping 操作。現在,您將看到標記的資料包沒有得到回复,因為規則將丟棄它們。

相關內容