忘记之前的对话,用linux写一个脚本,要求可以使用iptables防火墙智能防御ddos攻击,要求有黑名单、 白名单功能,并可以配置端口号的访问频率(每秒最多几个tcp连接),多个端口号用逗号隔开,*表示所有端口, 超过访问频率的ip要进行记录攻击时间(精确到毫秒)、ip、攻击报文等可以用于追溯的信息,iptables放行所有端口,所有配置项采用shell变量配置, 并给出详细备注, 日志保存到/home/ddoslog目录下,每个日志最大500MB,
时间: 2023-02-07 18:50:02 浏览: 212
下面是一个基于iptables的防御DDOS攻击的Linux脚本示例:
```bash
#!/bin/bash
# 黑名单IP列表,使用逗号隔开
black_list="192.168.1.1,192.168.1.2"
# 白名单IP列表,使用逗号隔开
white_list="192.168.1.3,192.168.1.4"
# 配置端口号的访问频率
# 格式为:端口号:最大连接数/秒
port_rate="80:10,443:20"
# 日志保存目录
log_dir="/home/ddoslog"
# 创建日志目录
mkdir -p $log_dir
# 清空防火墙规则
iptables -F
# 拒绝所有黑名单IP的访问
for ip in $black_list; do
iptables -A INPUT -s $ip -j DROP
done
# 接受所有白名单IP的访问
for ip in $white_list; do
iptables -A INPUT -s $ip -j ACCEPT
done
# 限制端口的访问频率
for rate in $port_rate; do
port=$(echo $rate | cut -d: -f1)
max_conns=$(echo $rate | cut -d: -f2)
iptables -A INPUT -p tcp --dport $port -m connlimit --connlimit-above $max_conns -j DROP
done
# 放行所有端口的访问
iptables -A INPUT -p tcp -j ACCEPT
# 记录被攻击的IP、时间、报文等信息
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
# 记录日志,每个日志最大500MB
logger -p local7.info -t DDOS -f $log_dir/ddos.log
```
注释:
- 黑名单:指定的IP将被直接拒绝访问
-
阅读全文