1. 查看当前连接数:

    1. netstat -an | grep SYN
    2. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  2. 简单防御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

  1. 脚本的执行过程:
  2. - 首先通过 netstat -na 查看所有的连接
  3. - 然后通过 awk 提取所有已经成功建立连接的远程 IP 地址(也就是疑似攻击者的 IP
  4. - awk 只对拥有 ESTABLISHED 关键字的行做处理
  5. - split 指定处理第五列(也就是远程 IP 的列),将处理的数据存放入 T 数组中,指定以 : 来分隔
  6. - 接着通过 sort 排序,此时会将相同的 IP 放在一起(因为 uniq 统计的时候是按行处理的,分开的相同行处理不到)
  7. - 我们将本地的连接剔除统计
  8. - 随后通过 uniq 命令对相同的 IP 做统计,统计出其出现的次数
  9. - 再通过 sort 命令做反向的排序( -r 参数出现次数高的排前,低的排后)
  10. - 使用 head 命令来读取前十个 IP 地址
  11. - 随后我们再次使用 awk 过滤出连接数超过 4 次的 IP 地址
  12. - 然后将过滤出来的 IP 地址重定向至 /var/log/rejectip
  13. - 使用 for 循环读取文本中的 IP 地址
  14. - 首先检查这个 IP 地址是否已经加入了 iptables 的规则中
  15. - 若是已经加入则不处理
  16. - 若是还未加入使用 iptables 将其 drop 掉并记录至日志中
  17. 3. **添加计划任务,每分钟执行一次**
  18. ```typescript
  19. $ crontab -e
  20. */1 * * * * /home/shiyanlou/dropip.sh