Linux

Amazon EC2 實例缺少網路介面

  • January 27, 2022

我在 Amazon EC2 的 t1.micro 實例上執行 Linux。一旦我注意到來自某個 IP 的 bruteforce ssh login attemtps,在Google搜尋之後,我發出了以下兩個命令(其他 ip):

iptables -A INPUT -s 202.54.20.22 -j DROP
iptables -A OUTPUT -d 202.54.20.22 -j DROP

無論是這個,還是其他一些yum upgrade可能的行為,都導致了以下慘敗:重新啟動伺服器後,它沒有網路介面!

我只能通過 AWS 管理控制台 JAVA ssh 客戶端連接到它 - 通過本地 10.xxx 地址。

在此實例中,控制台Attach Network InterfaceDetach..是灰色的。

Network Interfaces左側的項目不提供任何子網可供選擇,以創建新的 NI

請建議,如何為實例重新創建網路介面?

**更新。**無法從外部訪問該實例:無法通過埠 80 上的 HTTP ping、SSH 或連接。

這是ifconfig輸出:

eth0  Link encap:Ethernet  HWaddr 12:31:39:0A:5E:06  
     inet addr:10.211.93.240  Bcast:10.211.93.255  Mask:255.255.255.0
     inet6 addr: fe80::1031:39ff:fe0a:5e06/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:1426 errors:0 dropped:0 overruns:0 frame:0
     TX packets:1371 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:152085 (148.5 KiB)  TX bytes:208852 (203.9 KiB)
     Interrupt:25 
lo    Link encap:Local Loopback  
     inet addr:127.0.0.1  Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING  MTU:16436  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0 
     RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

同樣不尋常的是:我從頭開始創建的一個新的微實例,與有問題的實例無關,也無法 ping 通。

EC2 實例帶有一個介面 - eth0。此介面映射到您的實例的私有 IP 地址,並且不能與實例分離。(當然,你可以把介面拿下來,但那是作業系統的一個功能,不是AWS)。

您可以附加/分離網路介面的唯一情況是您的實例在虛擬私有云 (VPC) 中執行。此類實例支持多個介面。

由於該實例只有一個網路介面,因此您能夠連接到它的事實(即使它僅通過 AWS 控制台)表明該介面仍然存在並且可以執行(AWS 中的“網路介面”條目控制台條目僅針對 VPC 實例填寫)。值得注意的是,實例的公共 IP 地址會在實例停止和啟動時發生變化(儘管“重啟”不應影響這一點)。彈性 IP 可用於提供“靜態”IP 地址。公共 IP 地址(無論是動態的還是“彈性的”)與介面沒有直接關聯,而是 EC2 網路將公共地址 NAT 轉換為私有地址。

由於您仍然可以通過 SSH 訪問該實例,因此您可以通過查看ifconfig. 您還可以使用該ec2-describe-instances命令獲取實例的私有和公共 IP 地址。

EC2 實例通常有兩個阻止數據包的原因 - 作業系統的防火牆(在本例中為 iptables/netfilter)或 EC2 安全組。在可能的範圍內,始終最好阻止與您的安全組的流量,因為它會阻止數據到達實例。然而,安全組是無狀態的,並且大多數包都沒有設置為動態修改它們,因此您可能也會使用 iptables。

預設情況下,EC2 安全組會丟棄所有 ICMP 數據包(ping 所需) - 因此,除非您專門啟用它,否則 ping 將不起作用。要從 AWS 控制台啟用 ping(針對您的安全組):

  • 為您的安全組創建“自定義 ICMP 規則”
  • 類型:迴聲請求和類型:迴聲回复(兩者都是必需的)
  • 來源:0.0.0.0/0

您可以通過以下方式查看目前配置的 iptables 規則:iptables -nvL您可以通過以下方式查看您的安全組設置ec2-describe-group SECURITY_GROUP

不幸的是,暴力攻擊和掃描您的伺服器是當今擁有面向公眾的伺服器所需的一部分。發生攻擊通常不是要關心的事情,而是如何設置您的伺服器以確保這些攻擊不會導致違規。通常,手動阻止單個 IP 地址並不是最有效的途徑,因為您通常會發現各種各樣的 IP 作為針對您的伺服器的攻擊的發起者。如果您想要基於失敗登錄的解決方案(它會掃描您的日誌並動態添加/刪除必要的防火牆規則)或基於最近模組的 iptables規則集,我建議您查看fail2ban 。

此外,在使用 iptables 時,通常最好設置一個 cron 作業,該作業將iptables -F在幾分鐘後刷新您的 iptables 規則 (),這樣您就不會意外地將自己鎖定在伺服器之外。

在這種情況下,對 nginx 的更新導致配置無效,因為添加了/etc/nginx/conf.d/default.conf. 創建一個同名的空文件(而不是刪除文件),以防止以後的更新導致同樣的問題。雖然大多數人在更新後可能不會這樣做,但您始終可以service nginx configtest在終止正在執行的 nginx 程序之前使用 測試您的 nginx 配置,這將讓您知道是否有任何問題。

如果您確實發現自己使用了一個禁用的網路介面(例如,因為ifdown eth0),您將無法通過 SSH 連接到實例(或無論如何联系它)。該場景的解決方案是停止實例,分離 EBS 根卷,將其作為附加卷附加到新的 EC2 實例,修復問題,將 EBS 卷重新附加到原始實例,然後重新啟動它。這是 EBS 卷的明顯優勢之一。

引用自:https://serverfault.com/questions/378130