linux-安全管理-SSH 安全管理

ops/2024/9/20 4:25:47/ 标签: linux, 安全, ssh

Linux 安全管理:SSH 安全管理

在 Linux 系统的安全管理中,SSH(Secure Shell)是一个非常关键的组成部分。SSH 是一种安全的远程登录协议,广泛应用于 Linux 服务器和客户端之间的远程管理、文件传输和执行命令。由于其使用非常频繁且暴露于网络,因此 SSH 的安全管理至关重要,合理的配置和管理可以有效防止潜在的攻击和入侵。

一、SSH 基本概念
1.1 什么是 SSH

SSH(Secure Shell)是网络上的一种加密通信协议,用于在不安全的网络上安全地登录远程主机、执行命令以及进行安全的数据传输。相比早期的 Telnet 等不安全协议,SSH 提供了强大的加密和认证机制,使得远程通信更加安全

SSH 通常工作在 TCP 端口 22 上,用户可以通过 SSH 客户端连接到远程服务器,并进行远程管理、文件传输等操作。常见的 SSH 客户端工具包括 sshscpsftp 等。

1.2 SSH 的工作机制

SSH 使用公钥加密和对称加密技术,保证通信的机密性和完整性。其工作过程如下:

  1. 客户端连接服务器:客户端发起连接请求,服务器返回公钥,用于后续加密通信。
  2. 会话密钥生成:客户端和服务器协商生成会话密钥,之后的通信内容将通过对称加密方式传输。
  3. 认证过程:SSH 提供多种认证方式,常见的是密码认证和公钥认证。认证成功后,客户端即可访问远程服务器。
二、SSH 安全威胁

尽管 SSH 提供了安全的通信方式,但错误的配置或疏于管理可能导致系统面临各种安全威胁。常见的 SSH 安全威胁包括:

2.1 暴力破解(Brute-force Attack)

攻击者会使用自动化脚本,通过大量的用户名和密码组合尝试登录服务器。如果使用的用户名和密码较弱,攻击者可能会成功登录。因此,暴力破解是最常见的 SSH 安全威胁之一。

2.2 中间人攻击(Man-in-the-middle Attack)

在网络传输过程中,如果攻击者可以拦截并伪装成服务器或客户端,就可能窃取敏感信息或注入恶意数据。虽然 SSH 的加密机制可以防止此类攻击,但在信任关系和密钥验证方面不当配置,仍有可能被攻击。

2.3 过度授权和权限提升

SSH 登录后,如果用户有过高的权限(如 root 权限),则系统的安全性会受到很大威胁。攻击者如果利用某个用户的账户并获得管理员权限,可能会导致系统彻底被控制。

三、SSH 安全管理的最佳实践

为了防止这些常见的安全威胁,Linux 管理员可以通过一系列安全措施来加强 SSH 的安全性。以下是一些常见且有效的 SSH 安全管理实践。

3.1 禁止使用 root 账户直接登录

root 是系统的超级用户,具有最高的权限,直接允许 root 登录 SSH 是非常不安全的。攻击者一旦获取 root 密码,可能会完全控制系统。为了避免这种风险,可以通过修改 SSH 配置文件禁用 root 登录。

  1. 编辑 SSH 配置文件:

    sudo nano /etc/ssh/sshd_config
    
  2. 找到以下行并设置为 no

    PermitRootLogin no
    
  3. 保存文件后,重新启动 SSH 服务:

    sudo systemctl restart sshd
    

此时,即便攻击者猜中了 root 密码,也无法通过 SSH 直接登录。

3.2 使用公钥认证,禁用密码登录

公钥认证比密码认证更加安全,它使用了一对公钥和私钥来确保用户身份的唯一性。在服务器上配置公钥认证后,用户可以通过其私钥登录服务器,而不需要输入密码。这可以有效防止暴力破解攻击。

  1. 生成密钥对
    在客户端机器上生成 SSH 密钥对:

    ssh-keygen -t rsa -b 4096
    

    生成的公钥存储在 ~/.ssh/id_rsa.pub,私钥在 ~/.ssh/id_rsa 中。

  2. 上传公钥到服务器
    将公钥复制到服务器上的用户主目录的 .ssh/authorized_keys 文件中:

    ssh-copy-id username@server_ip
    
  3. 禁用密码认证
    编辑 /etc/ssh/sshd_config 文件,将 PasswordAuthentication 设置为 no

    PasswordAuthentication no
    
  4. 重启 SSH 服务:

    sudo systemctl restart sshd
    
3.3 修改默认 SSH 端口

攻击者通常会扫描默认的端口 22 以尝试暴力破解 SSH 服务。为了增加安全性,可以通过修改 SSH 端口来隐藏服务。

  1. 编辑 /etc/ssh/sshd_config 文件,修改 Port 设置:

    Port 2222
    
  2. 保存文件后,重新启动 SSH 服务:

    sudo systemctl restart sshd
    

确保新的端口号在防火墙中开放,例如:

sudo ufw allow 2222/tcp
3.4 限制登录用户

通过限制可以通过 SSH 登录的用户,可以有效减少攻击面。例如,系统中可能存在一些不需要 SSH 访问权限的用户账户。可以通过 AllowUsers 指令来指定允许的用户。

  1. 编辑 /etc/ssh/sshd_config 文件,添加以下内容:

    AllowUsers username1 username2
    

    这样只有指定的用户可以通过 SSH 登录。

  2. 重启 SSH 服务:

    sudo systemctl restart sshd
    
3.5 使用 Fail2Ban 防止暴力破解

Fail2Ban 是一个用于防止暴力破解攻击的工具。它通过监控日志文件中的失败登录尝试,自动封禁那些尝试过多次失败登录的 IP 地址。

  1. 安装 Fail2Ban

    sudo apt install fail2ban
    
  2. 创建自定义配置文件 /etc/fail2ban/jail.local,并添加以下内容:

    [sshd]
    enabled = true
    port = 2222  # 如果修改了 SSH 端口,请调整此处
    maxretry = 5
    bantime = 3600
    
  3. 启动并启用 Fail2Ban

    sudo systemctl start fail2ban
    sudo systemctl enable fail2ban
    

这将确保当某个 IP 地址连续 5 次输入错误的密码时,该 IP 地址会被暂时封禁。

3.6 配置防火墙规则

配置防火墙可以进一步限制 SSH 的访问。通过设置防火墙规则,只允许特定的 IP 地址或网络访问 SSH 服务。

例如,使用 ufw 防火墙工具:

  1. 允许特定的 IP 地址访问 SSH:

    sudo ufw allow from 192.168.1.100 to any port 22
    
  2. 启动防火墙并启用:

    sudo ufw enable
    
四、监控和日志管理

SSH 日志可以帮助管理员监控系统的访问情况,发现潜在的攻击或异常行为。

4.1 查看 SSH 日志

SSH 的日志通常记录在 /var/log/auth.log 文件中(在 Debian/Ubuntu 系统上),或 /var/log/secure 文件中(在 RedHat/CentOS 系统上)。可以使用以下命令查看最近的 SSH 登录记录:

sudo tail -f /var/log/auth.log
4.2 检查登录尝试

可以使用以下命令检查 SSH 登录失败的尝试:

grep "Failed password" /var/log/auth.log

通过分析这些日志,可以发现是否存在暴力破解或其他异常登录尝试。

五、总结

SSH 是 Linux 系统管理中至关重要的远程管理工具,但错误的配置或疏于安全管理会让服务器面临巨大的安全风险。通过遵循最佳安全实践,如禁用 root 登录、启用公钥认证、使用防火墙和工具如 Fail2Ban 来防止暴力破解,可以大大提升 SSH 的安全性。
除了配置和管理工具,定期检查 SSH日志和监控系统的安全状态也是确保系统安全的重要手段。通过有效的 SSH 安全管理措施,系统管理员可以构建一个更安全、可靠的远程管理环境。


http://www.ppmy.cn/ops/113254.html

相关文章

【算法】动态规划—最长公共子序列

最长公共子序列问题就是求出两个字符串的LCS长度,是一道非常经典的面试题目,因为它的解法是典型的二维动态规划。 比如输入 str1 "babcde", str2 "acbe",算法应该输出3,因为 str1 和 str2 的最长公共子序列…

(黑马点评) 五、探店达人系列功能实现

5.1 发布和查看探店笔记 5.1.1 发布探店笔记 这块代码黑马已经完成了,在发布探店笔记界面,有两块内容是需要上传的。一是笔记内容,二是笔记配图。其中笔记配图部分黑马使用的是上传到本地前端服务器上面的。我我觉得可以将图片文件发布在阿里…

随笔十一、wsl子系统ubuntu磁盘清理

基于wsl工具的ubuntu虚拟磁盘在编译SDK使用一段时间后,就膨胀得很大,需要瘦身一下 1. ubuntu子系统内释放空间 检查用户空间使用情况 du -hc --max-depth1 ~ | sort -rh 可以看到cache占用了11G空间,删除下 rm -rf ~/.cache/* rm -rf /tmp/*…

libwebsockets之日志系统

libwebsockets日志系统也是分等级的&#xff0c;如下: #define LLL_ERR (1 << 0)#define LLL_WARN (1 << 1)#define LLL_NOTICE (1 << 2)#define LLL_INFO (1 << 3)#define LLL_DEBUG (1 << 4)#define LLL_PARSER (1 << 5)#…

基于SpringBoot+Vue的企业会议室预定管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

【Hot100】LeetCode—4. 寻找两个正序数组的中位数

目录 1- 思路题目识别二分 2- 实现⭐4. 寻找两个正序数组的中位数——题解思路 3- ACM 实现 原题链接&#xff1a;4. 寻找两个正序数组的中位数 1- 思路 题目识别 识别1 &#xff1a;给定两个数组 nums1 和 nums2 &#xff0c;找出数组的中位数 二分 思路 将寻找中位数 —…

MinIO【部署 02】Linux集群版本及Windows单机版、单机多目录版、分布式版(cmd启动脚本及winsw脚本分享)

Linux集群版及Windows单机版分布式版 1.Linux集群版1.1 安装启动停止1.2 将MinIO添加到服务 2.Windows2.1 官网安装2.2 本地测试2.2.1 cmd启动脚本2.2.2 winsw脚本 3.总结 1.Linux集群版 官网下载地址 https://min.io/download#/linux&#xff1b; 官网安装文档 https://min.i…

SpringCloud的学习(二),Consul服务注册与发现、分布式配置,以及 服务调用和负载均衡

介绍 Consul 是一套开源的分布式服务发现和配置管理系统&#xff0c;由 HashiCorp 公司用 Go 语言开发。 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位的服务网格&#xff0c;…

计算机毕业设计 扶贫助农系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

毕业论文写作会用到的AI软件!一定不能错过的18个网站!(务必收藏)

AI毕业论文写作它可以提供论文摘要、大纲、选题确立等多种写作辅助&#xff0c;还能帮助我们完成开题报告、实验报告、辩论灵感等内容。无论是文章纠正、批改&#xff0c;还是改写降重&#xff0c;它都能轻松搞定。甚至连论文致谢、创新创业计划书等都能为我们提供帮助。 以下…

【vue】vue3+ts对接科大讯飞大模型3.5智能AI

如今ai步及生活的方方面面,你是否也想在自己的网站接入ai呢&#xff1f;今天分享科大讯飞大模型3.5智能AI对接。 获取APPID、APISecret、APIKey 讯飞开放平台注册登录控制台创建自己的应用复制备用 准备工作做好,直接开始上代码了。 源码参考 <script setup lang"t…

我的demo保卫萝卜中的技术要点

管理类&#xff1a; GameManager&#xff08;单例&#xff09;&#xff0c;GameController(单例)&#xff1b; 一些其他的管理类&#xff08;PlayerManager,AudioSourceManager,FactoryManager&#xff09;作为GameManager的成员变量存在&#xff08;这样也可以保证只有一个存…

MySQL 数据库与表的创建指南

MySQL 数据库与表的创建指南 在进行 MySQL 开发时&#xff0c;了解如何创建数据库和表是基础。本文将详细介绍如何通过 MySQL 的 SQL 语句创建数据库和表&#xff0c;并解释每个步骤中的关键点。 1. 什么是 MySQL&#xff1f; MySQL 是目前最流行的开源关系型数据库管理系统…

C++——string类

1.初识string string属于C标准库&#xff0c;而不属于STL&#xff0c;STL也属于C标准库 string是管理字符的顺序表&#xff0c;用来管理字符数组 string是模板&#xff0c;只是库直接给它typedef了&#xff0c;直接实例化了 string是动态开辟的字符数组&#xff0c;指向的空间在…

Mycat搭建分库分表

分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题&#xff1a; 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点&#xff0c;3307主节点&#xff0c;3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…

图书管理系统(面向对象的编程练习)

图书管理系统&#xff08;面向对象的编程练习&#xff09; 1.系统演示2.设计框架讲解3.代码的详细讲解3.1 多本书籍的实现3.2 不同操作人员的实现3.3 不同work操作的实现 1.系统演示 下面主要展示系统的删除图书功能和显示图书功能&#xff0c;帮助大家在开始写代码前先了解图…

85-MySQL怎么判断要不要加索引

在MySQL中&#xff0c;决定是否为表中的列添加索引通常基于查询性能的考量。以下是一些常见的情况和策略&#xff1a; 查询频繁且对性能有影响的列&#xff1a;如果某个列经常用于查询条件&#xff0c;且没有创建索引&#xff0c;查询性能可能会下降。 在WHERE、JOIN和ORDER B…

AI应用开发平台Dify本地Ubuntu环境部署结合内网穿透远程管理大模型

文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署大语言模型应用开发平台Dify,并结合cpolar内网穿透工具实现公网环境远程访问…

系统 IO

"裸奔"层次&#xff1a;不带操作系统的编程 APP(应用程序) -------------------------------- Hardware(硬件) 特点&#xff1a;简单&#xff0c;应用程序直接操作硬件(寄存器) 缺点&#xff1a; 1. 搞应用开发的必须要了解硬件的实现细节&#xff0c;能够看懂原理图…

【数据结构】十大经典排序算法总结与分析

文章目录 前言1. 十大经典排序算法分类2. 相关概念3. 十大经典算法总结4. 补充内容4.1 比较排序和非比较排序的区别4.2 稳定的算法就真的稳定了吗&#xff1f;4.3 稳定的意义4.4 时间复杂度的补充4.5 空间复杂度补充 结语 前言 排序算法是《数据结构与算法》中最基本的算法之一…