有些场景下,我们要能够识别出报文是主机主动发送出去的,还是主机被动接收的;
因此,需要给报文添加上一些状态;
防火墙可以根据数据包的状态,添加更加详细、有效的防火墙规则。
只关心用户层面,不考虑内核层。
在用户层面,定义了4种状态:
在Mac环境上使用PD创建两个虚拟机,系统是centos7.5
左边的虚拟机,用于安装vsftpd服务,IP是10.211.55.20
右侧的虚拟机,用户安装ftp命令客户端,IP是10.211.55.10
整个过程,会创建两个链接:
在10.211.55.20虚拟机上
yum install -y vsftpd
systemctl start vsftpd
systemctl status vsftpd
在10.211.55.10虚拟机上
yum install -y ftp
主要是根据:传输数据的链接是由客户端主动发起的,还是由服务器端主动发起的 来进行判断。
总之:
同样,先拿出数据包的流向图来
根据上面的图进行分析
首先,明确一点,在10.211.55.20上编写iptables规则
本次测试不涉及到数据包的转发,因此,不考虑FORWARD链
对入站和出站的数据包进行过滤,只有满足目标状态的数据包才能放行;
因此,选择的是filter表下的INPUT链和OUTPUT链
为了获取RELATED状态的ftp的数据包,需要加载特定的内核模块nf_conntrack_ftp。
nf_conntrack_ftp模块应该针对的是ftp服务的RELATED状态的获取;
应该不适用于其他服务的RELATED状态获取;
在centos7.5系统下,该内核模块没有默认加载,因此,需要提前加载。
登录到10.211.55.20服务器上
lsmod | grep nf_conntrack_ftp
登录到10.211.55.20服务器上
modprobe nf_conntrack_ftp
登录到10.211.55.20
modprobe -r nf_conntrack_ftp
登录到10.211.55.20虚拟机上
针对的是数据包入站的iptables规则
iptables -A INPUT -d 10.211.55.20 -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT -d 10.211.55.20 -p tcp -m state --state RELATED -j ACCEPT
iptables -A INPUT -d 10.211.55.20 -p tcp --dport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -d 10.211.55.20 -p tcp ! --dport 22 -m state --state ESTABLISHED -j ACCEPT
规则说明:
针对的是数据包出站的iptables规则
iptables -A OUTPUT -d 10.211.55.10 -p tcp -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -d 10.211.55.10 -p tcp -m state --state NEW -j ACCEPT
iptables -A OUTPUT -d 10.211.55.10 -p tcp -m state --state ESTABLISHED -j ACCEPT
查看当前filter表下的链情况
先查看filter表,初始状态情况
默认情况下,使用的是被动模式。
在客户端10.211.55.10上
在登录到服务器端,查看filter表下,数据包都匹配到了哪些规则,
可以先执行
iptables -Z
将统计数据清零。
这样,新的统计数据基本上都是受put 22.txt的影响产生的了
上传22.txt文件,整个过程消耗了14个数据包
在服务器端一侧,使用tcpdump命令,抓取响应的数据包
到目前为止,我们分析了
明白了一点:
如何在被动模式下,转换为主动模式呢?
其他,包的分析方式,跟上一样。
分析每个命令产生的影响,向将数据统计清零,再操作。