我有一个 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,现在一切正常。