在更改 EC2 实例上的端口转发后,我无法再浏览它

在更改 EC2 实例上的端口转发后,我无法再浏览它

我目前无法浏览托管在我的 EC2 实例上的网站(我收到“无法连接”错误)。

我尝试在我的 EC2 实例上设置 Node.js,作为该过程的一部分,我执行了以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3000

Node.js 运行正常,但我想删除上面创建的新规则。最终我意识到执行以下操作将删除该规则:

iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to 3000

然而,这样做之后我仍然无法浏览该网站。

我遇到了类似问题的答案,并遵循了概述的步骤:https://serverfault.com/a/387774

防火墙

  • 我允许来自 TCP 端口 80 的所有来源的入站流量。
  • 我不相信有任何 iptable 规则会阻止端口 80。这是输出iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

服务器问题

  • Apache 正在我的实例上运行,我已多次重启它。这是输出ps -ef | grep apache
    root 630 1 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k start
    www-data 665 630 0 19:29 ? 00:00:01 /usr/sbin/apache2 -k 启动
    www-data 666 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动
    www-data 667 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动
    www-data 668 630 0 19:29 ?00:00:00 /usr/sbin/apache2 -k 启动
    www-data 671 630 0 19:29 ? 00:00:00 /usr/sbin/apache2 -k 启动
    www-data 878 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动
    www-data 879 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动
    www-data 880 630 0 19:44 ?00:00:00 /usr/sbin/apache2 -k 启动
    ubuntu 896 760 0 20:15 pts/0 00:00:00 grep --color=auto apache
  • 我已经检查了我的“ports.conf”文件,并且 Apache 设置为监听端口 80。但是,这是输出netstat -pant | grep :80
    (无法读取“-p”的信息:geteuid()=1000 但您应该是 root 。)
    tcp 0 0 0.0.0.0:80 0.0.0.0:* 侦听 -

并且lsof -Pnl +M -i4没有给我任何条目。所以,我不确定这是否配置正确。Apache 没有监听任何其他端口。

有人知道可能是什么问题吗?

PS 在删除 iptables 规则之前我确实执行了iptables -F。我不确定这是否会导致问题。

PPS 我使用 SSH 连接到我的实例ssh -i mywebsite.pem ubuntu@<ip address of my instance>,但是,每当我这样做时,它总是超时。我的解决方法是将 IP 地址替换为我的实例的公共 DNS,这样我就可以连接了。我不确定这是否相关。

更新:

iptables -L -t nat得到:

链 PREROUTING(策略接受)
目标 保护 优化 源 目标         

链输入(策略接受)
目标 保护 优化 源 目标         

链输出(策略接受)
目标 保护 优化 源 目标         

链 POSTROUTING(策略接受)
目标 保护 优化 源 目标
 

答案1

从你的帖子和评论中的跟进来看,你似乎做对了所有事情。根据我的经验,这意味着我忽略了一些细小而基本的事情。基于这个前提,我发现有两件事可能会给你带来麻烦:

  1. iptables - 我发现 AWS 安全组足以满足防火墙需求,因此至少作为实验,您可以关闭 iptables 以查看是否可以访问您的 Web 服务器。如果它们是您的安全配置文件的重要组成部分,您可以在实验后立即重新启动它们。
  2. IP 地址 - 您提到将ssh连接从实例 IP 更改为公共 DNS,这告诉我您正在运行弹性 IP,但您没有明确说明要使用哪个 IP 地址进行 Web 连接。我一直发现,一旦我将弹性 IP 与实例关联,我就无法再通过内部 IP 以任何方式访问该实例。在这种情况下,这意味着需要协调多个层:允许 TCP/80 流量到服务器的 DNS 和安全规则、配置为允许流量到该地址的防火墙规则、配置为响应该地址(或 0.0.0.0)的 Web 服务器。

答案2

事实证明我的弹性 IP 不知为何与我的实例断开了关联。重新关联后问题就解决了。

相关内容