aws 云服务器端口不可访问排查思路
背景
收到用户反馈一台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
选择一个合适的网络接口,例如 eth0
或 ens33
。
2. 抓取指定端口的流量
使用 tcpdump
的 port
关键字可以抓取指定端口的流量。例如,要抓取通过端口 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实例的流量。
- 安全组规则:确认安全组是否允许所需的入站和出站流量。例如,如果需要访问Web服务,应确保安全组允许端口80(HTTP)或443(HTTPS)的入站流量。
- 依赖关系:检查是否有其他资源(如RDS实例、负载均衡器、Lambda函数)依赖该安全组。如果有依赖关系,可能需要先调整相关资源的配置。
- 默认安全组:默认安全组通常不允许删除,但可以清空其规则。如果默认安全组的规则过于宽松或限制过多,可能导致流量问题。
网络ACL
网络ACL(访问控制列表)是另一个控制VPC中流量的工具,与安全组不同,它工作在网络层面,可以控制子网级别的流量。
- 规则检查:查看网络ACL的规则,确认是否允许所需的流量通过。例如,如果网络ACL拒绝了特定端口的流量,即使安全组允许,流量也会被阻止。
- 状态检查:确保网络ACL处于激活状态,并且规则的优先级设置正确。
路由表
路由表决定了VPC中流量的去向,排查路由表时,重点关注以下内容:
- 路由条目:检查路由表中的条目是否正确配置。例如,确保子网的默认路由指向正确的网关,否则可能导致流量无法正确转发。
- 关联检查:确认路由表是否正确关联到所需的子网。如果子网未正确关联到路由表,流量将无法按照预期进行路由。
防火墙
除了AWS的安全组和网络ACL外,实例上可能还运行着本地防火墙(如iptables或firewalld)。
- 防火墙状态:检查本地防火墙是否启用,以及其规则是否允许所需的流量。例如,使用
systemctl status firewalld
命令检查firewalld的状态。 - 规则配置:查看防火墙规则,确认是否允许特定端口的流量。如果防火墙规则过于严格,可能会阻止合法流量。
官方邮件查看
AWS官方邮件是获取问题相关信息的重要途径,尤其是当遇到无法通过常规排查解决的问题时:
- 支持邮件:检查AWS官方邮件,查看是否有支持团队发送的通知或警告。这些邮件可能包含关于实例问题的详细信息或建议的解决方案。
- 工单反馈:如果已经提交了工单,及时查看工单的回复。AWS支持团队可能会提供更具体的排查步骤或解决方案。
GuardDuty安全扫描
开启GuardDuty安全扫描,看下机器是否被入侵
结果
我们检查了安全组、网络ACL、路由表、防火墙都没发现问题,初步判断可能是被平台封禁了。开始翻查邮件,终于在邮件中找到被封禁告知。
到此可以确认是实例成为肉鸡对别人进行ddos后被官方封禁了。最后通过GuardDuty安全扫描发现多个高危告警。
还是提醒大家,要做好安全措施呀!!!