我正在學習 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 操作。現在,您將看到標記的資料包沒有得到回复,因為規則將丟棄它們。