You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写抵御DDoS攻击的连接数监控与IP封禁脚本

请求编写抵御DDoS攻击的连接数监控与IP封禁脚本

没问题,我来帮你搞定这个脚本,同时给你一些实用建议让它更靠谱。下面是一个基于bash的脚本,完全满足你的需求,我会一步步解释它的逻辑:

完整脚本代码

#!/bin/bash

# 定义要排除的IP
EXCLUDE_IP="87.91.143.119"
# 连接数阈值
THRESHOLD=100

# 使用ss命令获取所有TCP/UDP连接的远程IP(比netstat更高效),统计每个IP的连接数
ss -ntu | awk '{print $5}' | cut -d: -f1 | grep -v '^$' | sort | uniq -c | sort -nr | while read COUNT IP; do
    # 跳过排除的IP
    if [ "$IP" == "$EXCLUDE_IP" ]; then
        continue
    fi
    # 如果连接数超过阈值,执行封禁
    if [ "$COUNT" -gt "$THRESHOLD" ]; then
        echo "$(date): Banning IP $IP with $COUNT connections" >> /var/log/ddos_ban.log
        # 使用iptables封禁IP(如果用firewalld可替换为firewall-cmd相关命令)
        iptables -A INPUT -s "$IP" -j DROP
        # 可选:同时封禁出站连接(按需开启)
        # iptables -A OUTPUT -d "$IP" -j DROP
    fi
done

脚本逻辑解释

  • 连接数统计:用ss -ntu获取所有TCP和UDP的连接(如果只需要TCP可去掉u参数),通过awk、cut提取远程IP,再用uniq -c统计每个IP的连接数,最后按连接数倒序排列。
  • 排除特定IP:通过条件判断跳过你指定的87.91.143.119,不管它的连接数多少都不会被封禁。
  • IP封禁与日志:当IP连接数超过阈值时,用iptables添加DROP规则拦截流量,同时把封禁记录写入/var/log/ddos_ban.log日志文件,方便后续排查。

实用建议

  • 优先用ss替代netstat:ss是netstat的新一代替代工具,性能远高于netstat,在高连接数场景下响应更快。如果你的系统没有ss,可以替换成netstat -ntu,逻辑完全一致。
  • 定时运行脚本:把脚本放到cron定时任务里,比如每2分钟运行一次,实现持续监控:
    # 编辑cron任务
    crontab -e
    # 添加一行:每2分钟运行一次脚本(假设脚本路径是/usr/local/bin/ddos_ban.sh)
    */2 * * * * /usr/local/bin/ddos_ban.sh
    
  • 添加自动解封机制:长时间封禁可能会误杀正常IP,你可以写个解封脚本,比如每天凌晨自动清空封禁规则:
    # 解封脚本示例(保存为/usr/local/bin/ddos_unban.sh)
    #!/bin/bash
    iptables -F INPUT
    iptables -F OUTPUT
    echo "$(date): Unbanned all IPs" >> /var/log/ddos_ban.log
    
    然后添加到cron:
    0 0 * * * /usr/local/bin/ddos_unban.sh
    
  • 测试后再上线:先手动运行脚本,检查日志和iptables规则,确认没有误封禁正常IP后,再放到定时任务里。
  • 防火墙规则持久化:如果用iptables,记得安装iptables-persistent(Debian/Ubuntu)或iptables-services(CentOS/RHEL),防止服务器重启后封禁规则丢失。

额外提醒

如果你的服务器面临大规模DDoS攻击,单纯靠这个脚本可能不够,建议配合专业工具(比如fail2ban)或者联系服务商开启云端DDoS防护服务,这样能更全面地抵御攻击。

备注:内容来源于stack exchange,提问作者MaxIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:33:02