Amazon EC2 实例缺少网络接口

Amazon EC2 实例缺少网络接口

我在 Amazon EC2 上的 t1.micro 实例上运行 Linux。有一次我注意到某个 IP 存在暴力 ssh 登录尝试,在谷歌搜索后,我发出了以下两个命令(其他 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 Interface以及Detach..都是灰色的。

Network Interfaces左侧的项目没有提供任何子网可供选择,因此无法创建新的 NI

请提供建议,如何为实例重新创建网络接口?

更新。无法从外部访问该实例:无法 ping 通、无法通过 SSH 或通过端口 80 上的 HTTP 连接。

输出如下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 通。

答案1

EC2 实例带有一个接口 - eth0。此接口映射到您实例的私有 IP 地址,并且无法与实例分离。(当然,您可以关闭该接口,但这是操作系统的功能,而不是 AWS 的功能)。

唯一可以连接/分离网络接口的情况是您的实例在虚拟私有云 (VPC) 中运行。此类实例支持多个接口。

由于实例只有一个网络接口,因此您能够连接到该接口(即使仅通过 AWS 控制台)这一事实表明该接口仍然存在并且可以运行(AWS 控制台条目中的“网络接口”条目仅针对 VPC 实例填写)。值得注意的是,实例的公共 IP 地址将在实例停止和启动时发生变化(尽管“重新启动”不会影响这一点)。弹性 IP 可用于提供“静态”IP 地址。公共 IP 地址(无论是动态还是“弹性”)不直接与接口关联,而是 EC2 网络将公共地址 NAT 为私有地址。

由于您仍然可以通过 SSH 访问实例,因此您可以通过查看 输出中的 eth0 条目来确认接口是否正常运行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 是针对您的服务器的攻击的发起者。我建议研究失败2ban如果你想要一个基于失败登录的解决方案(它会扫描你的日志并动态添加/删除必要的防火墙规则)或 iptables规则集基于最近的模块。

此外,使用 iptables 时,通常最好设置一个 cron 作业,iptables -F在几分钟后刷新你的 iptables 规则 (),这样你就不会意外将自己锁定在服务器之外。

在这种情况下,由于添加了 ,对 nginx 的更新导致了无效配置/etc/nginx/conf.d/default.conf。创建一个同名的空文件(而不是删除文件)以防止将来的更新导致同样的问题。虽然大多数人在更新后可能不会这样做,但您始终可以使用 测试您的 nginx 配置service nginx configtest,这样在终止正在运行的 nginx 进程之前,它就会让您知道是否存在任何问题。

如果您确实发现自己的网络接口已禁用(例如由于ifdown eth0),您将无法通过 SSH 进入实例(或以任何方式联系它)。这种情况的解决方案是停止实例,分离 EBS 根卷,将其作为附加卷附加到新的 EC2 实例,解决问题,将 EBS 卷重新附加到您的原始实例,然后重新启动它。这是 EBS 卷的明显优势之一。

答案2

请注意,恢复实例备份时,对旧网络接口的 MAC 地址的某些引用可能会残留,并导致接口无法启动。

尝试删除 /etc/udev/rules.d/70-persistent-net.rules,如果不起作用,请尝试确保 /etc/sysconfig/network-scripts/ifcfg-eth0 中的 mac 地址与虚拟网络接口上的 MAC 地址相对应

相关内容