找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1059|回复: 8

openwrt基于nftables开启ARP防火墙

[复制链接]
发表于 2023-10-29 15:55 | 显示全部楼层 |阅读模式
本帖最后由 null666666 于 2023-10-31 23:27 编辑

事情是这样的,我用路由器中继一个上级wifi上网,而这个wifi很混乱,各种攻击,之前用arptables 这个老的防火墙效果挺不错,
但是arptables没有日志功能。最近更新了openwrt 23.05.0,想整个重定向,发现openwrt现在主推nftables这个新的强大的防火墙。





nftables自带了arp过滤功能,但是这个网上资料太少了,我就对着机器翻译过来的wiki琢磨了一下,发现语法也没多难,只是有点
繁杂,功能太多了,



下面是我的脚本代码,并且用我粗浅的表达能力做了简单的注释,这并不是nftables的教学,只是一个nftables的示例
主打一个改改就能用,给同样需要的人一个参考,抛砖引玉。原理就是简单粗暴的用nftables保证主机只和网关arp来往!

  1. #!/bin/sh

  2. dev='phy1-sta0'
  3. # 这句是把设备名称也就是nftables要关注那个网卡的arp写死,我的环境是中继的WiFi,不用担心br-lan有人捣乱,只关注上级WiFi局域网内有人arp攻击;
  4. wgw_ip=$(route | grep -w 'default' | awk '{print $2}')
  5. # 这个是获取phy1-sta0所在网段的网关IP地址,如果获取有错,可以根据实际情况调整命令和方法;
  6. wgw_mac=$(cat /proc/net/arp | grep -w ${wgw_ip} | awk '{print $4}')
  7. # 这句是获取网关的mac地址;

  8. nft delete table arp myarp 2>/dev/null
  9. # 正片开始,这句是把之前可能已经设置好的arp表,链,规则全部删除了,如果不删的话,你继续添加不会覆盖相同的规则,会建立一条重复的规则,
  10. # 如果不存在表,会回显一条错误提醒,我用2>/dev/null给屏蔽了;
  11. nft add table arp myarp
  12. # 这句是建立一个属于arp簇的表myarp,这个簇我的粗暴理解是表的属性分类,有ip,ipv6,inet,arp,nat等;
  13. nft 'add chain arp myarp ipt { type filter hook input priority 0 ; policy accept; }'
  14. # 给表myarp添加一个ipt链,链的类型是filter,挂到input勾子上,优先级是0(默认优先级吧,数字越小优先级越大,可以是负数),默认动作是accept,
  15. # 这里默认动作如果设置成drop,会把所有接口的arp进入流量给禁止了,要注意哈;
  16. nft 'add chain arp myarp opt { type filter hook output priority 0 ; policy accept; }'
  17. # 和上一条类似,这句是给myarp表添加一天output链,我的简单理解是nftables的基本链 这个hook勾子最重要,决定了链的最终属性;
  18. nft add rule arp myarp ipt iifname ${dev} arp saddr ip ${wgw_ip} arp saddr ether ${wgw_mac} counter accept\;
  19. # 这句是关键了,给myarp表的ipt链添加关键规则,放行phy1-sta0的网关,iifname ${dev},规定了接口是phy1-sta0,不影响其他接口的arp,
  20. # arp saddr ip ${wgw_ip}规定了进入的ip必须是网关ip,arp saddr ether ${wgw_mac}规定了mac必须是你指定的网关mac,这样可以阻止中间人
  21. # 攻击,counter accept是两个动作,counter是计数,你可以大致知道有多少流量,适配了这条规则;
  22. nft add rule arp myarp ipt iifname "${dev}" counter drop\;
  23. # 这句是把从phy1-sta0 进入的arp流量drop掉,这个和iptables类似,也是逐条匹配规则的,如果上一条没有匹配会进入下一条,所以,这里
  24. # 把不是网关的arp全部丢弃,保证只和网关通信;
  25. nft add rule arp myarp opt oifname ${dev} arp daddr ip ${wgw_ip} arp daddr ether ${wgw_mac} counter accept\;
  26. # 这条和上一条类似,是保证phy1-sta0的出口arp流量只和网关通信的,我不知道这么设置有没有意义,但是这么设置以后,arp缓存里面的全0mac没有了,
  27. # 大概能够防御有人 网关arp泛洪;
  28. # nft add rule arp myarp opt oifname "${dev}" log\; 这句我给注释了,作用是在丢弃arp包之前写入系统日志,这样就可以在系统日志看到详情,
  29. # 但无奈这玩意儿太详细了,开启后整个系统日志全是这个,调试的时候开开可以,其他时候还是关了吧,太乱了。
  30. nft add rule arp myarp opt oifname "${dev}" counter drop\;

  31. echo
  32. echo "Arptables initialization works done..."
  33. echo
  34. exit 0
复制代码

脚本运行以后,在终端用 nft -an list table arp myarp 命令大概可以看到以下效果:




然后用其他同样连接上层wifi的设备,搞一些arping,ping之类的动作,可以看到tcpdump抓包在跑,但是arp缓存纹丝不动,
并且已经drop了很多条!








那句,丢弃包之前的写入日志的功能,开启后大概如下:




然后在终端用logread命令查看,大致可以看到以下内容:



最后,不建议把脚本放入 /etc/rc.local 里面开机运行,一旦出错,设备可能无法进入!
如果在终端运行脚本后出现连不上设备等问题,拔掉电源再插上重启就可以了,因为
openwrt 重启以后nftables 就恢复到默认状态了!
好了,祝好运,另外,折腾有风险!谨慎尝试!



本帖子中包含更多资源

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

×
发表于 2023-10-29 16:44 | 显示全部楼层
不错!这样不解恨,找出哪些王八蛋在攻击,反向干他!

点评

哈哈哈,看来又一位苦arp攻击的仁兄!  详情 回复 发表于 2023-10-29 16:56
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-29 16:56 | 显示全部楼层
wulishui 发表于 2023-10-29 16:44
不错!这样不解恨,找出哪些王八蛋在攻击,反向干他!

哈哈哈,看来又一位苦arp攻击的仁兄!
回复 支持 反对

使用道具 举报

发表于 2023-11-1 17:33 | 显示全部楼层
支持思考!
回复 支持 反对

使用道具 举报

发表于 2023-11-2 13:19 | 显示全部楼层
回帖思考......
回复 支持 反对

使用道具 举报

发表于 2023-11-2 15:43 | 显示全部楼层
刚好进来思考nftables

点评

我也是刚在学nftables,现学现卖  详情 回复 发表于 2023-11-3 19:22
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 19:22 | 显示全部楼层
xkf62635. 发表于 2023-11-2 15:43
刚好进来思考nftables

我也是刚在学nftables,现学现卖
回复 支持 反对

使用道具 举报

发表于 2023-11-12 07:15 | 显示全部楼层
kkyc看看隐藏
回复 支持 反对

使用道具 举报

发表于 2024-2-28 17:32 | 显示全部楼层
楼主很棒
正好最近在摸索nftables,然后今天又发现有人ARP泛洪,一秒钟800多个arp
学学怎么处理,感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

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

GMT+8, 2024-6-30 08:59

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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