OpenSSH 服务器的安全加固步骤(openssh server)
nanshan 2024-11-02 12:14 8 浏览 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 等。
- 上一篇:如何调试SSH连接(ssh设置)
- 下一篇:基于CA签名的统一SSH登陆密钥管理
相关推荐
- 实战派 | Java项目中玩转Redis6.0客户端缓存
-
铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架Netty来高效地管理多个连接。放眼望向...
- 轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)
-
1、缓存穿透所谓缓存穿透就是非法传输了一个在数据库中不存在的条件,导致查询redis和数据库中都没有,并且有大量的请求进来,就会导致对数据库产生压力,解决这一问题的方法如下:1、使用空缓存解决对查询到...
- Redis与本地缓存联手:多级缓存架构的奥秘
-
多级缓存(如Redis+本地缓存)是一种在系统架构中广泛应用的提高系统性能和响应速度的技术手段,它综合利用了不同类型缓存的优势,以下为你详细介绍:基本概念本地缓存:指的是在应用程序所在的服务器内...
- 腾讯云国际站:腾讯云服务器如何配置Redis缓存?
-
本文由【云老大】TG@yunlaoda360撰写一、安装Redis使用包管理器安装(推荐)在CentOS系统中,可以通过yum包管理器安装Redis:sudoyumupdate-...
- Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?
-
你是否在开发互联网大厂后端项目时,遇到过系统响应速度慢的问题?当高并发请求涌入,数据库压力剧增,响应时间拉长,用户体验直线下降。相信不少后端开发同行都被这个问题困扰过。其实,通过在SpringBo...
- 【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案
-
在我们使用redis时,也会存在一些问题,导致请求直接打到数据库上,导致数据库挂掉。下面我们来说说这些问题及解决方案。1、缓存穿透1.1场景一个请求进来后,先去redis进行查找,redis存在,则...
- Spring boot 整合Redis缓存你了解多少
-
在前一篇里面讲到了Redis缓存击穿、缓存穿透、缓存雪崩这三者区别,接下来我们讲解Springboot整合Redis中的一些知识点:之前遇到过,有的了四五年,甚至更长时间的后端Java开发,并且...
- 揭秘!Redis 缓存与数据库一致性问题的终极解决方案
-
在现代软件开发中,Redis作为一款高性能的缓存数据库,被广泛应用于提升系统的响应速度和吞吐量。然而,缓存与数据库之间的数据一致性问题,一直是开发者们面临的一大挑战。本文将深入探讨Redis缓存...
- 高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局
-
一、什么是缓存穿透?缓存穿透是指查询一个根本不存在的数据,导致请求直接穿透缓存层到达数据库,可能压垮数据库的现象。在高并发场景下,这尤其危险。典型场景:恶意攻击:故意查询不存在的ID(如负数或超大数值...
- Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决
-
缓存穿透菜小弟:我先问问什么是缓存穿透?我听说是缓存查不到,直接去查数据库了。表哥:没错。缓存穿透是指查询一个缓存中不存在且数据库中也不存在的数据,导致每次请求都直接访问数据库的行为。这种行为会让缓存...
- Redis中缓存穿透问题与解决方法
-
缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...
- Redis客户端缓存的几种实现方式
-
前言:Redis作为当今最流行的内存数据库和缓存系统,被广泛应用于各类应用场景。然而,即使Redis本身性能卓越,在高并发场景下,应用于Redis服务器之间的网络通信仍可能成为性能瓶颈。所以客户端缓存...
- Nginx合集-常用功能指导
-
1)启动、重启以及停止nginx进入sbin目录之后,输入以下命令#启动nginx./nginx#指定配置文件启动nginx./nginx-c/usr/local/nginx/conf/n...
- 腾讯云国际站:腾讯云怎么提升服务器速度?
-
本文由【云老大】TG@yunlaoda360撰写升级服务器规格选择更高性能的CPU、内存和带宽,以提供更好的处理能力和网络性能。优化网络配置调整网络接口卡(NIC)驱动,优化TCP/IP参数...
- 雷霆一击服务器管理员教程
-
本文转载莱卡云游戏服务器雷霆一击管理员教程(搜索莱卡云面版可搜到)首先你需要给服务器设置管理员密码,默认是空的管理员密码在启动页面进行设置设置完成后你需要重启服务器才可生效加入游戏后,点击键盘左上角E...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
-
- 实战派 | Java项目中玩转Redis6.0客户端缓存
- 轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)
- Redis与本地缓存联手:多级缓存架构的奥秘
- 腾讯云国际站:腾讯云服务器如何配置Redis缓存?
- Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?
- 【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案
- Spring boot 整合Redis缓存你了解多少
- 揭秘!Redis 缓存与数据库一致性问题的终极解决方案
- 高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局
- Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)