别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有

简介: 如果你购买了阿里云、腾讯云或者华为云等国内云服务上的服务器,默认登录都是以密码的方式,这就给潜在的渗透带来了机会,因为当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描),如果你不采取相对应的措施,迟早有一天服务器会被渗透者攻陷,这也就解释了为什么google cloud(谷歌云)和aws(亚马逊云)默认都是以秘钥的方式登录服务器。

如果你购买了阿里云、腾讯云或者华为云等国内云服务上的服务器,默认登录都是以密码的方式,这就给潜在的渗透带来了机会,因为当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描),如果你不采取相对应的措施,迟早有一天服务器会被渗透者攻陷,这也就解释了为什么google cloud(谷歌云)和aws(亚马逊云)默认都是以秘钥的方式登录服务器。

基于密钥的安全验证必须为用户自己创建一对密钥(公钥和私钥),并把公钥放在需要访问的服务器上。当需要连接到远程服务器上时,客户端软件就会向服务器发出请求,请求使用私钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找公钥,然后把它和发送过来的密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(moba、iTerm)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的,之前做支付宝支付我们就使用过秘钥的方式来加强支付安全性,详见:在Mac系统下生成新版支付宝(2019年4月)支付接口私钥和公钥

本次我们将服务器的登录方式改造成秘钥+密码的形式,提高安全性,这里以Centos7.6为例子。

首先登录到服务器中,执行命令生成秘钥

ssh-keygen -t rsa

返回信息:

Generating public/private rsa key pair.  
  
Enter file in which to save the key (.ssh/id_rsa): //直接回车,这是秘钥的地址  
  
Enter passphrase (empty for no passphrase):  //输入密钥密码(如果不设置,请直接回车。强烈建议输入1个密码- -)  
  
Enter same passphrase again:  //重复密钥密码

之后将~/.ssh/id\_rsa.pub 复制到 ~/.ssh/authorized\_keys,并且赋予权限。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  
  
chmod 600 ~/.ssh/authorized_keys

随后修改/etc/ssh/sshd\_config 文件,将PubkeyAuthentication 后面的值都改成yes ,保存。

重启sshd服务,让配置生效

sudo service sshd restart

此时,我们就可以测试一下是否可以用秘钥登录了,将服务器目录中的秘钥~/.ssh/id\_rsa下载到本地

如果是windows用户,推荐使用MobaXterm,在ssh设置中,勾选使用秘钥并且选择本地秘钥即可。

如果平台是Mac os,这里推荐使用iTerm 4,同样在ssh设置中,选择运行ssh命令。

设置命令:

ssh -p 22 root@你的ip -i 你的秘钥地址

如果使用秘钥登录成功了,我们就可以考虑停用密码验证登录方式,修改/etc/ssh/sshd\_config 文件将PasswordAuthentication yes 修改成 PasswordAuthentication no。

重启ssh服务

sudo service sshd restart

这样安全性确实大大提升了,但是也不是滴水不漏,因为你本地电脑也是有可能被入侵的,也就是存储在本机电脑的私钥有几率被窃取,那么有没有方法可以杜绝这种情况呢?

答案是可以的,那就是使用双因子认证(Two-factor authentication),业内也叫两步认证,这项技术苹果和谷歌都是率先使用,尤其是苹果的icloud爆出艳照门之后,两步验证就显得至关重要。

双因子认证,除了需要验证用户名密码外,还要结合另外一种实物设备,如Rsa令牌,或者手机。

如果我们把传统的用户名密码验证称为单因子认证,那么对比双因子认证,他们的区别如下:

1FA – What you know (e.g. a password, a pin)

2FA – What you have (e.g. a phone, a hardware token)

3FA – What you are (e.g. your fingerprints, you retina)

是的,你没看错,还有三因子认证,也就是通过指纹和视网膜验证,这个在手机上很普遍,大家都不陌生。

双因子认证的产品大致可以分成两类:

1、可以产生token的硬件设备

2、智能手机的app

手机短信验证码,登录微信公众号时的扫码确认都可以称为双因子认证。双因子认证,还会结合一个只有你有的硬件设备。只要这个专属的硬件设备不丢失(察觉这个设备丢失,比用户名密码泄露,会容易很多),就可以大大地提升账号的安全性。

这里我们使用google-authenticator,开启服务器双因子认证。

首先,去google的android应用市场,或者apple的appStore去安装:“Google Authenticator(google身份验证器)”。

然后登录要开启双因子认证登录的服务器,进行为服务器安装依赖

yum -y install gcc gcc-c++ make wget pam-devel

安装Google Authenticator

wget http://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2  
tar jxvf libpam-google-authenticator-1.0-source.tar.bz2  
cd libpam-google-authenticator-1.0  
make  
sudo make install

使用SSH登录时调用google-authenticator模块

编辑文件/etc/pam.d/sshd,添加:

auth   required     pam_google_authenticator.so

再次编辑/etc/ssh/sshd\_config,在文件中查找ChallengeResponseAuthentication和UsePAM,将后面的值改为 yes:

ChallengeResponseAuthentication yes  
UsePAM yes

再次重启ssh服务

sudo service sshd restart

随后,为用户root绑定认证

su -  
google-authenticator

返回命令

Do you want authentication tokens to be time-based (y/n) y  
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@google%3Fsecret%3DCKHMVUVJNTPYSPTQ  
Your new secret key is: CKHMVUVJNTPYSPTQ  
Your verification code is 734261  
Your emergency scratch codes are:  
68748337  
15176712  
30287010  
70585905  
38041521

生成了共享秘钥:CKHMVUVJNTPYSPTQ

接着一路yes

Do you want me to update your "/root/.google_authenticator" file (y/n) y  
  
Do you want to disallow multiple uses of the same authentication  
token? This restricts you to one login about every 30s, but it increases  
your chances to notice or even prevent man-in-the-middle attacks (y/n) y  
  
By default, tokens are good for 30 seconds and in order to compensate for  
possible time-skew between the client and the server, we allow an extra  
token before and after the current time. If you experience problems with poor  
time synchronization, you can increase the window from its default  
size of 1:30min to about 4min. Do you want to do so (y/n) y  
  
If the computer that you are logging into isn't hardened against brute-force  
login attempts, you can enable rate-limiting for the authentication module.  
By default, this limits attackers to no more than 3 login attempts every 30s.  
Do you want to enable rate-limiting (y/n) y

随后再次登录服务器,会让我们输入一个验证码:

verification code:

此时打开手机上的google身份验证器App,输入对应的code即可

结语:网络千万条,安全第一条,无论多么高深的技术,离开了安全性,那么一切都将失去意义,是空谈,空谈误国,实干兴邦,网络安全,造福大家。

相关文章
|
8月前
|
缓存 安全 网络协议
如何使用Bluetown Cloud服务器及其CDN服务来掩护VPS的真实IP地址。
最终,通过Bluetown Cloud的CDN服务,你的VPS不仅仅是隐藏在一层又一层的保护之下,同时也因为CDN的全球节点而享受到加速访问的优势,无所不在又不被发现,像是一位能在互联网世界中自由穿梭的幽灵特工。
170 14
|
8月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
444 14
|
9月前
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
498 24
|
8月前
|
安全 数据可视化 Linux
在线游戏的地基:VPS和专用服务器性价比大比拼!
游戏服务器是在线游戏的基石,选择合适的服务器类型对玩家体验至关重要。本文对比了VPS(虚拟专用服务器)和专用服务器的优劣势:VPS经济灵活、易于管理,但性能和安全存在局限,适合预算有限或玩家规模适中的游戏;专用服务器性能强大、安全可靠且可控性高,但成本和技术门槛较高,更适合大型MMO或竞技游戏。根据游戏类型、预算、技术能力和扩展需求,合理选择服务器类型是关键。初创阶段可选用中端VPS,成长阶段考虑高端VPS或低端专用服务器,成熟阶段则需高端专用服务器集群。未来,混合架构或将实现性能与成本的平衡。最终,以玩家流畅体验为导向,选择最适合的服务器方案。
310 3
|
9月前
|
Ubuntu 应用服务中间件 网络安全
关于一些轻量云服务器SSH断连的疑问
在使用2H2G配置的轻量级Ubuntu 22.04服务器时,按照Solana官网教程安装环境,执行`[cargo install]`命令(特别是安装avm和anchor包时),出现SSH连接中断且无法重新登录的问题。推测可能是低配服务器资源耗尽导致SSH进程被终止,即便CPU使用率下降也无法恢复连接,需重启服务器并等待约30分钟才能恢复正常。此现象或与服务器性能限制有关,期待更多测试与解释。
|
11月前
|
安全 网络安全 数据安全/隐私保护
Debian 12系统中允许Root远程SSH登录解决方法!
在 Debian 12 系统中开启 SSH 远程 Root 登录需修改 SSH 配置文件 (`sshd_config`),将 `PermitRootLogin` 设置为 `yes` 并确保密码认证启用。完成后重启 SSH 服务并验证连接。若防火墙启用,需放行端口 22。注意,直接开放 Root 登录可能带来安全风险,建议使用普通用户登录后切换至 Root。
1544 1
|
11月前
|
存储 弹性计算 安全
ECS与VPS技术角力:从算力成本到免备案雷区,企业服务器选型合规指南
在数字化浪潮中,服务器选择至关重要。ECS(云服务器)和VPS(虚拟专用服务器)是热门选项。ECS基于云计算,提供高可用性和弹性伸缩,适合大型项目;VPS通过分割物理服务器实现资源独立,成本较低,适合小型应用。两者在网络、存储及计算性能上各有优劣,需根据需求选择。国内并不存在合法的免备案服务器,建议严格遵守法规,确保网站合法运营。
578 3
|
监控 Ubuntu 安全
debian或Ubuntu中开启ssh允许root远程ssh登录的方法
在Debian或Ubuntu系统中启用root用户的SSH远程登录需要编辑SSH配置文件、设置root密码并重启SSH服务。虽然这可以在某些情况下提供便利,但必须注意安全性,通过使用强密码、限制IP访问、使用SSH密钥认证等方法来保护服务器的安全。
6126 5
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
Ubuntu Linux 网络安全
SSH客户端连接远程服务器
一、什么是客户端连接远程服务器 发起连接的一方,计算机或设备(称为客户端)与另一个计算机或设备(称为远程服务器)建立连接。 客户端通过网络连接到远程服务器,远程服务器则是提供所需服务或资源的一方。 客户端通常使用特定的协议(如SSH、HTTP、FTP等)与远程服务器进行通信。 示例:你使用SSH客户端从本地计算机连接到远程服务器以执行远程命令。 二、什么是服务端连接远程服务器
567 1