Linux 防御DDOS脚本,亲测有效

脚本依赖iptables防火墙,点击查看详细用法

#!/bin/bash
#
# 功能说明:DDOS防御
# 脚本依赖iptables防火墙 安装命令yum install -y iptables*  详细教程 https://aizsk.com/?tag=null&id=1606566009729339394
# 实时监测 当某个ip在$SECONDS内与本机主动握手(syn=1,ack=0)次数达到$HITCOUNT次时则封禁$BAN_MI分钟
# 封禁时间如果一直触发条件,则以最后一次触发时间开始计数
# 封禁时间不会累加
# 设置白名单IP地址(用逗号分隔),本机局域网ip会自动添加进去
# 执行方法: sh xxx.sh
# 清空该脚本设置的所有规则 1.  iptables -F   2.  iptables-save > /etc/sysconfig/iptables
#-------------------------------------------------参数配置开始--------------------------------------------------------------------
# 设置白名单IP地址(用逗号分隔)
WHITELIST=""
# 设置x秒内主动TCP握手的次数限制
SECONDS=10
HITCOUNT=70
# 设置封禁时长(分钟),误差大概几秒到几十秒
BAN_MINUTES=1
BAN_SECONDS=$((BAN_MINUTES * 60))
# 获取本地网卡所有IP
LOCAL_IPS=$(ip -o -f inet addr show | awk '{print $4}' | cut -d'/' -f1 | tr '\n' ',' | sed 's/,$//')
# 将本地IP添加到白名单
if [ -z "$WHITELIST" ]; then
    WHITELIST="$LOCAL_IPS"
else
    WHITELIST="$WHITELIST,$LOCAL_IPS"
fi
# 创建名为blocklist的新链(如果不存在)
iptables -N blocklist 2>/dev/null
# 创建名为blocklist_ban的新链(如果不存在)
iptables -N blocklist_ban 2>/dev/null
# 清除旧规则
iptables -F blocklist
iptables -F blocklist_ban
# 从 INPUT 链中删除旧的 blocklist 规则
iptables -D INPUT -p tcp -m state --state NEW -j blocklist 2>/dev/null
# 添加新规则
iptables -A INPUT -p tcp -m state --state NEW -j blocklist
iptables -A blocklist -m recent --name blocklist --set
iptables -A blocklist -m recent --name blocklist --update --seconds $SECONDS --hitcount $HITCOUNT -j blocklist_ban
iptables -A blocklist_ban -m limit --limit 1/minute -j LOG --log-prefix "blocklist: " --log-level 4
iptables -A blocklist_ban -j DROP
# 将白名单IP地址添加到blocklist链中,并从recent列表中移除
IFS=','
for IP in $WHITELIST; do
    iptables -D blocklist -s $IP -m recent --name blocklist --remove 2>/dev/null
    iptables -I blocklist 1 -s $IP -m recent --name blocklist --remove
done
# 保存规则
#iptables-save > /etc/sysconfig/iptables
unset IFS

你可能感兴趣的:(linux,服务器,运维,系统安全,linux,网络)