本文由CollinXia(https://blog.youkuaiyun.com/qq_42768012)原创,未经许可禁止转载
iptables是Linux环境下功能强大的防火墙规则管理工具,因为最近在做一个工控防火墙的项目,就想看用iptables能不能实现简单的应用层协议匹配,之前看到过很多讲Netfilter有一个Layer7模块可以实现应用层匹配的,但是Layer7实在是太老了,只支持2.x的内核版本,在新版内核下完全无法编译安装,之前反复尝试了很多次还是不能用。后来发现了这个叫做u32的模块,他的逻辑是并不管你什么层,只管一次拿32bits出来做匹配,那其实我们只需要把网络层和运输层的报头跳过去,剩下的不就是应用层了吗?
基于这种想法,这里以工控网络中最常见的Modbus协议为例,做了一次简单的应用层匹配
前期准备工作
首先一般情况下Ubuntu是自带iptables的,如果没有,可以自行安装
sudo apt install iptables
安装成功后输入iptables
会提示iptables v1.6.1: no command specified
(我虚拟机上自带的1.6.1版本)说明成功
理论基础
iptables一般情况下是不支持对数据包内部信息进行匹配的,只能根据诸如-saddr
、-dport
这类关键字来匹配源/目标端口或者地址
好在ipta