说明
最近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也是可以,不过配置要稍加修改,请参考:https://blog.terrynow.com/2022/02/06/linux-centos-fail2ban-iptables-prevent-ssh-from-brute-force-attack/
#如果防火墙是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状态:
[root@localhost ~]# 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 [root@localhost ~]# fail2ban-client set sshd unbanip 137.184.93.255 1
fail2ban的日志路径是:/var/log/fail2ban.log
查看加入黑名单日志:
[root@localhost ~]# 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或者加一个跳板机(堡垒机)的方式。
文章评论