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_wrapper的功能,但是更加强大和安全。能有效的防止拒绝服务攻击(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/local/sbin/sshd server_args = -i log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } |
killall -USR1 xinetd |
三、为sshd配置PAM
1、安装PAM模块
PAM简介:
PAM全称:Pluggable Authentication Module (嵌入式认证模块)。它最初有SUN公司开发;很快被Linux社区的接受,并且开发了更多的模块。其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来。Linux-PAM处理四种独立的(管理)工作。它们是: 认证管理; 帐号管理; 会话期间管理;和密码管理。
PAM工作方式:
|
图1 PAM工作流程。
PAM具体使用方法:
下面手工建立一个/etc/pam.d/ftp文件包括以下内容:
%PAM-1.0 auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_nologin.so account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth |
下面就可以使用PAM加固OpenSSH服务器。
四、使用TCP 会绕程序
TCP 会绕程序(TCP wrappers)为多项服务提供访问控制。多数现代的网络服务,如 SSH、Telnet 和 FTP,都使用 TCP 会绕程序。该会绕程序位于进入请求和被请求服务之间。 tcp_wrapper可以用来禁止(或者显式的允许)特定的主机对某些服务的访问。简单的说,它的工作原理是这样的:inetd或xinetd运行很多的服务,其中很多都是由tcpd包装好的。换句话说,tcpd是真正运行这些服务的程序,但是inetd或xinetd不知道这些(其实它根本不关心)。tcpd根据/etc/hosts.allow和/etc/hosts.deny来判断是否允许传来的连接请求。tcp_wrapper工作原理见图2。
tcp_wrappers的应用思路是“先阻止、后放行”。因此策略是首先禁止所有主机访问FTP服务器(在/etc/hosts.deny文件中设定),然后在/etc/hosts.allow中加入允许访问的主机或IP地址列表,这是最安全的访问策略。修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow", 去掉其他无关控制访问,增加如下内容:
sshd : localhost : allow sshd : friendlycomputer : allow sshd : all : deny |
五、修改确省配置文件
Sshd配置文件是/etc/ssh/sshd_config,如果你没有使用SSH protocol (协议)1的机会,这里建议你关闭pro tocol 1的使用,因为ssh protocol 1不如protocol 2安全, 还可以有效的阻止攻击者通过修改包携带的版本banner来劫持(hijacking)启动 会话进程并降级你到protocol 1,理论上可以迫使使用ssh 1 协议来通信。你必须注释掉Protocol 2,1而使用下面的一行来代替:
Protocol 2
另外SSH在运行的时候消耗比较多的内存,是个"耗粮"大户,这也是近来发现有关SSH存在拒绝服务攻击的原因。每一个连接使用一大块可观的内存,FreeBSD默认使用"MaxStartups"来管理,默认的值是一个比较健康的值,如:
MaxStartups 5:50:10
因为一个系统你除非有很多人管理系统或者提供SHELL服务,一般情况下这个值是足够了,MaxStartups不是意味着总的连接数,只是指还没有认证的连接数,这意味着,在任一(意)时刻, 多达5人可以(能)同时唤起登陆进程。
默认情况下Linux的OpenSSH配置关闭了空密码登陆,这里还建议里关闭X11Forwarding,你可以把X11Forwarding 这行改为:
X11Forwarding no
如果你的机器作为服务器在运行,就不需要安装X服务程序,因为使用了X11Forwarding on,就可能被受控制了的远程主机发送进程把自己attach你的 X11会话进程,从而可以记录击键记录,显示一些杂乱信息和捕获你的显示内容。强烈建议不使用静态密码,而使用DSA或者RSA KEY,你修改如下内容就可以关闭。
使用密码认证:
PasswordAuthentication no
你可以通过下面的方法来限制组用户或者光是单独用户来访问SHELL:
AllowGroups shellusers
设定root账号不能登录,这里将#号去掉并改成不允许root用ssh登录ssh服务器,因为利用root用户登陆是不明智的,因为它拥有太大的权限,在实际使用时应该会出现安全问题,方法:
將 #PermitRootLogin Yes 改成 PermitRootLogin no |
Port 1678
另外可以使用以下代码可以指定sshd监听的接口地址:
ListenAddress 192.168.0.254
这样,就可以避免向未知的人群提供此类登录服务。
最后修改配置文件的属性,防止非授权用户修改配置文件:
chmod 644 /etc/ssh/sshd_config |
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启动方法:
python setup.py |
BlockHosts是基于命令行模式的,使用非常简单这里就不赘述了。
总结:
以上介绍了如何六个方面加固Openssh服务器方法。无论哪种类型的服务,存在漏洞都是不可避免的,只是被发现的时间早晚问题。作为使用者,我们能做的只有密切关注漏洞的发布情况,并及时打安全补丁以加固服务器,才能保证自己所管理的网络不被黑客利用已经发现的漏洞攻击。
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |