iptables 之 state模块(ftp服务练习)

iptables-state-ftp介绍

原视频地址
iptables-state-ftp

1、state扩展模块是用来做什么的?

有些场景下,我们要能够识别出报文是主机主动发送出去的,还是主机被动接收的;

因此,需要给报文添加上一些状态;

防火墙可以根据数据包的状态,添加更加详细、有效的防火墙规则。

2、state定义了数据包哪些状态?

只关心用户层面,不考虑内核层。

在用户层面,定义了4种状态:

  • NEW 状态
    • 此数据包表明,该连接是新的连接;
    • 可能是第一次建立连接
    • 也可能是重新进行连接
    • 或者链接重定向
  • ESTABLISHED 状态
    • 此数据包是某个已经建立起链接的数据包
    • 就是说,链接已经建立起来了,除了第1个数据包外,后续发送的数据包的状态都是 ESTABLISHED
  • RELATED 状态
    • 举个例子说明:
      • FTP有两个链接:一个是传输控制命令的链接,一个是传输数据的链接。
    • 先建立起的链接是传输控制命令的链接,
    • 然后,由于链接里的某个命令,需要创建一个新的链接,
    • 那么这个新的链接里的第1个数据包的状态就是RELATED状态
    • 新连接后续的数据包的状态也是 ESTABLISHED 状态
  • INVALID 状态
    • 数据已经破损,
    • 此数据包不属于某个链接
    • 这些数据包一般被DROP掉了。

3、使用FTP来练习state扩展模块

3.1、测试环境说明

在这里插入图片描述

在Mac环境上使用PD创建两个虚拟机,系统是centos7.5

左边的虚拟机,用于安装vsftpd服务,IP是10.211.55.20

右侧的虚拟机,用户安装ftp命令客户端,IP是10.211.55.10

整个过程,会创建两个链接:

  • 一个链接专门用于传输命令
  • 一个链接专门用于传输数据(比方说,传输具体的文件)

3.2、安装ftp服务器端(即,vsftpd服务)

在10.211.55.20虚拟机上

3.2.1、安装vsftpd服务

yum install -y vsftpd

3.2.2、修改配置文件,使得远程可以通过root命令进行登录

3.2.2.1、修改/etc/vsftpd/vsftpd.conf

在这里插入图片描述

3.2.2.2、修改/etc/vsftpd/ftpusers

在这里插入图片描述

3.2.3、启动vsftpd服务

systemctl start vsftpd
systemctl status vsftpd

3.3、安装ftp客户端(即,ftp命令)

在10.211.55.10虚拟机上

3.3.1、安装ftp客户端命令

yum install -y ftp

3.3.2、测试一下

在这里插入图片描述

3.4、介绍一下ftp服务的两种传输模型

3.4.1、ftp服务的两种模型

  • 被动模式
  • 主动模式

3.4.2、如何区分被动模式和主动模式呢?

主要是根据:传输数据的链接是由客户端主动发起的,还是由服务器端主动发起的 来进行判断。

  • 被动模式下
    • 客户端发起PASV命令;
    • 服务器端会将自己专门用于传输数据的端口发送给客户端
    • 客户端主动发起新的链接,此链接专门用来传输数据;如,传输文件
    • 一般情况下使用被动模式多些
  • 主动模式
    • 客户端发起PORT命令;
    • 通过PORT命令告诉服务器端,客户端传输数据的端口是多少
    • 由服务器端主动发起新的链接,此链接专门用来传输数据;如,传输文件
    • 此种方式不安全,因为客户端一般不受防火墙控制,此端口不安全

总之:

  • 由客户端主动发起的新的链接是被动模式
  • 由服务器端主动发起的新的链接是主动模式

3.4.3、被动模式PASV传输流程图

在这里插入图片描述

3.4.4、主动模式PORT传输流程图

在这里插入图片描述

3.5、如何编写iptables命令呢?

同样,先拿出数据包的流向图来

在这里插入图片描述

根据上面的图进行分析

首先,明确一点,在10.211.55.20上编写iptables规则

本次测试不涉及到数据包的转发,因此,不考虑FORWARD链

对入站和出站的数据包进行过滤,只有满足目标状态的数据包才能放行;

因此,选择的是filter表下的INPUT链和OUTPUT链

3.6、如何抓取到RELATED状态的数据包呢?(需要加载能获取RELATED状态的内核模块)

3.6.1、为什么要加载nf_conntrack_ftp内核模块?

为了获取RELATED状态的ftp的数据包,需要加载特定的内核模块nf_conntrack_ftp。

nf_conntrack_ftp模块应该针对的是ftp服务的RELATED状态的获取;

应该不适用于其他服务的RELATED状态获取;

在centos7.5系统下,该内核模块没有默认加载,因此,需要提前加载。

3.6.2、查看是否存在nf_conntrack_ftp

登录到10.211.55.20服务器上

lsmod | grep nf_conntrack_ftp

3.6.3、加载nf_conntrack_ftp内核模块

登录到10.211.55.20服务器上

modprobe nf_conntrack_ftp

3.6.4、如何移除nf_conntrack_ftp模块呢?

登录到10.211.55.20

modprobe -r nf_conntrack_ftp

在这里插入图片描述

3.7、开始编写iptables规则

登录到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

规则说明:

  • 第1条规则:
    • 针对的是客户端向服务器发起远程登录时,
    • 服务器端接收到的第1个数据包,此时的数据包状态定义为NEW
  • 第2条规则:
    • 针对的是,被动模式下,由客户端主动向服务器端发起的新的链接,此链接专门用于传输数据;
    • 由于此链接是在第一个链接的影响下产生的,因此,创建新的链接时的第一个数据包的状态为RELATED
  • 第3条规则:
    • 第1个链接里第1个数据包的状态为NEW,该连接里后续数据包的状态就是ESTABLISHED;
    • 第1个链接,一般称为控制链接,专门用来传输FTP命令的;如PASV,PORT,USER
  • 第4条规则:
    • 在被动模式下,客户端给服务器端反馈的ACK,SYN,FIN类型的数据包

针对的是服务器端数据包出站的防火墙规则

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

规则说明:

  • 第1条规则:
    • 针对的是主动模式,在建立数据链接时,服务器端传输给客户端的第1个数据包,此数据包的状态被称为RELATED
    • 防火墙的规则是:匹配目的地址是客户端的IP,tcp协议,状态是RELATED,满足这些条件的数据包,就可以通过,否则拒绝通过
  • 第2条规则:
    • 该规则其实并不起作用,可以删除。
    • 针对的是服务器端向客户端主动发起新的链接时,传输的第1个数据包。
    • 实际情况是,服务器端不会主动向客户端发起新的链接
  • 第3条规则:
    • 针对的是服务器端向客户端传输数据包,
    • 此类数据包的状态被称为ESTABLISHED

查看当前filter表下的链情况
在这里插入图片描述

3.8、测试上传文件是否能获取到数据包的状态

先查看filter表,初始状态情况

在这里插入图片描述

3.8.1、客户端远程登录时iptables规则匹配情况

在这里插入图片描述

接下来,登录到服务器端,再次查看一下防火墙规则情况

在这里插入图片描述

3.8.2、在服务器端10.211.55.20上使用tcpdump命令抓取客户端远程登录服务器端时发送的数据包,进行分析一下

在这里插入图片描述

3.8.3、将ftp-login.icmp使用Wireshark软件进行分析

在这里插入图片描述

从这里可以看出来,一共抓取了15个数据包

序号是1的数据包的状态为 new

第1个数据包中的S Y N 表示同步信号标志,

其实,就是客户端将自己的一些信息告诉服务器端,让服务器端知道客户端的基本情况,如客户端的端口,窗口大小等等

第2个数据包的S Y N,也是表示同步,将服务器端的一些信息告诉客户端,如服务器端最终能接收的数据量大小等等。

第2个数据包中的A C K ,表示服务器端已经接收到客户端的同步数据,给客户端的反馈。

第3个数据包中的A C K,表示客户端已经收到服务器端的同步信息,是对服务器端信息的确认。

前三个数据包是TCP的三次握手协议,其实,就是双方将自己的能力告诉对方,不要越界。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.8.4、被动模式下

默认情况下,使用的是被动模式。

在客户端10.211.55.10上
在这里插入图片描述

在登录到服务器端,查看filter表下,数据包都匹配到了哪些规则,
可以先执行

iptables -Z

将统计数据清零。

这样,新的统计数据基本上都是受put 22.txt的影响产生的了

在这里插入图片描述

上传22.txt文件,整个过程消耗了14个数据包

在服务器端一侧,使用tcpdump命令,抓取响应的数据包
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到目前为止,我们分析了

  • 远程登录命令时,哪些数据包匹配到了哪些规则
  • 上传文件时,哪些数据包匹配到了哪些规则,

明白了一点:

  • 第1个链接里,第一个数据包的状态为NEW, 该连接里后续的数据包状态为ESTABLISHED
  • 第2个链接里(由第1个链接影响产生),第一个数据包的状态为RELATED,该连接后续的数据包状态也为ESTABLISHED

3.8.5、主动模式下

如何在被动模式下,转换为主动模式呢?

在这里插入图片描述

在这里插入图片描述

其他,包的分析方式,跟上一样。

分析每个命令产生的影响,向将数据统计清零,再操作。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值