失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用iptables进行TCP数据包过滤

使用iptables进行TCP数据包过滤

时间:2019-06-30 08:27:08

相关推荐

使用iptables进行TCP数据包过滤

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

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

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

2. 数据包内容修改

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

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

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

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

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

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

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

接下来我们使用iptables在OUTPUT链中DROP掉有PSH标志位的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查看。

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

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

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

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

已成功删除。

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

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

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

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

如果觉得《使用iptables进行TCP数据包过滤》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。