一个安全WEB服务器的安装


简介
WEB服务器是Internet上最暴露的服务器。为了让客户/目标用户群访问提供的信息,WEB服务器必需是Internet上的任何接入点都可以访问的。

与其它诸如DNS和FTP等公共服务相比,WEB对黑客高手更有诱惑力,因为一个成功地侵入一个网站的人可以更改主页从而让别人更加意识到他的存在。这些入侵事件能够让一个公司失去客户的信任,尤其是当一些敏感数据(如信用卡详细信息等)被窃取甚至被公开时就更加严重。
如果说用于防止从Internet对内部网络进行攻击的防火墙是最重要网络安全领域的话,WEB服务器应该说是第二个需要高度安全的领域了。本文的目标就是如何只用45分钟的时间就可以在Linux系统上配置一个安全的WEB服务器。当然,您也可以在其他操作系统上完成同样的事情。下面是基于SuSE Linux 6.4发布的一个例子。

安全区域
服务器安全由几个安全区域组成,为了保证允许条件下的最高度的安全保护,安全必需在每个区域都予以一致的实现。

1. 基础设施区
基础设施区域定义服务器在网络中的位置。这个区域必需能够防止数据窃听、网络映射和端口扫描等黑客技术的威胁。而且,可以跟踪对一个暴露的WEB服务器的成功入侵,因为被侵入的服务器可能会用来作为攻击其它重要的服务器的基地(这种方式在DoS攻击中最为常见)。
在这一端,所有提供Internet服务的服务器都通过一个集中部件保护起来并且位于一个隔离的网络是必需的。这个隔离的网络称为非军事区(DMZ)。具有保护功能的组件可能是一个复杂的防火墙或一个简单的路由器(这个路由器配置了具有很强限制的包过滤规则)。因此,仅仅指定的服务器服务才是允许访问的。
一般DMZ会采用一个具有端口安全和报文洪水保护的转换开关,这种方式可以保证DMZ的高度安全。
如果您关心物理安全,那么您必需保证服务器安装在一个安全的房间里(或数据处理中心)并且所有的电源、电话线和网线等都必需得到物理上的保护。

2. 网络协议区
网络通信一般指的都是TCP/IP通信,操作系统内核对通信负责并且保证一个透明的通信流。然而,一些函数或者协议的易受攻击点可能会被用来发起攻击或破坏行为。因此,内核必需经过必要的配置,以便阻挡这些类型的攻击手段。虽然位于服务器前面的防火墙或路由器可以防止很多类型的攻击,但一些WEB服务器的设置也必需做一些相应的调整。
防止SYN洪水攻击是很关键的,在所有的操作系统中,Linux提供了一种称为SYN
cookies的最有效解决方案。此外,ICMP重定向和对广播地址的ping操作以及IP源路由包也应该被拒绝。适用附加的内核过滤函数可以增加安全级别。

3. 服务区
服务区定义需要哪些服务。通过“如果不是指定需要的全部禁止”的安全策略,服务器上仅仅配置完成必要的操作所必需的服务,否则就会为攻击者提供更多的攻击点。
仅适用可以保证足够安全级的服务:没有充分认证能力的服务(如:rexec)或者传输未经过加密的敏感数据的服务(如telnet、ftp或通过WWW传输信用卡敏感数据)都应该用更安全的相应服务所替代(如SSH、SSLftp或HTTPS)。

4. 应用区
为安全起见,每个服务都必需单独配置。一个配置的不好的邮件服务器可能会被用来发送垃圾邮件,配置不好的WEB服务器可以执行所有的系统命令。注意,千万不要创建具有高特权的服务(root)。
您必需仔细研读您所适用的软件的操作手册中的相关内容才可以更安全地配置您的应用。

5. 操作系统区
最后的保护机制是操作系统自身。如果如果应用区的安全方法配置合理的话,即使入侵者成功地进入计算机系统也没有足够的管理权限完成破坏工作。程序的安装,尤其是高特权的程序,应该限制在系统操作的绝对需要范围内。许多高特权的程序可以通过更高级别的认证来限制用户的滥用,因为系统中的标准用户帐号根本不需要使用这些程序。但这还远远不够,万一攻击者成功地进入计算机系统,应该存在一个检测入侵的机制。这被称为“基于主机的入侵检测”。当然,最好还要能够监视和记录系统中的文件操作,以便了解入侵者的真正意图。当然也不能忽视经常性地备份,并且不要丢弃旧的备份文件。这种做法不仅可以用来配置备份服务器和避免数据丢失,它还可以用来跟踪系统中文件的操作情况。如果有几个管理员同时管理一个服务器,那么一个记录谁执行过哪些操作的机制可以在下面提及。
----------------------------------------------------------------

想定
Internet需要配置一台自己的WEB服务器,由于没有自己的安全基础设施,应该在WEB服务器前面放一台配置了相应过滤规则的路由器。这台WEB服务器仅仅提供WWW和HTTPS服务,但是,它当然也需要具有远程控制特性。另外,这台WEB服务器最好还能够发送邮件。由于Linux服务器和网页是由三个不同的管理员维护的,所有的管理操作都应该保证在以后进行日志分析是更容易理解。
-----------------------------------------------------------------

实现
前面段落中说明的安全WEB服务器的需求如何实现呢?下面的例子说明了一种在SuSE Linux 6.4发布的服务器上的实现方法。为了实现上述想定,我们决定选择SSH管理和Apache WEB服务器。

第一步:配置路由器
每一个流行的路由器都提供配置过滤列表的功能。您必需配置下面的简单规则:

+---------------------------------------------------------------+
|------------------------过滤规则-------------------------------|
+---------------------+------------------+---------------------+
|-------来源----------|--------目标------|------服务-----------|
+---------------------+------------------+---------------------+
|任何位置-------------|web服务器---------|WWW, HTTPS, UDP highport,|
|---------------------|------------------|ICMP types 0 + 3----|
+---------------------+------------------+--------------------+
|管理员---------------|web服务器---------|SSH-----------------|
+---------------------+------------------+--------------------+
|web服务器--------- --|任何位置----------|DNS, SMTP-----------|
+---------------------+------------------+--------------------+
|web服务器------------|路由器------------|SSH或telnet----------|
+---------------------+------------------+---------------------+
路由器的操作手册会提供如何进行上述配置的详细信息。这里我建议使用Cisco路由器,因为对于这种情况它非常容易配置,并且还在IOS的第12版以后提供了SSH的加密服务。

第二步:安装Linux服务器
执行SuSE 6.4的标准安装。处于安全考虑,至少应该为/、/var、/tmp、/home和/usr/local安装5个分区。后面会定义一些mount这些分区的特殊选项,这些选项可以保证系统具有更高的本地安全性能。
现在是选择需要安装哪些程序包的时候了。选择最小系统安装,然后手工加入下面一些必要的程序包:


在Basis (a)中选择compat

在Applications (ap)中选择sudo

在Network (n)中选择apache, bindutil; 去掉postfix和sendmail

在Security (sec)中选择firewals, hardensuse, mod_ssl, scanlogd, seccheck, secumod, tripwire.

其它一些您认为需要的程序包,如数据库和为Apache设计的一些模块。
然后完成安装。

第三步:更新
在配置之前,检查一下是否可以获得这些安装包的更新版本,如果有,需要的话最好进行更新。
您可以在这里找到SuSE 6.4的更新信息。

第四步:Linux的本地配置
在开始真正工作之前,必需首先执行所有的诸如输入服务器名、配置网络接口和设置用户等标准Linux配置。在初始情况下,所有不需要的服务都是非活动状态的。特权程序的授权回收工作并不是必需的,您可以通过harden_suse工具简单地实现这个任务:
erde#harden_suse yes
这个命令在很多地方更改了系统的配置,这些更改都记录在/etc/harden_suse.log日志文件中,这些操作可以通过/etc/undo_harden_suse脚本予以恢复。使用其它Linux发布的用户可应使用Bastille脚本或者其它类似的程序。
随后,所有网络访问服务(除了SSH)都被禁止,仅仅保留了下面的授予特权的suid和sgid程序:
erde# find / -perm -04000 -type f -exec ls -ld {} ;
-rwsr-x--- 1 root trusted 23840 Mar 11 11:26 /bin/ping
-rwsr-x--- 1 root trusted 30750 Mar 11 11:37 /bin/su
-rwsr-x--- 1 root trusted 21268 Mar 11 11:10 /usr/bin/crontab
-rwsr-xr-x 1 man root 85460 Mar 11 11:24 /usr/bin/man
-rwsr-xr-x 1 root root 15308 Mar 11 11:26 /usr/bin/rcp
-rwsr-xr-x 1 root root 11052 Mar 11 11:26 /usr/bin/rlogin
-rwsr-xr-x 1 root root 8104 Mar 11 11:26 /usr/bin/rsh
-rwsr-x--- 1 root shadow 38340 Mar 11 11:50 /usr/bin/gpasswd
-rwsr-x--- 1 root trusted 22184 Mar 11 11:50 /usr/bin/newgrp
-rwsr-xr-x 1 root shadow 27920 Mar 11 11:50 /usr/bin/passwd
-rwsr-x--- 1 root trusted 56600 Mar 11 18:41 /usr/bin/sudo
-rwsr-xr-x 1 root root 20300 Ma

本文作者:



相关阅读:
SQLServer 批量导入目录文件
巧妙的从Windows进程中判断出病毒和木马的三点突破
1.17 ADO 存取数据库时如何分页显示
Linux系统下内核定时器的用法
网页选项卡TAB设计原则和应用案例教程
jQuery each()方法的使用方法
win2008无线网络"没有正确配置为使用IP协议" 错误解决办法
js程序中美元符号$是什么
显示js对象所有属性和方法的函数
Asp.net(C#)实现验证码功能代码
精通 JavaScript中的正则表达式手机整理 推荐
出给新手的数值排序加分题
利用宏自动附加到WebServer进程
纯CSS实现的翻页效果
快速导航

Copyright © 2016 phpStudy |