找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
glinet
查看: 163451|回复: 1086

[20240817支持ipv6]分享LEDE/OPENWRT用作AP【访客网络】【无线隔离】方法

 火... [复制链接]
发表于 2017-9-2 22:16 | 显示全部楼层 |阅读模式
本帖最后由 fengchen 于 2024-11-9 21:13 编辑


[20241109]
还是放在/etc/config/firewall调用吧,
参考https://www.right.com.cn/forum/thread-8305441-1-1.html,以及https://openwrt.org/docs/guide-u ... ewall_configuration
  1. config include
  2.     option  enabled         1
  3.     option  type            'script'
  4.     option  path            '/etc/firewall.user.sh'
  5.     option  fw4_compatible  1
复制代码





[20241019]
这三天又折腾了下,因为最近想起了arp攻击,就想着用这个防一下。虽然之前的访客也不能和内网通信,但不过滤他发arp包
修改的结果是可以防止访客的主机发送给其它主机的{网关ip用自己mac}的arp包,但是不能防止给网关的{ip是别的主机用访客自己的mac}的arp包,还有最重要的是RA给他禁止了(当然dhcp server之前也是不可能的,这个下发网关最最最重要)
似乎是改了个寂寞,因为之前限定了访客只能跟网关的mac通信,但是对ipv6的ndp的理解更深刻了
这个帖子可能要终结了,想玩vlan交换机了,另一个方向玩耍

firewall.user.sh

  1. GATEWAY_IP=192.168.0.1
  2. GATEWAY_MAC=11:22:33:03:44:52
  3. GATEWAY_IPV6_SUFFIX="::ffff:33ff:fe03:4452"

  4. GATEWAY_MULTICAST_MAC="33:33:ff:${GATEWAY_MAC: -8}"
  5. MATCH_GATEWAY_IPV6_SUFFIX="& ::ffff:ffff:ffff:ffff == $GATEWAY_IPV6_SUFFIX"
  6. NOT_GATEWAY_IPV6_SUFFIX="& ::ffff:ffff:ffff:ffff != $GATEWAY_IPV6_SUFFIX"
  7. GATEWAY_MULTICAST_IPV6="ff02::1:ff${GATEWAY_IPV6_SUFFIX: -7}"


  8. INTERFACE=phy0-ap0


  9. nft add table bridge filter
  10. nft flush table bridge filter
  11. #nft list table bridge filter

  12. # FORWARD 链
  13. nft add chain bridge filter forward { type filter hook forward priority 0 \; }
  14. nft add rule bridge filter forward iif $INTERFACE ether daddr ff:ff:ff:ff:ff:ff  udp  dport 67 accept
  15. nft add rule bridge filter forward iif $INTERFACE arp operation request \
  16.                                                                      arp saddr ip != $GATEWAY_IP \
  17.                                                                      arp daddr ip $GATEWAY_IP \
  18.                                                                      arp daddr ether { $GATEWAY_MAC , 00:00:00:00:00:00 } accept
  19. nft add rule bridge filter forward iif $INTERFACE arp operation request drop
  20. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-router-solicit accept
  21. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-router-advert drop
  22. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-neighbor-solicit \
  23.                                                                      ip6 saddr $NOT_GATEWAY_IPV6_SUFFIX \
  24.                                                                      ip6 daddr $MATCH_GATEWAY_IPV6_SUFFIX \
  25.                                                                      ether daddr $GATEWAY_MAC accept
  26. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-neighbor-solicit \
  27.                                                                      ip6 saddr $NOT_GATEWAY_IPV6_SUFFIX \
  28.                                                                      ip6 daddr $GATEWAY_MULTICAST_IPV6 \
  29.                                                                      ether daddr $GATEWAY_MULTICAST_MAC accept
  30. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-neighbor-solicit drop

  31. nft add rule bridge filter forward iif $INTERFACE ether daddr != $GATEWAY_MAC drop

  32. nft add rule bridge filter forward iif $INTERFACE ip  daddr $GATEWAY_IP  udp  dport 53 accept
  33. nft add rule bridge filter forward iif $INTERFACE ip6 daddr $MATCH_GATEWAY_IPV6_SUFFIX udp dport 53 accept

  34. nft add rule bridge filter forward iif $INTERFACE ip daddr $GATEWAY_IP drop
  35. nft add rule bridge filter forward iif $INTERFACE icmpv6 type nd-neighbor-advert accept
  36. nft add rule bridge filter forward iif $INTERFACE ip6 daddr $MATCH_GATEWAY_IPV6_SUFFIX drop

  37. nft add rule bridge filter forward oif $INTERFACE ether saddr != $GATEWAY_MAC drop

  38. # OUTPUT 链
  39. nft add chain bridge filter output { type filter hook output priority 0 \; }
  40. nft add rule bridge filter output oif $INTERFACE  ether type arp drop
  41. nft add rule bridge filter output oif $INTERFACE  ether type ip drop
  42. nft add rule bridge filter output oif $INTERFACE  ether type ip6 drop

  43. # INPUT 链
  44. nft add chain bridge filter input { type filter hook input priority 0 \; }
  45. nft add rule bridge filter input iif $INTERFACE ether type arp drop
  46. nft add rule bridge filter input iif $INTERFACE ether type ip  drop
  47. nft add rule bridge filter input iif $INTERFACE ether type ip6  drop
复制代码





[20240817支持ipv6]

弄好ebtables支持ipv6隔离的规则已经有一段时间了,有点懒得发,今天闲得没事,发出来吧
这里ipv6网关是通过默认路由获取的,如果觉得不保险的话可以手动指定,因为网关的后64位一般是EUI-64生成的并且不会变
使用gpt辅助做了ebtables转换成nft的规则,看着总是不太完美。如果匹配ipv6后64位的话得这样:
  1. nft add rule bridge filter forward iif $INTERFACE ip6 "daddr & ::ffff:ffff:ffff:ffff == ::1:2:3:4"  accept
复制代码
-
  1. GATEWAY_IP=$(uci get network.lan.gateway)
  2. GATEWAY_MAC=$(ip neigh show |grep "$GATEWAY_IP " |awk '{print $5}' )
  3. GATEWAY_IPV6=$(ip -6 route | awk '/^default/ {print $5}'  | head -n1)

  4. INTERFACE=phy1-ap0


  5. nft add table bridge filter
  6. nft flush table bridge filter


  7. # FORWARD 链
  8. nft add chain bridge filter forward { type filter hook forward priority 0 \; }
  9. nft add rule bridge filter forward iif $INTERFACE ether daddr ff:ff:ff:ff:ff:ff  udp  dport 67 accept
  10. nft add rule bridge filter forward iif $INTERFACE ether type arp arp operation request accept
  11. nft add rule bridge filter forward iif $INTERFACE ip6 nexthdr icmpv6 accept

  12. nft add rule bridge filter forward iif $INTERFACE ether daddr != $GATEWAY_MAC drop

  13. nft add rule bridge filter forward iif $INTERFACE ip  daddr $GATEWAY_IP  udp  dport 53 accept
  14. nft add rule bridge filter forward iif $INTERFACE ip6 daddr $GATEWAY_IPV6 udp dport 53 accept

  15. nft add rule bridge filter forward iif $INTERFACE ip daddr $GATEWAY_IP drop
  16. nft add rule bridge filter forward iif $INTERFACE ip6 daddr $GATEWAY_IPV6 drop

  17. nft add rule bridge filter forward oif $INTERFACE ether saddr != $GATEWAY_MAC drop

  18. # OUTPUT 链
  19. nft add chain bridge filter output { type filter hook output priority 0 \; }
  20. nft add rule bridge filter output oif $INTERFACE  ether type  arp drop
  21. nft add rule bridge filter output oif $INTERFACE  ether type ip drop
  22. nft add rule bridge filter output oif $INTERFACE  ether type ip6 drop

  23. # INPUT 链
  24. nft add chain bridge filter input { type filter hook input priority 0 \; }
  25. nft add rule bridge filter input iif $INTERFACE ether type ip  drop
  26. nft add rule bridge filter input iif $INTERFACE ether type ip6  drop
复制代码

以后都是nft了,这下可以接着玩下去了


---------------------------------------------------------------------------------------------------------------------------------------------------------
20240427更新~
arp命令是个奇怪的存在
改用ip命令获取网关mac
  1. GATEWAY_MAC=$(ip neigh show |grep "$GATEWAY_IP " |awk '{print $5}' )
复制代码
游客,如果您要查看本帖隐藏内容请回复

=============================================================================
20231230更新~

2203之后使用了nftables,需安装向下兼容的包才能继续使用原来的规则脚本。共需安装如下几个包
ebtables-legacy  ebtables-legacy-utils   ebtables-nft         kmod-ebtables         kmod-ebtables-ipv4     kmod-ebtables-ipv6


由于网页上firewall里面没有自定义脚本的地方了,需要自己添加开机启动
自启动添加
  1. sh /etc/dosomething.sh &
复制代码
dosomething.sh内容如下
放了30s延时,文件放在/etc文件夹,备份时设置备份整个/etc,这样方便备份
  1. sleep 30
  2. sh /etc/firewall.user.sh
复制代码
firewall.user.sh也放在/etc,

firewall.user.sh和以前大致相同,无线网卡名和以前不同了,使用phyX-apY格式

  1. GATEWAY_IP=192.168.50.1
  2. GATEWAY_MAC=$(arp |grep "$GATEWAY_IP " |awk '{print $4}')
  3. SUBNET=192.168.50.0/24
  4. INTERFACE=phy1-ap0
复制代码




++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20220329
最新版本openwrt在/etc/sysctl.conf关闭ipv6似乎不行了,就想到直接用ebtables的规则关闭ipv6
使用ebtables规则刚好只关闭访客网络的ipv6,其它网络正常使用ipv6
游客,如果您要查看本帖隐藏内容请回复

新的规则如下
  1. ##########################################################
  2. GATEWAY_IP=192.168.5.1
  3. GATEWAY_MAC=12:23:34:45:56:67
  4. SUBNET=192.168.5.0/24
  5. INTERFACE=wlan1

  6. ##########################################################
  7. ebtables -t filter -F FORWARD
  8. ebtables -t filter -F INPUT
  9. ebtables -t filter -F OUTPUT

  10. #########################################################
  11. ebtables -t filter -A FORWARD -i $INTERFACE -p IPV6 -j DROP
  12. ebtables -t filter -A FORWARD -o $INTERFACE -p IPV6 -j DROP
  13. ebtables -t filter -A OUTPUT -o $INTERFACE -p IPV6 -j DROP
  14. ebtables -t filter -A INPUT -i $INTERFACE -p IPV6 -j DROP

  15. #########################################################
  16. ebtables -t filter -A FORWARD -i $INTERFACE -p IPV4 --ip-protocol udp  --ip-destination $GATEWAY_IP --ip-destination-port 53 -j ACCEPT
  17. ebtables -t filter -A FORWARD -i $INTERFACE -p IPV4  --ip-destination $GATEWAY_IP -j DROP

  18. ebtables -t filter -A FORWARD -i $INTERFACE -d $GATEWAY_MAC  -j ACCEPT
  19. ebtables -t filter -A FORWARD -i $INTERFACE -p IPV4 --ip-destination $SUBNET -j DROP

  20. ebtables -t filter -A FORWARD -o $INTERFACE -s ! $GATEWAY_MAC -j DROP

  21. #########################################################
  22. ebtables -t filter -A OUTPUT -o $INTERFACE -p ARP -j DROP
  23. ebtables -t filter -A OUTPUT -o $INTERFACE -p IPV4 -j DROP

  24. #########################################################
  25. ebtables -t filter -A INPUT -i $INTERFACE -p IPV4 -j DROP
复制代码
刚开始设置完规则,ipv6的FORWARD规则没有生效,不知道是因为什么,后来重启多次后莫明其妙地好了,
如果有问题大家一起讨论

===================================================================
2018.08.01
添加带独立交换芯片更改switch设置使用五口都是LAN的方法(即ap模式五口都可用)

有的第一行和第二行可能反过来

******************************************************************************************
2018.01.11

如果双频信号都开启无线隔离,可以如下设置firewall
游客,如果您要查看本帖隐藏内容请回复

===========================================================================================
2017.10.10
家里的无线网络连接的客户端比较多,经常有亲戚邻居的手机连接,而他们的手机上还经常会有“万能钥匙”这些软件。
被蹭网倒是其次,关键是连接wifi的手机经常使用支付宝、微信、网银等。为了安全给访客网络开启无线隔离,也就是连接访客网络的客户端间网络是不通的,访客网络和其它网络间也是不通的,只能访问外网。
而openwrt在作为ap时,官方没有可以无线隔离的方法,我用ebtables工具通过防火墙开启无线隔离。
接上次更新,防火墙custom rules支持shell,就设置了几个变量,方便修改,如下:
游客,如果您要查看本帖隐藏内容请回复


=============================================================
2017.09.02
1。LEDE无线路由器修改LAN ip为和网关同一网段,LAN用网线连接网关。禁用无线路由器LAN的DHCP服务器。
无线隔离方法是使用ebtables配置防火墙,过滤br-lan桥上的数据包。ebtables与iptables不同处是专门过滤网桥的数据包。
先安装ebtables-utils,kmod-ebtables-ipv4,在线安装就可以。
2。Network -> Wireless -> Add添加新的无线网络,无线网络配置不再详说,Mode选AP,Network选LAN,重点记住配置页面上的
Wireless Network: Master "xxxx" (wlan0-1)括号里的网卡名称,也可以用iwinfo查看。
不新建无线网络也可以用原来的。
3。找到网关(如192.168.1.1),网关MAC(如aa:bb:cc:dd:ee:ff)
Network -> Firewall -> Custom Rules,添加如下规则
游客,如果您要查看本帖隐藏内容请回复
4。保存,重启。

5。说明:
我的AP没启用IPV6,关闭IPV6方法是在/etc/sysctl.conf添加如下一行
  1. net.ipv6.conf.all.disable_ipv6=1
复制代码
这个隔离方法是从石像鬼的无线隔离启发得来的,试了今天一天才弄好,有什么可以改进的地方,坛友们提出来,大家共同进步








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 4恩山币 +4 收起 理由
Period + 1 率全体恩山路由党以及党魁向你学习!
sorrypqa + 1 强大的恩山!(以下重复1万次)
AndyX + 1 今天天气不错,适合泡妞。
right_123456 + 1 我来恩山就是为了撩你!

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2017-10-15 23:06 | 显示全部楼层
本帖最后由 fengchen 于 2017-10-15 23:12 编辑
crazy5 发表于 2017-10-15 22:52
ebtables -t filter -A FORWARD -i wlan0-1 -p IPV4 --ip-protocol udp  --ip-destination 192.168.1.1 --i ...

防火墙过滤算法是从上往下逐条比对,直到有匹配的执行完规则就返回,剩下的规则忽略
所以有规则部分重复并不是矛盾,也不是多余

楼上再思考下路由过程吧,第二条是访问网关的,第三条包含访问网关和经网关转发的两种

点评

原来还有这等配置,不看不知道呀。。  详情 回复 发表于 2018-4-3 13:33
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-2 22:41 | 显示全部楼层
沙发。。。。。。。。。。。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-2 23:56 | 显示全部楼层
这个必须顶起来,思考了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-3 08:12 | 显示全部楼层
无线隔离是什么意思
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-3 08:55 | 显示全部楼层
思考一下楼主的方法
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-3 10:18 | 显示全部楼层
尝试一下。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-3 13:36 | 显示全部楼层
谢谢楼主的无私奉献!!!!!!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-4 21:17 | 显示全部楼层
这个很实用,感谢分享
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-4 22:40 | 显示全部楼层
思考一下,
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-9-5 13:44 | 显示全部楼层
路过,思考下
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 22:29 | 显示全部楼层
让更多人看到,人工置顶
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-10-10 22:38 | 显示全部楼层
哦。。。。。。。。。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-10-10 23:25 来自手机 | 显示全部楼层
华硕网件的是有这个,没用过
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-10-11 02:17 | 显示全部楼层
什么情况,好先进的方式
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-10-11 13:01 | 显示全部楼层
ap isolaton
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-5-24 18:00

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表