当你检视你的 SSH 服务日志,可能你会发现充斥著一些不怀好意的尝试性登入。这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全。
强化密码登入
密码登入很方便,因为你可以从任何地方的任何机器上登入。但是它们在暴力攻击面前也是脆弱的。尝试以下策略来强化你的密码登入。
使用一个密码生成工具,例如 pwgen 。 pwgen 有几个选项,最有用的就是密码长度的选项(例如,pwgen 12 产生一个 12 位字元的密码)
不要重复使用密码。忽略所有那些不要写下你的密码的建议,然后将你的所有登入资讯都记在一个本子上。如果你不相信我的建议,那总可以相信安全权威 Bruce Schneier 吧。如果你足够细心,没有人能够发现你的笔记本,那么这样能够不受到互联网上的那些攻击。
你可以为你的登入记事本增加一些额外的保护措施,例如用字元替换或者增加新的字元来掩盖笔记本上的登入密码。使用一个简单而且好记的规则,比如说给你的密码增加两个额外的随机字元,或者使用单个简单的字元替换,例如 “#” 替换成 “*” 。
为你的 SSH 服务开启一个非预设的监听埠。是的,这是很老套的建议,但是它确实很有效。检查你的登入;很有可能 22 埠是被普遍攻击的埠,其他埠则很少被攻击。
使用 Fail2ban 来动态保护你的站群服务器,是站群服务器免于被暴力攻击。
使用不常用的使用者名称。绝不能让 root 可以远端登入,并避免使用者名称为 “admin” 。
解决 Too Many Authentication Failures 报错
当我的 ssh 登入失败,并显示 “Too many authentication failures for carla” 的报错资讯时,我很难过。我知道我应该不介意,但是这报错确实很碍眼。而且,正如我聪慧的奶奶曾经说过,伤痛之感并不能解决问题。解决办法就是在你的(客户端的)
~/.ssh/config
档案设定强制密码登入。如果这个档案不存在,首先创个
~/.ssh/
目录。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
然后在一个文字编辑器建立
~/.ssh/confg
档案,输入以下行,使用你自己的远端域名替换 HostName 。
HostName remote.site.com
PubkeyAuthentication=no
(LCTT 译注:这种错误发生在你使用一台 Linux 机器使用 ssh 登入另外一台站群服务器时,你的 .ssh 目录中储存了过多的私钥档案,而 ssh 客户端在你没有指定 -i 选项时,会预设逐一尝试使用这些私钥来登入远端站群服务器后才会提示密码登入,如果这些私钥并不能匹配远端 WordPress 主机,显然会触发这样的报错,甚至拒绝连线。因此本条是通过禁用本地私钥的方式来强制使用密码登入——显然这并不可取,如果你确实要避免用私钥登入,那你应该用 -o PubkeyAuthentication=no 选项登入。显然这条和下两条是互相矛盾的,所以请无视本条即可。)
使用公钥认证
公钥认证比密码登入安全多了,因为它不受暴力密码攻击的影响,但是并不方便因为它依赖于 RSA 金钥对。首先,你要建立一个公钥/私钥对。下一步,私钥放于你的客户端电脑,并且复制公钥到你想登入的远端站群服务器。你只能从拥有私钥的电脑登入才能登入到远端站群服务器。你的私钥就和你的家门钥匙一样敏感;任何人获取到了私钥就可以获取你的账号。你可以给你的私钥加上密码来增加一些强化保护规则。
使用 RSA 金钥对管理多个使用者是一种好的方法。当一个使用者离开了,只要从站群服务器删了他的公钥就能取消他的登入。
以下例子建立一个新的 3072 位长度的金钥对,它比预设的 2048 位更安全,而且为它起一个独一无二的名字,这样你就可以知道它属于哪个站群服务器。
$ ssh-keygen -t rsa -b 3072 -f id_mailserver
以下建立两个新的金钥,
id_mailserver
和
id_mailserver.pub
id_mailserver
是你的私钥–不要传播它!现在用
ssh-copy-id
命令安全地复制你的公钥到你的远端站群服务器。你必须确保在远端站群服务器上有可用的 SSH 登入方式。
$ ssh-copy-id -i id_rsa.pub user@remoteserver
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
user@remoteserver’s password:
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘user@remoteserver'”
and check to make sure that only the key(s) you wanted were added.
ssh-copy-id 会确保你不会无意间复制了你的私钥。从上述输出中复制登入命令,记得带上其中的单引号,以测试你的新的金钥登入。
$ ssh ‘user@remoteserver’
它将用你的新金钥登入,如果你为你的私钥设定了密码,它会提示你输入。
取消密码登入
一旦你已经测试并且验证了你的公钥可以登入,就可以取消密码登入,这样你的远端站群服务器就不会被暴力密码攻击。如下设定你的远端站群服务器的
/etc/sshd_config
档案。
PasswordAuthentication no
然后重启站群服务器上的 SSH 守护程序。
设定别名 — 这很快捷而且很酷
你可以为你的远端登入设定常用的别名,来替代登入时输入的命令,例如
ssh -u username -p 2222 remote.site.with.long-name
你可以使用
ssh remote1
你的客户端机器上的 ~/.ssh/config 档案可以参照如下设定
Host remote1
HostName remote.site.with.long-name
Port 2222
User username
PubkeyAuthentication no
如果你正在使用公钥登入,可以参照这个:
Host remote1
HostName remote.site.with.long-name
Port 2222
User username
IdentityFile ~/.ssh/id_remoteserver
OpenSSH 文件 很长而且详细,但是当你掌握了基础的 SSH 使用规则之后,你会发现它非常的有用,而且包含很多可以通过 OpenSSH 来实现的炫酷效果。
原文来自:https://linux.cn:443/article-7683-1.html
本文地址:http://www.linuxprobe.com/five-safety-advice.html