保护SSH端口安全性的多种技巧介绍

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服务器。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu上安装Chef服务器,工作站和客户端

随着组织结构的增长以及管理环境所需组件的扩展,各个服务器和服务可能变得难以管理。配置管理解决方案旨在简化系统和基础架构的管理。配置管理工具的目标是允许您将基础架...

12530
来自专栏JavaEdge

SpringBoot+Security 发送短信验证码在core模块下properties包中创建SmsCodeProperties在ValidateCodeProperties中new一个SmsCo

30560
来自专栏云计算教程系列

使用Apache或Nginx加密Tomcat流量

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Serv...

19760
来自专栏python学习路

二、urllib进阶

Handler处理器 和 自定义Opener opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的ur...

31750
来自专栏Jerry的SAP技术分享

如何给VirtualBox虚拟机的ubuntu LVM分区扩容

我在VirtualBox安装的ubuntu里安装Cloud Foundry时遇到错误信息,磁盘空间不够了:

39340
来自专栏FreeBuf

TinyShop缓存文件获取WebShell之0day

TinyShop是一款电子商务系统(网店系统),适合企业及个人快速构建个性化网上商店。系统是基于Tiny(自主研发)框架开发的,使系统更加的安全、快捷、稳定、高...

25590
来自专栏weixuqin 的专栏

Django 使用第三方服务发送电子邮件

16340
来自专栏LIN_ZONE

php项目,别人无法访问自己(windows 系统)上Apache服务器原因(转载)

2.windows默认带防火墙的,进入 控制面板-系统和安全-Windows 防火墙-允许的程序(win10系统的是:进入 控制面板-允许应用或功能通过Wind...

7830
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Apache或Nginx加密Tomcat 8连接

Apache Tomcat是一个Web服务器和servlet容器,旨在为Java应用程序提供服务。Tomcat经常用于生产企业部署和较小的应用程序需求,既灵活又...

51630
来自专栏JAVA烂猪皮

Zookeeper的简介和应用场景

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务 A、zookeeper是为别的分布式程序服务的 B、Zookeeper本身就...

15010

扫码关注云+社区

领取腾讯云代金券