日期:2014-05-16  浏览次数:21001 次

iptables做MAC地址过滤的问题
想用iptables实现MAC地址过滤,
有两种情况,一个是黑名单,禁止某些MAC地址路由,其它地址可以通过。
另一个是白名单,只允许某些MAC地址路由,其它地址不能通过。

自己定义了一个chain,所有MAC地址加在自定义chain里。

黑名单的时候,用的是iptables -A mychain -j RETURN
然后mychain里的规则是 -j DROP

做白名单时,iptalbes -A mychain -j DROP
mychain里面的规则时 -j ACCEPT

发现当黑名单的时候是能用的,但是当白名单的时候貌似chain中的MAC也被过滤掉了,好像ACCEPT没有生效。
应iptalbes -L看mychain是

ACCEPT all -- anywhere anywhere MAC xx:xx:xx:xx:xx:xx 
DROP all -- anywhere anywhere  

请问这样设置是否正确?

------解决方案--------------------

从描述来看貌似没啥问题

将iptables的日志重定向到新文件中,对你的DROP规则增加日志,然后排查日志

引用
打开你的/etc/syslog.conf文件:
# vi /etc/syslog.conf

在文件末尾加入下面一行信息
kern.warning /var/log/iptables.log

保存和关闭文件.

重新启动syslogd(如果你使用Debian/Ubuntu Linux):
# /etc/init.d/sysklogd restart

另外, 使用下面命令重新启动syslogd(如果你使用Red Hat/Cent OS/Fedora Core Linux):
# /etc/init.d/syslog restart

现在确认你的iptables使用了log-level 4参数(前面有一个log-prefix标志). 例如:
# DROP everything and Log it
iptables -A INPUT -j LOG –log-level 4
iptables -A INPUT -j DROP

举一个例子, 丢弃和记录所有来自IP地址65.55.11.2的连接信息到/var/log/iptables.log文件.
iptables -A INPUT -s 64.55.11.2 -m limit --limit 5/m --limit-burst 7 -j LOG –log-prefix ‘** HACKERS **’ --log-level 4
iptables -A INPUT -s 64.55.11.2 -j DROP

命令解释:

. - log-level 4: 记录的级别. 级别4为警告(warning).
. - log-prefix ‘*** TEXT ***’: 这里定义了在日志输出信息前加上TEXT前缀. TEXT信息最长可以是29个字符, 这样你就可以在记录文件中方便找到相关的信息.

现在你可以通过/var/log/iptables.log文件参考iptables的所有信息:
# tail -f /var/log/iptables.log