前言
SSH 是一种可以让你在不安全的网络上, 安全的运行网络服务的网络协议的. SSH 的标准 TCP 端口为 22 端口, 其最佳应用场景是用户远程登录至计算机系统. 因此, SSH 端口也是攻击者必扫的端口之一. 本文将就 SSH 端口的安全性展开讨论, 并为大家提供多种保护 SSH 端口安全性的建议和方法.
在开始之前, 让我们先在计算机上安装 SSH 服务器. 命令如下:
sudo apt-get install openssh-server
端口转发
配置并运行 SSH 服务, 然后我们使用 NMAP 进行扫描, 可以看到当前 SSH 正在 22 端口上运行.
切换至客户端机器的 / etc/SSH 目录下, 我们可以看到一个名为 sshd_config 的配置文件.
cd /etc/SSH
使用 nano 命令打开 sshd_config 的文件.
我们将其中的默认端口跟改为 2222(如下图所示), 保存并关闭. 通过这种方式, 我们将端口从 22 转发到 2222.
现在, 我们再次使用 nmap 进行扫描.
nmap 192.168.1.104
nmap 的输出显示 TCP 端口 2222 已打开; 但在服务描述中只显示了 EthernetIP-1, 并没有给出运行服务的准确描述. 因此, 因此, 让我们再来运行带有版本检测选项的 nmap 命令看看:
nmap -sV 192.168.1.104
通过输出我们可以清楚地看到 SSH 服务当前正在 TCP 2222 端口上运行, 以及 OpenSSH 版本的描述.
公钥保护
首先, 我们需要下载并安装 PuTTY Key Generator.
注: PuTTYgen 是一个密钥生成器, 用于为 PuTTY 创建 SSH 密钥并且以自己的格式存储密钥(.ppk 扩展名)
打开它, 然后单击生成.
单击生成将启动生成公钥和私钥的过程, 如图所示:
生成公钥和私钥后, 单击 "保存公钥". 这会将密钥作为一个公钥保存.
现在, 打开我们服务器的 Ubuntu 的终端并输入 SSH - 凯基.
以上命令将创建一个名为. SSH 的文件夹, 然后我们在同一文件夹中创建一个名为 authorized_keys 的空文本文件. 然后, 我们复制之前使用 PuTTy Key Generator 创建的 "ssh_login.ppk" 文件, 并将其粘贴到的. SSH 文件夹中, 如图所示:
在终端中, 进入. SSH 文件夹并键入以下命令:
puttygen -L "ssh_login.ppk"
此命令将会生成一个密钥.
现在, 我们复制该密钥并使用纳米命令将其粘贴到名为 authorized_keys 中的空文件中并保存.
接着, 我们打开腻子配置选项卡, 然后转到会话选项卡, 为你的客户端机器提供 IP 地址和端口号.
继续转到数据选项, 并提供自动登录用户名(自动登录用户名).
导航到 SSH > 验证并提供 ssh_login.ppk 文件的路径(之前生成的公钥), 然后单击 "打开".
此时, 它将使用公钥登录 SSH 服务器, 而无需输入密码.
使用的 gedit 命令打开的 / etc / SSH 中的 sshd_config 中文件. 我们将修改 #PasswordAuthentication 选项, 如图所示.
当前配置
#PasswordAuthentication yes
现在, 我们将参数值是改为无并去掉注释符(如下图所示), 完成后保存并关闭文件. 此更改将禁止任何用户使用密码登录 SSH 服务器.
PasswordAuthentication no
正如你所看到的, 这些设置已禁用基于密码的登录, 并要求使用公钥登录.
禁用根登录并限制 SSH 用户的访问权限
该安全措施, 需要我们先使用的 adduser 命令创建一些新用户(这里我已经创建了: H1,H2,H3,H4 用户), 然后使用的 gedit 命令在 sshd_config 的文件的 #Authentication 身份下添加以下行:
- #No root login allowed(h2 can login as sudo -s)
- PermitRootLogin no
- ##only allow 1 users h2 (sysadmin)
- AllowUsers h2
切记更改后及时进行保存, 这将禁用 Root Login, 并且只允许 h2 用户远程登录 SSH 服务器.
正如你所看到的, 只有 H2 用户能够成功登录 SSH 服务器, 而 H1 和 H3 用户权限则被拒绝登录.
Google 身份验证器
要通过 SSH 服务器进行双因素身份验证, 你需要在手机上下载安装 Google Authenticator, 并使用以下命令为 Ubuntu 安装所需的依赖包:
sudo apt-get install libpam-google-authenticator
注 - Google Authenticator 在安装过程中会有多次询问, 你只需选择是即可.
安装完成后, 打开终端并输入命令:
google-authenticator
此时, 将会生成一个二维码, 我们使用手机上的 Google Authenticator 进行扫描.
成功扫描后, 它将为我们生成一个动态口令, 如图所示.
现在, 我们使用的 gedit 命令打开 sshd 的文件并进行以下更改:
在 @include common-auth 前添加注释符;
添加行 (auth required pam_google_authenticator.so) 到 @include common-password 下.
如图所示:
继续更改的 sshd_config 文件中的以下选项.
ChallengeResponseAuthentication yes
现在, 当我们登录 SSH 服务器时, 它会提示要求输入验证码. 这里, 我们必须输入在 Google Authenticator 上生成的动态口令. 如下所示, 我们已经使用一次性密码成功登录至 SSH 服务器.
计划任务限制
在该安全措施中, 我们将在服务器上设置 SSH 服务的时间限制.
克龙是一个用于调度任务的 Linux 的内置服务, 它能够在指定的时间和日期自动运行服务器上的命令或脚本.
在这里, 我们将使用 crontab 的计划 SSH 服务.
我们在 / 等中使用的纳米命令打开的 crontab 现在, 让我们创建一个计划任务让 SSH 服务每 2 分钟启动一次, 4 分钟停止一次用于调度 SSH 服务的命令如下.:
- */ 2 * * * * root service SSH start
- */ 4 * * * * root service SSH stop
保存更改并关闭文件.
等待服务重启, 使用 nmap 扫描 22 端口.
nmap -p 22 192.168.1.104
运行扫描后, 我们将观察端口 22 上的 SSH 服务是否已被关闭, 因为它已持续了 4 分钟的时间.
现在, 如果我们的命令正常工作, 它应该每隔 2 分钟启动一次服务, 为了进一步的确认我们将再次使用 nmap 进行扫描.
nmap -p 22 192.168.1.104
可以看到端口现在处于开放状态.
禁用空密码
从安全最佳实践来看, 我们应该始终禁用空密码登录 SSH 服务器要启用此设置, 我们只需将 sshd_config 的文件的以下选项参数值更为号即可:
PermitEmptyPasswords no
这将禁用空密码登录 SSH 服务器.
来源: http://www.tuicool.com/articles/3iaeqyN