我正在构建一个强制门户(是的,只是另一个;)),现在我正在尝试处理核心功能,即 iptables 规则。基于ipset
我有一个名为 name 的有效 mac 地址列表allow-mac
。这是当前的配置(除去问题本身):
echo 1 >/proc/sys/net/ipv4/ip_forward
ipset create allow-mac hash:mac counters
ipset add allow-mac XX:XX:XX:XX:XX:XX
IPT="/usr/sbin/iptables"
WAN="eth0"
LAN="eth1"
$IPT -P FORWARD DROP
$IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
$IPT -I FORWARD -i $LAN -m set --match-set allow-mac src -j ACCEPT
这应该有效,但没有!因此,如果我将默认FORWARD
链更改为ACCEPT
并将规则更改为相反:
$IPT -P FORWARD ACCEPT
$IPT -I FORWARD -i $LAN -m set ! --match-set allow-mac src -j DROP
我得到了想要的结果,并且只有列表中具有已知 MAC 地址的客户端才能转发。
所以我的问题是,为什么它在第一个设置中不起作用?我的第二个缺少的功能是,如果counters
已经添加了模块,但现在计算了来自客户端的“上传”流量,我如何(在单独的计数器中)也计算下载流量?
答案1
在第一个规则集中,您只允许指定的传出流量-i $LAN
:因此回复将被过滤掉。只需删除 -i $LAN` 就可以工作?
但在这种情况下,将统计整个流量(上传+下载)如果您想单独统计上传和下载,您可能需要创建两个标记策略:
- 一个用于上传,其中源代码mac 已标记
- 一个用于下载,在哪里目的地mac 已标记。