忘记之前的对话,用linux写一个脚本,要求可以使用iptables防火墙智能防御ddos攻击,要求有黑名单、 白名单功能,并可以配置端口号的访问频率(每秒最多几个tcp连接),多个端口号用逗号隔开,星号*表示所有端口, 超过访问频率的ip要进行记录攻击时间(精确到毫秒)、ip、攻击报文等可以用于追溯的信息,iptables放行所有端口,所有配置项采用shell变量配置, 并给出详细备注, 日志保存到/home/ddoslog目录下,每个日志最大500MB,
时间: 2023-02-07 19:52:29 浏览: 138
在 Linux 中可以使用 iptables 防火墙来防御 DDOS 攻击。下面是一个基本的脚本示例:
```
#!/bin/bash
# 黑名单 IP 列表
BLACKLIST=("1.1.1.1" "2.2.2.2")
# 白名单 IP 列表
WHITELIST=("3.3.3.3" "4.4.4.4")
# 端口号和访问频率的对应关系
# 格式为:端口号:访问频率
PORT_RATE_MAP=("80:50" "443:100" "22:30" "*:10")
# DDOS 日志目录
DDOS_LOG_DIR="/home/ddoslog"
# DDOS 日志文件最大值 (单位:MB)
DDOS_LOG_MAX_SIZE=500
# 清空所有链
iptables -F
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 放行白名单中的 IP
for ip in "${WHITELIST[@]}"; do
iptables -A INPUT -s "$ip" -j ACCEPT
done
# 对于端口号和访问频率的对应关系,添加限制
for port_rate in "${PORT_RATE_MAP[@]}"; do
port=$(echo "$port_rate" | cut -d ':' -f 1)
rate=$(echo "$port_rate" | cut -d ':' -f 2)
iptables -A INPUT -p tcp --dport "$port" -m limit --limit "$rate/s" --limit-burst 50 -j ACCEPT
done
# 对于黑名单中的 IP,直接丢弃
for ip in "${BLACKLIST[@]}"; do
iptables -A INPUT -s "$ip" -j DROP
done
# 对于其他的 IP,记录攻击时间、IP、攻击报文等信息,并将日志保存到 $DDOS_LOG_DIR 目录下
iptables -A INPUT -j LOG --log-prefix "DDOS attack: " --log-level 4 --log-tcp-
阅读全文