以下是一个示例脚本,注意这仅仅是一个示例,并不能直接使用,需要根据实际情况进行修改:
#!/bin/bash
# 配置参数
check_interval=20 # 检测间隔,单位为秒
max_conn=10 # 每秒最大连接数
log_dir="/home/ddos" # 日志目录
log_size=100 # 日志文件大小,单位为MB
ban_time=3600 # 封禁时长,单位为秒
# 循环检测
while :
do
# 获取当前时间
now=`date +%s`
# 获取每个 IP 每秒建立的 TCP 连接数
# -n 指定时间间隔,单位为秒,此处为 1 秒
# -z 指定统计时间粒度,单位为秒,此处为 1 秒
# -s 指定过滤器,此处为 tcp 连接建立
# -v 指定统计值,此处为 ip 数量
# -x 指定过滤器补充信息,此处为端口
# -i 指定网卡
# -o 指定输出格式,此处为 CSV 格式
# 以上命令会输出如下数据:
# 时间戳,端口,IP地址,数量
# 其中时间戳是从 1970-01-01 00:00:00 开始的秒数
conn_data=`tcpdump -n -z 1 -s 0 -v -x -i eth0 -oX - 'tcp[tcpflags] & (tcp-syn) != 0' | awk -F"," '{print $1","$5","$6","$10}'`
# 遍历每个 IP
while read line