定义

什么是暴力破解,简单来说就是对一个服务器进行无数次尝试登陆,并用不同的密码进行登陆直到可以登陆成功。暴力破解的基本步骤可以分为以下几步:      

1. 找到对应的linux服务器 Ip地址

2.扫描端口号:22 nmap扫描端口

3.开始暴力破解: 一般root 破解你的密码 登录你的机器破坏盗取你的重要的数据

方法

  1. 将密码设置复杂,长度大于8位或者最好大于14位,密码的复杂度:由大小写字母以及字符和数字组成。 0-9 a-z A-Z @!#$%*. 等等。
  2. 更改端口号,默认的端口是sshd(22),修改默认端口号。
  3. 不用root用户登陆(禁止root用户登陆),使用其他用户登陆并且拥有root用户权限。
  4. sshd服务,直接编写脚本检查/var/log/secure 内登录失败次数超过某个阈值的ip并将它添加到/etc/hosts.deny(fail2ban的优点更多)
  5. 屏蔽IP

1.设置复杂密码

密码的复杂度一定要较高点,尽量通过密钥登陆,这里介绍个密码生成工具:pwgen(需安装,用yum安装下就可以了)

参数 功能描述
-c 密码里面包含至少一个大写字母
-A 密码里面不包含大写字母
-n 密码里面至少包含一个数字。
-0 密码中不包含数字
-y 密码中至少包含一个特殊字符。
-s 生成安全随机的密码
-B 密码中不包含混淆的字符,例如“1”和“I”
-h 查看帮助信息
-H 使用指定文件sha1哈希生成,不适用随机生成
-C 按列打印生成的随机密码
-1 每行输出一个密码,不按列打印生成密码
-v 密码不包括元音字母或者可能被误认为是元音字母的数字

示例:

#生成密码长度为12的包含至少一个大写字母和至少一个数字和至少一个特殊字符的10个密码,并分行显示
pwgen -c -n -y -1  12 10     

2.更改端口号

我们使用的sshd服务的配置文件是在/etc/ssh/sshd_config,我们只需要将端口更改下就行了

vim /etc/ssh/sshd_config

sshd

更改完之后我们需要将我们的82端口开放下。

firewall-cmd --add-port=82/tcp --permanent 
firewall-cmd --reload

  然后重启sshd服务即可:

systemctl restart sshd

  访问的时候我们需要加上我们的端口号。

ssh -p82  192.168.1.121

我们可以用nmap 扫描下我们的我们服务器看看哪些端口开放着。

[root@localhost ~]# nmap 192.168.1.121

Starting Nmap 6.40 ( http://nmap.org ) at 2018-01-03 14:53 CST
Nmap scan report for li155.members.com (192.168.1.121)
Host is up (0.070s latency).
Not shown: 998 filtered ports
PORT   STATE  SERVICE
22/tcp closed ssh
82/tcp open   xfe

可以看到虽然我们82端口被扫描出来了,但是是不知道它是sshd服务的。

3.禁止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身份

4.编写脚本检查/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

5.宝塔屏蔽某个ip

进入宝塔管理界面点击安全,防火墙屏蔽ip

实测效果