我在 AWS EC2(Ubuntu)上使用弹性 IP 为 apache2 服务器托管一个默认站点。
安全组设置为打开所有入站(用于测试目的)。
我可以使用公共 IP 通过 SSH 访问服务器,但无法通过 HTTP 访问。
我可以从本地主机浏览该网站(使用lynx 127.0.0.1
)。
我还可以从同一子网上的不同 EC2 浏览该网站。
这是我的 iptables:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
开放端口:
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 *:80 *:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 511 *:443 *:*
防火墙处于非活动状态。
我也刚刚尝试在同一个子网上旋转的第二台虚拟机上安装 nginx,奇怪的是我也无法访问 Web 服务器的 80 端口。
因此,现在我也在单独的子网上创建了一个新实例,但仍然无法通过 HTTP 访问它。但可以通过 SSH 访问它。
不确定我遗漏了什么。
更新 1:
这太奇怪了,我在那台机器上也运行着 MySQL,而且它也是可以访问的。看来路由和安全组都是正确的,但出于某种原因,HTTP 和 HTTPS 流量被某些东西阻止了。
更新 2:
我在 VPC 上打开了流日志,端口 80 上的所有请求都被拒绝,而 22 和 3306 可以毫无问题地进入。
my.ip.goes.here. 10.1.1.68 64087 80 6 1 64 1694528397 1694528415 REJECT OK
网络 ACL设置为允许所有入站和出站:
100 All traffic All All 0.0.0.0/0 Allow
* All traffic All All 0.0.0.0/0 Deny
安全组允许所有进出流量:
All Traffic 0.0.0.0/0
这真是越来越奇怪了。
答案1
尝试使用 tspdump 跟踪数据包 - 无论数据包是否到达主机。如果数据包到达,则显然服务器上的某些东西正在阻止或丢弃它。完全重置所有防火墙规则,或者更好的是,完全关闭它(用于测试)。好吧,首先,检查 Web 服务器设置,可能有些东西配置不正确。尝试插入一个简单的静态页面并结合这些措施 - 您一定会找出问题所在。
答案2
我找到了一个解决方案。
我在端口 81 上打开了 nginx,它运行正常,所以我认为它一定只是阻止了任何 Web 端口。
经过一番研究后,这是因为我的 EC2 被报告了“EC2 滥用报告”。
在数百万封电子邮件中有一封:
我们收到了涉及您 AWS 账户资源的滥用报告。因此,我们针对涉案资源采取了以下步骤,以缓解此类活动:
** 该地区的入站 HTTP 端口 80、8080 和 443 已被阻止**
以前,该地区安装了某种软件的不同 EC2 实例遭到黑客攻击并被关闭。
如果控制台中的 EC2 实例能够以某种方式显示这一点,那就太好了。