如何优化 SSH 体验并保护服务器免受未经授权的访问

系统 Linux
使用 SSH,由于使用了非对称密钥,参与通信的设备之间的会话被加密。如今,这比以往任何时候都更加重要,所有的云服务器都受到来自世界各地的管理。

SSH(Secure Shell)是一种协议,使您能够创建经过验证的私有连接,使用加密密钥保护通道,以便在另一台机器上启动远程Shell。使用此连接,您可以执行远程命令、启动安全文件传输、转发套接字、显示和服务等等。

在 SSH 出现之前,大多数远程管理都是通过 telnet 完成的,公平地说,一旦您可以建立远程会话,您几乎可以做任何您需要的事情。该协议的问题在于流量以纯明文形式未经加密传输。使用流量嗅探器 查看会话中的所有数据包(包括包含用户名和密码的数据包)并不费力 。

使用 SSH,由于使用了非对称密钥,参与通信的设备之间的会话被加密。如今,这比以往任何时候都更加重要,所有的云服务器都受到来自世界各地的管理。

SSH 配置的 3 个技巧

SSH 协议最常见的实现是 OpenSSH,它由 OpenBSD 项目开发,可用于大多数 Linux 和类 Unix 操作系统。安装此软件包后,您将拥有一个名为的文件,该文件sshd_config控制服务的大部分行为。默认设置通常非常保守,但我倾向于进行一些调整以优化我的 SSH 体验并保护我的服务器免受未经授权的访问。

1.更改默认端口

并不是所有管理员都记得这个。即使你改变位置,任何使用端口扫描程序的任何人都可以发现一个 SSH 端口,因此您几乎不会将自己从危险中解脱出来,但是您可以方便地避免针对服务器启动数百个简单的脚本。你可以帮自己从日志中删掉大量的干扰。

在本文中,我在一个云提供商上使用 SSH 服务器默认端口 TCP 22,每分钟的平均攻击次数为 24。在将端口更改为更高的数字 TCP 45678 后,连接和猜测任何用户名或密码是每天两个。

要更改 SSH 的默认端口,/etc/ssh/sshd_config请在您喜欢的文本编辑器中打开并将值 Port 从 22 更改为大于 1024 的某个数字。该行可能会被注释,因为 22 是默认值(因此不需要显式声明在配置中),所以在保存之前取消注释该行。

Port 2112
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

更改端口并保存文件后,重新启动 SSH 服务器:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                              
sudo systemctl restart sshd

2.没有了密码

随着双因素身份验证等方法越来越流行,人们普遍开始停止使用密码作为身份验证手段。OpenSSH 可以使用非对称密钥进行身份验证,因此无需记住复杂的密码,更不用说每隔几个月更换密码,或者担心有人在您建立远程会话时“偷偷观看”。SSH 密钥的使用允许您快速、安全地登录到远程设备。这通常意味着处理服务器本身的错误用户名和密码的时间更少。登录非常简单。没有钥匙,就没有入口——甚至没有提示符。

要使用此功能,您必须同时配置客户端(就是您面前的计算机)和服务器(远程计算机)。

在客户端计算机上,您必须生成一个 SSH 密钥对。这由一个公钥和一个私钥组成。正如他们的名字所暗示的那样,一个密钥供您分发到您要登录的服务器,另一个是私有的,必须与任何人共享。使用命令创建一个新密钥ssh-keygen,并使用该 -t 选项指定一个好的、最近的加密库,如ed25519:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                              
⚡ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/linuxmi/.ssh/id_ed25519):

在创建密钥期间,系统会提示您命名文件。您可以按 回车 接受默认值。如果您将来创建更多键,您可以为每个键指定一个自定义名称,但拥有多个键意味着您要指定每次交互使用哪个键,所以现在,只需接受默认值即可。

您还可以为您的密钥提供密码。这样可以确保即使其他人设法获得了您的私钥(这本身不应该发生),他们也无法在没有您的密码的情况下使用它。对于某些密钥,它是一种有用的保护措施,而对于其他密钥(尤其是在脚本中使用的那些)则不适用。按 回车 使您的密钥不带密码或创建密码(如果您选择)。

要将您的密钥复制到服务器上,请使用该 ssh-copy-id 命令。例如,如果我拥有一个名为 的服务器example.com,那么我可以使用以下命令将我的公钥复制到它:

ssh-copy-id linuxmi@linuxmi.com

这将使用您的公钥 创建或修改服务器目录中.ssh的 authorized_keys文件。

一旦ssh-copy-id命令确认了它所做的事情,尝试从您的计算机登录以验证您可以在没有密码的情况下登录(或者如果您选择使用密码,则可以使用您的密钥密码)。

在不使用服务器帐户密码的情况下进入服务器后,编辑服务器sshd_config并设置PasswordAuthentication为 no.

PasswordAuthentication no

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                              
sudo systemctl restart sshd

重新启动ssh服务以加载新配置:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                              
sudo systemctl restart sshd

相关阅读:如何使用无密码 SSH 密钥登录远程 Ubuntu 20.04 服务器 https://www.linuxmi.com/no-password-ssh-ubuntu-20-04.html

3. 决定谁可以登录

大多数发行版不允许 root 用户通过 SSH 登录,这确保只有非特权帐户处于活动状态,使用sudo命令根据需要提升权限。这可以防止一个值得注意且非常明显的目标(root)免受简单但非常常见的脚本攻击。

同样,OpenSSH 的一个简单而强大的特性是能够决定哪些用户可以登录到机器。要设置授予哪些用户 SSH 访问权限,请sshd_config在您喜欢的文本编辑器中打开该文件,然后添加如下一行:

AllowUsers linuxmi kotlin xxvi

重新启动 SSH 服务以加载新的配置选项。

这仅允许三个用户(linuxmi、kotlin 和 xxvi)登录或在远程计算机上执行任何操作。

最后的想法

您可以使用 OpenSSH 来实现强大而健壮的 SSH 服务器。这些只是加强安装的三个有用选项。不过,您可以在文件中打开或关闭大量功能和选项,sshd_config还有许多很棒的应用程序,例如 Fail2ban  ,您可以使用它们来进一步保护您的 SSH 服务。

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2019-01-10 13:58:02

2009-09-28 09:22:08

配置服务器未经授权的网络访问

2013-12-23 11:30:45

2015-09-10 10:58:26

2009-03-04 06:30:00

DHCP服务器企业服务器

2019-10-24 10:14:30

2011-11-21 16:32:19

2023-06-26 14:19:35

2011-07-29 11:17:28

服务器WAN性能安全

2017-09-13 07:23:03

2021-09-21 09:01:19

网络安全疫情数据

2018-01-31 19:00:32

2015-05-22 08:59:38

2011-03-15 16:03:32

MySQL授权表服务器

2018-06-12 10:12:12

2018-02-05 15:10:35

2022-09-26 09:19:38

服务器优化

2019-04-30 10:27:46

无服务器云计算安全

2010-08-25 21:25:41

DHCP服务器

2021-11-14 11:53:05

Linux 系统攻防Linux 系统
点赞
收藏

51CTO技术栈公众号