服务器 频道

如何构建安全的远程登录服务器(中)

    2.SSH服务器安全策略
 
    (1) 升级旧版本

    升级陈旧的OpenSSH版本,因为早期的OpenSSH版本(3.0.0版本)存在的安全漏洞。2003年9月,在类Unix的世界里也出现了一个严重的漏洞:Openssh的溢出漏洞。Openssh是远程终端登录软件,运行在类Unix上。几乎所有的类Unix发行版本都把这个软件作为缺省安装。因此这个软件出现溢出漏洞影响了几乎所有的类Unix操作系统。Redhatlinux描述此漏洞的页面网址是:rhn.redhat.com/errata/RHSA-2003-279.html。特别是对于一个新配置的OpenSSH服务器来说使用最新稳定版本是最明智的选择,可以在其官方网站(http://www.openssh.com/)下载其源代码进行编译。最新版本是2005年9月1日发布4.2。

    (2)使用xinetd模式运行OpenSSH

    OpenSSH能以Stand-alone、xinetd两种模式运行,当用户账号比较少又经常需要连接到SSH服务器时推荐使用xinetd模式运行。使用xinetd方式运行ProFTPD可以有效防范DoS攻击。xinetd模式工作原理见:“教你配置安全的ProFTPD服务器(中),网络链接:http://publish.it168.com/2006/0905/20060905002801.shtml?positioncode=970 ”。使用xinetd方式运行sshd的步骤:

  • 检查确省运行情况
    确省情况下sshd以stand-alone工作模式运行,可以使用“psaux|grepsshd”命令查看是否正在运行,然后使用命令“/etc/rc.d/init.d/sshdstop”中止运行。
  • 创建配置文件/etc/xinetd.d/sshd,代码如下:
    servicessh
    {socket_type=stream
    wait=no
    user=root
    instances=20
    cps=2560
    server=/usr/local/sbin/sshd
    server_args=-i
    log_on_success+=DURATIONUSERID
    log_on_failure+=USERID
    nice=10}
  • 重新启动xinetd配置
    killall-USR1xinetd

    (3)使用使用BlockHosts对抗暴力破解

    Openssh服务面临的另外一个威胁是黑客采取暴力破解的方式获取用户密码而非法登录FTP服务器。BlockHosts软件就是利用通过分析日志文件帮助tcp_wrappers实现工作自动化。例如在30秒钟内一个IP地址(192.168.1.23)连续20次登录sshd服务器而且全部因为密码错误登录失败。那么这个IP地址无疑是非法或者恶意主机。这时BlockHosts会自动将该IP地址写入/etc/hosts.deny文件。首先编辑你的/etc/syslog.conf文件,一般修改security.*/var/log/security条目内容如下:
security.*;auth.info/var/log/security原因很简单,这样syslogd就把连接到sshd的日志信息记录下来。

    BlockHosts官方网站:http://www.aczoom.com/cms/blockhosts/,最新版本:1.0.0。BlockHosts启动方法:pythonsetup.py BlockHosts是基于命令行模式的,使用非常简单这里就不赘述了。

    (4)使用TCP会绕程序

    它是针对一系列对荷兰埃因霍温理工大学的系统攻击,WietseVenema开发了一个名为TCPWrappers的简单而优美的工具来控制和监测到来的网络传输。TCPWrappers修正调用网络服务的xinetd方法。它通过对FTP和Telnet这些缺省的网络服务程序进行“包装”来开展工作。当建立了一个连接时,最先调用TCPWrappers而不是缺省服务。它对到来的连接进行简单访问控制(通过两个文件—/etc/hosts.allow和/etc/host.deny),记录远程主机的名字,然后运行原来的网络服务程序。

    TCP会绕程序(TCPwrappers)为多项服务提供访问控制。多数现代的网络服务,如SSH、Telnet和FTP,都使用TCP会绕程序。该会绕程序位于进入请求和被请求服务之间。tcp_wrapper可以用来禁止(或者显式的允许)特定的主机对某些服务的访问。简单的说,它的工作原理是这样的:inetd或xinetd运行很多的服务,其中很多都是由tcpd包装好的。换句话说,tcpd是真正运行这些服务的程序,但是inetd或xinetd不知道这些(其实它根本不关心)。tcpd根据/etc/hosts.allow和/etc/hosts.deny来判断是否允许传来的连接请求。tcp_wrapper工作原理见图3。
 

图3 tcp_wrapper工作原理


    tcp_wrappers的应用思路是“先放行、后阻止”。对我们Linux 用户来讲比较幸运的是,大多数Linux发行版本中TCP Wrappers 默认已经安装,我们所要作的就是编辑/etc/hosts.allow 和/etc/hosts.deny 这两个文件,它们决定了谁能访问系统和谁不能访问系统。默认情况下,Linux 允许来自任何地方的连接,所以你需要修改配置,根据以下两个原则:

    1)尽量使用IP,不要使用域名,域名比IP地址更具有欺骗性。
    2)编辑/etc/hosts.deny,禁止来自任何地方对所有服务的访问。语法为:
    ALL:ALL,然后在/etc/hosts.allow中添加某些允许访问的主机。

    应用实例:
    所以我们先把 /etc/host.deny设定为:
    ALL: ALL
    假设我要允许192.168.10.2的主机使用ssh的服务的话,可以在 /etc/hosts.allow中设定
    sshd: 192.168.10.2如果是整个网段的话,就设定为
    sshd: 192.168.10.0/255.255.255.0
    或者是你可以使用网域的名称
    ssh: .ossii.com.cn
    如果同一笔数据中有多个位置,可以用 ”,” 分开,例如:
    sshd: 192.168.10.2, 10.0.0.120, 192.168.20.0/255.255.255.0, ossii.com.cn.

0
相关文章