iptables filter表浅析

本文深入解析iptables中的状态匹配参数-mstate的应用场景与实践案例,包括如何实现特定的网络通信策略,如只允许从内部发起的连接等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

即使iptables filter表的资料已经烂大街了,但是我还是决定拿他作为我的一篇。至于为什么不用其他的?不会。并且标题的浅析并不是低调,是因为真的不深:)

我想我还是直接说 -m参数吧:

> 1. -m state 检查状态,四中状态值

    • NEW:新建的连接是这种状态
    • ESTABLISHED:已经联机成功的联机状态
      RELATED:
      INVALID:
      是的,有两个为空,我实在不知道怎么测试他们,如果有想法,可以看一下这一篇: https://blog.51cto.com/waringid/517656
      那其实第一个和第二个都很好测试的,我还是直接拿出例子吧:
      拿个也被玩烂的例子,自己可以ping通别人,但是别人ping不通你。
      因为没有连接,所以只使用ESTABLISHED就好了,那么代码大概是:
      iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
      (当然其实我也不明白为什么没有连接状态,他依然判断的到)
      哦~还有一种方法可以实现:你ping的通别人,别人ping不通你:
      因为icmp包是有type的,type大概是:
      0:ping应答
      8:ping请求
      所以,实现各个的功能的代码大概是:
      iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
      关于这个例子有个有趣的东西。
      如果有个人在你设置前ping通了你,并且不断开。大概这样:
      iptables filter表浅析
      那即使你设置完:iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
      这句话后,他依然ping的通,在centos下,如果他断开后再ping,就不行了,但是在win10短时间内似乎都可以ping的通

还有一个new状态,当然就是有连接的时候啦,比如,http和ssh。
那就再举个例子。你可以ssh别人但是别人ssh不了你
建议先想一下,比如可能是这样的:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
-p 指定tcp协议 --dport 指定默认的ssh端口 NEW表示新建的连接,尝试一下连接。你可能等到死也等不到结果了
试一下,抓个包就知道为什么了。iptables filter表浅析
注意看返回包22是源端口啊,所以当然是改成
iptables -A INPUT -p tcp --sport 22 -m state --state NEW -j ACCEPT
你会发现,wc还是不行,于是你尝试改成
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
wc,可以了,你会想是不是加了NEW之后,才可以的,错了~
即使只有一个:iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT也可以ssh,不要问我为什么,不知道。。。


难道你没有问题吗,那NEW什么时候用?
有一个很经常用到的协议,http,起码NEW在HTTP协议里,还是有一点存在感的~

转载于:https://blog.51cto.com/11154846/2044068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值