Linux服务器SSH安全策略
越来越多的站长,开始使用独立主机(Dedicated Host)和 VPS。而为了节省成本或提高性能,不少人的独机和 VPS,都是基于 unmanaged 的裸机,一切都要自己 DIY。这时候,安全策略的实施,就犹为重要。下面这篇文章,我以 CentOS 为例,简单地总结一下如何配置 SSH 安全访问。
Linux SSH 安全策略一:关闭无关端口
网络上被攻陷的大多数主机,是黑客用扫描工具大范围进行扫描而被瞄准上的。所以,为了避免被扫描到,除了必要的端口,例如 Web、FTP、SSH 等,其他的都应关闭。值得一提的是,我强烈建议关闭 icmp 端口,并设置规则,丢弃 icmp 包。这样别人 Ping 不到你的服务器,威胁就自然减小大半了。丢弃 icmp 包可在 iptables 中, 加入下面这样一条:
Linux SSH 安全策略二:更改 SSH 端口
默认的 SSH 端口是 22。强烈建议改成 10000 以上。这样别人扫描到端口的机率也大大下降。修改方法:
这里我设置了两个端口,主要是为了防止修改出错导致 SSH 再也登不上。更改你的 SSH 客户端(例如:Putty)的连接端口,测试连接,如果新端口能连接成功,则再编辑上面两个文件,删除 Port 22 的配置。如果连接失败,而用 Port 22 连接后再重新配置。
端口设置成功后,注意同时应该从 iptables 中, 删除22端口,添加新配置的 18439,并重启 iptables。
如果 SSH 登录密码是弱密码,应该设置一个复杂的密码。Google Blog 上有一篇强调密码安全的文章:Does your password pass the test?
Linux SSH 安全策略三:限制 IP 登录
如果你能以固定 IP 方式连接你的服务器,那么,你可以设置只允许某个特定的 IP 登录服务器。例如我是通过自己的 VPN 登录到服务器。设置如下:
Linux SSH 安全策略四: 使用证书登录 SSH
相对于使用密码登录来说,使用证书更为安全。自来水冲咖啡有写过一篇详细的教程,征得其同意,转载如下:
为CentOS配置SSH证书登录验证
来源:自来水冲咖啡
下午帮公司网管远程检测一下邮件服务器,一台CentOS 5.1,使用OpenSSH远程管理。
检查安全日志时,发现这几天几乎每天都有一堆IP过来猜密码。看来得修改一下登录验证方式,改为证书验证为好。
为防万一,临时启了个VNC,免得没配置完,一高兴顺手重启了sshd就麻烦了。(后来发现是多余的,只要事先开个putty别关闭就行了)
以下是简单的操作步骤:
1)先添加一个维护账号:msa
2)然后su - msa
3)ssh-keygen -t rsa
指定密钥路径和输入口令之后,即在/home/msa/.ssh/中生成公钥和私钥:id_rsa id_rsa.pub
4)cat id_rsa.pub >> authorized_keys
至于为什么要生成这个文件,因为sshd_config里面写的就是这个。然后chmod 400 authorized_keys,稍微保护一下。
5)用psftp把把id_rsa拉回本地,然后把服务器上的id_rsa和id_rsa.pub干掉
6)配置/etc/ssh/sshd_config
7)重启sshd
8)转换证书格式,迁就一下putty
运行puttygen,转换id_rsa为putty的ppk证书文件
9)配置putty登录
在connection--SSH--Auth中,点击Browse,选择刚刚转换好的证书。然后在connection-Data填写一下auto login username,例如我的是msa。在session中填写服务器的IP地址,高兴的话可以save一下
10)解决一点小麻烦
做到这一步的时候,很可能会空欢喜一场,此时就兴冲冲的登录,没准登不进去:
这时可以修改一下sshd_config,把
PasswordAuthentication no
临时改为:
PasswordAuthentication yes
并重启sshd。
这样可以登录成功,退出登录后,再重新把PasswordAuthentication的值改为no,重启sshd。以后登录就会正常的询问你密钥文件的密码了,答对了就能高高兴兴的登进去。
至于psftp命令,加上个-i参数,指定证书文件路径就行了。
如果你是远程操作服务器修改上述配置,切记每一步都应慎重,不可出错。如果配置错误,导致 SSH 连接不上,那就杯具了。
基本上,按上述四点配置好后,Linux 下的 SSH 访问,是比较安全的了。当然,安全与不安全都是相对的,你应该定期检查服务器的 log,及时发现隐患并排除。
以下是SecureCRT生成密钥方式
考虑每个会话可以使用不同认证方法,所以在下面将修改Session Options。如果希望用一个证书来管理多台服务器,也可以从菜单中选择Options-Global Options,并在SSH2部分生成或指定公钥。
(1)选择Options-Session Options,打开Session Options对话框。
(2)在对话框左边选择Connection-SSH2,并在对话框右边的Authentication部分中,将认证方式修改为PublicKey。
(3)单击右边的“Properties”按钮,打开Public Key Properties对话框。
(4)选择“Use session public key setting”单选按钮。
(5)选择“Create Identity File”按钮,并根据屏幕提示生成证书文件。在选择密钥存放位置时,选择OpenSSH Key format,并选择适当的密钥保存位置。选择“确定”返回。
(6)因为直接选择Upload不能成功,所以需要手工将Identity.pub文件上传到要登录的服务器上。
也可以用记事本打开该文件,并在“编辑”菜单中选择“全选”,然后从“编辑”菜单中选择“复制”。
在远程服务器上执行
% cat > ~/.ssh/Identity.pub
然后在SecureCRT上单击“粘贴”按钮,粘贴剪切板上的内容。然后按下Ctrl+D关闭Identity.pub文件。
因为在保存密钥时选择的是OpenSSH Key format,所以不需要像SecureCRT帮助文件中所述执行格式转换。执行:
% cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys
(7)最后修改文件属性:
% chmod 600 ~/.ssh/authorized_keys
然后就可以用证书登录远程服务器上。
如果用SecureCrt可以直接把生成密钥导入。或者用SecureCrt也可以生成密钥:
关于SecureCrt使用ssh2的补充
很多朋友都来问我ssh2如何实现.的确用ssh1有点过时了,不妨补充一下ssh2的使用说明,其实看了ssh1的使用说明,再来用ssh2一样很简单.
1.首先产生ssh2的秘匙对,我选择使用RSA加密.
Generate your key in SecureCRT (Global Options ->; SSH2 ->; Create Identity File) in RSA format
2.在linux服务器上建立.ssh目录,如果你以前已经在正常使用ssh1了,那就这一步可以不做,比如我这里要用root帐户使用ssh2
mkdir /root/.ssh
chmod 700 /root/.ssh
3.把生成的 identity.pub 传到linux服务器上,如果你已经在用SecureCrt,可以参考《SecureCRT来上传和下载数据》http://www.5ilinux.com/blog/archives/000083.html
4.导入公匙
ssh-keygen -X -f Identity.pub >;>; /root/.ssh/authorized_keys2
Posted by: vitter at April 9, 2007 03:40 PM
对于不是用openssh的,因为不同软件生成的密钥是不通用的,所以方法有点变化,比如用Secure Shell的:
1. 在本地主机(比如,local)上生成自己的ssh公钥和私钥。命令如下:
local# ssh-keygen
Generating 1024-bit dsa key pair
1 oOo.oOo.o
Key generated.
1024-bit dsa, kiyo@localhost, Fri Oct 20 2000 17:27:05
Passphrase :************ /*在此输入你的口令,以后访问这台主机时要用。
Again :************ /*
Private key saved to /home1/teng/.ssh2/id_dsa_1024_a
Public key saved to /home1/kiyo/.ssh2/id_dsa_1024_a.pub
生成的私钥和公钥(id_dsa_1024_a和id_dsa_1024_a.pub)存放在你目录的~/.ssh2目录下。和用户相关的SSH配置文件都在~/.ssh2下。私钥由用户保存在本地主机上,而公钥需传送到远地主机的你自己的帐号的~/.ssh2下,如果你要用ssh2访问本地主机的话。
2. 在~/.ssh2下创建“identification”文件用来说明进行身份认证的私钥。命令如下:
local:~/.ssh2# echo "IdKey id_dsa_1024_a" > identification
3.同样地,在远地主机(比如,remote)上完成上面步骤。
4.将本地(local)下你自己(这里是“kiyo”)的公钥(id_dsa_1024_a.pub)拷贝到远地主机(remote.pku.edu.cn)上你自己家目录下的.ssh2目录下,可命名为“local.pub”,一般用ftp上传即可。
5. 在远地主机上,你自己家目录的.ssh2目录下,创建“authorization”文件,其中指定用来进行身份认证的公钥文件。命令如下:
remote:~/.ssh2# echo “Key local.pub” > authorization
6. 现在你可以从本地用ssh2登录到远地系统了。命令如下:
local# ssh remote
Passphrase for key "/home1/kiyo/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,
kiyo@localhost, Fri Aug 27 2010 10:27:00":***********
这时会要你输入你的ssh口令(Passphrase)。验证通过后,即登录到remote主机上。
版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2010-08/i676.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论