标题说的 “神” 一样,肯定是我夸张了,但是说它像神一样,主要体现在两个方面:
强大: 理论上能够匹配三层网络以上的任何数据包。复杂: 需要对 OSI 七层网络模型和各类型协议有基础了解。事情是这样的,在我某台服务器上跑了某个 TCP 服务,这个端口总是受到某个 TCP 包的恶意干扰,所以抓包分析了一下,发现这些恶意包有个明显特征是 TCP 的首包 syn 包,window 值等于 35688,很显然我也不知道这个数值有什么特别含意,可能是神一样的数字。
因为我的服务是动态开放式的,所以肯定不能玩白名单那一套规则,维护成本也高 (我这么懒的人 ),所以想法很简单,把所有 syn 包 window=35688 的包给 tcp-reset 掉就行;说干就干逛了一圈,发现 iptables 在新版内核中的 tcp-window 匹配根本不能用,于是和 chatGPTbattle 半天,发现了一个这个 “神” 东西。
先上两张图震住,怕大家跑了,本帖不会过多解释 u32 的功能 (感兴趣请看本文最后的参考),这里仅作使用记录。
最后我的规则如下:
iptables -A INPUT -p tcp –syn -m u32 –u32 “0>>22&0x3C@12&0xFFFF=0x8b68” -j REJECT –reject-with tcp-reset
# 不要急,一点点解析
iptables -A INPUT -p tcp –syn -m u32 –u32 # 很好理解,匹配所有TCP首包,并且使用 u32 开始匹配当然这里也可以指定 –dport 加上指定端口,我没加。
# “0>>22&0x3C@12&0xFFFF=0x8b68” 这段是匹配语法,最重要的一点,主要分三段,拆开讲。
# —
# 0>>22&0x3C@ 从IP头中匹配出整个IP头长度,并且跳过这部分。
# 12&0xFFFF 表示从TCP报头开始像后偏移12个字节,然后取出后面的4个字节数,最后与 0xFFFF 进行按位与计算。
# =0x8b68 表示上一步的计算结果和这个值(端口35688的十六进制)相同,即:匹配成功。
-j REJECT –reject-with tcp-reset 拒绝包,并且响应一个 reset包,可表示此端口无监听服务。
所以呀,这东西虽然强大但是也的确复杂,需要对 OSI 模型有基础了解,并且如果没一丝毅力的话 (反正我是错了半天,也不知哪里有问题,只能疯狂试错),否则玩不动,希望对来者有所帮助。
参考
https://imlonghao.com/30.htmlhttp://www.stearns.org/doc/iptables-u32.current.html 还有伟大的 chatGPT© 版权声明
1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 1311978956@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
THE END
暂无评论内容