Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)是一种用于保护服务器免受CC(Challenge Collapsar)攻击的自动化工具,通过监控并发连接数和请求频率,该脚本能够识别出异常流量并自动将发起攻击的IP地址加入黑名单,从而阻止这些IP地址的进一步访问,这种脚本通常结合了网络监控、数据分析和防火墙规则配置等多种技术手段,以实现对CC攻击的有效防御。
核心功能
1、实时监控:脚本会持续监控服务器的网络连接情况,特别是针对HTTP服务的连接请求。
2、并发分析:通过对连接请求的分析,脚本能够计算出每个IP地址的并发连接数,当某个IP地址的并发连接数超过预设的阈值时,脚本会认为该IP地址可能正在发起CC攻击。
3、自动拉黑:对于被识别为攻击源的IP地址,脚本会自动将其加入防火墙的黑名单中,阻止其后续的所有连接请求。
4、日志记录:脚本会记录所有的操作日志,包括哪些IP地址被拉黑、何时被拉黑以及拉黑的原因等,以便管理员进行后续的审计和分析。
5、灵活配置:脚本允许管理员根据实际需求调整并发阈值、黑名单有效期等参数,以实现更精细化的控制。
实现原理
1、获取并发阈值:脚本首先会检查是否传入了并发阈值参数$1,如果留空则默认允许单IP最大50并发。
2、进入脚本工作目录:使用cd $(cd $(dirname $BASH_SOURCE) && pwd)
命令巧妙地进入到脚本所在的工作目录。
3、请求检查、判断及拉黑主功能函数:定义一个名为check
的函数,用于执行主要的检查、判断和拉黑操作。
4、发邮件函数:定义一个名为sendmsg
的函数,用于在检测到攻击时发送邮件通知管理员。
5、间隔循环检查:使用while true
循环不断执行check
函数,每次检查间隔10秒(可自定义),以实现实时监控。
6、执行脚本:将脚本保存为deny_blackip.sh
后,使用nohup ./deny_blackip.sh 50 &
命令后台执行脚本(后面的50表示并发数,可自行调整)。
代码示例
#!/bin/bash #Author:ZhangGe #Desc:Auto Deny Black_IP Script. #Date:20141105 if [[ z $1 ]];then num=50 else num=$1 fi cd $(cd $(dirname $BASH_SOURCE) && pwd) function check() { iplist=netstat an | grep ^tcp.*:80 | egrep v 'LISTEN|127.0.0.1' | awk F"[ ]+|[:]" '{print $6}' | sort | uniq c | sort rn | awk v str=$num '{if ($1>str){print $2}}' if [[ ! z $iplist ]]; then > ./iplist/black_ip.txt for black_ip in $iplist do #白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码(请参考前天写的脚本) #exclude_ip=echo $black_ip | awk F"." '{print $1"."$2"."$3}' #grep q $exclude_ip ./white_ip.txt grep q $black_ip ./white_ip.txt if [[ $? eq 0 ]];then echo "$black_ip (white_ip)" >> ./iplist/black_ip.txt else echo $black_ip >> ./iplist/black_ip.txt iptables nL | grep $black_ip || (iptables I INPUT s $black_ip j DROP & echo "$black_ipdate +%Y%m%H:%M:%S
">>./iplist/denylog.txt & echo 1 > ./sendmail) fi done if [[cat ./sendmail
== 1 ]];then sendmsg;fi fi } function sendmsg() { netstat nutlp | grep "sendmail" >/dev/null 2>&1 || /etc/init.d/sendmail start >/dev/null 2>&1 echo e "From: 发邮件地址@qq.com To:收邮件地址@qq.com Subject:Someone Attacking your system!! Its Ip is" > ./message cat ./iplist/black_ip.txt >> ./message /usr/sbin/sendmail f 发邮件地址@qq.com t 收邮件地址@qq.com i < ./message > ./sendmail } while true do check sleep 10 done
FAQs
问题1:如何调整脚本的并发阈值?
解答:在执行脚本时,可以通过传入参数来调整并发阈值,如果要将并发阈值调整为80,可以使用命令nohup ./deny_blackip.sh 80 &
来执行脚本。
问题2:脚本如何实现自动发送邮件通知?
解答:脚本中定义了一个名为sendmsg
的函数,用于发送邮件通知,当检测到攻击时(即存在并发超过阈值的单IP),脚本会调用此函数来发送邮件,邮件内容包含攻击者的IP地址等信息,在脚本中,需要将“发邮件地址@qq.com”和“收邮件地址@qq.com”替换为实际的发件人和收件人邮箱地址。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1098482.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复