海天无影Blog

iptables开放端口不成功的原因

/ 2572阅 / 1评 / 1

开放iptables端口的方法很简单,网上有很多的例子,上一篇文章《iptables基本命令》也有介绍过,但有的时候添加好后,在规则里也能看到,端口却还是开放不成功,后来发现只是一个字母,插入规则-I和追加规则-A的问题。

网上有的教程,会使用以下规则开放端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

使用了后,却发现服务器还是没能正常开放端口。

大家可以将规则里的参数-A换成-I,也就是插入规则-I和追加规则-A的区别 ,-A 追加规则在DROP 规则后,-I增加规则在DROP 规则前。

原因是iptables是由上而下,进行规则的匹配,所以放行规则需在禁行规则之前才能生效。你使用-A的参数是添加在进行之后,所以并没有成功。

DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。

REJECT动作则会更为礼貌的返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。连接马上断开,Client会认为访问的主机不存在。

并且REJECT在iptables里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

iptables规则中Reject和Drop的区别

《“iptables开放端口不成功的原因”》 有 1 条评论

  1. […] 以下举例开启8080端口,可以看到有个A和I的区别,有的时候添加iptables规则,却不成功的时候,可以看看这篇文章《iptables开放端口不成功的原因》 […]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注