firewalld 启用了 443 但它拒绝连接

Web*_*ake 3 firewalld centos7

我在使用 firewalld 的 centos 7 上。

我已经配置了 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
Run Code Online (Sandbox Code Playgroud)

显然端口 443 是开放的,但是......

$ curl https://127.0.0.1:443
curl: (7) Failed connect to 127.0.0.1:443; Connection refused
Run Code Online (Sandbox Code Playgroud)

我还使用http://www.yougetsignal.com/tools/open-ports/ 上的网络工具对其进行了测试

我输入我的 IP 地址和端口 443 并得到: Closed Port 443 is closed on {my-ip}

可能出什么问题了?它似乎打开了,但事实并非如此。

我用这个结果查询 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
Run Code Online (Sandbox Code Playgroud)

一旦我修复了我的 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   
Run Code Online (Sandbox Code Playgroud)

Kha*_*led 5

连接被拒绝的错误通常意味着防火墙允许数据包通过(除非防火墙主动拒绝连接尝试),但没有服务侦听目标端口号。

在您的情况下,您需要确保 HTTPs Web 服务器正在运行并侦听端口 443。您可以使用以下命令进行验证。

sudo netstat -lnp | grep 443
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Paul 所评论的,显示的输出意味着没有进程侦听端口 443。输出无关紧要,因为进程 ID 匹配 443,我们需要它与 TCP 协议的端口号匹配。您需要找到类似于以下内容的行:

tcp  0   0 0.0.0.0:443      0.0.0.0:*     LISTEN      <pid>/<proc_name>       
Run Code Online (Sandbox Code Playgroud)