本文主要讲解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地址、进行自定义禁止时间,以及支持客户端展示自定义页面等。
实验步骤:
[root@mufenggrow163 ~]# yum -y install epel-release
[root@mufenggrow163 ~]# yum -y install fail2ban
/etc/fail2ban/action.d
#动作文件夹,内含默认文件。iptables以及mail等动作配置。
/etc/fail2ban/fail2ban.conf
#定义了fai2ban日志级别、日志位置及sock文件位置。
/etc/fail2ban/filter.d
#条件文件夹,内含默认文件。过滤日志关键内容设置。
/etc/fail2ban/jail.conf
#主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值。
本次我们想要实现的是:SSH远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用SSHD服务的日志分析,指定动作阀值即可。
[root@mufenggrow163 ~]# vim /etc/fail2ban/jail.conf
[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=[email protected],
sender=[email protected], 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次密码验证失败。
[root@mufenggrow163 ~]# systemctl start fail2ban
#启动fail2ban服务。
[root@mufenggrow163 ~]# systemctl enable fail2ban
#设置开机自动启动。
[root@mufenggrow163 ~]# > /var/log/secure
ssh 192.168.1.63
[email protected]'s password:
#故意输入错误密码。
Permission denied, please try again.
[email protected]'s password:
#故意输入错误密码。
Permission denied, please try again.
[email protected]'s password:
#故意输入错误密码。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
#可以查看到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
[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
[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
[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
好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
日拱一卒无尽有,功不唐捐终入海
喜欢的话记得点赞收藏哦