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