ssh服务自身没有提供针对暴力破解的防护手段,针对暴力破解,一般可以采用两种方式进行防护。
1. 禁用用户名口令方式登录,采用证书认证方式
采用证书认证方式的ssh服务基本很难被暴力破解,可以认为是比较好的方式,缺点是需要随时带着私钥文件,否则就会无法访问ssh服务
2. 如果不禁用口令登录方式,可以考虑使用fail2ban服务对ssh服务进行防护
fail2ban是一个python开发的服务,对很多系统服务都支持防暴力破解,如apache,ssh等。fail2ban对ssh防护的原理是对sshd服务的syslog输出进行监控,找到里面登录失败的ip地址,然后进行统计,比如5分钟尝试多次(比如5次)登录都失败,fail2ban把这个ip地址添加到iptables的禁止访问配置里面,一段时间之后再解禁。
从原理我们可以看到,fail2ban服务需要和syslog服务以及iptables服务协作,共同完成防暴力破解的任务。
这里环境是Centos6.7
1 安装fail2ban
yum -y install fail2ban
如果找不到package,先安装一下epel-release 源 命令为 yum -y install epel-release
2 修改配置文件
在/etc/fail2ban/ 下有个jail.conf ,在后面添加下面的内容
[Default]
[ssh-iptables]
enabled =true
#是否激活此项(true/false)
filter = sshd
#过滤规则filter的名字,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp]
#动作的相关参数
#sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
#触发报警的收件人
logpath =/var/log/secure
#禁止10分钟
bantime = 600
#5分钟内统计次数
findtime = 300
#允许重试3次
maxretry = 3
3 (可选)在一些环境会发现错误,即iptables 不支持-w 参数,这时候需要调整/etc/fail2ban/action.d/iptables-common.conf 里最后的一行,令
iptables=iptables
4 确认/var/log/secure里会有ssh登录信息
如果没有的话,检查syslog服务或者rsyslog服务的配置, 开启收集系统模块log的功能,对于rsyslog,配置内容为
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
如果syslog/rsyslog服务关闭,启动命令为
service syslog start 或者 service rsyslog start
5 确认iptables服务启动
service iptables start
如果是ipv6环境,则是 service ip6tables start