Shell+Iptables 防御TCP SYN洪泛攻击

在运维某平台发现非常大量访问卡在的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地址也是多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值