我在 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,奇怪的是我也無法存取連接埠 80 的 Web 伺服器。
所以現在我還在單獨的子網路上建立了一個新實例,但仍然無法透過 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
網路存取控制列表設定為允許所有入站和出站:
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 追蹤封包 - 無論封包是否到達主機。如果封包到達,那麼顯然伺服器上的某些東西正在阻止或丟棄它。完全重置所有防火牆規則,或者更好的是,完全關閉它(用於測試)。好吧,首先,檢查網路伺服器設置,可能有些東西配置不正確。嘗試插入一個簡單的靜態頁面並結合這些措施 - 你一定會找出問題所在。
答案2
我找到了解決方案。
我在連接埠 81 上開啟了 nginx,工作正常,所以我認為它一定只是阻塞了任何 Web 連接埠。
經過一番研究後,這是因為我的 EC2 被報告為「EC2 濫用報告」。
在數百萬封電子郵件之間有一封:
我們收到了涉及您的 AWS 帳戶資源的濫用報告。因此,我們針對相關資源採取了以下措施,以減少此類活動:
** 封鎖該區域的入站 HTTP 連接埠 80,8080 和 443**
此前,該地區有不同的 EC2 執行個體安裝了特定軟體,但遭到駭客攻擊並被關閉。
如果控制台中的 EC2 執行個體能夠以某種方式顯示這一點,那就太好了。