我正在使用一个网卡在 Linux VM 上进行一些测试,我想将其用作某种防火墙,可以根据 MAC 地址阻止某些客户端的流量。
客户端本身将 VM 作为默认网关 (.254),VM 本身将 (.1 实际路由器) 作为默认网关。
这是我目前正在使用的 iptable 脚本。我的客户端上有互联网,但 .14 仍然可以上网,当使用 mac 地址时,没有任何内容被阻止。
我是否遗漏了什么?
# Generated by iptables-save v1.4.14 on Sun Feb 23 12:16:26 2014
*filter
:INPUT ACCEPT [869:78983]
:FORWARD ACCEPT [1183:197765]
:OUTPUT ACCEPT [644:128360]
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# log iptables denied calls (access via 'dmesg' command)
-P FORWARD DROP
-F FORWARD
-A FORWARD -i eth0 -m mac --mac-source 64:20:0c:ac:f4:49 -j DROP
-A FORWARD -i eth0 -s 192.168.1.14 -j DROP
-A FORWARD -i eth0 -j ACCEPT
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
# Completed on Sun Feb 23 12:16:26 2014
答案1
您需要将这些规则放在网关 .254 上,该网关由 .14 使用。
如果您需要在 .1 网关级别阻止 .14,则需要确保数据包通过来自 .14 的 mac 地址到达谁,如果数据包通过 .254 通过 NAT 转发,则这些数据包将使用 .254 mac 地址重新打包。
我建议您为客户端 .14 创建一个子网,以便不能直接连接到 .1 网关。
答案2
MAC 地址过滤需要在 PREROUTING 链中进行,当数据包到达 FORWARD 链时,MAC 地址已经被重写为(内部)iptables 网桥的 MAC 地址。
请参阅http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html#section8以获得更详细的解释。
您还在设置默认策略(-F FORWARD 行)后刷新了 FORWARD 链,我怀疑您是否想这样做(它会恢复 ACCEPT 的默认策略)。
我不明白为什么“-A FORWARD -i eth0 -s 192.168.1.14 -j DROP”没有阻止该源 IP,但无论如何你不需要那里的“-i eth0”。你确定 1.14 使用 254 作为默认 gw 吗?
iptables -L -v
发布输出以查看实际加载的内容也会有所帮助。