logo

Navigation:First_Community->Computer->Network Goto:New TopicSettingSearch
利用SSH实现安全网络传输最佳方案 -
Posted by: imac Date: March 29, 2008 09:47PM
利用SSH实现安全网络传输最佳方案

    在浏览网页时,一种
安全
的方法是使用安全外壳(SSH)协议,不过你是否正在以最好的方法使用SSH呢?你是否对它进行了配置使其尽可能地安全了呢?在此笔者为你推荐使用SSH的最佳方法。
  导言
  本文的目的是让你在新的一年里用上SSH的最好方法:为什么要使用,如何使用,以及如何验证这些方法已经布置到位。
  下面所有的例子都假定你正在使用EnGarde Secure Linux,不过这里的方法适用于任何现代的Linux发行版本,因为正如笔者所知,现在谁还不支持OpenSSH呢?
一、
SSHv2 vs. SSHv1


   使用最新版本的SSH协议SSHv2与使用老版本SSHv1相比有许多好处,在此笔者并不打算讨论这些方面,如果你有兴趣完全可以上网找有关资料。也就是说如果你没有什么明显的理由来使用老版本的SSH,你就应当使用新版本。
  要想使用SSHv2但仍允许SSHv1的使用,就需要你打开sshd_config文件,找到“
Protocol
”(协议)这一行,并将其改为:
  Protocol 2,1
  如此一来,就需要注意了,协议的选择是由客户端实现的。多数客户端默认会选择使用V2,不过还有一些老的客户端会继续使用V1。要想强制每个用户都使用SSHv2,就要将上面的一行改为:
  Protocol 2
  在做这样的改变时,不要忘了还得生成恰当的主机密钥(
Host

Key
)。SSHv2要求下面的密钥:
      # HostKeys for protocol version 2
  HostKey /etc/ssh/ssh_host_
rsa
_key
  HostKey /etc/ssh/ssh_host_dsa_key
  While SSHv1 requires:
  # HostKey for protocol version 1
  HostKey /etc/ssh/ssh_host_key
  Once your changes are made, restart the SSH
daemon
:
  # /etc/init.d/sshd restart
  [ SUCCESSFUL ] Secure
Shell
Daemon
  [ SUCCESSFUL ] Secure Shell Daemon
  你可以从另外一台机器,试着用SSH方式登录。你可以使用-v选项来查看正在使用哪一个协议,用“-oProtocol=”选项来强制使用一种或另外一种协议,例如,“ssh -v -oProtocol=2”就是强制使用版本2协议。
二、绑定到一个特定地址或非标准地址
   如果你正在一个内部有防火墙的工作站上使用并运行SSH,那么你可以跳过本部分内容。不过,如果你正在一个防火墙上或在一台拥有两个
网络
连接接口的计算机上运行SSH,那么这部分内容将适用于你。
  OpenSSH会绑定到每一个可用的网络地址,这对于多数安装来说虽然方便适用,但并不是最优化的方法。如果你的机器拥有两个网络连接接口,那么有可能其中一个是“可信任的”,而另外一个是“不可信任的”。在这种情况下,如果你不需要或不想在不可信任的接口上允许SSH的访问进入,那么你应当配置OpenSSH用以监听一个特定的端口。
  要让OpenSSH仅绑定到你的内部端口(也就是下例中的192.168.0.1),你需要在sshd_config文件中找到下面的一行:
  ListenAddress 0.0.0.0
  将其改为:ListenAddress 192.168.0.1
  要验证这种改变生效,就得重新启动OpenSSH并运行netstat:
      # /etc/init.d/sshd restart
  [ SUCCESSFUL ] Secure Shell Daemon
  [ SUCCESSFUL ] Secure Shell Daemon
  # netstat -anp |
grep
sshd
  
tcp
0 0 192.168.0.1:22 0.0.0.0:* LISTEN 7868/sshd
  你可以看出,sshd进程现在正在监听192.168.0.1。进入任何其它接口上的SSH请求都将被忽略。
  类似地,你也许想改变SSH进程绑定的端口。有时从功能上来讲这确实有必要(也就是说,你的老板禁止发往网外的22号端口)虽然这并不能阻止一个意志坚决的攻击者,不能给你带来任何的
安全
利益,但将SSH进程从22号端口移开确实可以保护你,从而防止那些认为SSH进程运行在22号端口的自动攻击。
  要将OpenSSH绑定到一个非22号端口,如下例中的31337号端口,就需要打开sshd_config文件并找到下面这行:
  
Port
22
  将其改为 Port 31337
  要验证这些改变是否能发生作用,重新启动OpenSSH,并且再次运行netstat:
      # netstat -anp | grep sshd
  tcp 0 0 192.168.0.1:31337 0.0.0.0:* LISTEN 330/sshd
  最后,要以SSH方式登录到SSH进程在一个非标准端口监听的一台主机上,需要使用-p选项:
  ssh -p 31337
user@192.168.0.1
三、使用tcp封装器(tcp wrapper)
   Tcp封装器(tcp wrapper)用于限制对你机器上TCP服务的访问。如果你没有听说过TCP封装器,你可能听说过/etc/hosts.allow 和 /etc/hosts.deny:这两个是TCP封装器的配置文件。在SSH的环境中,TCP封装器允许你决定哪些特别的地址或
网络
能够访问SSH服务。
  要使TCP封装器用于SSH,你需要确定OpenSSH用TCP封装器构建而成。在任何现代的Linux发行版本中情况确实是这样的。
  正如笔者前面所叙述的那样,TCP封装器是通过编辑/etc/hosts.deny 和 /etc/hosts.allow文件来配置的。典型情况下,你告诉hosts.deny禁止一切服务,然后向hosts.allow增加条目以允许特定的主机访问特定的服务,例如:
      #
  # hosts.deny This file describes the names of the hosts which are
  # *not* allowed to use the local
INET
services, as decided
  # by the '/usr/sbin/tcpd ' server.
  #
  ALL: ALL
  #
  # hosts.allow This file describes the names of the hosts which are
  # allowed to use the local INET services, as decided
  # by the '/usr/sbin/tcpd ' server.
  #
  sshd: 207.46.236. 198.133.219.25
  在上面的例子中,对SSH的访问仅限于网络207.46.236.0/24和地址198.133.219.25。从任何其它地址对任何其它服务的请求都通过hosts.deny中的“ALL:ALL”拒绝。如果你试图以SSH方式连接到一台机器,而TCP封装器拒绝了你的访问,你会看到如下内容的消息:
  ssh_
exchange
_identification: Connection closed by remote host
  这个简单的配置极大地增强了你的安装的
安全
性,在安装得当后,来自敌对客户端的任何数据包在TCP会话的初期,在这些数据包对一个有漏洞的进程造成真实的破坏之前就会被轻易地丢弃。
四、
公共密钥认证
    笔者要谈的最后一个问题是公共密钥的认证。用户强化SSH
安全
性的最好方法之一是禁用口令验证,取而代之以公共密钥认证。口令验证并非最佳标准,这有很多原因,不过最重要的是因为人们选择的口令很差,攻击者经常设法采用强力攻击的方法获取你的口令。如果系统管理员已经选择了一个糟糕的口令,那他就是在允许黑客以root身份登录,这样一来也就是将系统拱手交给了黑客。
  几乎每一个Linux发行版本都支持公共密钥验证,不过还是从下面的内容开始为妙:
  RSAAuthentication yes
  PubkeyAuthentication yes
  这两个选项默认都设置为“yes”,而“RSAAuthentication”选项适用于SSHv1,“PubkeyAuthentication选项适用于sshv2。如果你打算独占性地使用这种验证方法,你可能需要禁用口令验证:
  PasswordAuthentication no
  在你进行之前,要确保在目标机器上打开一个终端。一旦你重新启动了SSH进程,如果不输入密钥你将不能登录进入,不过我们还没有生成密钥呢:
  在你确定之前,重新启动SSH进程:
      # /etc/init.d/sshd restart
  [ SUCCESSFUL ] Secure Shell Daemon
  [ SUCCESSFUL ] Secure Shell Daemon
  现在,你从桌面设法以SSH方式进入目标机器:
      $ ssh rwm@brainy
  Permission denied (publickey,keyboard-interactive).
  我们被封锁在外面了!这是一件好事情。下一步就是要在你的桌面上生成一个密钥:
      $ ssh-keygen -t dsa -C "Ryan 's SSHv2 DSA Key (Jan 2008)"
  Generating public/private dsa key pair.
  Enter file in which to save the key (/home/rwm/.ssh/id_dsa):
  Enter passphrase (empty for no passphrase): **********
  Enter same passphrase again: **********
  Your identification has been saved in /home/rwm/.ssh/id_dsa.
  Your public key has been saved in /home/rwm/.ssh/id_dsa.pub.
  The key fingerprint is:
  98:4d:50:ba:ee:8b:79:be:b3:36:75:8a:c2:4a:44:4b Ryan 's SSHv2 DSA Key (Jan 2008)
五、
注释小结

   下面我们给出几条注释:
  你可以生成一个DSA(-t dsa)、RSA(-t rsa)或SSHv1(-t rsa1)密钥。在上面的例子中,笔者用的是DSA。
  笔者喜欢将生成密钥的日期放在注释(用-c选项)字段中,这对于笔者相当方便。
  你正在输入的是一个密码短语(passphrase),而不是一个口令。你要用一个带有空格和标点符号的字符串。
  你刚才运行的命令生成了两个文件,一个是id_dsa,也就是你的私钥,还有一个是id_dsa.pubm,也就是你的公钥。你保存并保护好私钥是至关重要的,不过你可以将公钥发布到任何你想要访问的机器中。
  既然已经生成了密钥,我们需要将公钥放置到目标机器的~/.ssh/authorized_keys文件中。最好的方法是复制、粘贴它,这可以通过连接公钥文件开始:
      $ cat .ssh/id_dsa.pub
  ssh-dss AAAAB3NzaC1kc3MAAACBAL7p6bsg5kK4ES9BWLPCNABl20iQQB3R0ymaPMHK...
  ... ds= Ryan 's SSHv2 DSA Key (Jan 2008)
  这个字符串很长。你要保证复制其全部,不过不要复制最后的换行字符,也就是 符号。换句话说,从“ssh”复制到“2008”,而不要超过“2008”。
  下一步就是要将这个密钥追加到目标机器上~/.ssh/authorized_keys文件的尾部。还记得笔者在前面的几步中所说的终端吗?在其中输入下面的命令,将刚才复制的密钥复制到标明KEY的区域中:
  echo "KEY" >> ~/.ssh/authorized_keys
  例如:
  echo "ssh-dss AAAA5kS9BWLPCN...s= Ryan 's SSHv2 DSA Key (Jan 2008)" >> ~/.ssh/authorized_keys
  现在试着再次以SSH方式登录。如果你正确地执行了这个过程,那么你将被提示要求输入密码短语而不是拒绝访问:
      $ ssh rwm@brainy
  Enter passphrase for key '/home/rwm/.ssh/id_dsa ':
  Last login: Thu Jan 10 14:37:14 2008 from papa.engardelinux.org
  [rwm@brainy ~]$
  搞定!庆贺一下。你现在已经成功地用公钥验证登录进入,而没有采用口令验证,
安全
性得到了极大增强。
  小结
  应该说SSH是一个很不错的工具,而且是每一个系统管理员的第二位好朋友(当然Perl是第一位的)。如果你仍使用一个基于终端的邮件阅读器的话,它允许你可从任何地方阅读
电子邮件
。它允许你从家里到工作用的桌面上在应用程序之间建立安全通道,为你提供了一个优于FTP等方式的更好选择。
  SSH也像其它任何工具一样,它仅能按照你所配置的方式工作。笔者希望你能在此文中发现一些有价值的东西,从而有利于你用SSH更好地为你工作。也希望你能发现自己的经验,并与大家共享。
  
   

CopyRight owned by the original author.--(www.MegaEntry.com)



Reply To This Message
Subject: 

Copyright 2005-2006 megaentry,All Rights Reserved
IE 6.0 or above is perfect