Contents

在 Openwrt 中,禁止某个设备访问外网/内网

最近刷了某个AP固件,自带了一些云管理功能,发现它会收集mac地址并上传到服务器以及通过访问一些网站来达到检测网络状态的目的,个人只想它安安静静的做个AP就好了,不需要这些乱七八糟的功能,所以就在openwrt主路由上通过防火墙规则的方式来禁止它访问外网。

最近几年已经很少写iptables 规则了,期间还查了各种资料,走了不少弯路,特此记录一下

先说结果

1
2
3
4
5
# 禁止AP访问内网
# iptables -I INPUT -m mac --mac-source xxx -j DROP
# 禁止AP访问外网
iptables -I FORWARD  -m mac --mac-source xxx -j DROP

将上面的规则中的 xxx 修改为要禁止设备的MAC地址,然后添加到 网络 -> 防火墙 -> 自定义规则 后点击重启防火墙即可

因为这个AP固件在长时间无法访问网关时,会在SSID后面加一个感叹号,所以我注释掉了内网访问,这真是一个神奇的功能!

iptables 知识扩展

无论是 iptables 还是 ufw 和 firewalld 实际上都一个面向用户的管理工具,它们实际上都是操作系统内核 netfilter 模块

iptables 四表五链

平时我们执行各种 iptables 命令,实际上都是在这四个表的五个链中进行CURD操作,我们先说说什么是四表五链:

  • filter 表:从名字就可以看出来,这个表是对数据包进行过滤操作,也就是如何处理一个数据包,是iptables中最常用的表,默认情况下我们都是操作这个表,filter 表包含五个链,分别是:

    • INPUT:控制进入主机的数据包。
    • OUTPUT:控制主机发送出去的数据包。
    • FORWARD:控制经过主机的数据包。
    • PREROUTING:控制进入主机的数据包之前的操作。
    • POSTROUTING:控制主机发送出去的数据包之后的操作。
  • nat 表:用于网络地址转换(NAT),即将数据包的源 IP 地址或目的 IP 地址进行转换,这个大家应该都懂。nat 表包含三个链,分别是:

    • PREROUTING:控制进入主机的数据包之前的操作。
    • OUTPUT:控制主机发送出去的数据包。
    • POSTROUTING:控制主机发送出去的数据包之后的操作。
  • managle 表:用于修改数据包的元数据,例如 TTL、TOS 等,mangle 表包含五个链,分别是:

    • INPUT:控制进入主机的数据包。
    • OUTPUT:控制主机发送出去的数据包。
    • FORWARD:控制经过主机的数据包。
    • PREROUTING:控制进入主机的数据包之前的操作。
    • POSTROUTING:控制主机发送出去的数据包之后的操作。
  • raw 表:用于在数据包进入 nat 表之前进行处理。raw 表包含两个链,分别是:

    • PREROUTING:控制进入主机的数据包之前的操作。
    • OUTPUT:控制主机发送出去的数据包。

表和链的区别

表和链是 iptables 的基本概念。表是按照对数据包的操作区分的,而链是按照不同的 Hook 点来区分的。表和链实际上是 netfilter 的两个维度。

知道了四表五链是不是对iptables命令更清晰了?又或者更迷糊了?哈哈

鸣谢

感谢以下网站的大力支持