如何加强 SSH 安全:内网和专用网络环境下的防护策略

文章目录

  • 如何加强 SSH 安全:内网和专用网络环境下的防护策略
  • 限制访问来源
    • 通过防火墙或安全组限制
    • 网络策略(Network Policy)
  • 禁用密码登录,使用密钥认证
  • 启用 Fail2ban 或 SSH 防爆破
  • 限制 SSH 用户
  • 更改 SSH 端口
  • 使用跳板机(堡垒机)
  • 启用 SSH 审计
  • 使用基于 VPN 的 SSH 访问
  • 强制多因素认证(MFA)
  • 绑定 SSH 到特定网卡
  • 监控 SSH 会话
  • 配置 SSH ProxyCommand
  • 总结


如何加强 SSH 安全:内网和专用网络环境下的防护策略

在许多企业和机构中,SSH 是日常管理服务器的重要工具。即使在内网或专用网络环境中使用,SSH 依然存在潜在风险。本文将详细介绍多种 SSH 安全加固措施,从访问控制、认证方式到审计监控,全方位提升 SSH 安全性。


限制访问来源

通过防火墙或安全组限制

  • 防火墙(iptables、firewalld): 配置防火墙规则,仅允许特定 IP 地址或网段访问 SSH 服务端口。例如:
    # iptables 示例:只允许192.168.1.0/24网段访问SSH
    iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  • 安全组: 在云环境中,通过安全组规则限定哪些 IP 或子网能够连接到 SSH 服务。

网络策略(Network Policy)

在 Kubernetes 或其他容器平台上,可以利用网络策略限制 SSH 访问的来源,进一步减少安全风险。


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

密码认证相对容易受到暴力破解攻击,建议:

  • 关闭密码登录: 编辑 /etc/ssh/sshd_config,添加或修改以下配置:

    PasswordAuthentication no
    PermitRootLogin no
    

    PasswordAuthentication no

    • 作用:禁用密码认证,即不允许使用密码登录 SSH,必须使用 密钥认证(公钥登录)。
    • 影响:如果没有正确配置 SSH 密钥对(public/private key),可能会导致无法远程登录。

    PermitRootLogin no

    • 作用:禁止 root 用户通过 SSH 直接登录,提高系统安全性。
    • 影响:即使知道 root 密码,也无法通过 SSH 直接以 root 身份登录,必须先以普通用户登录,然后再使用 susudo 提升权限。
  • 启用基于密钥的认证: 配置 SSH Key,实现更高的安全性。将公钥添加到 ~/.ssh/authorized_keys 中,并确保私钥安全存储。


启用 Fail2ban 或 SSH 防爆破

为了防止暴力破解攻击,可以使用 Fail2ban 对 SSH 登录失败进行监控,并自动封禁恶意 IP:

  • 安装 Fail2ban:
    # CentOS
    yum install fail2ban -y# Ubuntu/Debian
    apt install fail2ban -y
    
  • 配置 /etc/fail2ban/jail.local
    [sshd]
    enabled = true
    port = 22
    maxretry = 3
    bantime = 600
    

这样,当 SSH 登录失败次数超过限制后,系统会自动阻断该 IP 一段时间。


限制 SSH 用户

为了减少攻击面,应当仅允许必要的用户使用 SSH:

  • 允许指定用户登录:
    AllowUsers user1 user2
    
  • 禁止特定用户登录:
    DenyUsers root test
    

通过精确控制登录用户,可以防止非授权人员的访问。


更改 SSH 端口

默认的 SSH 端口(22)容易受到扫描和攻击。通过修改 SSH 端口,可以在一定程度上降低攻击风险:

  • 修改 /etc/ssh/sshd_config 中的端口配置:
    Port 22022
    
  • 修改后,请确保相应的防火墙或安全组规则中允许新端口的流量。

使用跳板机(堡垒机)

在生产环境中,建议采用堡垒机来集中管理 SSH 访问:

  • 跳板机优势: 通过堡垒机对内部所有 SSH 会话进行统一监控和审计,避免直接暴露服务器。
  • 实施方法: 用户首先登录到堡垒机,然后再通过堡垒机访问内网服务器,所有操作均被记录和监控。

启用 SSH 审计

为便于事后审计和安全事件溯源,应启用 SSH 访问日志记录:

  • 使用 auditd: 安装 auditd 并配置规则,例如监控 SSH 配置文件变化:
    yum install audit -y
    auditctl -w /etc/ssh/sshd_config -p wa -k ssh-config
    
  • 使用 go-audit: 作为 auditd 的替代方案,go-audit 同样可以帮助记录详细的 SSH 操作日志。

使用基于 VPN 的 SSH 访问

即使 SSH 服务仅用于内网,通过 VPN 隧道进行访问能提供额外的隔离:

  • 常用 VPN 解决方案: OpenVPN、WireGuard、IPSec 等均可实现安全隧道,确保数据传输在加密通道中进行。

强制多因素认证(MFA)

在内网环境中,引入多因素认证可进一步提升 SSH 登录安全性:

  • Google Authenticator 或 Duo Security: 结合 OTP(一次性密码)进行双重验证。
  • 配置示例:
    • 安装 Google Authenticator:
      apt install libpam-google-authenticator -y  # Ubuntu/Debian
      yum install google-authenticator -y         # CentOS/RHEL
      
    • 修改 /etc/pam.d/sshd
      auth required pam_google_authenticator.so
      
    • 修改 /etc/ssh/sshd_config 启用 ChallengeResponseAuthentication:
      ChallengeResponseAuthentication yes
      
    • 重启 SSH 服务:
      systemctl restart sshd
      

绑定 SSH 到特定网卡

如果服务器有多个网卡,可通过绑定让 SSH 服务只监听内网地址:

  • /etc/ssh/sshd_config 中设置:
    ListenAddress 192.168.1.10
    
  • 配合 /etc/hosts.allow 限制访问来源:
    sshd: 192.168.1.0/24
    

监控 SSH 会话

实时监控 SSH 会话能帮助管理员及时发现异常行为:

  • 使用 auditd: 监控 SSH 操作日志,对关键文件进行实时监控。
  • 使用 pam_tty_audit:/etc/pam.d/sshd 中启用:
    session required pam_tty_audit.so enable=*
    

这样,所有 SSH 会话中的命令都会被记录,便于事后调查。


配置 SSH ProxyCommand

对于分布式或多跳环境,使用 SSH ProxyCommand 能进一步增强访问控制:

  • 示例命令:
    ssh -o ProxyCommand="ssh -W %h:%p bastion-host" user@target-host
    

这可以将 SSH 连接通过堡垒机(bastion-host)进行转发,进一步隔离内部网络。


总结

在内网或专用网络中部署 SSH 并不意味着安全性可以放松。通过限制访问来源、禁用密码登录、采用密钥认证、启用 Fail2ban、使用堡垒机、配置审计日志以及引入多因素认证等多重措施,可以显著降低内部风险和潜在攻击面。同时,结合 VPN 和网络策略等技术手段,使 SSH 服务即使不暴露在公网,也能应对来自内部网络的威胁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ngx_monotonic_time

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_monotonic_time函数-CSDN博客 定义在 src\core\ngx_times.c static ngx_msec_t ngx_monotonic_time(time_t sec, ngx_uint_t msec) { #if (NGX_HAVE_CLOCK_MONOTONIC)struct timespec ts;#if defined(CLOCK_MONOTONIC_FAST)clock_get…

【Trick】论文画图的icon来源

0:起因 群友在群里发了这种很好看的论文主图 其中不乏有很多icon,比如open-ai、机器人的 于是想知道应该如何找到,便有了后文 1:网址 阿里巴巴矢量图标库:iconfont-阿里巴巴矢量图标库 2:使用方法 可…

前端 技术栈

前端 技术栈 ChatGPT 说: 好咧,说到前端技术栈,这一块现在确实百花齐放,有点卷,但也超灵活。下面我来给你梳理一套2025年主流、实用、好上手的前端技术栈组合,按层级分类,一目了然:…

vue3 根据城市名称计算城市之间的距离

<template><div class"distance-calculator"><h1>城市距离计算器</h1><!-- 城市输入框 --><div class"input-group"><inputv-model"city1"placeholder"请输入第一个城市"keyup.enter"cal…

Java安全-FastJson反序列化分析

FastJson介绍 Fastjson 是阿里巴巴推出的一款高性能 JSON 序列化/反序列化库&#xff0c;由于其便捷性被广泛应用于 Java 项目中 FastJson使用 package org.example;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;public class FastjsonDemo {…

查看npm安装了哪些全局依赖

查看npm安装了哪些全局依赖 在macOS上&#xff0c;如果你想要查看通过npm全局安装的依赖包&#xff0c;你可以使用以下几种方法&#xff1a; 方法1&#xff1a;使用命令行 打开你的终端&#xff08;Terminal&#xff09;&#xff0c;然后输入以下命令&#xff1a; npm list -…

告别代码Bug,GDB调试工具详解

在软件开发的漫漫长路上&#xff0c;Bug 就像隐藏在黑暗中的 “小怪兽”&#xff0c;时不时跳出来给开发者们制造麻烦。曾经&#xff0c;欧洲航天局&#xff08;ESA&#xff09;首次发射阿丽亚娜 5 号火箭&#xff0c;这本是太空探索史上的重要时刻&#xff0c;却因一行代码导致…

LangChain4j(2):整合SpringBoot

1 新建Springboot项目 1.1 引入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0…

移动端六大语言速记:第2部分 - 控制结构

移动端六大语言速记&#xff1a;第2部分 - 控制结构 本文继续对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的控制结构&#xff0c;帮助开发者快速掌握各语言的语法差异。 2. 控制结构 2.1 条件语句 各语言条件语句的语法对比&#xff1a; …

Linux-线程概念与线程控制的常用操作

一.Linux线程概念 1-1.线程是什么 在Linux中&#xff0c;线程是基于Linux原有的进程实现的。本质是轻量级进程(LWP)。在⼀个程序⾥的⼀个执⾏路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“⼀个进程内部的控制序列”。 我们之前所学习的进…

dfs记忆化搜索刷题 + 总结

文章目录 记忆化搜索 vs 动态规划斐波那契数题解代码 不同路径题解代码 最长递增子序列题解代码 猜数字大小II题解代码 矩阵中的最长递增路径题解代码 总结 记忆化搜索 vs 动态规划 1. 记忆化搜索&#xff1a;有完全相同的问题/数据保存起来&#xff0c;带有备忘录的递归 2.记忆…

【HTML】验证与调试工具

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. HTML 验证工具概述1.1 验证的重要性1.2 常见 HTML 错误类型 2. W3C 验证服务2.1 W3C Markup Validation Service2.2 使用 W3C 验证器2.3 验证结果解读 3. 浏览器开发者工具3.1 Chrome DevTools…

认识rand, srand, time函数,生成随机数

要完成猜数字游戏&#xff0c;首先要生成随机数&#xff0c;那么该怎么生成随机数&#xff1f;、 1.rand函数 rand函数是库函数&#xff0c;使用的时候要使用头文件stdlib.h c语言中&#xff0c;提供了rand函数来生成随机数&#xff0c;来看一下函数使用&#xff1a; 但是r…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…

Go语言从零构建SQL数据库引擎(2)

SQL标准与数据库系统实现差异 在上一节中&#xff0c;我们了解了关系型数据库的基础概念。现在&#xff0c;让我们深入探讨SQL语言标准以及不同数据库系统之间的实现差异。 SQL语言的诞生与演进 想象你经营的咖啡店生意蒸蒸日上&#xff0c;需要一个更强大的系统来管理数据。…

智能导诊系统的技术体系组成

智能导诊系统的技术体系由基础支撑技术、核心交互技术、应用场景技术及安全保障技术构成&#xff0c;具体可归纳为以下六个维度&#xff1a; 一、基础支撑技术 1、AI大模型与深度学习 医疗大模型&#xff1a;如腾讯医疗AI、DeepSeek等&#xff0c;通过海量医学文献和病例训…

QML输入控件: TextField(文本框)的样式定制

目录 引言示例简介示例代码与关键点示例1&#xff1a;基础样式定制示例2&#xff1a;添加图标示例3&#xff1a;交互式元素&#xff08;清除按钮&#xff09; 实现要点总结完整工程下载 引言 在Qt Quick应用程序开发中&#xff0c;文本输入是最常见的用户交互方式之一。TextFi…

leetcode hot100 多维动态规划

1️⃣2️⃣ 多维动态规划&#xff08;区间 DP、状态机 DP&#xff09; 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图…

3.27学习总结 爬虫+二维数组+Object类常用方法

高精度&#xff1a; 一个很大的整数&#xff0c;以字符串的形式进行接收&#xff0c;并将每一位数存储在数组内&#xff0c;例如100&#xff0c;即存储为[1][0][0]。 p2437蜜蜂路线 每一个的路线数前两个数的路线数相加。 #include <stdio.h> int a[1005][1005]; int …

车载以太网网络测试-26【SOME/IP-通信方式-2】

目录 1 摘要2 Method &#xff08;FF/RR&#xff09;、Event、Filed介绍2.1. SOME/IP Method 接口2.1.1 **Fire & Forget (FF)** - 单向调用2.1.2 **Request/Response (RR)** - 请求/响应模式2.1.3 **车载ECU通信实现示例**:2.1.4 **通信序列示例**2.1.5 实现注意事项 2.2 …