CentOS 7 安装Fail2ban 防御ssh攻击穷举

ssh防御有很多种手段

一开始使用了 ssh配合pam 来实现 多次登录失败就锁定账户的策略,
如果管理员使用root作为常用的用户,并且没有创建其他用户或者允许其他用户ssh登录,
那么一旦启用这个规则后root多次错误之后就会被锁定,管理员也无法登录


之前有个项目安全审计需要整改,匆忙就使用了上诉方法,输入密码错误5次之后就锁定600秒,
本以为没啥问题,抱着测试一下的心态去输入错误密码5次之后,账户真就被锁定了,反正600秒之后就解锁了,接没管了,结果第二天发现还是无法ssh连接,最后才想起来,还有个监控系统配置的也是root账户,每隔一分钟就连上去收集性能指标,所以这个监控系统还是不厌其烦的去尝试,导致账户一直没有解锁,最后直接去机房操作解锁

网上还有使用脚本去读取/var/log/auth.log 或者是/var/log/secure 的日志,把尝试次数多的IP添加到/etc/hosts.deny 中来拒绝登录,其实也可行,就是觉得这还不是最优解,翻阅各类网站找到了Fail2ban 这个软件来防御ssh攻击
使用Fail2ban与firewalld 配合来实现ssh错误输入之后直接封锁该IP 访问ssh端口来拦截攻击者,但是其余端口仍然允许访问,避免误封之后业务系统无法访问的尴尬情况

安装Fail2ban

yum install epel-release -y
yum install fail2ban

配置说明

/etc/fail2ban 配置文件目录

jail.conf 为主配置文件一般不直接修改

jail.d 规则目录,我们也将在此目录下新建

防火墙配置

查看防火墙状态

firewall-cmd --state

启动防火墙

systemctl start firewalld

开启必要的端口

firewall-cmd --zone=public --add-port=22/tcp --permanent<br>firewall-cmd --zone=public --add-port=80/tcp --permanent<br>firewall-cmd --zone=public --add-port=443/tcp --permanent<br>firewall-cmd --reload

查看已经放通的端口

firewall-cmd --list-all

配置fail2ban

新建 jail.local 来覆盖 Fail2ban 的一些默认规则

vim /etc/fail2ban/jail.d/jail.local

[DEFAULT]

#指定哪些地址可以忽略 fail2ban 屏蔽
ignoreip = 127.0.0.1/8

#客户端IP被封禁时长
bantime = 24h

#在多长时间内允许尝试
findtime = 10m

#允许客户端尝试失败的次数, -1永久封禁
maxretry = 5

#屏蔽IP所使用的方法
banaction = firewallcmd-ipset
action = %(action_mwl)s

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

启动fail2ban

systemctl start fail2ban

systemctl enable fail2ban

systemctl status fail2ban

查看状态

fail2ban-client status sshd

解锁被封ip

fail2ban-client set sshd delignoreip
fail2ban-client set sshd unbanip 192.168.10.100

其他

#检查攻击来源
#btmp文件会记录SSH端口登录失败的信息,包括尝试的用户名、IP地址和时间等信息。
#btmp为二进制文件,文件路径为/var/log/btmp。
#查看文件btmp
#使用命令lastb可以查看文件btmp的信息,参数-n可以指定显示数量。
lastb -n 10 | tac 

#查看尝试登录失败最多的ip
lastb | awk '{ print $3}' | sort | uniq -c | sort -n

#查看攻击者尝试的用户名
lastb | awk '{ print $1}' | sort | uniq -c | sort -n 

#查看攻击开始时间 
lastb | grep 192.168.0.100

#查看攻击终止时间
lastb | grep 192.168.0.100 | tac

#查看IP地理位置
curl cip.cc/192.168.0.100

Momostudent
Momostudent
因为喜欢所以折腾。。。