诊断DDoS攻击,Linux运维的工具箱里,netstat是非常趁手的一把“手术刀”。别把它想得太复杂,说到底,就是几个关键命令的组合拳,能让你快速看清服务器当前的连接状况,找到那些异常流量。
首先,最基础的扫描指令:
netstat -na
这条命令会列出所有连接到服务器的活跃网络连接,相当于给服务器的网络连接状态拍了张“全家福”。
如果服务器跑的是Web服务,80端口是主战场,那可以进一步聚焦:
netstat -an | grep :80 | sort
只显示连接到80端口的连接,并对结果排序。这招对从海量连接中揪出单个发起洪水攻击的IP尤其有效,能帮你快速定位“出头鸟”。
接下来,需要关注一个关键状态——SYN_REC。这玩意儿就像服务器大门口还没办完入门手续的访客,正常情况下数量应该很少,最好低于5个。
netstat -n -p | grep SYN_REC | wc -l
这个命令就是专门统计处于SYN_REC状态的连接数量。如果这个数字突然飙高,比如成百上千,那基本可以判定是DDoS攻击或邮件冲击波在作祟。当然,这个基线值因系统而异,但偏离正常值就是警报信号。
想知道具体是哪些IP在搞事?可以试试:
netstat -n -p | grep SYN_REC | sort -u
这里直接列出所有发起SYN_REC连接的IP地址,而不是只给个总数。
如果想进一步抽取这些IP地址的“源头”,可以这样:
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
这条命令会把所有发送SYN_REC请求的IP地址从字符串中抠出来,方便你直接处理。
更通用的做法是,计算每个IP对服务器的总连接数,从高到低排序,异常IP一目了然:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
如果服务器同时提供TCP和UDP服务,可以这样:
netstat -anp | grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
有时候,光看SYN_REC还不够,ESTABLISHED连接(已建立的连接)也可能被攻击者利用。检查这部分连接,也能发现异常:
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
最后,针对80端口(HTTP)来个组合拳,直接显示访问该端口的IP及其连接数:
netstat -plan | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nk 1
如何缓解DDoS攻击?
发现攻击IP只是第一步,光看出招不行,还得会接招。一旦通过上述命令锁定了攻击者的IP,可以用iptables果断切断他们的连接:
iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
注意,这里$IPADRESS要替换成你从netstat命令里找到的那个具体IP地址。这招一放,等于在服务器门口直接拉下了卷帘门,让那些恶意流量彻底吃闭门羹。当然,专业场景下,还需要结合流量清洗、CDN防护等更系统的方案,但netstat+iptables这套组合拳,是每个运维人员都应该掌握的“急救”本领。
