标签: 安全

增强VPS主机安全linux主机使用密匙验证关闭密码认证的方法

注意,此方法未经测试,转自李思思博客,原文链接已不存在。

平时我们登录VPS都是帐号加密码的方式登录,但是这样呢很不安全,知道密码的人就能登录,不知道的还可以无限尝试,也就是被扫描,为了更加安全,所以出了这文章

好了废话少说,简单的说就三步
第一步 生成一对锁匙
密匙有公匙和私匙,形象的说就是钥匙和锁头,虽然这样说不太对,不过为了便于理解,我这里把公匙比喻为锁头,私匙比喻为钥匙
生成这一对锁匙有多种方法,先来最简单的,
我们先密码登录到我们的linux VPS上,键入如下命令
ssh-keygen -t rsa
然后会得到提示 叫你输入密码,如果你不想为这对锁头再加密码就直接输入2次回车即可,如果你为了更加安全希望这对锁匙加密的话可以输入自己的密码,也就是把你的钥匙变成高级的带密码的钥匙
提示画面应该是这样的
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
你得到了2个文件 在/root/.ssh/下面应该有 id_rsa(钥匙)和id_rsa.pub(锁头).
我们需要把锁头id_rsa.pub 改名字为 authorized_keys
(如果你需要这一对钥匙在别的VPS上也可以使用,而不是一个机子一个钥匙的话,可以把锁头和钥匙一起复制下来,在别的机子上直接把authorized_keys上传到/root/.ssh/下面即可)
好了 上面这些就是第一步 生成一对锁匙

第二步其实是因为putty.exe这个东西不能正确识别linux弄出的钥匙才需要的操作,
我们打开puttygen.exe 把我们的
钥匙id_rsa进行一下处理 如图显示

导入以后 点击 Save private key 得到的就是putty能正常使用的钥匙了(如果你前面加了密码需要你输入密码)

现在呢打开putty 尝试密匙登录

在连接那里可以输入自动登录的用户名,就可以免去输入用户名的烦恼
登录的时候会有如下提示
login as: root
Authenticating with public key “imported-openssh-key”
表示密匙登录成功
第三步就是关闭密码登录
远程Linux主机的/etc/ssh/sshd_config配置文件
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes    #======》这里把注释去掉,并改成no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes #========>把注释去掉,并改成no
修改后/etc/init.d/sshd reload #加载修改后的配置文件并生效
如果是debian的话使用 /etc/init.d/ssh reload 来重新加载配置文件
这样其他远程客户端如果没有私钥,那么这些用户连输入密码的机会都没有,就会被本主机直接断开

就这样教程完毕了

附加其他生成密匙的方法,有兴趣的继续看吧
方案一:使用puttygen.exe生成的密匙
1、用puttygen.exe生成一对密匙
1)、打开puttygen.exe,直接点击Generate,鼠标在Key区空白的位置频繁的晃动
加快随机数的产生,这样几秒钟就可以生成我们需要的密匙
2)、点击Save public key->id_rsa.pub(保存密匙)
因为puttygen.exe生成的格式和Linux系统使用的key格式不同,需要对生成的数据作些简单的修改:
比如源数据:
—- BEGIN SSH2 PUBLIC KEY —-
Comment: “rsa-key-gliethttp”
AAAAB3NzaC1yc2EAAAABJQAAAIEAg2Nx1dBZBypLXY1S78plfmPmwlQj1Ckuoz8o
4vAWjJfOy3i6t2+o7aZMbGN+yUbQY5ScyJu3bK7Wg3ZxXP6qps14J2CAXbdrT9VH
2AA3FIOgbLHii7Bwmjkr5+hVYp7Vazm7cPsGpKnmCWihqX7rkQdY7xq3mOCJI3ry
Nnfkrh0=
—- END SSH2 PUBLIC KEY —-
修改成:(我使用的Linux主机名为gliethttp)
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAg2Nx1dBZBypLXY1S78plfmPmwlQj1Ckuoz8o4vAWjJfOy3i6t2+
o7aZMbGN+yUbQY5ScyJu3bK7Wg3ZxXP6qps14J2CAXbdrT9VH2AA3FIOgbLHii7Bwmjkr5+hVYp7Vazm7cPsGpK
nmCWihqX7rkQdY7xq3mOCJI3ryNnfkrh0= root@gliethttp
(注意:修改后的数据不能有回车换行)
3)、将生成的id_rsa.pub拷贝到远程主机gliethttp的/root/.ssh上
重命名为authorized_keys
[root@gliethttp root]#cd .ssh
[root@gliethttp .sh]#mv id_rsa.pub authorized_keys
这样sshd服务程序当接收到远程客户端的连接申请时会自动匹配.ssh/authorized_keys文件中的密匙
4)、点击Save private key->id_rsa.ppk(保存私钥)
如果安全级别不是很苛刻,可以不设置Key passphrase
2、打开putty.exe
1)、Session –> Host Name (填写服务器地址或者域名)
2)、Connection –> SSH –> Auth (点Browse选择刚生成的id_rsa.ppk)
3)、open
成功打开后出现如下提示:
login as: root
Authenticating with public key “imported-openssh-key”

linux提高ssh安全性的方法

1. 修改sshd服务器的配置文件/etc/ssh/sshd_config,将部分参数参照如下修改,增强安全性。

# Port 5555
系统缺省使用22号端口,将监听端口更改为其他数值(最好是1024以上的高端口,以免和其他常规服务端口冲突),这样可以增加入侵者探测系统是否运行了 sshd守护进程的难度。

# ListenAddress 192.168.0.1
对于在服务器上安装了多个网卡或配置多个IP地址的情况,设定sshd只在其中一个指定的接口地址监听,这样可以减少sshd的入口,降低入侵的可能性。

# PermitRootLogin no
如果允许用户使用root用户登录,那么黑客们可以针对root用户尝试暴力破解密码,给系统安全带来风险。

# PermitEmptyPasswords no
允许使用空密码系统就像不设防的堡垒,任何安全措施都是一句空话。

# AllowUsers sshuser1 sshuser2
只允许指定的某些用户通过ssh访问服务器,将ssh使用权限限定在最小的范围内。

# AllowGroups sshgroup
同上面的AllowUsers类似,限定指定的用户组通过ssh访问服务器,二者对于限定访问服务器有相同的效果。

# Protocol 2
禁止使用版本1协议,因为其存在设计缺陷,很容易使密码被黑掉。
禁止所有不需要的(或不安全的)授权认证方式。

# X11Forwarding no
关闭X11Forwarding,防止会话被劫持。

# MaxStartups 5
sshd服务运行时每一个连接都要使用一大块可观的内存,这也是ssh存在拒绝服务攻击的原因。一台服务器除非存在许多管理员同时管理服务器,否则上面这 个连接数设置是够用了。
注意:以上参数设置仅仅是一个示例,用户具体使用时应根据各自的环境做相应的更改。

2. 修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限,对所有非root用户设置只读权限,防止非授权用户修改sshd 服务的安全设置。

# chmod 644 /etc/ssh/sshd_config

3. 设置TCP Wrappers。服务器默认接受所有的请求连接,这是非常危险的。使用TCP Wrappers可以阻止或允许应用服务仅对某些主机开放,给系统在增加一道安全屏障。这部分设置共涉计到两个文件:hosts.allow和 hosts.deny。
将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用 sshd服务,则添加如下内容:

# sshd:192.168.0.15 10.0.0.11
将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外,所有其他用户都禁 止使用sshd服务,则添加如下内容到hosts.deny文件中:

# sshd:All
注意:系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件,因此一个用户在hosts.allow允许使用 网络资源,而同时在hosts.deny中禁止使用该网络资源,在这种情况下系统优先选择使用hosts.allow配置,允许用户使用该网络资源。

4. 尽量关闭一些系统不需要的启动服务。系统默认情况下启动了许多与网络相关的服务,因此相对应的开放了许多端口进行LISTENING(监听)。我们知 道,开放的端口越多,系统从外部被入侵的可能也就越大,所以我们要尽量关闭一些不需要的启动服务,从而尽可能的关闭端口,提供系统的安全性。
通过以上步骤基本上将sshd服务设置上可能出现的漏洞堵上了,不需要投资,只要我们稍微花点时间调整一下配置,就可极大提高系统的安全环境,何乐而不为呢?