首页 > 系统相关 >基于firewalld的防爆shell脚本

基于firewalld的防爆shell脚本

时间:2023-02-18 20:32:40浏览次数:46  
标签:shell log -- ip cmd firewalld ips 防爆 firewall

统计ssh非法暴破源ip

在维护linux服务器中,当开启sshd服务时,总会有一些不怀好意的访问者要来试探一下弱口令,假若访问失败的日志文件为/var/log/secure,总是手动来翻日志,也是麻烦,服务器数量较多时,也显得力不从心,基于此,我们可以脚本化来自动分析日志,找出这些访问者,直接拉黑。

首先,统计基于ip的问题访问数量。如下:

grep -E "Failed|Invalid" /var/log/secure|sed -re 's/.*[ ](([0-9]{1,3}\.){3}[0-9]{1,3})[ ].*/\1/g'|sort|uniq -c|sort -n

      1 38.75.136.182
1 81.68.154.131
3 81.68.188.196
8 150.158.180.66
14 81.68.166.172
26 101.132.119.42
67 118.178.189.178

将源ip加入防火墙屏蔽

接着,将上述恶意源ip统计数据定向至/var/log/failed_login.log

读取统计数据,筛选恶意访问次数>100(可根据需要自行设置)的ip,如果该ip并未加入黑名单,则将其加入防火墙黑名单

cat /var/log/failed_login.log|awk '$1 > 100{"firewall-cmd --list-all|grep "$2|getline ip;if (ip == "") system("firewall-cmd --add-rich-rule=\"rule family=\"ipv4\" source address=\""$2"\" drop \" --permanent")}END{system("firewall-cmd --reload")}'

或者创建ipset黑名单

firewall-cmd --permanent --new-ipset=black_ips
firewall-cmd --add-rich-rule="rule family="ipv4" source ipset=black_ips log drop" --permanent
tail /var/log/failed_login.log|awk '$1 > 100{"firewall-cmd --ipset=black_ips --get-entries|grep "$2|getline ip;if (ip == "") system("firewall-cmd --permanent --ipset=black_ips --add-entry="$2)}END{system("firewall-cmd --reload")}'

完整shell脚本

最终得到完整功能的shell脚本,如下:

#!/bin/bash
max=100
statistics_ip(){
grep -E "Failed|Invalid" /var/log/secure|sed -re 's/.*[ ](([0-9]{1,3}\.){3}[0-9]{1,3})[ ].*/\1/g'|sort|uniq -c|sort -n
}
add_ips_to_firewalld(){
if ! [[ `firewall-cmd --get-ipsets|grep black_ips` ]];then
firewall-cmd --permanent --new-ipset=black_ips
fi
if ! [[ `firewall-cmd --list-all|grep black_ips` ]];then
firewall-cmd --add-rich-rule="rule family="ipv4" source ipset=black_ips log drop" --permanent
fi
statistics_ip|awk -v max=$max '$1 > max{"firewall-cmd --ipset=black_ips --get-entries|grep "$2|getline ip;if (ip == "") system("firewall-cmd --permanent --ipset=black_ips --add-entry="$2)}END{system("firewall-cmd --reload")}'
}
add_ips_to_firewalld

自动屏蔽

最后,可将上述脚本加入计划任务,设置每隔一段时间(比如5分钟或者根据需要自行定夺)执行一次。

自动解除屏蔽ip

当某个(些)ip被加入防火墙黑名单后,如果之后的日志统计中没有再出现,如果需要从黑名单中移除,也可以使用shell脚本来完成。

比如:自动删除黑名单中屏蔽的,但是不在后续统计日志中出现次数>100的ip,脚本实现如下:

#!/bin/bash
read -d "" -a ips_tmp< <(firewall-cmd --list-all|grep -w rule|cut -d"\"" -f4)
read -d "" -a ips < <(awk '$1>100{print $2}' /var/log/failed_login.log)
ips=echo ${ips[@]}

for ((i=0;i<${#ips_tmp[@]};i++))
do
if ! echo $ips|grep -w $ips_tmp[$i];then
firewall-cmd --remove-rich-rule="rule family="ipv4" source address="${ips_tmp[$i]}" log drop" --permanent

#用ipset

# firewall-cmd --permanent --ipset=black_ips --remove-entry=${ips_tmp[$i]}

fi
done

可将其加入任务计划,周期可以设置稍微长一些,比如一周,一月甚至更长的周期。

注意:

如果用作统计的日志文件/var/log/failed_login.log增长比较快,必要的情况下,要做好日志分割。

标签:shell,log,--,ip,cmd,firewalld,ips,防爆,firewall
From: https://blog.51cto.com/u_3823536/6065515

相关文章

  • Shell命令-常用操作
    Shell基础1Shell命令的基本格式基本格式command[选项][参数][]表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参......
  • Hadoop-HDFS-shell命令
      第2章HDFS的Shell操作(开发重点)2.1基本语法hadoopfs具体命令 OR hdfsdfs具体命令两个是完全相同的。2.2命令大全[[email protected]]$......
  • PowerShell 脚本自动执行 Azure 任务
    PowerShell脚本自动执行Azure任务Azure提供了三种管理工具:Azure门户:Azure门户是一个网站,可在其中创建、配置和更改Azure订阅中的资源,该门户是一个图形用户界面......
  • powershell和cmd区别是什么
    前言powershell和cmd区别:1、CMD写的BAT脚本我们看作是面向过程的,而PowerShell则是面向对象的,是一种站在使用者的角度进行脚本的编写;2、CMD只能执行基本的任务,PowerShell......
  • Java-webshell 排查
    参考:https://javasec.org/javaweb/MemoryShell/https://goodapple.top/archives/1355简介本次分享为javawebshell排查初级。抛砖引玉java获取web权限的shell......
  • 关于 Powershell 的管道的坑
    PowerShell允许在管道中包含本机外部命令。但是,请务必注意,PowerShell的管道面向对象,不支持原始字节数据。管道或重定向输出原始字节数据的本机程序的输出会将输出转换......
  • hdfs操作——hdfs的shell命令和hdfs的JavaAPI操作
    hdfs解决hadoop海量数据的存储。shell命令(所有hadoopfs可由hdfsdfs代替)(1)在hdfs上创建目录hadoopfs-mkdir目录名(2)本地文件的上传hadoopfs-copyFromLoc......
  • Linux 中设置vim编辑器编写shell脚本自动缩进
     001、打开vim的配置文件:vim~/.vimrc然后在其末尾增加如下内容,然后保存退出:ifhas("autocmd")filetypeindentonautocmdFileType*setlocalts=4sts......
  • shell 判断文件夹或文件是否存在
    文件夹不存在则创建if[!-d"/data/"];thenmkdir/dataelseecho"文件夹已经存在"fi文件存在则删除if[!-f"/data/filename"];thenecho"文件不存在"els......
  • 一篇教会你写90%的shell脚本
    原文链接 :https://zhuanlan.zhihu.com/p/264346586  shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就......