DDos攻击生产案例脚本

前言

在企业实际环境中,服务器可能会遭受DDos攻击。如果我们能合理的设置iptables或者防火墙,就可以大大提高服务器正常提供服务的稳定性。
以下是对iptables的应用

问题描述

写一个脚本解决DOS攻击生产案例:
==提示:==根据web日志或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,立即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。
防火墙命令为:iptables -I INPUT -s (源ip地址) -j DROP

思路

  1. 取到ip和ip访问次数
  2. 统计ip访问次数是否大于100次
  3. 判断出来后设置防火墙命令,并查看是否执行成功
  4. 根据实际情况进行优化

脚本

#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
count=100
Path=/server/scripts/shell/access_2020_20-8.log     
##需要进行分析的日志文件位置 
function ipt(){
awk ' [print $1] '  $Path|sort|uniq  c|sort  nr  k1  > /tmp/tmp.log
##将访问的ip进行过滤,并且按访问次数倒序排出来
exec < /tmp/tmp.log
## 将文件导入exec
while read line
do
	IP= echo $line|awk '{print $2}'
	## 将文件中的ip提取
	if [ echo $line|awk '{print $1}' -ge $count -a iptables -L -n |grep "$IP"|wc -l -lt 1] ; then 
	##如果访问的次数大于count值并且在iptables链中没有被处理过
		iptables -I INPUT -s $IP -j DROP
		## 对它进行DROP操作
		RETVAL=$?
		## 判断是否执行成功
		if [ $RETVAL -eq 0 ];then
		## 如果执行成功
			action "$IP is DROP" /bin/true
			echo "$IP" >> /tmp/ip_$(data +%F).log
			##将这个ip放入生成的文件中去
		else
			action "iptables -I INPUT -s $IP -j DROP " /bin/false
		fi
	fi
}

function del(){
exec </tmp/ip_$(date +%F -d '-1day' ).log
##将前一天的文件导入到exec
while read line
do
if [ iptables -L -n | grep "$line"|wc -l -ge 1];then
## 如果这个ip在iptables链中大于等于1
	iptables -D INPUT -s $line -j DROP
	##将这个链删除
fi
done
}
main(){
  flag=0
  while true
  do
  	sleep 180
  	##没三分钟执行一次
  	((flag++))
  	ipt
  	[ $flag -ge 480 ] && del && flag=0
  	##如果flag大于等于了480个flag即24小时,进行删除操作,并对flag重新赋值为0
 done
}

后记

关于iptables的应用场景还有很多,可以继续联系,从而加深印象。

猜你喜欢

转载自blog.csdn.net/Thorne_lu/article/details/107332557