Centos7

firewalld 啟用了 443 但它拒絕連接

  • July 28, 2020

我在使用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

顯然埠 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 並得到: 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

一旦我修復了我的 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   

錯誤連接被拒絕通常意味著防火牆允許數據包通過(除非防火牆主動拒絕連接嘗試),但沒有服務在目標埠號上偵聽。

在您的情況下,您需要確保 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>       

引用自:https://serverfault.com/questions/859234