今天搬迁博客的时候,在新的VPS中无法正常使用https访问。本来应该不会出错的,因为所有的配置文件都是从原来的环境中搬迁过来的,而且新的VPS也没有什么其它的变更。多次修改配置文件无果后用telnet尝试链接443端口看看。
telnet gkc.asia 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
前三个是默认策略没有问题
-A INPUT -i lo -j ACCEPT
这条表示网络接口lo的访问的所有连接都接受。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
表示与主机发送出去的数据包相关或已经建立连接的数据包都允许通行。
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-p tcp 表示tcp协议
-m tcp 表示装入tcp模块
-dport 80表示针对80端口
以上选项的组合就表示为在80端口上的tcp协议传入的数据包允许接收。
-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
127.0.0.1/32网段的主机发到3306的数据包接收,其它拒绝
-A INPUT -p tcp -m tcp --dport 888 -j ACCEPT
888端口开放,这是给科学上网工具ss开放的端口
-A INPUT -p icmp -j ACCEPT
允许 ping
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
开放22端口(SSH)和443(HTTPS),-m state表示加载state状态模块,--state NEW表示允许新建立连接的数据包通过
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited
表示拒绝所有的数据包,并回应说主机被封锁。一般这两条是要放在最后的。
到这里其实原因已经很明确了!
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
这条策略被放在了 -A INPUT -j REJECT --reject-with icmp-host-prohibited 之后,导致之后的所有策略都被无效。自然443端口就无法传入数据包了。而且上面规则的显示中有大量的相同规则,整理下,修改后更新配置就可以通过HTTPS来访问了。
新策略如下:
iptables -F # 先清除所有策略 # 填加新的策略 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP iptables -A INPUT -p tcp -m tcp --dport 888 -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited # 保存到文件 service iptables save # 更新防火墙策略 service iptables reload
系统是CentOS 7