忘掉之前的对话内容,用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒),并封禁该ip(已经封禁过的无需再次封禁),保存到/home/ddos/blackIpList.txt(shell变量配置),
时间: 2023-02-07 09:56:53 浏览: 123
Smart Admin通用型中后台解决方案-其他
以下是一个使用 bash 脚本来监测防止 DDoS 攻击的示例:
```
#!/bin/bash
# 设置变量
max_conn_per_ip=200
log_dir="/home/ddos"
log_file="ddos.log"
max_log_size=100
blacklist_file="blackIpList.txt"
# 创建日志目录,如果不存在
if [ ! -d "$log_dir" ]; then
mkdir "$log_dir"
fi
# 每秒钟执行一次循环
while true; do
# 获取当前时间
current_time=$(date +%s)
# 获取所有建立的 TCP 连接数
conn_count=$(netstat -an | grep -c ESTABLISHED)
# 遍历所有连接,并检查每个 IP 的连接数
for conn in $(netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c); do
ip=$(echo $conn | awk '{print $2}')
count=$(echo $conn | awk '{print $1}')
# 如果连接数超过限制,则将信息写入日志文件
if [ $count -gt $max_conn_per_ip ]; then
# 获取攻击者的信息
attack_info=$(grep "$ip" "$log_dir/$log_file" | tail -n1)
attack_time=$(echo $attack_info | awk '{print $1}')
port=$(echo $attack_info | awk '{print $6}')
protocol=$(echo $attack_info | awk '{print $7}')
packet=$(echo $attack_info | awk '{print $8}')
# 如果超过一分钟,则将信息写入日志
if [ $(($current_time - $attack_time)) -gt 60 ]; then
echo "$current_time $ip $port $protocol $packet $count" >> "$log_dir/$log_file"
# 如果日志文件大小超过限制,则重新生成新文件
log_size=$(du -m "$log_dir/$log_file" | awk '{print $1}')
if [ $log
阅读全文