提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、服务器环境配置准备
  • 二、环境配置
    • 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拉入黑名单,以防暴力破解相关推荐

  1. 国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决

    达梦数据库密码输入错误达到限制后会被锁定一段时间. An error occurred while establishing the connection:Long Message: 登录失败次数超过 ...

  2. Oracle:ORA-28000异常(帐户已被锁定),修改账号登录失败次数

    问题描述 最近系统更换了数据库服务器,IP地址也变了,于是就把应用服务器中配置数据库连接的位置做了修改,但是修改后应用起不来了. 经过半天也没发现问题,后来想试试连数据库看看,结果PL/SQL提示&q ...

  3. Jboot通过redis实现每日登录失败次数限制的问题

    1. 思路 下面是我以前写的代码,没考虑高并发场景.如果是高并发场景下,要考虑到redis的set方法覆盖值问题,可以使用incr来替代get,set保证数据安全 通过redis记录登录失败的次数,以 ...

  4. oracle 登录失败次数,Oracle用户连续登录失败次数限制如何取消

    当用户连续登录失败次数过多时,Oracle会锁定该用户,"FAILED_LOGIN_ATTEMPTS"用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以 ...

  5. php限制登陆尝试次数,Laravel登录失败次数限制的实现方法

    在用户身份验证的情况下,laravel 具有内置的身份验证系统.我们可以根据要求轻松修改它.身份验证中包含的功能之一是throttling. 为什么我们需要throttling保护? 基本上,thro ...

  6. linux服务器登录次数,Linux 服务器和Windows服务器 用户登录失败次数限制【互联网金融系统漏洞排查】...

    1.Linux服务器用户登录失败次数限制(使用pam模块实现) /etc/pam.d/sshd    (远程ssh) /etc/pam.d/login    (终端) 1.1.用户通过ssh登录失败次 ...

  7. ubuntu 配置登录失败次数限制

    ubuntu 配置登录失败次数限制 本地登录配置 ssh远程登录配置 测试 本机ssh测试 不同机器测试 本地登录配置 打开 /etc/pam.d/login [sudo] vim /etc/pam. ...

  8. sqlserver数据库限制用户登录失败次数

    gpedit.msc 设定 失败三次之后锁定30分钟,30分钟重置一次 使用数据库的账户登录测试 故意输错三次密码后,提示 解锁锁定的账户 ALTER LOGIN jason WITH PASSWOR ...

  9. springboot+redis实现登录失败次数限制

    需求:为了防止枚举攻击,完成安全性测试扫描.先是保证账号和密码其一错误但返回错误一致,添加Referer拦截器,现在需要限制登录失败次数限制,本文做的是累计登录失败五次账号锁定3小时.(如果有一次登录 ...

最新文章

  1. jQuery 1.9 移除了 $.browser 的替代方法
  2. 绑定成员函数表达式上的非法操作_在优麒麟上使用MPV编写自己的播放器
  3. 【学时总结】 ◆学时·III◆ 二分图
  4. SQLServer DBA 三十问
  5. Matlab标识指令中字符的精细控制
  6. android:intent flags
  7. 张贤国:视频压缩还远没有达到最优
  8. [转]Hamcrest使用方法实例
  9. 微信小程序:背景图片在电脑可以显示,真机测试时无法显示
  10. 编写一个程序,找到大于平均值的项的数目
  11. 海外仓储系统有哪些功能?
  12. 解决 Linux 性能问题的前 60 秒
  13. 蚂蚁S9矿卡ddr型号确认方法
  14. 一文教你安全的关闭线程池
  15. 云计算的演进,“分布式云”会是终态吗
  16. html 打开百度地图,根据经纬度定位到某个地方(位置标注)
  17. 数据防泄密软件都是怎么对文件加密的?
  18. 湖泊遥感研究进展(概述)
  19. Altium Designer 20使用技巧
  20. 浅析云原生模型推理服务框架KServe

热门文章

  1. MySql添加索引的几种方式
  2. 老公有了外遇,各地妻子的反应
  3. 6.三层交换机交换端口改成路由端口(Cisco Packet Tracer)
  4. 最新 android系统 设备 分布情况,2019年第二季度国内操作系统及浏览器占比情况分析...
  5. 华为麦芒5云空间升级_华为麦芒5要不要升级到EMUI5.0版本?
  6. 云原生之使用docker部署uptime-kuma服务器监控面板
  7. 【React】 10课 react实现QQ聊天框效果
  8. 导出Excel的方式
  9. CV——day72:从零开始学YOLO——YOLO-v3(可以在我的资源里下载完整的v1到v3的笔记啦!)
  10. ORCAD导出网表出现的问题