linux预防网络攻击脚本

概览:

  • 环境ubuntu20.04 centos7
  • 脚本
  • 效果

命令实现概览:

  • 截取第六列分析Peer Address:Port
  • 文件形式:cat 1.log |awk -F ‘[ :]+’ ‘NR>1{print $6}’ |sort -rn |uniq -c
  • 命令形式(筛选特定行):ss -ant |awk -F ‘[ :]+’ ‘/^ESTAB|^FIN-WAIT-1/{print $6}’ |sort -rn |uniq -c

一. 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash

set -e
red="31m"
green="32m"
ss_count=100
conmand() {
cat <<EOF
   0. awk -F '[ :]+' '/^ESTAB/{print $6}' ${pid} |sort -rn |uniq -c >> ${shuchu} 2>&1  
   1. -F [ :]+以一个或多个冒号或者空格分隔 命令详解
   2. /^ESTAB/{print $4}:读取文件的第四列且其为以//开头
   3. sourt -rn :Sort 让相同ip/内容的连到一块儿 用来排序的 r:排序 n:根据数字排序
   4. uniq  -c 把上下相同的一样的行合并到一起
EOF
}

check_network (){
pid=/opt/ss_ant.log              # 将变量设置为命令
shuchu=/opt/check_ip.log         # 将变量设置为文件
ss -ant > ${pid}
awk -F '[ :]+' '/^ESTAB/{print $6}' ${pid} |sort -rn |uniq -c > ${shuchu} 2>&1
while read line
do
  count=${line% *}
  ip=${line#* }
  echo -e "\033[${green}
            IP: $ip 在ss -ant中次数是: $count \033[0m"
  ipcount=`ufw status |grep -wc ${ip} ||true` #grep -wc精确匹配并且统计
if [ "${count}" -ge "${ss_count}" -a "${ipcount}" -eq "0" ];
  # [ $count -ge 100 ] && [ $ipcount -eq 0 ];
  # ss -ant 查看访问的次数 和ufw status |grep -wc ".."在防火墙中的次数
  # 当ss -ant中的次数>100 和在防火墙中的 次数=0时才执行 禁用命令
  then
      echo -e "\033[${red}
            ${ip} 在防火墙中出现的次数是:  ${ipcount} 大于 0
            ${ip} 在ss -ant中出现次数大于: ${ss_count} 已满足检测条件将执行CMD将此IP加入防火墙: sudo ufw deny from ${ip} \033[0m"
      # sudo ufw deny from ${ip}   # 按照实际需求将其注释或取消注释
  else
      echo -e "\033[${green}
            未检测到符合条件的恶意攻击IP \033[0m"
fi
done<${shuchu}
}

main (){
    conmand
    check_network
}
main

二. 效果

结语fighting!