百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

OpenSSH 服务器的安全加固步骤(openssh server)

nanshan 2024-11-02 12:14 20 浏览 0 评论

一般来说,我们在访问 Linux 系统时会使用 SSH 连接。要确保这种连接的安全,我们首先需要了解什么是 SSH?

SSH 是 Secure Shell 或 Secure Socket Shell 的缩写,它是一种远程管理协议,允许用户通过互联网等不安全的网络连接控制和组织服务器。创建 SSH 是为了以加密方式替代 Telnet 服务。因为客户端和服务器之间的 telnet 连接是不加密的。如果有一个人或一个女人站在客户端和服务器中间,那么他/她就可以看到所有明文格式的通信。是的,这不是对 MITM 攻击的最好解释:)

在访问远程服务器、传输文件或执行某些命令时,它比 Telnet 更安全。但这并不意味着使用 SSH 进行安全连接就足够了。我们需要提前进行一些配置,而不是在 sshd_config 文件中使用 SSH 的默认配置。

让我们开始吧:

1. 更改默认端口:

让我们先打开 SSH 服务配置文件;

sudo nano /etc/ssh/sshd_config

更改端口 22 以避免默认连接。例如 7777。但需要注意的是,您将无法再使用默认端口连接。因此需要指定新的端口号。

这将确保您免受脚本小鬼的攻击。但深入网络侦查仍会发现 7777 端口上运行着 ssh 服务。

我们需要输入以下命令,以便处理我们在此阶段和后续阶段所做的每一项更改。在这里,我们对 sshd_config 文件所做的更改将被处理。我不会在每个步骤后重复写这些内容,但我想说的是,应该这样做。

systemctl restart sshd

2. 获取有关访问服务器的更多信息:

默认情况下,服务器会记录所有 SSH 访问。不过,您可以将 "LogLevel "更改为 "VERBOSE",以获得更多有关尝试访问失败的信息。

3. 限制用户和关闭 root 用户:

在限制可以通过 SSH 访问的用户之前,我们必须防止 root 用户通过 SSH 连接。为此,我们需要创建一个具有 root 权限的用户。

useradd -m umtunl

我们用这条命令创建一个新用户。这里的 -m 指定符也意味着在相关用户的主文件夹下创建一个文件。

然后为 umtunl 用户分配一个密码。是的,它应该很强:)

passwd umtunl

完成此过程后,我们需要将创建的用户添加到管理员组。

usermod -aG sudo umtunl

我们需要编辑用于 SSH 连接设置的 /etc/ssh/sshd_config 文件。

在该文件中,我们将 "PermitRootLogin "一行改为 "no",允许 root 用户访问。我们在最下面一行添加 "AllowUsers umtunl",赋予新创建的用户权限。然后保存文件并退出。

4. 禁用 SSH 无密码用户连接请求:

虽然听起来很傻,但用户有时确实会忘记设置密码。在这种情况下,通过阻止通过 ssh 连接,就可以防止获取可能的用户名信息或尝试暴力破解的攻击者进入。

将 "PermitEmptyPasswords(允许空密码)"一行改为 "no(否)"后,我们就可以防止出现这种情况。

5. 使用 SSH 密钥连接:

连接服务器的最安全方法是使用 SSH 密钥。使用 SSH 密钥时,无需密码即可访问服务器。此外,你还可以通过更改 sshd_config 文件中与密码相关的参数,完全关闭通过密码访问服务器的功能。

创建 SSH 密钥时,有两个密钥:公钥和私钥。公钥上传到你要连接的服务器。私钥存储在要连接的计算机上。

我们在要连接服务器的计算机上使用 ssh-keygen 命令创建 SSH 密钥。我建议你不要将密码部分留空。请记住在这里输入的密码。如果留空,你只能通过 SSH 密钥文件来访问它,但如果指定了密码,就能防止拥有密钥文件的人仅通过文件来访问它。我在 Ubuntu 服务器上创建了一个 SSH 密钥,用于测试。

ssh-keygen

通过下面的命令,我们可以将公钥复制到要访问的服务器上。

ssh-copy-id umtunl@192.168.0.26 -p 7777

然后从 Ubuntu 服务器尝试 SSH 连接。我们输入为密钥输入的密码来访问服务器。

我们在 sshd_config 文件中将 "PasswordAuthentication "值设置为 "no",以防止密码访问。使用 systemctl restart sshd 命令重启 sshd 服务。

然后,我们尝试从另一台 Windows 机器登录。但登录失败,因为我们没有与目标服务器共享这台新机器的公钥。

6. 基于主机的访问阻断:

由于某些原因,您没有在服务器内部使用防火墙。然后,我们就可以通过基于主机的访问阻断所确定的 IP 进行访问。我们登录 /etc/hosts.allow 文件,在 sshd 中添加以下一行: allowed_ip_adress

然后在 /etc/hosts.deny 文件中添加 sshd : * 一行添加到 /etc/hosts.deny 文件中。

这样,我们就可以从确定的 IP 访问 sshd 服务,同时阻止从其他 IP 的访问。

7. 允许从特定地址访问 SSH:

如果你只想从指定的地址访问 SSH,那么服务器防火墙就会派上用场。我们将以 Ubuntu 为例,但同样的逻辑也适用于其他操作系统。Ubuntu 使用 ufw 作为防火墙。如果你愿意,可以安装 iptables 或你熟悉和喜欢的防火墙。我们先激活 ufw。

sudo ufw enable

然后,我们输入只能从指定 IP 访问的规则。如果愿意,还可以在此输入子网。

sudo ufw allow from 192.168.0.34 to any port 7777

我们再添加一条规则,阻止来自其他 IP 的访问。

ufw deny from any to any port 7777

接下来,让我们查看我们添加的规则。

ufw status numbered

所有步骤如下图所示。

这样,我们就只允许从 192.168.0.34 地址访问 SSH。

8. 使用 SSH 协议 2:

更安全版本的 SSH 可用作 SSH2。如果你想详细了解 SSH1 和 SSH2 的区别,本文将非常有用。

默认情况下,使用的是 SSH 协议 2,但一些较旧的服务器和机器或物联网设备可能使用协议 1,因此有必要考虑这种可能性。在这种情况下,我们可以在 sshd_config 文件中添加 "协议 2",然后像每次更改一样重启 ssh 守护进程。

当再次尝试进行 SSH 连接测试时,它会自动检测服务器默认使用的协议。因此,当我们指定要使用协议 1(特别是以 ssh -1 开始)时,会出现 "SSH 协议 v.1 不再受支持 "的错误。

9. 限制访问尝试:

默认情况下,您可以通过多次尝试密码来访问服务器。不过,攻击者可以利用这一漏洞对服务器进行暴力破解攻击。您可以通过指定密码尝试次数,在尝试一定次数后自动终止 SSH 连接。你可以随意更改 MaxAuthTries 的值。一般来说,数字 3 比较好。从这个角度看,我们可以认为错误登录超过 3 次的人在该服务器上没有工作。

10. 用横幅显示警告:

您可以使用 sshd_config 文件中的 Banner 参数显示您创建的文本,以警告将要登录服务器的用户。

更改后,我们重启 SSH 守护进程,应用 180 更改并进行测试。

虽然竖立横幅是个好主意,但要注意不要给攻击者带来挑战:D

11. 设置 SSH 连接超时空闲值

需要注意的是,在离开电脑的情况下,其他人可以接管你的 SSH 会话并为所欲为。虽然让电脑不上锁是不对的,但因为我们的主题是 SSH 安全,所以我不打算讨论这个话题。因此,为了防范于未然,最好设置一个空闲超时限制,一旦超时,SSH 会话就会关闭。

我们将把 "ClientAliveInterval "改为 180 秒。

12. 关闭 TCP 端口转发和 X11 转发

攻击者可以尝试通过 SSH 连接端口转发来访问你的其他系统。要防止这种情况,可以关闭 "AllowTcpForwarding "和 "X11Forwarding "功能。

https://www.ldeo.columbia.edu/ldeo/it/security/ssh/ssh-faq-1.htmlYou 可以在这篇文章中找到有关 X11 转发的更详细解释。

结论

通过应用所有这些步骤,我们可以提高 SSH 的安全性,从而增加系统的安全性,而随着远程工作机会的增加,尤其是大流行病的进程,这一点变得更加重要。当然,让 SSH 更安全还有许多其他可能的选择。不仅可以配置 sshd_config 文件,还可以使用 VPN 等。

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: