在Linux系统内核空间中,有面向网络的防火墙实现。这个防火墙是由软件实现的,是逻辑上的防火墙。用户可以设置某些的“安全设定”,配置到这个网络防火墙的“安全框架”中。这个“安全框架”就是netfilter。

    netfilter是处于内核态的,netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

    1. 网络地址转换(Network Address Translate)

    2. 数据包内容修改

    3. 以及数据包过滤的防火墙功能。

    刚刚我们提到用户可以在netfilter中自定义“安全设定”,就需要一个中间代理把用户态的“安全设定”配置到内核态中的“安全框架(netfilter)”,这个代理就是iptables。

    iptables可以提供给我们用户一些选项来自定义netfilter的功能。这次我们讨论使用iptables进行TCP数据报过滤。

    在命令行输入sudo iptables -L查看防火墙管理的三个“链”:

使用iptables进行TCP数据包过滤

Chain INPUT表示进入路由器的数据报、Chain FORWARD表示经过路由器的数据报、Chain OUTPUT表示从路由器从路由器出去的数据报。这里三者默认都是ACCEPT(接收)。

    target代表如何处理捕获的数据报,共有3种可定义的方法:ACCEPT(接收)、REJECT(拒绝)、DROP(丢弃)。prot代表协议;opt代表选项;source代表源地址;destination代表目的地址;最后一列是描述。


    举个例子,下面是wireshark抓取的正常发送的数据报:

使用iptables进行TCP数据包过滤

    接下来我们使用iptables在OUTPUT链中DROP掉有PSH标志位的TCP报文

使用iptables进行TCP数据包过滤

在Chain OUTPUT中多了一行过滤规则。sudo iptables -A OUTPUT -p tcp --tcp-flags PSH PSH --dport 9000 -j DROP

-A <Chain name>指定过滤规则的链,这里指定了输出链。

-p <protocol> [options]指定协议和协议的选项,这里指定了tcp的标志位PSH。

--dport <port>指定目的端口(destination port)号,这里指定了9000。同时可以使用--sport <port>指定源端口号。

-j <DROP|REJECT|ACCEPT>指定过滤方法,这里指定了丢弃(DROP)。

iptables更多的选项和用法可以用命令iptables -h查看。

    接着我们在这个过滤规则下重新抓取刚才的数据报:

使用iptables进行TCP数据包过滤

    这次发送的数据报的PSH标志都被过滤掉了,接收方应用层对并不知道数据报已经到达,造成了接收方窗口溢出。

    最后,使用iptables --delete删除过滤规则前,需要知道过滤规则的行号。在命令行输入sudo iptables -L --line-numbers查看。

使用iptables进行TCP数据包过滤

    刚才的过滤规则在OUTPUT链的行号2,现在可以输入sudo iptables --delete OUTPUT 2删除规则。再次查看过滤表。

使用iptables进行TCP数据包过滤

    已成功删除。

注:本文为小Yip原创,未经许可不得在任何平台转载。如需转载,与作者联系~

欢迎加入linux交流群:734638086,分享工作经验。

关注微信公众号:技术训练营(微信ID:TechBootcamp),获取更多资讯~

使用iptables进行TCP数据包过滤

微信扫一扫,发现更精彩。

相关文章:

  • 2022-12-23
  • 2021-05-09
  • 2022-12-23
  • 2021-11-28
  • 2021-09-02
  • 2021-05-31
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-04-19
  • 2021-08-04
  • 2021-07-14
  • 2021-10-16
相关资源
相似解决方案