Linux/CentOS利用Fail2ban+Firewalld防止SSH被暴力破解

2021-09-17 56点热度 0人点赞 0条评论

说明

最近SSH登录CentOS服务器,提示

Last failed login: Fri Sep 17 08:02:29 CST 2021 from 1.2.3.4 on ssh:notty
There was 7862 failed login attempts since the last successful login.
Last login: Thu Sep 16 16:04:07 2021 from 2.3.4.5

每天都要几千次的暴力破解尝试!照这样下去,总有一天会被网络上的爬虫试出密码!

问题解决

CentOS7以上,自带了firwalld的防火墙,我们可以利用firewalld把多次尝试SSH登录的IP加入黑名单,但是要怎么样找出这些IP,且自动加入黑名单呢?

要请出今天的主角:fail2ban,它可以监控日志,分析出IP,然后自动把IP加入黑名单。

准备工作,安装fail2ban

首先确定CentOS的防火墙是firewalld,如果是iptables,使用fail2ban也是可以,不过配置要稍加修改

#如果防火墙是iptables,先关闭,当然如果iptables已经用于正式用途了,就不用firewall了
systemctl stop iptables
systemctl disable iptables

#查看Firewalld状态
firewall-cmd --state

#启动firewalld
systemctl start firewalld

#设置开机启动
systemctl enable firewalld

#安装epel-release
yum install epel-release
#安装fail2ban
yum install fail2ban

配置fail2ban的SSH规则

安装好后fail2ban配置文件在/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,这里不做介绍,也没有用到。

新建文件/etc/fail2ban/jail.local,内容如下

# vim /etc/fail2ban/jail.local

# 默认配置
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 127.0.0.1/8

# 客户端主机被禁止的时长(秒)
bantime  = 86400

# 查找失败次数的时长(秒)
findtime = 600

# 客户端主机被禁止前允许失败的次数
maxretry = 5
# 这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用iptables请不要这样填写
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

配置好了以后,重启下fail2ban

# 重启fail2ban
systemctl restart fail2ban

# 开机启动
systemctl enable fail2ban

查看fail2ban的SSH状态:

[[email protected] ~]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	59
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	1
   |- Total banned:	5
   `- Banned IP list:	137.184.93.255

取消被ban的IP:

# 取消被ban的IP
[[email protected] ~]#  fail2ban-client set sshd unbanip 137.184.93.255
1

 

fail2ban的日志路径是:/var/log/fail2ban.log

查看加入黑名单日志:

[[email protected] ~]# sudo zgrep 'Ban' /var/log/fail2ban.log*
2021-09-14 04:15:37,913 fail2ban.actions        [9718]: NOTICE  [sshd] Ban 137.184.92.37
2021-09-14 05:07:34,311 fail2ban.actions        [9718]: NOTICE  [sshd] Ban 137.184.83.9
2021-09-14 07:42:04,881 fail2ban.actions        [9718]: NOTICE  [sshd] Ban 95.111.234.28
2021-09-14 18:05:07,837 fail2ban.actions        [9718]: NOTICE  [sshd] Ban 137.184.93.255

好了,这下安全多了!当然failban只是针对单个IP多次尝试做防御,并不能防御N多个IP来爆破的情况,如果你的服务器很重要,那么可能需要找更加安全的方式,例如不要让SSH直接对外,可以先加一层VPN或者加一个跳板机(堡垒机)的方式。

admin

这个人很懒,什么都没留下

文章评论

*

code