在运维某平台发现非常大量访问卡在的SYN_RECV状态,可以确认为SYN泛洪攻击,看到的netstat -antp状态如下:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:875 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 192.168.10.81:8080 103.100.61.18:65178 SYN_RECV -
tcp 0 0 192.168.10.81:8080 103.100.61.18:29562 SYN_RECV -
tcp 0 0 192.168.10.81:8080 103.100.61.18:50751 SYN_RECV -
tcp 0 0 192.168.10.81:8080 103.100.61.18:11666 SYN_RECV -
因不想修改现有的服务器参数影响业务,项目防火墙是很难用不支持批量操作,图形页面IP一个一个拉黑太累太慢,想了下在服务器上用iptables过滤。同个IP也跑了其他业务,直接在网络防火墙拉黑也不好,误杀的IP要移除iptables也很快,直接添加白名单到顶部也可以。
分享脚本:
#!/bin/bash
#使用crontab 调用每3分钟一次,超过6分钟可以判断为SYN***
#抓出处于SYN_RECV状态的IP地址 记录日志用于分析
netstat -antp|grep "SYN_RECV"|awk -F '[ :]' '{print$27}'|sort|uniq >> $0_ip.log
#分析日志找到大于2次被扫描到的IP地址,加入防火墙
for ip in `cat $0_ip.log |sort|uniq -c|awk '{if($1>2) print$2}'`
do
rule=`grep "$ip" /etc/sysconfig/iptables|wc -l`
#判断规则是否存在
if [ "$rule" -ne 0 ];then
echo "Firewall rule already exists"
else
#添加到防火墙
iptables -A INPUT -s $ip -j DROP
#日志移除IP地址
sed -i "s|\<$ip\>||" $0_ip.log
#记录添加日志
echo "$(date "+%Y-%m-%d %H:%M:%S") $ip Add to firewall" >> $0.log
fi
done
因centos7中没有service iptables save指令来保存防火墙规则:
用以下命令保存
iptables-save > /etc/sysconfig/iptables
统计卡在SYN_RECV的socket数量
netstat -ant|egrep "SYN_RECV|$ip"|wc -l
奈何之前在防火墙上拉黑过的 对方一直换IP发起访问,看了下IP都是境外的- -,老外IP地址也是多.