6

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

 2 years ago
source link: https://os.51cto.com/article/707115.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

f5d9262465ede4170b43260e6c356b2ca96378.jpg

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 ::

f6511b296291f4fa3c84974ddabeb91558677b.jpg

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

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

181800a4450fe5a61b3804d502c86394b2c048.jpg

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):

681c99920cd6f543995654022f0e8bfca882c1.jpg

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

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

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

ssh-copy-id [email protected]

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

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

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

PasswordAuthentication no

67778c8252cb86ab2557175d1e1ffdcd40ecbf.jpg

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

13d76cf37cba6cc96b035525231fb8ce6f8efb.jpg

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

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

最后的想法

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK