2013-03-31 16 views
1

假設我是服務器,並且我想要觀察下載和上傳特定MAC地址的帶寬。隨着上傳監控鏈。我使用這個:
iptables -N clientA_upload然後iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55:66它工作得很好。
- 但是當涉及到下載鏈。我使用iptables -A FORWARD -m mac --mac-destination 00:11:22:33:44:55:66,iptables不支持mac目的地。請幫助我使用IPTABLES MAC地址的字節計數器

P/s:我只是想通過MAC地址進行監控。不是IP地址。因爲在android操作系統。它不支持使用IP地址的字節計數。所以請幫助!

回答

-2

您在混淆下載和上傳規則。

規則1:iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55:66

附加到ipchain並檢查在轉發鏈中給定的MAC。

現在,您需要檢查在輸入鏈中的MAC地址,所以不是在FORWARD鏈將第二條規則,將其應用於INPUT鏈:

規則2:iptables -I INPUT -m mac --mac-destination 00:11:22:33:44:55:66

+0

是不是INPUT鏈是我們的設備。我的意思是當我是服務器時(我的MAC是AA:BB:CC:DD:EE),我想觀看客戶端的帶寬(他的MAC爲00:11:22:33:44:55:66) )。有2種流。通過我之間的下載流和上傳流(互聯網,我,客戶端)。 – TrisNguyen

0

失蹤--mac-destination,關鍵是要結合iptables的--mac-sourceCONNMARK

  • 首先使用--mac-source以匹配您感興趣的MAC地址來的數據包
  • 使用CONNMARK,以紀念全連接,即兩個方向(!)和
  • 現在檢查數據包與連接標記在另一個方向。


# lan interface 
if_lan=eth0 

# packets going to mac address will pass through this: 
iptables -t mangle -N clientA_download  

# mark connections involving mac address: 
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 00:11:22:33:44:55 -j CONNMARK --set-mark 1234 

# match packets going to mac address: 
iptables -t mangle -A POSTROUTING -o $if_lan -m connmark --mark 1234 -j clientA_download 


起初我以爲這隻能從LAN發起TCP連接的工作,但鑑於--state NEW的定義,它應該在兩個方向上的TCP和UDP(工作! )

對於計數器也見ipset這是非常好的。

Policy Routing on Linux based on Sender MAC Address是這個答案的靈感。