你的位置: Kiyo'Space首页 默认分类 阅读文章 欢迎留下您的足迹

Linux服务器SSH安全策略

[ 默认分类 ] 分享

越来越多的站长,开始使用独立主机(Dedicated Host)和 VPS。而为了节省成本或提高性能,不少人的独机和 VPS,都是基于 unmanaged 的裸机,一切都要自己 DIY。这时候,安全策略的实施,就犹为重要。下面这篇文章,我以 CentOS 为例,简单地总结一下如何配置 SSH 安全访问。

Linux SSH 安全策略一:关闭无关端口

网络上被攻陷的大多数主机,是黑客用扫描工具大范围进行扫描而被瞄准上的。所以,为了避免被扫描到,除了必要的端口,例如 Web、FTP、SSH 等,其他的都应关闭。值得一提的是,我强烈建议关闭 icmp 端口,并设置规则,丢弃 icmp 包。这样别人 Ping 不到你的服务器,威胁就自然减小大半了。丢弃 icmp 包可在 iptables 中, 加入下面这样一条:

	
  • -A INPUT -p icmp -j DROP  
  •  
  • Linux SSH 安全策略二:更改 SSH 端口

    默认的 SSH 端口是 22。强烈建议改成 10000 以上。这样别人扫描到端口的机率也大大下降。修改方法:

    	
  • # 编辑 /etc/ssh/ssh_config  
  • vi /etc/ssh/ssh_config  
  • # 在 Host * 下 ,加入新的 Port 值。以 18439 为例(下同):  
  • Port 22  
  • Port 18439  
  •  
  • # 编辑 /etc/ssh/sshd_config  
  • vi /etc/ssh/sshd_config  
  • #加入新的 Port 值  
  • Port 22  
  • Port 18439  
  •  
  • # 保存后,重启 SSH 服务:  
  • service sshd restart  
  •  
  • 这里我设置了两个端口,主要是为了防止修改出错导致 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 登录到服务器。设置如下:

    	
  • # 编辑 /etc/hosts.allow  
  • vi /etc/hosts.allow  
  • # 例如只允许 123.45.67.89 登录  
  • sshd:123.45.67.89  
  • 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

    	
  • Protocol 2  
  • ServerKeyBits 1024  
  • PermitRootLogin no  #禁止root登录而已,与本文无关,加上安全些  
  •  
  • #以下三行没什么要改的,把默认的#注释去掉就行了  
  • RSAAuthentication yes  
  • PubkeyAuthentication yes  
  • AuthorizedKeysFile    .ssh/authorized_keys  
  •  
  • PasswordAuthentication no  
  • PermitEmptyPasswords no  
  •  
  • 7)重启sshd

    	
  • /sbin/service sshd restart  
  •  
  • 8)转换证书格式,迁就一下putty

    运行puttygen,转换id_rsa为putty的ppk证书文件

    9)配置putty登录

    在connection–SSH–Auth中,点击Browse,选择刚刚转换好的证书。然后在connection-Data填写一下auto login username,例如我的是msa。在session中填写服务器的IP地址,高兴的话可以save一下

    10)解决一点小麻烦

    做到这一步的时候,很可能会空欢喜一场,此时就兴冲冲的登录,没准登不进去:

    	
  • No supported authentication methods available  
  •  
  • 这时可以修改一下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主机上。

    没有评论

    • (Required)
    • (Required, will not be published)