centos7 SSH防暴力破解五种方法

article/2025/9/30 15:09:03

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

  1. 找到对应的linux服务器 Ip地址
  2. 扫描端口号:22 nmap扫描端口
  3. 开始暴力破解 : 一般root 破解你的密码 登录你的机器 破坏 盗取你的重要的数据

对于这种情况我们有以下5种解决办法:

  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. 使用fail2ban,起到登录失败多次后直接禁止某个时间段此ip登陆。

接下来我们对于上面的五种方法进行一一讲解演示:

  1. 将密码设置复杂
    密码的复杂度一定要较高点,尽量通过密钥登陆,这里介绍个密码生成工具: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个密码,并分行显示。
    图例:
    在这里插入图片描述

  2. 更改端口号
    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
    在这里插入图片描述

  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身份
    

    测试登录(端口不是22要加端口):ssh test@192.168.1.46:99
    本地测试重启直接用户登录:
    在这里插入图片描述

  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 ]thenecho -e "\033[41;37m  ssh 日志文件不存在 请检查原因 \033[0m"exit 1fiif [ ! -e "$SSH_config.bak" ]thencp $SSH_config  $SSH_config.bakif [ $? -eq 0 ]thenecho " 备份文件成功" >>$Deny_logelseecho  -e"\033[41;37m ssh备份文件不成功  \033[0m"exit 2fielseecho " 已有备份文件 " >>$Deny_logficat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ipecho "---------$(date +%F_%T)------------" >>$Deny_logfor VI  in  $(cat  $Visit_ip)doNumber=$(echo $VI |awk -F=== '{print  $2}')IP=$(echo $VI |awk -F=== '{print  $1}')if  [ $Number -gt $Visit_number ]thengrep $IP "$SSH_config" >/dev/nullif [ $? -ne  0 ]thenecho " sshd:$IP:deny" >>$SSH_configecho "$IP " >>$Deny_logfi         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`
    doIP=`echo $i|awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ $NUM -gt $DEFINE ]thenipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`if [ $ipExists -lt 1 ]thenecho "sshd:$IP" >> /etc/hosts.denyfifi
    done
    
  5. 使用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 是填入 发送邮箱
    最后重新加载下配置即可。


http://chatgpt.dhexx.cn/article/sHU0XeJU.shtml

相关文章

Linux云服务器防止暴力破解(三道SSH安全策略)

前言 新购入的服务器,往往用户名默认为root,ssh默认开放22端口,且配置SSH服务时往往同时允许密码和公钥二重登录。然而,许多非法服务器运行着暴力破解程序,通过访问用户名root的22默认端口,暴力获取获取您的…

kali Linux 工具 BurpSuite-暴力破解

关于渗透的实验,我们大多数能在kali的工具集找到,其中关于抓包工具BurpSuite的使用,我做一个比较简单的实验————————暴力破解—————————— 暴力破解,顾名思义,就是我们把密码一个个尝试,只…

拒绝ssh远程暴力破解-以centos7及centos8为例

一、centos8 参考: 如何在CentOS 8上安装和配置Fail2ban - A5互联 - 博客园 (cnblogs.com)https://www.cnblogs.com/a5idc/p/13650056.html上面这一个讲的比较详细:要点摘录如下 默认的Fail2ban安装中带有两个配置文件,/etc/fail2ban/jail…

SSHD 服务防止暴力破解

SSHD 服务防止暴力破解 目录 1、 配置安全的 SSHD 服务(方法一) 2、通过开源的防护软件来防护安全(方法二) 1、配置安全的 SSHD 服务 1.1、 服务器安全策略 密码足够复杂: 密码的长度要大于 8 位不大于 20 位。密…

TLS1.0协议漏洞修复

漏洞描述: 远程服务接受使用TLS 1.0加密的连接。TLS 1.0有许多密码设计缺陷。TLS 1.0的现代实现减轻了这些问题,但是像1.2和1.3这样的TLS的新版本是针对这些缺陷而设计的,应该尽可能使用。截至2020年3月31日,为TLS 1.2及更高版本启…

linux red hat 8.0 root密码破解

简介: root用户是linux用户最大权限的用户,如果不慎将其密码忘记是不可直接更改的,只能通过破解的方式来重置root密码。 linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜素可用…

STL库实践

STL库实践 1 写在最前面的话1.1 容器(container)1.2 算法(algorithm)1.3 迭代器(iterator)1.4 仿函数1.5 适配器1.6 空间配置器1.7 stl初试牛刀 2 容器之 string2.1 string 构造函数2.2 string基本赋值操作2.3 string存取字符操作2.4 string拼接操作2.5 string查找和替换2.6 st…

【C++进阶——STL库】

STL库 介绍 STL是一个具有工业强度的,高效的C程序库,包含了很多计算机科学领域里所常用的基本数据结构和基本算法;六大组件:容器(Container)、迭代器(Iterator)、算法(Algorithm)、仿函数、适配器、分配器; 容器 定…

STL库:map和set

STL库:map和set 文章目录 STL库:map和set1.STL库中set的官方介绍2.set的常用接口3.set的总结4.STL库中multiset的官方介绍5.STL库中map的官方介绍6.map中的键值对pair7.map的常用接口7.1 map的访问操作7.2 map的修改操作7.3 map的查找操作 8.map的总结9.…

STL库(1)

STL库(1) vectorvector介绍vector使用初始化元素访问内存扩容插入删除 listlist介绍初始化,元素访问插入删除元素 vector和list区别 vector vector介绍 vector是可以改变大小的数组的容器。其内存结构和数组一样,使用连续的存储…

【C++学习五】STL库的应用

文章目录 初识C之 STL标准库1. CSTL的三大核心组件2. 自定义函数与算法对容器实现操作3. 基于自定义函数以及操作模板实现简易数字图像处理3.1 图像灰度变换3.2 图像二值化 4. 初识STL容器之:set集合5.初识STL容器之:map(关联容器)结语 初识C之 STL标准库…

STL库:vector

STL库:vector 文章目录 STL库:vector1.STL库对vector的官方介绍2.vecotr的常用接口2.1 vector的构造函数2.2 vector的迭代器与遍历操作2.3 vector的容量操作2.4 vector的访问操作2.5 vector的修改操作 3.vector迭代器失效问题3.1 insert导致的迭代器失效…

深入理解STL库

关注本人公众号,获取更多学习资料! 微信公众号搜索:阿Q正砖 上期说过C这块面试问的东西也蛮多,简历上只要出现C这几个字,那么STL库就是必问。 总不能是面试官问你了解STL库吗?你尴尬的说这块不怎么熟悉。…

C++ STL标准库

STL 组件 STL 是 C 标准程序库的核心。STL 内的所有组件都由模板构成,其元素可以是任意型别。程序员通过选用恰当的群集类别调用其成员函数和算法中的数据即可,但代价是 STL 晦涩难懂。 STL 组件主要包括容器,迭代器、算法和仿函数。 容器…

C++语法篇之STL库

1. STL介绍 STL是Standard Template Library的缩写,即标准模板库。之前在写 Templates 模板的时候,提到过STL对于模板的应用。STL是由多个模板类构成,能够为开发者提供通用的数据结构和算法。 STL主要包含以下内容: 容器 Conta…

【c++ • STL】初步认识什么是 STL 标准库

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:从零开始的 c 之旅🌈 若有帮助,还请关注➕点赞➕收藏,不行的…

STL库:list

STL库:list 文章目录 STL库:list1.STL库对list的官方介绍2.list的常用接口2.1 list的构造函数2.2 list的迭代器与遍历操作2.3 list的容量操作2.4 list的访问操作2.5 list的修改操作2.6 list的特别容器操作 3.list的底层源码4.list的模拟实现4.1 list的结…

STL库:string

STL库:string 文章目录 STL库:string1.STL库对于string类的介绍2.string常用接口的掌握2.1 string的构造接口2.2 string的容量操作接口2.3 string的访问操作接口2.4 string的迭代器遍历操作接口2.5 string的修改操作接口2.6 string的非成员函数重载接口2…

C++ 标准模板库STL

目录 前言 一、STL简介 二、STL的组件 三、STL头文件与命名空间 四、STL三大组件之 —— 容器 4.1 容器概述 4.2 序列式容器 4.3 排序式容器 4.4 哈希容器 五、STL三大组件之 —— 迭代器 5.1 迭代器概述 5.2 五种迭代器 5.3 迭代器的定义 5.4 迭…

C++ - STL标准库

1.C STL标准库简介 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西” 的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种 组件&…