我在 centos 7 上使用firewalld。
我已经配置了firewalld,因此443是开放的:
$ sudo firewall-cmd --zone=public --permanent --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: couchdb2 dhcpv6-client http https ssh
ports: 443/tcp 5984/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
$ sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
Warning: ALREADY_ENABLED: 443:tcp
success
显然端口 443 是开放的,但是...
$ curl https://127.0.0.1:443
curl: (7) Failed connect to 127.0.0.1:443; Connection refused
我也使用以下网络工具进行测试http://www.yougetsignal.com/tools/open-ports/
我输入了我的 IP 地址和端口 443,然后得到:已关闭 {my-ip} 上的端口 443 已关闭
出了什么问题?看上去好像打开了,但其实没有打开。
我查询 netstat 得到以下结果:
$ sudo netstat -lnp | grep 443
udp 0 0 127.0.0.1:323 0.0.0.0:*
443/chronyd
udp6 0 0 ::1:323 :::*
443/chronyd
一旦我修复了 nginx.conf 以正确监听 443,结果如下所示:
$ sudo netstat -lnp | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:*
LISTEN 10197/nginx: master
tcp6 0 0 :::443 :::*
LISTEN 10197/nginx: master
udp 0 0 127.0.0.1:323 0.0.0.0:*
443/chronyd
udp6 0 0 ::1:323 :::*
443/chronyd
答案1
错误连接被拒绝通常意味着防火墙允许数据包通过(除非防火墙主动拒绝连接尝试),但没有服务在目标端口号上监听。
在您的情况下,您需要确保 HTTPs Web 服务器正在运行并监听端口 443。您可以使用以下命令进行验证。
sudo netstat -lnp | grep 443
编辑:正如 @Paul 所评论的,显示的输出意味着没有进程在端口 443 上监听。输出无关紧要,因为进程 ID 与 443 匹配,我们需要它与 TCP 协议的端口号匹配。您需要找到类似于以下内容的一行:
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN <pid>/<proc_name>
答案2
firewalld
添加规则后,您需要重新加载,--permanent
或者必须不带 重新运行命令--permanent
。
当您说--permanent
firewalld只是更新配置,但不会重新加载它时。