我目前在工作中遇到了一些问题,当时我们的网站处于 SSL 状态,并且使用 443 端口。我发现了这一点网站检查服务器的状态。它显示 443 已关闭。
Port 443 is closed on xx.xxx.xx.xxx.
过了一会儿,我尝试了所有方法,但我不知道自己做错了什么。
netstat 显示以下内容:
sudo netstat -anltp | grep LISTEN
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
和
netstat -nap | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 27898/nginx
tcp 1 0 127.0.0.1:34371 127.0.0.1:443 CLOSE_WAIT 25998/openssl
nginx 应该正在监听该端口,对吗?
看起来是这样,因为如果我使用 openssl 客户端,我会得到:
openssl s_client -connect 127.0.0.1:443
CONNECTED(00000003)
但是当我尝试使用 443 端口从外部访问我的服务器时,出现连接超时。
openssl s_client -connect xx.xx.xx.xx:443
connect: Connection timed out
connect:errno=110
这是 iptable 规则
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:https
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:https
Chain ufw-after-forward (0 references)
target prot opt source destination
Chain ufw-after-input (0 references)
target prot opt source destination
Chain ufw-after-logging-forward (0 references)
target prot opt source destination
Chain ufw-after-logging-input (0 references)
target prot opt source destination
Chain ufw-after-logging-output (0 references)
target prot opt source destination
Chain ufw-after-output (0 references)
target prot opt source destination
Chain ufw-before-forward (0 references)
target prot opt source destination
Chain ufw-before-input (0 references)
target prot opt source destination
Chain ufw-before-logging-forward (0 references)
target prot opt source destination
Chain ufw-before-logging-input (0 references)
target prot opt source destination
Chain ufw-before-logging-output (0 references)
target prot opt source destination
Chain ufw-before-output (0 references)
target prot opt source destination
Chain ufw-reject-forward (0 references)
target prot opt source destination
Chain ufw-reject-input (0 references)
target prot opt source destination
Chain ufw-reject-output (0 references)
target prot opt source destination
Chain ufw-track-input (0 references)
target prot opt source destination
Chain ufw-track-output (0 references)
target prot opt source destination
任何建议都将受到赞赏。
谢谢。
更新:我忘了说实际上没有防火墙在运行:
ufw status
Status: inactive
答案1
首先进行一些检查:
- 您的服务器是否位于防火墙后面?端口可能由于防火墙配置而关闭
- 只有 root 用户可以绑定到端口 433(和其他低端口)。您的服务器是否以正确的权限启动?(通常将其配置为在其自己的用户下运行,但它需要由 root 用户启动。)
PS 根据您的编辑(nginx 正在监听端口 443),这看起来像是防火墙问题。请注意,防火墙有两种类型:内部(在您的服务器上运行)和外部(在控制服务器网络访问的另一台机器上运行)。您的更新仅显示没有内部防火墙。
答案2
如果您正在使用某些提供前端 UI 的托管服务(例如 Amazon Web Services),请搜索适用于您正在运行的节点实例的安全组。
就我而言,我只需要向允许的服务添加 443 例外,仅此而已。