当服务器出现卡顿、服务不可用等异常情况时,可以首先使用以下命令进行快速检查。
1. 查看实时网络流量iftop
/nload
这些工具可以直观地看到哪些IP地址在与您的服务器通信,以及实时的流量大小。
安装 iftop (CentOS/RHEL):
yum install epel-release -y yum install iftop -y
使用 iftop:
iftop -i eth0 # 将 eth0 替换为您的网卡名称(可以使用ip addr
查看)
看什么观察顶部显示的实时流量速率(RX: 接收,TX: 发送),如果接收流量(RX)持续爆满,而您并没有提供大流量服务,很可能正在被流量攻击(如DDoS),底部会列出与您通信的IP和流量大小,异常高的IP可能就是攻击源。
安装 nload (更简单,只看总量):
yum install nload -y
使用 nload:
nload eth0
看什么它会分屏显示进出流量,直观看到流量是否跑满了带宽。
2. 查看网络连接状态netstat
/ss
攻击(如CC攻击、SYN Flood)会建立大量异常连接。
查看所有连接数:
netstat -an | wc -l ss -s # 这个命令直接显示总结信息,更清晰
看什么如果连接数异常高(比平时高出几个数量级),需要警惕。
查看特定状态的连接(非常重要):
# 查看 SYN_RECV 状态的连接(半连接,可能是SYN Flood攻击) netstat -n | grep :80 | grep SYN_RECV | wc -l ss -t state syn-recv sport = :80 | wc -l # 查看 ESTABLISHED 状态的连接(已建立连接,可能是CC攻击) netstat -n | grep :80 | grep ESTABLISHED | wc -l ss -t state established sport = :80 | wc -l
看什么大量SYN_RECV
状态连接是SYN Flood攻击的典型特征,大量ESTABLISHED
连接指向同一个服务(如Web服务),则可能是CC攻击。
统计IP连接数,找出可疑IP:
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
看什么这个命令会列出与您服务器建立连接最多的前10个IP,如果发现某个IP在短时间内建立了成百上千个连接,它很可能是攻击者。
快速排查发现异常后,需要用更专业的工具来捕获和分析数据包。
这是最强大的网络分析工具,可以记录所有经过网卡的数据包。
基本抓包命令:
tcpdump -i eth0 -w capture.pcap
-i eth0
: 指定网卡。
-w capture.pcap
: 将数据包保存到文件,方便后续分析。
* 抓包一段时间后按Ctrl+C
停止。
带过滤的抓包(更高效):
# 只抓取80端口的流量 tcpdump -i eth0 -w capture.pcap port 80 # 只抓取与某个可疑IP的通信 tcpdump -i eth0 -w capture.pcap host 123.123.123.123
如何分析pcap文件
* 将capture.pcap
文件下载到本地电脑。
* 使用Wireshark(图形化工具,功能强大)打开进行分析。
在Wireshark中,你可以
统计 -> 对话查看所有通信IP和流量排名。
统计 -> HTTP查看HTTP请求的路径、User-Agent等,判断是否为恶意请求。
使用过滤器例如http.request.uri contains “/wp-admin”
来查看是否有人爆破WordPress后台。
2. 系统日志分析/var/log/
系统的安全日志和服务的访问日志是重要线索。
Web服务日志 (Nginx/Apache):
Nginx 日志默认位置/var/log/nginx/access.log
Apache 日志默认位置/var/log/httpd/access_log
分析方法:
# 查看最近1000行内访问最频繁的IP tail -1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 # 查看访问最频繁的URL tail -1000 /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -10 # 实时查看日志尾部,观察请求频率 tail -f /var/log/nginx/access.log
看什么单一IP在短时间内发起大量请求;请求的URL是登录页面、API接口等敏感路径;HTTP状态码大量是404(扫描)或499/500(CC攻击可能导致)。
系统安全日志:
位置/var/log/secure
(CentOS/RHEL) 或/var/log/auth.log
(Ubuntu/Debian)
看什么大量失败的SSH登录尝试,这是典型的暴力破解。
单纯的查看是被动的,主动防护更重要。
发现可疑IP后,立即使用防火墙封禁。
使用 iptables:
# 封禁单个IP iptables -I INPUT -s 123.123.123.123 -j DROP # 封禁整个IP段(谨慎使用) iptables -I INPUT -s 123.123.0.0/16 -j DROP # 保存规则(CentOS 6/7) service iptables save
使用 firewalld (CentOS 7/8+):
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='123.123.123.123' reject" firewall-cmd --reload
使用 Fail2ban (自动化封禁):
Fail2ban可以自动扫描日志(如/var/log/secure
和/var/log/nginx/access.log
),当发现某个IP在短时间内有多次失败尝试或错误请求时,自动调用防火墙将其封禁一段时间。
安装yum install fail2ban -y
配置 编辑/etc/fail2ban/jail.local
文件,可以针对SSH、Nginx等服务设置封禁策略。
对于大规模DDoS攻击,服务器本身的带宽和能力是远远不够的。
云服务商提供的安全产品
阿里云 DDoS高防IP, 云盾WAF
腾讯云 DDoS防护, 大禹BGP高防, WAF
AWS AWS Shield, WAF
Cloudflare 提供免费的CDN和基础的DDoS防护,付费版功能更强大。
原理 这些服务通过提供高带宽的清洗中心,将恶意流量引流并过滤,只将正常的流量转发到您的源服务器。
1、发现异常: 服务器变慢,服务中断。
2、快速定位:
* 使用nload
/iftop
看流量是否跑满。
* 使用ss
/netstat
看连接数是否激增,检查SYN_RECV
和ESTABLISHED
状态。
* 使用netstat
或ss
找出连接数最多的可疑IP。
3、深入分析:
* 查看Web日志/var/log/nginx/access.log
,分析请求模式和可疑IP。
* 必要时使用tcpdump
抓包,用Wireshark深度分析。
4、立即应对:
* 用防火墙iptables
/firewalld
封禁可疑IP。
* 如果攻击规模大,立即联系云服务商客服,并启用DDoS高防服务。
5、长期防护:
* 部署 Fail2ban 自动化防御。
* 业务放在云上,务必购买基础DDoS防护。
* 对重要业务,考虑使用云WAF和高防IP。
希望这份详细的指南能帮助您有效地查看和应对服务器攻击流量。
文章摘自:https://idc.huochengrm.cn/fwq/16579.html
评论