背景

收到用户反馈一台aws ec2实例在一周前突然无法通过公网访问对应的端口,但是22端口可以访问,本片也适用于其他场景排查

排查思路

系统层面排查

检查系统防火墙

#检查系统防火墙是否禁用,并关闭
#centos系统
systemctl status firewalld
systemctl stop firewalld
#ubantu 系统
systemctl status ufw
systemctl stop ufw

检查selinux是否开启

可以通过以下几种方法检查SELinux是否开启:

1. 使用sestatus命令

运行以下命令:

/usr/sbin/sestatus -v

如果输出显示SELinux status: enabled,则表示SELinux已开启。

2. 使用getenforce命令

运行以下命令:

getenforce

如果输出为Enforcing,表示SELinux处于强制执行模式;如果输出为Permissive,表示SELinux处于宽容模式;如果输出为Disabled,则表示SELinux未开启。

3. 查看配置文件

查看/etc/selinux/config文件:

cat /etc/selinux/config

文件中SELINUX的值可以是以下三种之一:

  • enforcing:表示SELinux处于强制执行模式。
  • permissive:表示SELinux处于宽容模式,仅记录违规行为但不强制执行。
  • disabled:表示SELinux未开启。

通过以上方法,可以准确判断SELinux是否开启及其运行模式。

通过tcpdump抓包

要通过 tcpdump 抓取指定端口的流量并判断流量情况,可以按照以下步骤操作:

1. 确定网络接口

首先,需要确定要抓包的网络接口。可以使用以下命令列出所有可用的网络接口:

sudo tcpdump -D

或者:

sudo tcpdump --list-interfaces

选择一个合适的网络接口,例如 eth0ens33

2. 抓取指定端口的流量

使用 tcpdumpport 关键字可以抓取指定端口的流量。例如,要抓取通过端口 80(HTTP)的流量,可以使用以下命令:

sudo tcpdump -i eth0 port 80

如果你只想抓取一定数量的数据包,可以加上 -c 选项。例如,抓取 10 个数据包:

sudo tcpdump -i eth0 -c 10 port 80

如果需要将抓取的数据包保存到文件中,可以使用 -w 选项:

sudo tcpdump -i eth0 port 80 -w output.pcap

这样,抓取的数据包会被保存到 output.pcap 文件中,后续可以用 tcpdump 或其他工具(如 Wireshark)进行分析。

3. 分析流量情况

抓取到的数据包可以通过 tcpdump 的输出直接查看,也可以用 -r 选项读取保存的文件进行分析。例如:

sudo tcpdump -r output.pcap

还可以使用更详细的输出选项,如 -v-vv,来获取更多信息。

4. 使用高级过滤条件

如果需要更复杂的过滤条件,可以组合多个参数。例如,抓取特定主机和端口之间的流量:

sudo tcpdump -i eth0 host 192.168.1.100 and port 80

或者,抓取特定协议(如 TCP)且带有特定标志位(如 SYN)的数据包:

sudo tcpdump -i eth0 tcp[tcpflags] & tcp-syn != 0

注意:tcpdump是工作在系统防火墙之前的,要是连tcpdump都没有抓到流量,只能说明流量没有进入到网卡中。本案例就是这个情况,所以接下来对aws 云平台层面进行排查。

运营商层面排查

为了排除是否是运营商封禁了ip和端口。我们将弹性ip解绑到其他实例,发现可以正常访问。所以排除此项。

AWS 云平台层面排查

安全组

安全组是AWS中非常重要的安全控制机制,用于控制进出EC2实例的流量。

  1. 安全组规则:确认安全组是否允许所需的入站和出站流量。例如,如果需要访问Web服务,应确保安全组允许端口80(HTTP)或443(HTTPS)的入站流量。
  2. 依赖关系:检查是否有其他资源(如RDS实例、负载均衡器、Lambda函数)依赖该安全组。如果有依赖关系,可能需要先调整相关资源的配置。
  3. 默认安全组:默认安全组通常不允许删除,但可以清空其规则。如果默认安全组的规则过于宽松或限制过多,可能导致流量问题。

网络ACL

网络ACL(访问控制列表)是另一个控制VPC中流量的工具,与安全组不同,它工作在网络层面,可以控制子网级别的流量。

  1. 规则检查:查看网络ACL的规则,确认是否允许所需的流量通过。例如,如果网络ACL拒绝了特定端口的流量,即使安全组允许,流量也会被阻止。
  2. 状态检查:确保网络ACL处于激活状态,并且规则的优先级设置正确。

路由表

路由表决定了VPC中流量的去向,排查路由表时,重点关注以下内容:

  1. 路由条目:检查路由表中的条目是否正确配置。例如,确保子网的默认路由指向正确的网关,否则可能导致流量无法正确转发。
  2. 关联检查:确认路由表是否正确关联到所需的子网。如果子网未正确关联到路由表,流量将无法按照预期进行路由。

防火墙

除了AWS的安全组和网络ACL外,实例上可能还运行着本地防火墙(如iptables或firewalld)。

  1. 防火墙状态:检查本地防火墙是否启用,以及其规则是否允许所需的流量。例如,使用systemctl status firewalld命令检查firewalld的状态。
  2. 规则配置:查看防火墙规则,确认是否允许特定端口的流量。如果防火墙规则过于严格,可能会阻止合法流量。

官方邮件查看

AWS官方邮件是获取问题相关信息的重要途径,尤其是当遇到无法通过常规排查解决的问题时:

  1. 支持邮件:检查AWS官方邮件,查看是否有支持团队发送的通知或警告。这些邮件可能包含关于实例问题的详细信息或建议的解决方案。
  2. 工单反馈:如果已经提交了工单,及时查看工单的回复。AWS支持团队可能会提供更具体的排查步骤或解决方案。

GuardDuty安全扫描

开启GuardDuty安全扫描,看下机器是否被入侵

结果

我们检查了安全组、网络ACL、路由表、防火墙都没发现问题,初步判断可能是被平台封禁了。开始翻查邮件,终于在邮件中找到被封禁告知。

到此可以确认是实例成为肉鸡对别人进行ddos后被官方封禁了。最后通过GuardDuty安全扫描发现多个高危告警。

还是提醒大家,要做好安全措施呀!!!

标签: none