0

VPS/Linux系统防CC攻击带白名单过滤功能的Shell脚本

 2 years ago
source link: https://zhang.ge/4627.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
VPS/Linux系统防CC攻击带白名单过滤功能的Shell脚本 | 张戈博客

最新更新:张戈博客已推出功能更强大的轻量级CC攻击防御脚本工具CCKiller==>传送门

根据我个人VPS需求,并参考了余洪春前辈的《自动甄别黑白名单的iptables安全脚本》,编写如下Shell代码。

脚本名称:自动拉黑CC攻击者IP的Shell脚本

功能说明:通过netstat -an命令统计出当前请求并发大于100的IP,然后将不在白名单的IP自动加入DROP规则

使用说明:

①、在Linux系统下将以下代码保存为shell脚本,比如:deny_ip.sh,并执行chmod+x deny_ip.sh加执行权限

#!/bin/bash
#Author:ZhangGe
#Desc:Auto Deny Black_IP Script.
#Date:2014-10-28
#从第一个参数取得限制阈值,如果未设置最高并发,将设置为100
if [[ -z $1 ]];then
num=100
num=$1
#进入到脚本所在目录
cd $(cd $(dirname $BASH_SOURCE) && pwd)
#取得当前请求大于阈值$num的IP列表
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}}'`
#循环IP列表进行筛选和处理
if [[ ! -z $iplist ]];
for black_ip in $iplist
#取得IP所在段
ip_section=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`
#先检查白名单中是否存在匹配的IP段(为了支持整段IP为白名单)
grep -q $ip_section ./white_ip.txt
if [[ $? -eq 0 ]];then
#若发现black_ip和白名单的一个段匹配,则写入到待验证列表,并暂时放过
echo $black_ip >>./recheck_ip.txt
#若不再白名单当中,则直接将black_ip加入到防火墙的DROP规则当中,并记录
iptables -nL | grep $black_ip || iptables -I INPUT -s $black_ip -j DROP
echo $black_ip >>./black_ip.txt

②、如果有要排除的白名单IP,需要将这些IP加入到脚本同目录的white_ip.txt当中,一行一个

③、最后使用crontab -e 将脚本加入到系统计划任务当中,每五分钟执行一次即可(最后的数值表示最大并发数):

*/5 * * * * /root/deny_ip.sh 150 >dev/null 2>&1

注意事项:

①、该脚本对于使用了百度云加速或360网站卫士的网站无效,因为IP都已经变成了CDN节点了,请勿使用此脚本

②、若不需要支持一个段为白名单,可自行修改24~27行的代码,更加准确的对应到每个IP

③、若发现和白名单同一个段IP出现在高并发列表,将不会直接拉黑,而是写入到recheck_ip.txt,如果有监控信息机制,可以在这个地方加入监控报警,告知管理员这个可疑的IP

④、脚本都有详细注解,就不罗嗦了,本身也没多做测试,有兴趣的可以看看。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK