#!/bin/bash
# 飞书机器人Webhook地址(改成你自己的)
FEISHU_WEBHOOK="你的飞书机器人webhook"
# 限制阈值参数(可以调整)
LIMIT_REQUESTS=20 # 每秒最大请求数
BAN_TIME=3600 # 封禁时间,秒(这里1小时)
# 创建自定义链
iptables -N BT_CC_PROTECT 2>/dev/null
iptables -F BT_CC_PROTECT
# 允许本地回环和已有连接
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 针对HTTP端口80限制连接速率
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name BTCC --rsource
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount $LIMIT_REQUESTS --name BTCC --rsource -j LOG --log-prefix "BTCC_ATTACK: " --log-level 4
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount $LIMIT_REQUESTS --name BTCC --rsource -j DROP
# 针对HTTPS端口443限制连接速率
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --set --name BTCC443 --rsource
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 1 --hitcount $LIMIT_REQUESTS --name BTCC443 --rsource -j LOG --log-prefix "BTCC443_ATTACK: " --log-level 4
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 1 --hitcount $LIMIT_REQUESTS --name BTCC443 --rsource -j DROP
echo "宝塔防CC基础iptables规则已加载"
# 监控日志推送封禁IP到飞书机器人(必须保证系统日志里有iptables日志)
# 日志文件路径(不同系统可能不一样,宝塔默认CentOS7一般是/var/log/messages)
LOGFILE="/var/log/messages"
TMPFILE="/tmp/iptables_cc_tmp.log"
# 监控iptables日志函数
function monitor_cc_log() {
tail -Fn0 $LOGFILE | while read line ; do
echo "$line" | grep "BTCC_ATTACK:" >/dev/null
if [ $? = 0 ]; then
IP=$(echo $line | grep -oE 'SRC=([0-9]+\.){3}[0-9]+' | cut -d= -f2)
echo "检测到HTTP攻击IP: $IP"
# 推送到飞书机器人
curl $FEISHU_WEBHOOK -H "Content-Type: application/json" -d "{\"msg_type\":\"text\",\"content\":{\"text\":\"防CC告警:检测到HTTP攻击IP $IP,已自动封禁。\"}}"
# 使用iptables封禁该IP一小时
iptables -I INPUT -s $IP -j DROP
echo "封禁IP $IP 1小时"
# 一小时后自动解封(异步后台任务)
(sleep $BAN_TIME && iptables -D INPUT -s $IP -j DROP && echo "解封IP $IP") &
fi
echo "$line" | grep "BTCC443_ATTACK:" >/dev/null
if [ $? = 0 ]; then
IP=$(echo $line | grep -oE 'SRC=([0-9]+\.){3}[0-9]+' | cut -d= -f2)
echo "检测到HTTPS攻击IP: $IP"
# 推送到飞书机器人
curl $FEISHU_WEBHOOK -H "Content-Type: application/json" -d "{\"msg_type\":\"text\",\"content\":{\"text\":\"防CC告警:检测到HTTPS攻击IP $IP,已自动封禁。\"}}"
# 封禁一小时
iptables -I INPUT -s $IP -j DROP
echo "封禁IP $IP 1小时"
(sleep $BAN_TIME && iptables -D INPUT -s $IP -j DROP && echo "解封IP $IP") &
fi
done
}
# 你可以后台执行此函数,或者把这部分写成服务启动
# 例如放到后台运行:
# nohup bash -c monitor_cc_log &
echo "请手动后台运行监控日志脚本: nohup bash -c monitor_cc_log &"
防CC策略
一言准备中...
- 本文链接:
- https://www.1c2d.com/?post=7
- 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
文章很赞!支持一下吧
还没有人为TA充电
为TA充电
-
支付宝扫一扫
-
微信扫一扫
感谢支持
文章很赞!支持一下吧
这一切,似未曾拥有