![为什么iptables的默认策略不起作用?](https://linux22.com/image/613011/%E4%B8%BA%E4%BB%80%E4%B9%88iptables%E7%9A%84%E9%BB%98%E8%AE%A4%E7%AD%96%E7%95%A5%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我写了一些规则来阻止我的私有网络中除路由器之外的其他计算机的所有传入数据包。这就是为什么我仍然希望我的计算机能够访问互联网。
这是我的规则:
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -m mac --mac-source xx:xx:Xx:xx:xx:xx -j ACCEPT
这是一条简单的规则。xx:xx:Xx:xx:xx:xx 是路由器的 mac 地址。我读过文档,所以我知道 iptables -P INPUT DROP 将丢弃所有与以下规则不匹配的数据包。事实上,这些规则不起作用。我刚访问了我的路由器,但无法访问互联网。这很难知道,因为我确保所有来自互联网的传入数据包都通过路由器的 mac 地址进入我的计算机。
我写了规则来解决这个问题:
iptables -F
iptables -P INPUT ACCEPT
iptables -A INPUT -m mac ! --mac-source xx:xx:xx:xx:Xx:xx -j DROP
可以,但是我更喜欢“拒绝所有,允许选定”的想法。它的配置和设计更简单。
我希望有人能告诉我为什么第一条规则不起作用。
答案1
谢谢你的好建议。我找到了问题的原因。这是我的所有规则:
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j LOG --log-prefix my_rule --log-level 6
-A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
-A INPUT -i lo -j ACCEPT
基本上,规则是正确的,只是我忘记了最后一个环回接口规则。当我上网时,一些 DNS 请求需要通过环回接口发送到我电脑上的 DNS 服务。如果我忘记了,我就无法解析任何域名。
首先,我的解决方案是添加一条规则,接受任何 MAC 地址为 00:00:00:00:00:00 的传入请求,因为我看到这是通过环回接口发送的所有请求的 MAC 地址,但 iptables 似乎不知道。没有带有 00:00:00:00:00:00 的数据包被接受。我阅读了 iptables 手册,但我仍然没有看到 MAC 地址为 00:00:00:00:00:00 的 iptables 行为描述。我猜 iptables 认为 00:00:00:00:00:00 意味着“没有 MAC 地址”
P/S:我正在学习英语。抱歉我的语法有误。