什么是暴力破解,简单来说就是对一个服务器进行无数次尝试登陆,并用不同的密码进行登陆直到可以登陆成功。暴力破解的基本步骤可以分为以下几步:
- 找到对应的linux服务器 Ip地址
- 扫描端口号:22 nmap扫描端口
- 开始暴力破解 : 一般root 破解你的密码 登录你的机器 破坏 盗取你的重要的数据
对于这种情况我们有以下5种解决办法:
- 将密码设置复杂,长度大于8位或者最好大于14位,密码的复杂度:由大小写字母以及字符和数字组成。 0-9 a-z A-Z
@!#$%*. 等等。 - 更改端口号,默认的端口是sshd(22),修改默认端口号。
- 不用root用户登陆(禁止root用户登陆),使用其他用户登陆并且拥有root用户权限。
- sshd服务,直接编写脚本检查/var/log/secure 内登录失败次数超过某个阈值的ip并将它添加到/etc/hosts.deny(fail2ban的优点更多)
- 使用fail2ban,起到登录失败多次后直接禁止某个时间段此ip登陆。
接下来我们对于上面的五种方法进行一一讲解演示:
-
将密码设置复杂
密码的复杂度一定要较高点,尽量通过密钥登陆,这里介绍个密码生成工具:pwgen(需要安装yum)
pwgen的一些参数
参数 (功能描述)
-c(密码里面包含至少一个大写字母)
-A(密码里面不包含大写字母)
-n(密码里面至少包含一个数字。)
-0(密码中不包含数字)
-y(密码中至少包含一个特殊字符。)
-s(生成安全随机的密码)
-B(密码中不包含混淆的字符,例如“1”和“I”)
-h(查看帮助信息)
-H(使用指定文件sha1哈希生成,不适用随机生成)
-C(按列打印生成的随机密码)
-1(每行输出一个密码,不按列打印生成密码)
-v(密码不包括元音字母或者可能被误认为是元音字母的数字)
操作实例:
安装pwgen
yum install pwgen.x86_64
密码生成
pwgen -c -n -y -1 12 10
解析:意思是生成密码长度为12的包含至少一个大写字母和至少一个数字和至少一个特殊字符的10个密码,并分行显示。
图例:
-
更改端口号
sshd服务的配置文件是在/etc/ssh/sshd_config
修改文件并保存vim /etc/ssh/sshd_config
端口开放:(提示成功)firewall-cmd --add-port=99/tcp --permanent firewall-cmd --reload
重启sshd服务:
systemctl restart sshd
访问需要端口号:ssh -p99 192.168.1.46
没有安装执行安装nmap:
yum install nmap.x86_64
nmap 扫描开放端口:nmap 192.168.1.46
-
禁止root用户登陆
不使用root用户名登陆,是为了增强未知用户的暴力破解强度。
注:判断一个用户是不是超级管理员,看的是用户的ID是否为0。实例:
要求:创建一个普通帐号,修改ID为0,成为超级管理权限
创建新用户并设置密码:(以你的用户要求创建)useradd test passwd test
更改超级管理权限
vim /etc/passwd
不使用root用户登录:原:root:x:0:0:root:/root:/bin/bash 改:root:x:0:0:root:/sbin/nologin #不让root登录系统
更改指定用户为超级管理:
原:test:x:1002:1002::/home/test:/bin/bash 改:test:x:0:0::/home/test:/bin/bash #更改改ID为0,用户变成root身份
测试登录(端口不是22要加端口):
ssh test@192.168.1.46:99
本地测试重启直接用户登录:
-
编写脚本检查/var/log/secure访问日志文件
思路:通过统计日志文件中的登陆失败的ip,并将达到阈值的ip添加到/etc/hosts.deny来拒绝某个ip的再次访问。
方法一:
使用crontabp实时任务,每分钟执行一次:*/1 * * * * /bin/bash /root/protectssh/protectssh.sh
#!/bin/bash #protectssh.sh #Prevent SSH from being hacked #SSH配置文件所在位置 SSH_config='/etc/hosts.deny' #ssh 日志文件位置 SSH_log='/var/log/secure' #记录尝试登陆超过15次且未登陆成功的ip,以及添加进黑名单的时间日志 Deny_log='/var/lib/ssh_shell/ssh_deny.log' #储存所有ip及访问次数文件 Visit_ip='/var/lib/ssh_shell/ssh_visit.txt' #超过设置下面次数将被添加进黑名单 Visit_number=60 #检查ssh日志文件是否存在 if [ ! -e $SSH_log ] then echo -e "\033[41;37m ssh 日志文件不存在 请检查原因 \033[0m" exit 1 fi if [ ! -e "$SSH_config.bak" ] then cp $SSH_config $SSH_config.bak if [ $? -eq 0 ] then echo " 备份文件成功" >>$Deny_log else echo -e"\033[41;37m ssh备份文件不成功 \033[0m" exit 2 fi else echo " 已有备份文件 " >>$Deny_log fi cat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ip echo "---------$(date +%F_%T)------------" >>$Deny_log for VI in $(cat $Visit_ip) do Number=$(echo $VI |awk -F=== '{print $2}') IP=$(echo $VI |awk -F=== '{print $1}') if [ $Number -gt $Visit_number ] then grep $IP "$SSH_config" >/dev/null if [ $? -ne 0 ] then echo " sshd:$IP:deny" >>$SSH_config echo "$IP " >>$Deny_log fi fi done
方法二:
使用crontabp实时任务,每分钟执行一次:*/1 * * * * /bin/bash /root/Denyhosts/Denyhosts.sh
#!/bin/bash #Denyhosts SHELL SCRIPT cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/Denyhosts/Denyhosts.txt DEFINE="5" for i in `cat /root/Denyhosts/Denyhosts.txt` do IP=`echo $i|awk -F= '{print $1}'` NUM=`echo $i|awk -F= '{print $2}'` if [ $NUM -gt $DEFINE ] then ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l` if [ $ipExists -lt 1 ] then echo "sshd:$IP" >> /etc/hosts.deny fi fi done
-
使用fail2ban
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员!
fail2ban运行机制:简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp(丢弃)列表一定时间。
fail2ban 官方网址:http://www.fail2ban.org
文章的主要内容: 1. 安装fail2ban 2. 配置fail2ban 3. fail2ban的常用命令以及详解 4.邮件预警 5.注意事项安装fail2ban:(这里就不说源码安装,使用yum安装也一样)
安装命令:yum install fail2ban
fail2ban的配置文件路径:/etc/fail2ban
fail2ban安装目录:/usr/share/fail2ban
日志文件:/var/log/fail2ban.log
达到阈值之后的执行的动作的配置文件:action.d/
包含所有的过滤规则:filter.d/
开始运行fail2ban:fail2ban-client start
配置fail2ban并实现防暴力破解 ,想了解更多,到官方文档查看。
配置fail2ban:
编辑配置文件 jail.local 并实现防暴力破解vim /etc/fail2ban/jail.d/jail.local
输入文件内容:#defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。 ignoreip = 127.0.0.1/8 # 客户端主机被禁止的时长(默认单位为秒) bantime = 3600 # 过滤的时长(秒) findtime = 600 # 匹配到的阈值(次数) maxretry = 3 [ssh-iptables] # 是否开启 enabled = true # 过滤规则 filter = sshd # 动作 action = iptables[name=SSH, port=ssh, protocol=tcp] # 日志文件的路径 logpath = /var/log/secure # 匹配到的阈值(次数) maxretry = 3
注:action设置的时候,port=ssh,如果我们更改了sshd服务的端口号,我能需要在这里设置对应的端口号,否则配置不生效。
执行配置生效:fail2ban-client reload
防暴力破解测试:
查看当前被禁止登陆的ip:fail2ban-client status ssh-iptables
fail2ban常用的命令:
启动暂停查看状态:systemctl start/restart/stop/status fail2ban
fail2ban-client使用命令:
start——启动fail2ban server和监狱
reload——重新加载配置文件
stop——暂停fail2ban和监狱
status——查看运行的监控服务数量和列表
set loglevel——设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
get loglevel——获取当前日志的等级
set idle on|off——设置某个监控(监狱)的状态。
set addignoreip ——设置某个监控(监狱)可以忽略的ip
set delignoreip ——删除某个监控(监狱)可以忽略的ip
set banip ——将ip加入 监控(监狱)
set unbanip ——将ip从监控(监狱)移除fail2ban-regex测试筛选规则设否匹配当前的日志格式:
fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
fail2ban邮件预警:
fail2ban 利用sendmail 进行发邮件也可以用mail进行发邮件,在尝试了sendmail无果后,决定使用mail
在/etc/mail.rc末尾配置发件人的信息:set ssl-verify=ignore set from=djx set smtp=smtps://mail.163.com:25 set smtp-auth-user=dj set smtp-auth-password= set smtp-auth=login set nss-config-dir=/root/.certs
然后在jail.local(自己的配置文件里),加入:
mail-whois[name=SSH, dest=admin@admin.com, sender=root@root.com]
dest 是填入收件人邮箱
sender 是填入 发送邮箱
最后重新加载下配置即可。