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

二. 效果

image-20231017225346094

image-20231017225313812

结语fighting!