当前位置:首页 > 行业动态 > 正文

如何利用Shell脚本增强Linux系统对CC攻击的自动IP拉黑能力?

Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)是一种用于防止CC攻击并自动拉黑反面IP的脚本。

Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)

Linux系统在面对网络攻击时,尤其是CC攻击(Challenge Collapsar),往往需要有效的防护手段,本文将介绍一个用于防御CC攻击的Shell脚本,该脚本可以自动检测并拉黑发起攻击的IP地址,从而保护服务器免受反面流量的侵袭。

脚本解析

1、脚本功能

并发连接检查:通过netstat命令获取当前所有TCP连接,筛选出目标端口(如80)的连接,统计每个IP的并发连接数。

黑名单处理:对并发连接数超过设定阈值的IP进行拉黑操作,使用iptables将这些IP加入黑名单。

邮件通知:当有IP被拉黑时,发送邮件通知管理员。

2、代码详解

“`bash

#!/bin/bash

#Author:ZhangGe

#Desc:Auto Deny Black_IP Script.

#Date:20141105

# 取得参数$1为并发阈值,若留空则默认允许单IP最大50并发

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

> ./black_ip.txt

for black_ip in $iplist

do

# 白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码

grep q $black_ip ./white_ip.txt

if [[ $? eq 0 ]];then

echo "$black_ip (white_ip)" >>./black_ip.txt

else

echo $black_ip >>./black_ip.txt

iptables nL | grep $black_ip ||(iptables I INPUT s $black_ip j DROP & echo "$black_ipdate +%Y%m%H:%M:%S">>./deny.log & echo 1 >./sendmail)

fi

done

# 存在并发超过阈值的单IP就发送邮件

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 ./black_ip.txt >>./message

/usr/sbin/sendmail f 发邮件地址@qq.com t 收邮件地址@qq.com i <./message

> ./sendmail

}

# 间隔10s无限循环检查函数

while true

do

check

# 每隔10s检查一次,时间可根据需要自定义

sleep 10

done

“`

3、执行方式

将以上代码保存为deny_blackip.sh

进入脚本文件所在目录,然后使用如下命令后台执行脚本(后面的50表示并发数,可自行调整):

“`bash

nohup ./deny_blackip.sh 50 &

“`

FAQs常见问题解答

1、Q: 这个脚本适用于哪些场景?

A: 这个脚本主要适用于Web服务器遭受CC攻击的情况,通过监测并发连接数,自动拉黑超过阈值的IP,有效减少反面流量对服务器的影响,脚本还支持邮件通知功能,便于管理员及时了解服务器状态。

2、Q: 如何自定义并发连接数阈值?

A: 在脚本开头部分,有一个参数设置,可以通过修改这个参数来调整并发连接数阈值。

“`bash

num=50

“`

这里将并发连接数阈值设置为50,可以根据实际需求进行调整。

Linux系统防CC攻击自动拉黑IP增强版 Shell脚本

脚本说明

本脚本旨在帮助Linux系统管理员自动检测和拉黑进行CC攻击的IP地址,脚本会定期检查访问日志,识别出频繁访问的IP地址,并将这些IP地址添加到防火墙的禁止列表中,从而增强系统的安全性。

脚本要求

需要root权限运行脚本

需要安装iptables(大多数Linux发行版默认已安装)

需要配置好Web服务器的访问日志文件路径

脚本配置

以下是对脚本的基本配置:

日志文件路径,根据实际情况修改
LOG_FILE="/var/log/nginx/access.log"
拦截的IP地址存储文件
BLOCKED_IP_FILE="/var/log/nginx/blocked_ips.txt"
检测频率阈值,单位为秒
FREQUENCY_THRESHOLD=60
拦截时间,单位为秒
BLOCK_TIME=3600
检查频率的IP列表大小
CHECK_SIZE=100
防火墙规则链名
iptables_chain="INPUT"
#!/bin/bash
获取脚本所在目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
加载配置
source "$SCRIPT_DIR/config.sh"
检查日志文件是否存在
if [ ! f "$LOG_FILE" ]; then
    echo "日志文件 $LOG_FILE 不存在,请检查路径是否正确。"
    exit 1
fi
函数:检查IP是否已被拉黑
is_ip_blocked() {
    local ip="$1"
    grep q "$ip" "$BLOCKED_IP_FILE" && return 0 || return 1
}
函数:添加IP到拉黑列表
block_ip() {
    local ip="$1"
    echo "$ip" >> "$BLOCKED_IP_FILE"
    iptables A $iptables_chain s $ip j DROP
    echo "IP $ip 已被拉黑。"
}
函数:移除IP从拉黑列表
unblock_ip() {
    local ip="$1"
    sed i "/$ip/d" "$BLOCKED_IP_FILE"
    iptables D $iptables_chain s $ip j DROP
    echo "IP $ip 已从拉黑列表中移除。"
}
主逻辑
{
    # 读取日志文件,统计每个IP的访问频率
    awk '{print $1}' "$LOG_FILE" | sort | uniq c | sort nr | head n $CHECK_SIZE | while read count ip; do
        current_time=$(date +%s)
        last_time=$(grep m 1 "$ip" "$BLOCKED_IP_FILE" | cut d ' ' f 2)
        # 检查IP是否已被拉黑
        if is_ip_blocked "$ip"; then
            echo "IP $ip 已被拉黑,跳过。"
            continue
        fi
        # 检查IP访问频率是否超过阈值
        if [ "$count" gt "FREQUENCY_THRESHOLD" ]; then
            # 计算距离上次拉黑的时间
            if [ n "$last_time" ]; then
                if [ "$((current_time last_time))" lt "$BLOCK_TIME" ]; then
                    echo "IP $ip 拦截时间未到,跳过。"
                    continue
                fi
            fi
            # 添加IP到拉黑列表
            block_ip "$ip"
        else
            # 如果IP访问频率低于阈值,检查是否需要移除
            if [ n "$last_time" ]; then
                unblock_ip "$ip"
            fi
        fi
    done
} | while read count ip; do
    echo "IP $ip 访问频率:$count"
done

使用方法

1、将以上脚本保存为block_cc.sh

2、修改config.sh 文件中的配置参数。

3、给脚本执行权限:chmod +x block_cc.sh

4、定时运行脚本,可以使用cron 或其他定时任务工具。

注意事项

确保脚本中的日志文件路径正确。

定期检查和清理BLOCKED_IP_FILE 文件,以避免过多无效的IP地址占用空间。

脚本中的FREQUENCY_THRESHOLDBLOCK_TIME 需要根据实际情况调整。

在生产环境中使用前,请先在测试环境中验证脚本效果。

0