• 强化服务器安全!CentOS 7如何使用fail2ban防范SSH暴力破解攻击?


    在这里插入图片描述

    前言

    本文主要讲解centos7操作系统下,如何使用fail2ban防范SSH暴力破解。

    🏠个人主页:我是沐风晓月
    🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家
    😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 一起加油进步
    🍺🍺🍺 💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

    一. 实验环境

    本测试需要的环境:

    • 系统: centos7.9

    • python 版本大于2.4

    • IP: 192.168.1.163

    • hostname: mufenggrow163

    二. 实验思路及步骤

    本次使用用的工具是: fail2ban,这一款利用Python开发 的工具,它使用定义规则和过滤器来监视服务器上正在运行的服务日志,识别和封禁恶意的用户IP地址,从而防止他们继续进行攻击。

    最初设计用于保护SSH服务,但现在已经扩展支持了其他服务,如FTP、HTTP、SMTP、POP3等。它可以在IP列表中封锁或者释放IP地址,支持系统日志、TCP Wrappers等多种方式存储禁止访问列表。

    Fail2Ban还具有有用的其他功能,比如电子邮件通知,可以向管理员发送关于禁止IP列表的报告,允许黑名单或白名单IP地址、进行自定义禁止时间,以及支持客户端展示自定义页面等。

    实验步骤:

    1. 配置好实验环境(上文已配好centos7的实验环境)
    2. 安装epel工具
    3. yum安装fail2ban
    4. 对配置文件进行设置
    5. 远程访问输错密码测试

    三. 实验过程

    3.1 用yum 安装 fail2ban

    [root@mufenggrow163 ~]# yum -y install epel-release
    
    [root@mufenggrow163 ~]# yum -y install fail2ban
    
    • 1
    • 2
    • 3

    3.2 相关的配置文件介绍

    /etc/fail2ban/action.d

    #动作文件夹,内含默认文件。iptables以及mail等动作配置。

    /etc/fail2ban/fail2ban.conf

    #定义了fai2ban日志级别、日志位置及sock文件位置。

    /etc/fail2ban/filter.d

    #条件文件夹,内含默认文件。过滤日志关键内容设置。

    /etc/fail2ban/jail.conf

    #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值。

    3.3 修改配置文件

    本次我们想要实现的是:SSH远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。

    因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用SSHD服务的日志分析,指定动作阀值即可。

    [root@mufenggrow163 ~]# vim /etc/fail2ban/jail.conf
    
    • 1
    [DEFAULT]               
    
    #全局设置。
    
    ignoreip = 127.0.0.1/8       
    
    #忽略的IP列表,不受设置限制。
    
    bantime  = 600             
    
    #屏蔽时间,单位:秒。
    
    findtime  = 600             
    
    #这个时间段内超过规定次数会被ban掉。
    
    maxretry = 60                
    
    #最大尝试次数。
    
    backend = auto            
    
    #日志修改检测机制(gamin、polling和auto这三种)。
    
    [sshd]               
    
    #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
    
    port    = ssh
    
    logpath = %(sshd_log)s
    
    backend = %(sshd_backend)s
    
    #加入如下内容
    
    enabled  = true             
    
    #是否激活此项(true/false)修改成 true。
    
    filter = sshd                   
    
    #过滤规则filter的名字,对应filter.d目录下的sshd.conf。
    
    action = iptables[name=SSH, port=ssh, protocol=tcp]             #动作的相关参数,对应action.d/iptables.conf文件。
    
    sendmail-whois[name=SSH, 
    
    dest=you@example.com, 
    
    sender=fail2ban@example.com, sendername="Fail2Ban"]                    
    
    #触发报警的收件人。
    
    logpath = /var/log/secure          
    
    #检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath = /var/log/sshd.log 。
    
    #5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下。
    
    bantime = 3600   
    
    #禁止用户IP访问主机1小时。
    
    findtime = 300    
    
    #在5分钟内内出现规定次数就开始工作。
    
    maxretry = 3       
    
    #3次密码验证失败。
    
    • 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
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    3.4 重启服务

    [root@mufenggrow163 ~]# systemctl start fail2ban

    #启动fail2ban服务。

    [root@mufenggrow163 ~]# systemctl enable fail2ban

    #设置开机自动启动。

    3.5 测试

    • 清空 日志
    [root@mufenggrow163 ~]# > /var/log/secure  
    
    • 1
    • 接下来故意输错三次密码:
    ssh 192.168.1.63
    
    root@192.168.1.63's password:                
    
    #故意输入错误密码。
    
    Permission denied, please try again.
    
    root@192.168.1.63's password:                
    
    #故意输入错误密码。
    
    Permission denied, please try again.
    
    root@192.168.1.63's password:                
    
    #故意输入错误密码。
    
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 查看是否被屏蔽:
    #可以查看到192.168.1.64该IP被iptables禁止所有访问。
    
    Chain fail2ban-SSH (1 references)
    
    target     prot opt source               destination
    
    REJECT      all  --  192.168.1.64        anywhere
    
    RETURN     all  --  anywhere           anywhere
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 使用fail2ban-client命令查看:
    [root@mufenggrow163 ~]# fail2ban-client status             
    
     #配置好之后我们检测下fail2ban是否工作。
    
    Status
    
    |- Number of jail:    1
    
    `- Jail list:        sshd              
    
    #具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功。
    
    [root@mufenggrow163 ~]# fail2ban-client status sshd
    
    Status for the jail: sshd
    
    |- Filter
    
    |  |- Currently failed:    0
    
    |  |- Total failed:    0
    
    |  `- Journal matches:   _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    
    `- Actions
    
    |- Currently banned: 1
    
    |- Total banned: 1
    
    `- Banned IP list:       192.168.1.64
    
    
    
    • 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
    • 查看fail2ban的日志
    [root@mufenggrow163 ~]# fail2ban-client status             
    
     #配置好之后我们检测下fail2ban是否工作。
    
    Status
    
    |- Number of jail:    1
    
    `- Jail list:        sshd              
    
    #具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功。
    
    [root@mufenggrow163 ~]# fail2ban-client status sshd
    
    Status for the jail: sshd
    
    |- Filter
    
    |  |- Currently failed:    0
    
    |  |- Total failed:    0
    
    |  `- Journal matches:   _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    
    `- Actions
    
    |- Currently banned: 1
    
    |- Total banned: 1
    
    `- Banned IP list:       192.168.1.64
    
    
    • 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
    • 查看fail2ban的日志能够看到相关的信息。

    [root@mufenggrow163 ~]# tail /var/log/fail2ban.log

    2023-6-07 16:11:01,476 fail2ban.actions [27932]: NOTICE [sshd] Ban 192.168.1.64

    四. 总结

    问题: 如果你的同事,一不小心输错三次密码,被封IP,如何解决?
    清空日志,重启fail2ban
    或者直接从黑名单中移除。

     fail2ban-client set ssh-iptables  unbanip 192.168.1.22
    
    • 1

    💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
    💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
    💕 日拱一卒无尽有,功不唐捐终入海
    💕 喜欢的话记得点赞收藏哦

  • 相关阅读:
    MySQL 篇-深入了解 DDL 语言(一)
    一文搞懂EMAS Serverless小程序开发|电子书免费下载
    深度学习之基于Tensorflow卷积神经网络花卉识别系统
    Shiro入门以及Shiro与web整合
    保护互联网数据安全:关键方法与最佳实践
    易错知识点3
    【计算机图形学入门】笔记2:向量与线性代数(图形学中用到的线性代数)
    Android 控件保持宽高比得几种方式
    区域运营推广策划案
    docker安装nacos 使用外置的mysql作为存储
  • 原文地址:https://blog.csdn.net/wisdom_futrue/article/details/131140699