使用IPTABLES的MAC地址的字节计数器

时间:2013-03-31 16:01:52

标签: linux command-line iptables

假设我是服务器,我想观看特定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-destination。请帮帮我

P / s:我只想通过MAC地址进行监控。不是IP地址。因为在android OS中。它不支持使用IP地址进行字节计数。所以请帮忙!!!

3 个答案:

答案 0 :(得分:1)

没有--mac-destination之类的东西。你必须move to ebtables for that

答案 1 :(得分: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是这个答案的灵感来源。

答案 2 :(得分:-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