查看当前连接数:
netstat -an | grep SYNnetstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
简单防御DDoS脚本 ```typescript
!/bin/bash
netstat -na | awk ‘/ESTABLISHED/{split($5,T,”:”);print T[1]}’ | sort | grep -v -E ‘192.168|127.0’ | uniq -c | sort -rn | head -10 | awk ‘{if ($2!=null && $1>4) {print $2}}’ > /var/log/rejectip
for i in $(cat /var/log/rejectip)
do
rep=$(iptables-save | grep $i)
if [[ -z $rep ]];then
/sbin/iptables -A INPUT -s $i -j DROP
echo “$i kill at date“>>/var/log/ddos-ip
fi
done
脚本的执行过程:- 首先通过 netstat -na 查看所有的连接- 然后通过 awk 提取所有已经成功建立连接的远程 IP 地址(也就是疑似攻击者的 IP)- awk 只对拥有 ESTABLISHED 关键字的行做处理- split 指定处理第五列(也就是远程 IP 的列),将处理的数据存放入 T 数组中,指定以 : 来分隔- 接着通过 sort 排序,此时会将相同的 IP 放在一起(因为 uniq 统计的时候是按行处理的,分开的相同行处理不到)- 我们将本地的连接剔除统计- 随后通过 uniq 命令对相同的 IP 做统计,统计出其出现的次数- 再通过 sort 命令做反向的排序( -r 参数出现次数高的排前,低的排后)- 使用 head 命令来读取前十个 IP 地址- 随后我们再次使用 awk 过滤出连接数超过 4 次的 IP 地址- 然后将过滤出来的 IP 地址重定向至 /var/log/rejectip 中- 使用 for 循环读取文本中的 IP 地址- 首先检查这个 IP 地址是否已经加入了 iptables 的规则中- 若是已经加入则不处理- 若是还未加入使用 iptables 将其 drop 掉并记录至日志中3. **添加计划任务,每分钟执行一次**```typescript$ crontab -e*/1 * * * * /home/shiyanlou/dropip.sh
