Linux 服务正在监听和响应未分配的端口,并且这些端口未显示在 netstat 中

Linux 服务正在监听和响应未分配的端口,并且这些端口未显示在 netstat 中

我有一个 Amazon Linux 1 实例,它是通过 Solarwinds DPA AMI 创建的。我大约在 2 年前创建了它。当时我可能做了一些奇怪的事情才导致这种情况发生。

今天,我升级了 Solardwinds DPA。我注意到 Tomcat server.xml 文件中的监听端口配置为 8123/8124,但我一直在端口 80 上访问 DPA。我对此没有多想,以为这是通过某些 DPA 配置/端口重定向的正常行为。

但是,我想切换到 SSL,并且想要一种简单而熟悉的方式来管理 SSL 证书。DPA 是一个 Java 应用程序,需要极其愚蠢的 Java 存储来存储 SSL 证书。因此,我安装了 nginx 作为反向代理,这样我就可以非常简单地管理 SSL 证书。

安装完成后,我设置了 nginx 来监听端口 81 和 443,并将端口 443 转发到后端的端口 80。然后,我测试在端口 443 上打开 DPA 站点,结果收到了证书无效的警告。检查证书后发现它是一个自签名 DPA 证书。意识到这很奇怪,我仔细查看了 netstat。

tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      13040/nginx
tcp        0      0 0.0.0.0:8123                0.0.0.0:*                   LISTEN      10950/java
tcp        0      0 0.0.0.0:8124                0.0.0.0:*                   LISTEN      10950/java
tcp        0      0 127.0.0.1:8127              0.0.0.0:*                   LISTEN      10950/java
tcp        0      0 0.0.0.0:81                  0.0.0.0:*                   LISTEN      13040/nginx
tcp        0      0 :::81                       :::*                        LISTEN      13040/nginx

在这里,您可以看到 nginx 实际上正在监听端口 443 和 81,而 DPA 实际上正在监听端口 8123 和 8124。

但是,我可以连接到端口 80 并访问 DPA(即使 netstat 中没有列出端口 80),即使 nginx 表示它正在监听端口 443,我也会直接在端口 443 上访问 DPA。如果我从本地计算机使用 telnet 并连接到服务器上的端口 80,netstat 会显示我的 IP 地址和服务器上的端口 8123 之间已建立连接。

我在这里遗漏了什么?为什么 netstat 显示我期望看到的内容,但我看到的行为是 DPA 实际上在端口 80 和 443 上响应。

一时兴起,我检查了 iptables 以查看是否进行了任何类型的端口重定向。iptables 为空并使用默认的 ACCEPT 策略。

显然,在这些连接到达 netstat 中显示的守护进程之前,有东西正在拦截这些连接。有东西正在重定向这些端口。我应该寻找什么?

答案1

我发现 iptables 正在执行此操作。我在列出 iptables 规则并仅使用iptables -L该命令时犯了一个错误。这并没有向我显示 nat 表。使用该命令iptables -t nat -L,我能够看到:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8123
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:https redir ports 8124

我发出命令,iptables -t nat -F刷新所有 nat 规则,然后service iptables save保存规则。我更新了 nginx 配置,将请求转发到端口 8123 而不是端口 80,现在一切正常。

相关内容