SSHD 服务防止暴力破解

article/2025/9/30 15:07:56

SSHD 服务防止暴力破解

目录

1、 配置安全的 SSHD 服务(方法一)

2、通过开源的防护软件来防护安全(方法二)

1、配置安全的 SSHD 服务

1.1、 服务器安全策略

密码足够复杂:
密码的长度要大于 8 位不大于 20 位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成。
修改默认端口号:
修改掉默认ssh登陆的22端口,改成其它未被使用的端口号。
禁止 root 登录:
不允许 root 账号直接登陆到系统,添加普通账号,使用普通账号登录系统,授予 root的权限,必要时再从普通用户切换到 root 用户。
不允许密码登陆,只能通过认证的密钥来登陆系统:
这条视情况而定。

1.2、通过密钥认证实现 SSHD 认证。

1.2.1、实验环境:

服务端:Bob-zabbix129 IP:192.168.231.129
客户端:Bob130 IP:192.168.231.130
客户端生成密钥对,然后把公钥传输到服务端

1.2.2、生存密钥对

[root@Bob130 ~]# ssh-keygen
Generating public/private rsa key pair.
#生成公共/私有 rsa 密钥对
Enter file in which to save the key (/home/centos/.ssh/id_rsa):
#输入保存密钥的文件(/root/.ssh/id\u rsa)
Created directory ‘/home/centos/.ssh’.
Enter passphrase (empty for no passphrase):
#输入密码短语(无密码短语为空):
Enter same passphrase again:
#再次输入相同的密码短语:
Your identification has been saved in /home/centos/.ssh/id_rsa.
#您的标识已保存在/root/.ssh/id_rsa 中。
Your public key has been saved in /home/centos/.ssh/id_rsa.pub.
#您的公钥已保存在/root/.ssh/id_rsa.pub 中。
The key fingerprint is:
#关键指纹是:
SHA256:zIHUVIyXp26601rYLbmy8xsvW5VirrJsBBYLfodNh8o centos@Bob130
The key’s randomart image is:
#钥匙的随机图像是:
±–[RSA 2048]----+
| .o.=… |
| …= = . |
| . o.B.o o |
| . Eoo… . |
| o oS. o o |
| .oo= o |
| …+* + |
| .B.oB |
| .@+. |
±—[SHA256]-----+
[root@Bob130 ~]# cd /root/.ssh/
[root@Bob130 .ssh]# ls

id_rsa id_rsa.pub known_hosts
密钥对已经生成好了。

1.2.3、发布公钥到服务端。

使用 ssh-copy-id 命令将客户端生成的公钥发布到远程服务器 192.168.231.129 Bob-zabbix129。
[root@Bob130 .ssh]# ssh-copy-id 192.168.231.129
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”
The authenticity of host ‘192.168.231.129 (192.168.231.129)’ can’t be established.
ECDSA key fingerprint is SHA256:tNiTdSuK8FKPhaGE9JKCfvfgt0tBOgBvPcQL0pxhK1s.
ECDSA key fingerprint is MD5:51:17:96:fe:82:e2:81:98🆎20:ec:e2:0c:c6:f0:8f.
Are you sure you want to continue connecting (yes/no)? yes
#输入 yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys
root@192.168.231.129’s password:
#输入 192.168.231.129 主机登录密码。
Number of key(s) added: 1
#此处说明已经添加一个密钥
Now try logging into the machine, with: “ssh ‘192.168.231.129’”
and check to make sure that only the key(s) you wanted were added.
#这个时候可以通过 ssh 无密钥直接登陆主机
[root@Bob130 .ssh]#

1.2.4、测试登陆129

[root@Bob130 .ssh]# ssh 192.168.231.129
Last login: Fri Jan 28 14:53:45 2022
Bobo && Qiqi
[root@Bob-zabbix129 ~]#
登陆成功
注意:如果服务器不是监听 22 端口,则需要指定端口传输密钥:
[root@Bob-zabbix129 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 222 192.168.231.130
#如果端口是222 用这种方法,-p+端口号
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys
root@192.168.231.130’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘192.168.231.130’”
and check to make sure that only the key(s) you wanted were added.

[root@Bob-zabbix129 ~]# ssh 192.168.231.130
Last login: Fri Jan 28 15:29:00 2022 from bob-zabbix129.cn
Warning! From now on, all of your operation has been record!
[root@Bob130 ~]#
登陆成功

2、通过fail2ban开源的防护软件来防护安全

2.1、实战背景:

公网网站一直被别人暴力破解 SSHD 服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
然而 fail2ban 程序可以监视系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送 e-mail 通知系统管理员,很实用、很强大!
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关 IP 利用 iptables 加入到 dorp 列表一定时间。
优点:
使用简单、灵活、功能强大
源码下载软件包
官方地址:http://www.fail2ban.org
以下 fail2ban 的源码包下载地址,实验使用 yum 安装
在这里插入图片描述
在这里插入图片描述

2.2、需要Python开发环境,且版本大于2.4

检查Python环境:
[root@Bob-zabbix129 ~]# python -V
Python 2.7.5

2.3、使用 yum 安装 fail2ban

[root@Bob-zabbix129 ~]# yum -y install epel-release
安装epel源
[root@Bob-zabbix129 ~]# yum -y install fail2ban
安装fail2ban
[root@Bob-zabbix129 ~]# ls /etc/fail2ban/
action.d fail2ban.d jail.conf paths-common.conf
fail2ban.conf filter.d jail.d paths-fedora.conf
安装完成

2.4、应用实例说明

设置条件:
SSH 远程登录 5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时,1 小时后该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有 jail.conf 文件。启用 SSHD 服务的日志分析,指定动作阀值即可。

2.5、jail.conf 文件说明

[sshd]
#mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
#单个服务检查设置,如设置 bantime、findtime、maxretry 和全局冲突,服务优先级大于全局设置
#加入如下内容:
enabled = true
#是否激活此项(true/false)修改成 true。
filter = sshd
#过滤规则 filter 的名字,对应 filter.d 目录下的 sshd.conf。
action = iptables[name=SSH, port=ssh, protocol=tcp]
#动作的相关参数,对应action.d/iptables.conf 文件。
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername=“Fail2Ban”] 、
#触发报警的收件人。
logpath = /var/log/secure
#检测的系统的登陆日志文件。这里要写 sshd 服务日志文件。
默认为 logpath = /var/log/sshd.log(在 centos8 当中需要删除默认的 ssh 区域 logpath 选项) 。
#5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时。 配置如下。
bantime = 3600
#禁止用户 IP 访问主机 1 小时。
findtime = 300
#在 5 分钟内内出现规定次数就开始工作。
maxretry = 3
#3 次密码验证失败。

2.6、启动服务测试验证

2.6.1启动服务

[root@Bob-zabbix129 ~]# systemctl start fail2ban
开机自启动
[root@Bob-zabbix129 ~]# systemctl enable fail2ban

2.6.2测试

清空日志文件
[root@Bob-zabbix129 ~]# > /var/log/secure
测试:故意输入错误密码 3 次,再进行登录时,会拒绝登录
[root@Bob130 .ssh]# ssh 192.168.231.129
root@192.168.231.129’s password:
Permission denied, please try again.
root@192.168.231.129’s password:
Permission denied, please try again.
root@192.168.231.129’s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
三次输错后,再次尝试登录,直接被拒绝了。
[root@Bob130 .ssh]# ssh 192.168.231.129
ssh: connect to host 192.168.231.129 port 22: Connection refused
查看failban2状态
#配置好之后我们检测下 fail2ban是否工作
[root@Bob-zabbix129 .ssh]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
#具体看某一项的状态也可以看,如果显示被 ban 的 ip 和数目就表示成功了,如果都是 0,说明没有成功。

查看被拦截并且禁止登陆的信息
[root@Bob-zabbix129 .ssh]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| - Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.231.130
[root@Bob-zabbix129 .ssh]#
查看 fail2ban 的日志也能够看到相关的信息
[root@Bob-zabbix129 .ssh]# tail /var/log/fail2ban.log
2022-01-28 16:32:21,736 fail2ban.filtersystemd [12754]: INFO [sshd] Added journal match for: ‘_SYSTEMD_UNIT=sshd.service + _COMM=sshd’
2022-01-28 16:32:21,736 fail2ban.filter [12754]: INFO maxRetry: 3
2022-01-28 16:32:21,736 fail2ban.filter [12754]: INFO encoding: UTF-8
2022-01-28 16:32:21,737 fail2ban.filter [12754]: INFO findtime: 300
2022-01-28 16:32:21,737 fail2ban.actions [12754]: INFO banTime: 3600
2022-01-28 16:32:21,738 fail2ban.jail [12754]: INFO Jail ‘sshd’ started
2022-01-28 16:39:34,541 fail2ban.filter [12754]: INFO [sshd] Found 192.168.231.130 - 2022-01-28 16:39:23
2022-01-28 16:39:34,541 fail2ban.filter [12754]: INFO [sshd] Found 192.168.231.130 - 2022-01-28 16:39:26
2022-01-28 16:39:34,542 fail2ban.filter [12754]: INFO [sshd] Found 192.168.231.130 - 2022-01-28 16:39:28
2022-01-28 16:39:34,585 fail2ban.actions [12754]: NOTICE [sshd] Ban 192.168.231.130

需要注意的 2 点:
另外如果后期需要把 iptables 清空后或 iptables 重启后,也需要把 fail2ban重启一下
如果修改 ssh 默认端口 22 为 2022 后,配置 fail2ban 来监控 SSHD 服务需要修改配置文件
例:
[root@Bob-zabbix129 .ssh]# vim /etc/ssh/sshd_config
改 #Port 22
为 Port 2022
[root@Bob-zabbix129 .ssh]# vim /etc/fail2ban/jail.conf
#修改 iptables 动作中的端口号,默认为 SSH,如图 1-11 所示。
改:port=ssh
为:port=2022
重启服务
[root@Bob-zabbix129 .ssh]# systemctl restart fail2ban

2.6.3、fail2ban 从黑名单中移除 IP 的方法:

移除命令:
[root@Bob-zabbix129 .ssh]# fail2ban-client set sshd unbanip 192.168.231.130
1
查看状态
[root@Bob-zabbix129 .ssh]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| - Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd- Actions
|- Currently banned: 0
|- Total banned: 1
`- Banned IP list:
此时Banned IP list列表已经没有之前拦截的地址了。

验证:
[root@Bob130 .ssh]# ssh 192.168.231.129
root@192.168.231.129’s password:
Last failed login: Fri Jan 28 16:39:28 CST 2022 from bob130.cn on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Fri Jan 28 16:39:13 2022 from bob130.cn
Bobo && Qiqi
[root@Bob-zabbix129 ~]#
登陆成功。
再次查看日志
root@Bob-zabbix129 .ssh]# cat /var/log/fail2ban.log
022-01-28 16:39:34,585 fail2ban.actions [12754]: NOTICE [sshd] Ban 192.168.231.130
被禁用了
2022-01-28 16:52:50,856 fail2ban.actions [12754]: NOTICE [sshd] Flush ticket(s) with iptables-SSH
2022-01-28 16:52:50,864 fail2ban.actions [12754]: NOTICE [sshd] Unban 192.168.231.130

2022-01-28 16:53:01,394 fail2ban.actions [14393]: NOTICE [sshd] Restore Ban 192.168.231.130
#恢复禁用状态
2022-01-28 16:53:48,428 fail2ban.actions [14393]: NOTICE [sshd] Unban 192.168.231.130
正常登陆

学习笔记–完


http://chatgpt.dhexx.cn/article/1tElRdxa.shtml

相关文章

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)、各种 组件&…

STL库--概述

C标准模板库(Standard Template Library,STL)是泛型程序设计最成功的实例。STL是一些常用数据结构和算法的模板的集合。 STL六大组件: 容器(containers):存放数据 算法(algorithms)&…

Standard Template Library(STL,标准模板库)

Standard Template Library(STL,标准模板库) STL(标准模板库)是C标准程序库的核心,它深刻影响了标准程序库的整体结构。 STL是一个泛型(generic)程序库,提供一系列软件方案,利用先进,高效的算…

pyqt学习笔记

pyqt学习笔记 文章目录 pyqt学习笔记前言pyqt主要模块开发环境安装qtpython选择使用anaconda集成版本:anaconda的特点:安装步骤: pycharm导入anaconda:pycharm设置qtdesigner,ui转py工具: 前言 gui学习是一个比较重要的内容&…

[ PyQt入门教程 ] PyQt5开发环境搭建和配置

PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。 课程目标 可以动手实现简单的GUI程序。系列文章主要以动手…