什么是暴力破解,简单来讲就是对一个服务器进行无数次尝试登录,并用不一样的密码进行登录直到能够登录成功。暴力破解的基本步骤能够分为如下几步: html
1. 找到对应的linux服务器 Ip地址linux
2.扫描端口号:22 nmap扫描端口shell
3.开始暴力破解 : 通常root 破解你的密码 登陆你的机器 破坏 盗取你的重要的数据vim
对于这种状况咱们有如下5种解决办法:centos
sshd服务,直接编写脚本检查/var/log/secure 内登陆失败次数超过某个阈值的ip并将它添加到/etc/hosts.deny(fail2ban的优势更多)安全
接下来咱们对于上面的五种方法进行一一讲解演示。(如下的操做环境是在centos7下的)bash
1. 将密码设置复杂服务器
密码的复杂度必定要较高点,尽可能经过密钥登录,这里介绍个密码生成工具:pwgen(需安装,用yum安装下就能够了)ssh
pwgen的一些参数tcp
参数 |
功能描述
|
-c
|
密码里面包含至少一个大写字母
|
-A
|
密码里面不包含大写字母
|
-n
|
密码里面至少包含一个数字。
|
-0
|
密码中不包含数字
|
-y
|
密码中至少包含一个特殊字符。
|
-s
|
生成安全随机的密码
|
-B
|
密码中不包含混淆的字符,例如“1”和“I”
|
-h
|
查看帮助信息
|
-H
|
使用指定文件sha1哈希生成,不适用随机生成
|
-C
|
按列打印生成的随机密码
|
-1
|
每行输出一个密码,不按列打印生成密码
|
-v
|
密码不包括元音字母或者可能被误认为是元音字母的数字
|
示例:
1 [root@vultr ~]# pwgen -c -n -y -1 12 10 #意思是生成密码长度为12的包含至少一个大写字母和至少一个数字和至少一个特殊字符的10个密码,并分行显示。
2 Adee,lu8laem 3 Liev0wa=o5ai 4 juP[ae[xi2ae 5 eequ@oo4EeLu 6 GeeBaeXo9on/
7 ohm5As;ohthi 8 ahtai1AhZee+
9 Aiwi"moor7bu
10 UheiPh<i3aad 11 ira^v2ooLai8
2. 更改端口号
咱们使用的sshd服务的配置文件是在/etc/ssh/sshd_config,咱们只须要将端口更改下就好了。
vim /etc/ssh/sshd_config
更改完以后咱们须要将咱们的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用户登录
1. 不使用root用户名登录,这样root不知道你的管理员用户的用户名,这样也加大了暴力破解力度。
注:判断一个用户是否是超级管理员,看的是用户的ID是否为0。
例:建立一个普通账号,修改ID为0 而后变成超级管理权限
建立一个用户后
vim /etc/passwd
改:root:x:0:0:root:/root:/bin/bash
为:root:x:0:0:root:/sbin/nologin #不让root登陆系统
改:djx:x:1000:1000::/home/djx:/bin/bash
为:djx:x:0:0::/home/djx:/bin/bash #改ID500为0,cd就成root身份
注:centos7普通用户id是从1000开始,centos7之前的普通用户id是从500开始。
而后咱们可使用djx登录,会发现它拥有root的权限。
咱们登录的家目录是djx家目录,用户djx是具备管理员权限,能够在root下建立目录。
4. 编写脚本检查/var/log/secure访问日志文件。
思路:经过统计日志文件中的登录失败的ip,并将达到阈值的ip添加到/etc/hosts.deny来拒绝某个ip的再次访问。
脚本:以前写的,比较low。
1 #!/bin/bash 2 ###################################################### 3 # $Name: protect_ssh 4 # $Version: v1.0
5 # $Function: Prevent SSH from being hacked 6 # $Author: djx 7 # $Create Date: 2017-11-22
8 # $Description: shell 9 ####################################################### 10 #SSH配置文件所在位置 11 SSH_config='/etc/hosts.deny'
12 #ssh 日志文件位置 13 SSH_log='/var/log/secure'
14 #记录尝试登录超过15次且未登录成功的ip,以及添加进黑名单的时间日志 15 Deny_log='/var/lib/ssh_shell/ssh_deny.log'
16 #储存全部ip及访问次数文件 17 Visit_ip='/var/lib/ssh_shell/ssh_visit.txt'
18 #超过设置下面次数将被添加进黑名单 19 Visit_number=60
20 #检查ssh日志文件是否存在 21 if [ ! -e $SSH_log ] 22 then
23 echo -e "\033[41;37m ssh 日志文件不存在 请检查缘由 \033[0m"
24 exit 1
25 fi
26
27 if [ ! -e "$SSH_config.bak" ] 28 then
29 cp $SSH_config $SSH_config.bak 30 if [ $? -eq 0 ] 31 then
32 echo " 备份文件成功" >>$Deny_log 33 else
34 echo -e"\033[41;37m ssh备份文件不成功 \033[0m"
35 exit 2
36 fi
37 else
38 echo " 已有备份文件 " >>$Deny_log 39 fi
40
41 cat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ip 42 echo "---------$(date +%F_%T)------------" >>$Deny_log 43
44 for VI in $(cat $Visit_ip) 45 do
46 Number=$(echo $VI |awk -F=== '{print $2}') 47 IP=$(echo $VI |awk -F=== '{print $1}') 48 if [ $Number -gt $Visit_number ] 49 then
50 grep $IP "$SSH_config" >/dev/null
51 if [ $? -ne 0 ] 52 then
53 echo " sshd:$IP:deny" >>$SSH_config 54 echo "$IP " >>$Deny_log 55 fi
56 fi
57
58 done
5. 使用fail2ban