今天搬迁博客的时候,在新的VPS中无法正常使用https访问。本来应该不会出错的,因为所有的配置文件都是从原来的环境中搬迁过来的,而且新的VPS也没有什么其它的变更。多次修改配置文件无果后用telnet尝试链接443端口看看。

执行显示Connection refused.

Trying 153.92.43.112...
telnet: connect to address 153.92.43.112: Connection refused

连接拒绝,应该是防火墙挡住了。去检查一下防火墙的规则发现实际上我已经配置好了443端口,但实际测试规则并没有生效。

关掉防火墙后一切访问皆正常了,问题应该在防火墙规则上。分析一下iptables的规则

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6490:2419247]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p tcp -m tcp --dport 888 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

前三个是默认策略没有问题

这条表示网络接口lo的访问的所有连接都接受。

表示与主机发送出去的数据包相关或已经建立连接的数据包都允许通行。

-p tcp 表示tcp协议

-m tcp 表示装入tcp模块

-dport 80表示针对80端口

以上选项的组合就表示为在80端口上的tcp协议传入的数据包允许接收。

127.0.0.1/32网段的主机发到3306的数据包接收,其它拒绝

888端口开放,这是给科学上网工具ss开放的端口

允许 ping

开放22端口(SSH)和443(HTTPS),-m state表示加载state状态模块,--state NEW表示允许新建立连接的数据包通过

表示拒绝所有的数据包,并回应说主机被封锁。一般这两条是要放在最后的。

到这里其实原因已经很明确了!

这条策略被放在了 -A INPUT -j REJECT --reject-with icmp-host-prohibited 之后,导致之后的所有策略都被无效。自然443端口就无法传入数据包了。而且上面规则的显示中有大量的相同规则,整理下,修改后更新配置就可以通过HTTPS来访问了。

新策略如下:

系统是CentOS 7