实验目标

使用iptables命令配置IPTables防火墙,使FTP服务器可用。

注:这里主要针对FTP的被动访问进行实验,主动访问只是数据端口更改为20,本实验主要是通过浏览器来访问,固采用被动访问方式;如若更改为主动访问,可选用其它FTP实验机,如CuteFTP

实验环境

目标机:debian10(GNU/Linux)、安装了iptables

实验机:deepin15(GNU/Linux)、chrome浏览器

实验原理

IPtables是复杂的,它集成到linux内核中。用户通过IPtables,可以对进出你的计算机的数据包进行过滤。通过IPtables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。

Iptables的所有命令都是以IPtables开头,其总体的命令结构如下:

IPtables [-t table] command [match] [target/jump]

  • -t table

    表示当前的策略属于哪个table。一共有三种table:mangle、filter和nat。由于IPtables的主要工作是过滤进出本地网络适配器的数据包,因此,如果一条策略是关于过滤的,那么在缺省情况下,“-t filter”是可以省略的,而mangle和nat是一定要注明的,在实际的应用环境当中,mangle几乎是用不到。

    这些表如下:

    • filter

      这是默认的表,包含了内建的链INPUT( 处理进入的包)、FORWORD(处理通过的包)和OUTPUT(处理本地生成的包)。

    • nat

      这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。

    • mangle

      这个表用来对指定的包进行修改。它有两个内建规则:

    • PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。

  • command

    指定IPtables 对提交的规则要做什么样的操作

    下面是IPtables可用的command:

    • 命令 -A,--append

      范例 IPtables –A INPUT……

      添加规则。

    • 命令 -D,--delete

      范例 IPtables –D INPUT 8,IPtables –D FORWARD –p tcp –s 192.168.1.12 –j ACCEPT

      从所选的链中删除规则,有两种方法:一种是以编号来表示被删除的规则,另一种是以整条的规则来匹配策略。

    • 命令 -R,--replace

      范例 IPtables –R FORWARD 2 –p tcp –s 192.168.1.0 –j ACCEPT

      替换相应位置的策略,这时有一点需要注意,如果源或目的地址是以名字而不是以IP地址表示的,如果解析出的IP地址多于一个,那么这条命令是失效的。

    • 命令 -I,--insert

      范例 IPtables –I FORWARD 2 –p tcp –s 192.168.1.0 –j ACCEPT

      这个命令和上面一个命令只差一个参数,而不同之处在于这个命令是在相应的位置前面插入一条命令,而不是替换。

    • 命令 -L,--list

      范例 IPtables –t nat –L,IPtables –L INPUT

      列出当前内存空间的策略。

    • 命令 -F,flush

      范例 IPtables –F,IPtables –t nat –F

      清空所选的链的配置规则。

    • 命令 -N,--new-chain

      范例 IPtables –N tcp_allowed

      添加新的链,在默认情况下,IPtables有ACCEPT、DROP、REJECT、LOG、REDIRECT等,如果希望对数据包做定制的处理,可以自己定义新的链。

    • 命令 -X,--delete-chain

      范例 IPtables –X tcp_allowed

      这条命令用于删除自定义的链。

    • 命令 -P,--pollicy

      范例 IPtables –P INPUT DROP

      为链设置缺省的target,通常为ACCEPT和DROP,可以理解为防火墙的缺省策略:除非特定的被运行,其它的都被禁止或除非特定的被禁止,其它的都被允许。

  • match

    在IPtables 的一条策略中,如何匹配一个数据包是非常关键的。

    matche大致可以归为五类:

    • 第一类是generic matches(通用的匹配),适用于所有的规则
    • 第二类是TCP matches,顾名思义,这只能用于TCP包
    • 第三类是UDP matches,当然它只能用在UDP包上了
    • 第四类是ICMP matches ,针对ICMP包的
    • 第五类比较特殊,针对的是状态(state),所有者(owner)和访问的频率限制(limit)等

实验步骤

打开目标机,进入Ubuntu系统,安装vsftpd服务:

启动ftp服务:

sudo service vsftpd start 
  1. 在实验机上通过IE或Chrome访问FTP服务器,本FTP服务器的IP是192.168.3.44,服务器可访问时如下:

  2. 设置防火墙规则

    如图所示为防火墙设置默认规则,即先清空所有规则,再将OUTPUT链设置为默认丢弃

    此时无法访问ftp

    (其实不只ftp不能用了,我连ssh和ping都不能用了,基本所有服务都断了)

    再针对 FTP服务进行放行,添加防火墙规则如图所示

  3. 实验结果如图

实验思考

使用CuteFTP软件,设置为主动访问方式,设定防火墙规则,使FTP服务器可访问,使用iptables设定防火墙规则,实现防火墙实验

  1. 针对OUTPUT链进行相关规则实验

    将上面的过程21端口改成20端口即可

     iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
     iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
  2. 改变实验环境,针对FORWARD链进行相关规则实验

    将上面的OUTPUT关键字改成FORWARD关键字即可

     iptables -A FORWARD -p tcp --dport 20 -j ACCEPT
     iptables -A FORWARD -p tcp --sport 20 -j ACCEPT
Last modification:June 10th, 2020 at 10:39 am