在物联网开发场景中,安全方面除了对协议进行加密外,服务器另外一个可见的方向是容易出现端口暴露导致的一些攻击。
比如破解尝试,端口洪水攻击等。所以如果能在TCP层进行数据包过滤。那么效果也是相当好的:
- 不符合条件的根本不会流入应用,不会增加应用压力
- 对于不符合条件的数据包,在tcp层就进行拦截,提高了吞吐量
- 由于没有数据流入应用,所有没有响应数据,破解难度进一步增加
- 同样没有响应数据,所有洪水攻击如牛入泥海,攻击不可控就会使攻击者怀疑目标是否正确
基于以上目的,我查阅了相关资料发现根据TCP/IP协议, 在TCP协议头尾部定义了可选配置数据区; 此区域最大40字节; 故可利用此区域增加自定义的数据,然后在传输层进行解析识别; 达到身份验证的目的;
在linux 上可以 基于 netfilter进行实现. hook NF_IP_POST_ROUTING 和 NF_INET_PRE_ROUTING 两个节点, 分别在数据流出时附带数据, 数据包流入时检查自定义头。
然后就是写代码了,代码已经写好测试兵开源到github上了。
详情见:custom-tcp-filter
里面有打包好的插件可以直接试用。
代码主要用于公司当前物联网设备安全,进一步提高攻击和破解成本。