开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
前言
前面讲了简单粗暴的规则配置方法,颗粒度比较大。
现在网络中用的比较多通信是基于tcp/ip。tcp面向连接的字节流协议,为了保证稳定安全不丢包,自然增加了许多逻辑。咱们使用过程中,碰到最多的就是tcp连接的各种状态了,而iptabels设计者在开发过程中解析了tcp报文的状态。
下面讲一下iptables对于tcp连接状态的匹配条件。
tcp 状态
下图是一个tcp帧结构。
图中可看出,TCP连接有六种状态:SYN,ACK,RST,UTG,PSH,FIN syn:同步标记,标志tcp客户端想tcp服务器发起连接的状态。 ack:确认标记,置位有效,告知对端已经接受数据。 psh:优先级标记,如果置位,表示协议应尽快推给应用处理。 rst:复位标记,置位有效,表示链接出现致命错误,需要释放此连接。 fin:结束标记,置位有效,代表链接进去正常的断开流程。
tcp状态流转图
closed:初始状态。 listen:标志监听连接请求状态 syn_send:由客户端所有,当发送一个syn包后,处于此状态。 syn_rcvd:由服务器所有,接收到一个syn包,并发送确认回对端,处于此状态。 established:正常链接状态。 fin_wait_1:主动发送关闭连接后处于此状态 fin_wait_2:fin-wait1的后续状态,发送fin包后接受到确认信息后进入此状态。 time_wait:表示已经走完断开流程后,需要保持一定时间(2MSL)的状态。 close_wait:被动关闭连接的一方接收到断开包发送回去确认信息后处于的等待状态。 closing:断开流程的主动方先接受对端的fin,后收到ack之间的状态。比较少见。
iptables的tcp状态匹配
上面我们了解了tcp状态概念和状态转换的基本知识,下面讲一下iptables如何匹配tcp状态的。
参数 -m tcp –-tcp-flags
可以测试下效果,下图是默认规则通行,未配置其他规则的防火墙。
增加规则 iptables -t filter -I INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -j DROP
syn请求链接包已经被匹配到并丢弃掉,所以不能链接成功了。
今天的分享就到这里。