Iptables防火墙tcp-flags模块扩展匹配规则

举报
jiangxl 发表于 2022/07/09 22:48:00 2022/07/09
【摘要】 Iptables防火墙tcp-flags模块扩展匹配规则 tcp-flags模块的作用是判断TCP协议数据报文标志位的返回值的,在TCP的三次握手中,第一次握手客户端向服务器发送syn=1的数据报文,第...

Iptables防火墙tcp-flags模块扩展匹配规则

tcp-flags模块的作用是判断TCP协议数据报文标志位的返回值的,在TCP的三次握手中,第一次握手客户端向服务器发送syn=1的数据报文,第二次握手服务端向客户端发送sync和ack=1的报文,第三次握手客户端向服务端发送ack=1的报文。

tcp-flags模块就是来判断发送报文中指定的标志位是否等于1,并且该条报文中只包含指定的标志位,否则就拒绝通行,例如我们指定的标志位是SYN,那么该条报文中就只能包含SYNC,如果再包含ACK,那么就不放行,并且标志位的值要为1。

**案例:**只允许其他客户端发送TCP请求报文到本机,本机响应可以,但是本机不可向其他主机发送TCP请求报文。

首先来分析,“只允许其他客户端发送TCP请求到本机”,根据这句话可以明确是在INPUT链添加相应的规则,客户端发起请求一共需要发送2次TCP握手,分别是第一次握手和第三次握手,通过tcp-flags模块确保客户端发送的报文中标志位都是正确的,需要在INPUT链添加3条规则,第一条规则是匹配客户端发送的报文中是否只包含syn标志位,并且值是否等于1,第二条规则是匹配客户端发送的报文中是否只包含ack,并且值是否等于1,如果这两条规则都满足,那么就说明是客户端向服务端发送的请求,最终的动作是允许,第三条规则是拒绝其他标志位的TCP连接请求。

然后来分析"本机只可以响应客户端发起的TCP请求,但是本机不可以向其他客户端发送请求",根据这句话可以明确出规则是要添加在OUTPUT链的,我们只需要在OUTPUT链添加上第二次握手所包含的TCP标志位的规则,完成响应客户端的TCP连接请求,最后在添加一条规则,禁止其他的TCP标志位从OUTPUT链发出,也就可以拒绝本机向其他的客户端发起TCP请求。

tcp-flags模块使用的命令格式:--tcp-flags {标志位集合} {要判断哪个标志位等于1}

1)编写具体的防火墙规则

1.添加允许客户端向本机发起TCP请求的规则
#syn=1的标志位规则
[root@jxl-1 ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT

#ack=1的标志位规则
[root@jxl-1 ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST ACK -j ACCEPT

#其余的报文都拒绝
[root@jxl-1 ~]# iptables -t filter -A INPUT -j DROP


2.添加本机响应客户端TCP连接请求以及拒绝发起TCP请求的规则
#syn和ack都等于1
[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp --sport 22 -m tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK -j ACCEPT

#ack-1
[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp --sport 22 -m tcp --tcp-flags SYN,ACK,FIN,RST ACK -j ACCEPT

#其余的报文全部拒绝
[root@jxl-1 ~]# iptables -t filter -A OUTPUT -j DROP

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2)查看设置的防火墙规则

[root@jxl-1 ~]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       82  6416 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 flags:0x17/0x10
2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 flags:0x17/0x02
3     5169 1958K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       41  4348 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spt:22 tcp flags:0x17/0x10
2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spt:22 tcp flags:0x17/0x12
3      293 65316 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3)查看效果

本机无法发起TCP连接请求。
在这里插入图片描述

其他主机可以向本机发起TCP连接。

在这里插入图片描述

文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangxl.blog.csdn.net/article/details/125689901

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。