为了进行远程管理 Unix以及 Linux服务器,远程登录服务器方法主要包括:Telnet、 FTP、 rlogin、 rsh、 rexec和ssh。其中ssh(Secure S
hell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。它用安全、加密的网络连接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。使用 OpenSSH 工具将会增进你的系统安全性。 所有使用 OpenSSH 工具的通讯,包括口令,都会被加密。 telnet 和 ftp 使用纯文本口令,并被明文发送。这些信息可能会被截取,口令可能会被检索,然后未经授权的人员可能会使用截取的口令登录进你的系统而对你的系统造成危害。你应该尽可能地使用 OpenSSH 的工具集合来避免这些安全问题。
OpenSSH相对Telnet、 FTP、 rlogin、 rsh、 rexec这些服务来说比较安全。但是需要看到OpenSSH服务也面临一些安全隐患:但是OpenSSH目前存在几个安全遗患:口令、密匙破解(SSH可以允许任何人只要保持密码框空白并按回车键,就可远程登录密码为两个字符的某一帐户。)以及部分OpenSSH发行版本中可能被安放木马(相关链接:http://network.ccidnet.com/pub/disp/Article?columnID=239&articleID=21882&pageNO=1 ),以及拒绝服务攻击。本文将介绍如何加固OpenSSH服务器。
一、升级旧版本
升级陈旧的OpenSSH版本,因为早期的OpenSSH版本(3.0.0版本)存在的安全漏洞。2003年9月,在类Unix的世界里也出现了一个严重的漏洞:Openssh的溢出漏洞。Openssh是远程终端登录软件,运行在类Unix上。几乎所有的类Unix发行版本都把这个软件作为缺省安装。因此这个软件出现溢出漏洞影响了几乎所有的类Unix 操作系统。Redhat linux描述此漏洞的页面网址是:rhn.redhat.com/errata/RHSA-2003-279.html。特别是对于一个新配置的OpenSSH服务器来说使用最新稳定版本是最明智的选择,可以在其官方网站(http://www.openssh.com/ )下载其源代码进行编译。最新版本是2005年9月1日发布4.2。
二、使用xinetd模式运行OpenSSH
OpenSSH能以Stand-alone、xinetd两种模式运行,当用户账号比较少又经常需要连接到 ProFTPD服务器时推荐使用xinetd模式运行。使用xinetd方式运行ProFTPD可以有效防范DoS攻击。xinetd模式工作原理见:深入了解Linux的守护进程(daemons)(链接:http://www.ccw.com.cn/server/yyjq/htm2005/20050914_14ND5.htm )。
和stand-alone工作模式相比,系统不想要每一个网络服务进程都监听其服务端口。运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。xinetd提供类似于inetd+tcp_wr apper的功能,但是更加强大和安全。能有效的防止拒绝服务攻击(Denial of Services):
1、限制同时运行的进程数。
通过设置instances选项设定同时运行的并发进程数:
instances=20
当服务器被请求连接的进程数达到20个时,xinetd将停止接受多出部分的连接请求。直到请求连接数低于设定值为止。
2.限制一个IP地址的最大连接数:
通过限制一个主机的最大连接数,从而防止某个主机独占某个服务。
per_source=5
这里每个IP地址可以连接单个IP地址的连接数是5个。
3.限制负载。
xinetd还可以使用限制负载的方法防范拒绝服务攻击。用一个浮点数作为负载系数,当负载达到这个数目的时候,该服务将暂停处理后续的连接:
max_load = 2.8
上面的例子中当一项系统负载达到2.8时,所有服务将暂时中止,直到系统负载下降到设定值以下。说明要使用这个选项,编译时要加入--with-loadavg ,xinetd将而已处理max-load配置选项。从而在系统负载过重时关闭某些服务进程,来实现某些拒绝服务攻击。
4.限制所有服务器数目(连接速率) 。
xinetd可以使用cps选项设定连接速率,下面的例子:
cps = 25 60
第一个参数表示每秒可以处理的连接数,如果超过了这个连接数之后进入的连接将被暂时停止处理;第二个参数表示停止处理多少秒后继续处理先前暂停处理的连接。即服务器最多启动25个连接,如果达到这个数目将停止启动新服务60秒。在此期间不接受任何请求。
使用xinetd方式运行sshd的步骤:
(1)检查确省运行情况
确省情况下sshd以stand-alone工作模式运行,可以使用“ps aux| grep sshd”命令查看是否正在运行,然后使用命令“/etc/rc.d/init.d/ sshd stop”中止运行。
(2)创建配置文件/etc/xinetd.d/sshd,代码如下:
service ssh
{
socket_type = stream
wait = no
user = root
instances=20
cps = 25 60
server = /usr/lo cal/sbin/sshd
server_args = -i
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
}
(3)重新启动xinetd配置
killall -USR1 xinetd
|