首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 动手加固OpenSSH服务器
【标  题】:动手加固OpenSSH服务器
【关键字】:OpenSSH
【来  源】:http://blog.chinaunix.net/article.php?articleId=55779&blogId=6047

动手加固OpenSSH服务器

动手加固OpenSSH服务器

为了进行远程管理Unix以及Linux服务器,远程登录服务器方法主要包括:Telnet、 FTP、 rlogin、 rsh、 rexec和ssh。其中ssh(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。它用安全、加密的网络连接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。使用 OpenSSH 工具将会增进你的系统安全性。 所有使用 OpenSSH 工具的通讯,包括口令,都会被加密。 telnet 和 ftp 使用纯文本口令,并被明文发送。这些信息可能会被截取,口令可能会被检索,然后未经授权的人员可能会使用截取的口令登录进你的系统而对你的系统造成危害。你应该尽可能地使用 OpenSSH 的工具集合来避免这些安全问题。

  动手加固OpenSSH服务器
转自:  
感谢原创作者:曹江华

为了进行远程管理Unix以及Linux服务器,远程登录服务器方法主要包括:Telnet、 FTP、 rlogin、 rsh、 rexec和ssh。其中ssh(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件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_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
}

(3)重新启动xinetd配置
killall -USR1 xinetd

三、为sshd配置PAM
1. 安装PAM模块
  PAM简介:
 PAM全称:Pluggable Authentication Module (嵌入式认证模块)。它最初有SUN公司开发;很快被Linux社区的接受,并且开发了更多的模块。其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来。Linux-PAM处理四种独立的(管理)工作。它们是: 认证管理; 帐号管理; 会话期间管理;和密码管理。
    PAM工作方式:
(1) 调用某个应用程序,以得到该程序的服务。
(2) PAM应用程序调用后台的PAM库进行认证工作。
(3) PAM库在/etc/pam.d/目录中查找有关应用程序细节的配置文件,该文件告诉PAM,本应用程序使用何种认证机制。
(4) PAM库装载所需的认证模块。
(5) 这些模块可以让PAM与应用程序中的会话函数进行通信。
(6) 会话函数向用户要求有关信息。
(7) 用户对这些要求做出回应,提供所需信息。
(8) PAM认证模块通过PAM库将认证信息提供给应用程序。
(9) 认证完成后,应用程序做出两种选择:
? 将所需权限赋予用户,并通知用户。
? 认证失败,并通知用户。
  PAM工作流程见图1。
 
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的机会, 
这里建议你关闭protocol 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配置关闭了远程ROOT登陆和空密码登陆,这里还 
建议里关闭X11Forwarding,你可以把X11Forwarding 这行改为: 

X11Forwarding no 

如果你的机器作为服务器在运行,就不需要安装X服务程序,因为使用了X11Forwarding on,就可能被受控制了的远程主机发送进程把自己attach你的 X11会话进程,从而可以记录击键记录,显示一些杂乱信息和捕获你的显示内容。强烈建议不使用静态密码,而使用DSA或者RSA KEY,你修改如下内容就可以关闭 

使用密码认证: 

PasswordAuthentication no 

你可以通过下面的方法来限制组用户或者光是单独用户来访问SHELL: 

AllowGroups shellusers 

设定root帳號不能登录,這裡將#號去掉並改成不允許root用ssh登入
將    #PermitRootLogin Yes
改成  PermitRootLogin no

端口22是sshd监听的端口,即为连接到主机时需要使用的端口。为了增加黑客探测sshd难度,可以把端口修改为其他数值,最好大于1024.
Port 1678

另外可以使用以下代码可以指定sshd监听的接口地址:

ListenAddress 192.168.0.254
这样,就可以避免向未知的人群提供此类登录服务。

最后修改配置文件的属性,防止非授权用户修改配置文件:
chmod 644 /etc/ssh/sshd_config

六、使用使用BlockHosts对抗暴力破解
Sshd服务面临的另外一个威胁是黑客采取暴力破解的方式获取用户密码而非法登录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是基于命令行模式的使用非常简单这里就不赘述了。

总结:
以上介绍了如何六个方面加固Openssh服务器方法。无论哪种类型的服务,存在漏洞都是不可避免的,只是被发现的时间早晚问题。作为使用者,我们能做的只有密切关注漏洞的发布情况,并及时打安全补丁以加固服务器,才能保证自己所管理的网络不被黑客利用已经发现的漏洞攻击。

Linux新内核支持迅驰文件系统兼容NTFS:【上一篇】
Linux网络备份MYSQL:【下一篇】
【相关文章】
  • 在AIX4.3.3 ; AIX5.1 和 AIX5.2上安装OpenSSH
  • 如何在solaris 下安装openssh 4
  • openssh4.1p1在sparc solaris9下的安装
  • openssh 妙用之远程执行命令---自动下载apache日志文件
  • OpenSSH用户工具
  • Linux系统中OpenSSH的安装配置
  • windows box和openssh连接的问题
  • OpenSSH 密钥管理,第 1 部分
  • OpenSSH 密钥管理,第 3 部分
  • OpenSSH 密钥管理,第 2 部分
  • 【随机文章】
  • 围棋天才的另一面
  • Win32教程15-多线程编程
  • Linux下配置JDK
  • Mesh 的 duplicate()方法
  • php中文件上传的安全问题
  • 一些有用的内核文章
  • 如何在一个系统中使用 Linux 和 FreeBSD
  • 客户满意度、客户忠诚度、客户保留度和客户贡献度的界定
  • 深入挖掘Windows脚本技术 四
  • 线程终止时会产生的操作
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.