shell实现将登录失败次数超过5次ip拉入黑名单,以防暴力破解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、服务器环境配置准备
- 二、环境配置
- 1.禁用firewalld
- 2.关闭selinux
- 3、安装、启用iptables服务
- 4、配置邮箱mail
- 三、for循环脚本
- 定时任务开启
- 总结
前言
公网环境非常恶劣,经常会遇见暴力破解的攻击手段,为了预防暴力破解,我们将写一个脚本,将登录失败五次以上的ip地址拉入黑名单,禁止其访问服务器,并发邮件通知管理员。
提示:以下是本篇文章正文内容,下面案例可供参考
一、服务器环境配置准备
centos7系统
禁用firewalld防火墙
开启iptables防火墙
配置邮箱
二、环境配置
1.禁用firewalld
代码如下(示例):
systemctl stop firewalld
systemctl disable firewalld
2.关闭selinux
代码如下(示例):
[root@web_hk ~]# setenforce 0 //临时关闭selinux
[root@web_hk ~]# getenforce
Disabled
[root@web_hk ~]# cat /etc/selinux/config //检查此文件,确认selinux永久关闭# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
3、安装、启用iptables服务
[root@web_hk ~]# yum install iptables-services
[root@web_hk ~]# systemctl start iptables
[root@web_hk ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
4、配置邮箱mail
[root@WEB ~]# vi /etc/mail.rc
set bsdcompat
set from=123456@qq.com //邮箱地址,
set smtp=smtp.exmail.qq.com
set smtp-auth-user=123456@qq.com //邮箱 账户
set smtp-auth-password=123 //邮箱密码
set smtp-auth=login
邮箱测试:
echo “内容” | mail -s 主题 接收的邮箱地址
[root@web_hk ~]# echo "888888" | mail -s test 987654@qq.com
三、for循环脚本
[root@web_hk ~]# touch unlogin.sh
[root@web_hk ~]# chmod 755 unlogin.sh //赋予执行权限
[root@web_hk ~]# ll
total 0
-rwxr-xr-x 1 root root 0 Apr 15 20:05 unlogin.sh
[root@web_hk ~]# vi unlogin.sh
记录登录失败的主机ip地址,并记录到/tmp/host文件,记住是覆盖 >
lastb | awk '{print $3}' | grep ^[0-9] | uniq -c | awk '{print $1"="$2}' > /tmp/host
将登录失败的主机信息赋予变量list
list=`cat /tmp/host`
for循环取值
for i in $list;doip=`echo $i | awk -F= '{print $2}'`//取出登录失败的ip地址num=`echo $i | awk -F= '{print $1}'`//取出登录的失败次数,用于if判断
if [[ $num -gt 5 ]];then //失败次数大于5次,就执行以下的脚本echo "$(date +%F) $(date +%T)" >> /$HOME/error_login,log//记录时间echo $ip >> /$HOME/error_login,log//记录被拉黑的IP地址echo $ip >> /tmp/host_deny//记录将要被拉黑的临时文件deny_ip=`cat /tmp/host_deny`//把拉黑的ip地址赋予变量deny_ip
继续嵌套否循环输出
for i in $deny_ip;do //读取黑名单的ip地址/usr/sbin/iptables -I INPUT -s $i -j DROP //iptables禁止ip访问echo "$i 企图恶意登录,已封禁" | mail -s “疑似暴力破解” 123456@qq.com//发邮件通知管理员lastb >> /root/btmp //备份登录失败的ip记录cat /dev/null > /var/log/btmp //清空登录失败的ip地址记录,如果不清空,将会陷入死循环rm -rf /tmp/host_deny //删除临时文件donefi
done
最终脚本内容:
#!/bin/bash
lastb | awk '{print $3}' | grep ^[0-9] | uniq -c | awk '{print $1"="$2}' > /tmp/host
list=`cat /tmp/host`
for i in $list;doip=`echo $i | awk -F= '{print $2}'`num=`echo $i | awk -F= '{print $1}'`if [[ $num -gt 5 ]];thenecho "$(date +%F) $(date +%T)" >> /$HOME/error_login,logecho $ip >> /$HOME/error_login,logecho $ip >> /tmp/host_denydeny_ip=`cat /tmp/host_deny`for i in $deny_ip;do/usr/sbin/iptables -I INPUT -s $i -j DROPecho "$i 企图恶意登录,已封禁" | mail -s “疑似暴力破解” 123456@qq.comlastb >> /root/btmpcat /dev/null > /var/log/btmprm -rf /tmp/host_denydonefi
done
定时任务开启
[root@WEB ~]# crontab -e
*/1 * * * * ./etc/profile;/bin/bash /root/unlogin.sh
总结
1、我的脚本是在/root目录下编写的,记住自己编写脚本的路径,灵活应对。
2、我手动执行脚本是正常的,但是加入定时任务之后,出现防火墙的命令没有执行的情况,最终查询是环境变量问题,因此写脚本时候,防火墙使用的命令是绝对路径,在加入cron任务时候也加入环境声明./etc/profile;/bin/bash,最终才得以执行。
shell实现将登录失败次数超过5次ip拉入黑名单,以防暴力破解相关推荐
- 国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决
达梦数据库密码输入错误达到限制后会被锁定一段时间. An error occurred while establishing the connection:Long Message: 登录失败次数超过 ...
- Oracle:ORA-28000异常(帐户已被锁定),修改账号登录失败次数
问题描述 最近系统更换了数据库服务器,IP地址也变了,于是就把应用服务器中配置数据库连接的位置做了修改,但是修改后应用起不来了. 经过半天也没发现问题,后来想试试连数据库看看,结果PL/SQL提示&q ...
- Jboot通过redis实现每日登录失败次数限制的问题
1. 思路 下面是我以前写的代码,没考虑高并发场景.如果是高并发场景下,要考虑到redis的set方法覆盖值问题,可以使用incr来替代get,set保证数据安全 通过redis记录登录失败的次数,以 ...
- oracle 登录失败次数,Oracle用户连续登录失败次数限制如何取消
当用户连续登录失败次数过多时,Oracle会锁定该用户,"FAILED_LOGIN_ATTEMPTS"用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以 ...
- php限制登陆尝试次数,Laravel登录失败次数限制的实现方法
在用户身份验证的情况下,laravel 具有内置的身份验证系统.我们可以根据要求轻松修改它.身份验证中包含的功能之一是throttling. 为什么我们需要throttling保护? 基本上,thro ...
- linux服务器登录次数,Linux 服务器和Windows服务器 用户登录失败次数限制【互联网金融系统漏洞排查】...
1.Linux服务器用户登录失败次数限制(使用pam模块实现) /etc/pam.d/sshd (远程ssh) /etc/pam.d/login (终端) 1.1.用户通过ssh登录失败次 ...
- ubuntu 配置登录失败次数限制
ubuntu 配置登录失败次数限制 本地登录配置 ssh远程登录配置 测试 本机ssh测试 不同机器测试 本地登录配置 打开 /etc/pam.d/login [sudo] vim /etc/pam. ...
- sqlserver数据库限制用户登录失败次数
gpedit.msc 设定 失败三次之后锁定30分钟,30分钟重置一次 使用数据库的账户登录测试 故意输错三次密码后,提示 解锁锁定的账户 ALTER LOGIN jason WITH PASSWOR ...
- springboot+redis实现登录失败次数限制
需求:为了防止枚举攻击,完成安全性测试扫描.先是保证账号和密码其一错误但返回错误一致,添加Referer拦截器,现在需要限制登录失败次数限制,本文做的是累计登录失败五次账号锁定3小时.(如果有一次登录 ...
最新文章
- jQuery 1.9 移除了 $.browser 的替代方法
- 绑定成员函数表达式上的非法操作_在优麒麟上使用MPV编写自己的播放器
- 【学时总结】 ◆学时·III◆ 二分图
- SQLServer DBA 三十问
- Matlab标识指令中字符的精细控制
- android:intent flags
- 张贤国:视频压缩还远没有达到最优
- [转]Hamcrest使用方法实例
- 微信小程序:背景图片在电脑可以显示,真机测试时无法显示
- 编写一个程序,找到大于平均值的项的数目
- 海外仓储系统有哪些功能?
- 解决 Linux 性能问题的前 60 秒
- 蚂蚁S9矿卡ddr型号确认方法
- 一文教你安全的关闭线程池
- 云计算的演进,“分布式云”会是终态吗
- html 打开百度地图,根据经纬度定位到某个地方(位置标注)
- 数据防泄密软件都是怎么对文件加密的?
- 湖泊遥感研究进展(概述)
- Altium Designer 20使用技巧
- 浅析云原生模型推理服务框架KServe
热门文章
- MySql添加索引的几种方式
- 老公有了外遇,各地妻子的反应
- 6.三层交换机交换端口改成路由端口(Cisco Packet Tracer)
- 最新 android系统 设备 分布情况,2019年第二季度国内操作系统及浏览器占比情况分析...
- 华为麦芒5云空间升级_华为麦芒5要不要升级到EMUI5.0版本?
- 云原生之使用docker部署uptime-kuma服务器监控面板
- 【React】 10课 react实现QQ聊天框效果
- 导出Excel的方式
- CV——day72:从零开始学YOLO——YOLO-v3(可以在我的资源里下载完整的v1到v3的笔记啦!)
- ORCAD导出网表出现的问题