资源描述
Web服务器加强IIS安全机制方法:
IIS(Internet Information Server)作为当今流行的Web服务器之一,提供了强大的Internet和Intranet服务功能。如何加强IIS的安全机制,建立高安全性能的可靠的Web服务器,已成为网络管理的重要组成部分。以Windows NT的安全机制为基础
1.应用NTFS文件系统
NTFS文件系统可以对文件和目录进行管理,FAT文件系统则只能提供共享级的安全,而Windows NT的安全机制是建立在NTFS文件系统之上的,所以在安装Windows NT时最好使用NTFS文件系统,否则将无法建立NT的安全机制。
2.共享权限的修改
在系统默认情况下,每建立一个新的共享,Everyone用户就享有“完全控制”的共享权限,因此,在建立新的共享后应该立即修改Everyone的缺省权限。
3.为系统管理员账号更名
域用户管理器虽可限制猜测口令的次数,但对系统管理员账号(adminstrator)却无法限制,这就可能给非法用户攻击管理员账号口令带来机会,通过域用户管理器对管理员账号更名不失为一种好办法。
具体设置方法如下:
选择“开始”选单→“程序”→启动“域用户管理器”→选中“管理员账号(adminstrator)”→选择“用户”选单→“重命名”,对其进行修改。
4.取消TCP/IP上的NetBIOS绑定
NT系统管理员可以通过构造目标站NetBIOS名与其IP地址之间的映像,对 Internet或Intranet上的其他服务器进行管理,但非法用户也可从中找到可乘之机。如果这种远程管理不是必须的,就应该立即取消(通过网络属性的绑定选项,取消NetBIOS与TCP/IP之间的绑定)。
设置IIS的安全机制
1.安装时应注意的安全问题
1)避免安装在主域控制器上
安装IIS之后,在安装的计算机上将生成IUSR_Computername匿名账户。该账户被添加到域用户组中,从而把应用于域用户组的访问权限提供给访问Web服务器的每个匿名用户,这不仅给IIS带来潜在危险,而且还可能威胁整个域资源的安全。所以要尽可能避免把IIS服务器安装在域控制器上,尤其是主域控制器上。
2)避免安装在系统分区上把IIS安装在系统分区上,会使系统文件与IIS同样面临非法访问,容易使非法用户侵入系统分区,所以应该避免将IIS服务器安装在系统分区上。
2.用户的安全性
1)匿名用户访问权限的控制
安装IIS后产生的匿名用户IUSR_Computername(密码随机产生),其匿名访问给Web服务器带来潜在的安全性问题,应对其权限加以控制。如无匿名访问需要,则可以取消Web的匿名访问服务。具体方法:选择“开始”选单→“程序”→“ Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→双击“WWW”启动WWW服务属性页→取消其匿名访
问服务。
2)控制一般用户访问权限
可以通过使用数字与字母(包括大小写)结合的口令,使用长口令(一般应在6位以上),经常修改密码,封锁失败的登录尝试以及设定账户的有效期等方法对一般用户账户进行管理。
3.IIS三种形式认证的安全性
1)匿名用户访问:允许任何人匿名访问,在这三种中安全性最低。
2)基本(Basic)认证:用户名和口令以明文方式在网络上传输,安全性能一般。
3)Windows NT请求/响应方式:浏览器通过加密方式与IIS服务器进行交流,有效地防止了窃听者,是安全性比较高的认证形式(需IE 3.0以上版本支持)。
4.访问权限控制
1)设置文件夹和文件的访问权限:安放在NTFS文件系统上的文件夹和文件,一方面要对其权限加以控制,对不同的组和用户设置不同的权限;另外,还可以利用NTFS的审核功能对某些特定组的成员读、写文件等方面进行审核,通过监视“文件访问”、“用户对象的使用”等动作,来有效地发现非法用户进行非法活动的前兆,及时加以预防和制止。具体方法:选择“开始”选单→“程序”→启动“域用户管理器” →选择“规则”选项卡下的“审核”选项→设置“审核规则”。
2)设置WWW目录的访问权限:已经设置成Web目录的文件夹,可以通过*作Web站点属性页实现对WWW目录访问权限的控制,而该目录下的所有文件和子文件夹都将继承这些安全机制。WWW服务除了提供NTFS文件系统提供的权限外,还提供读取权限——允许用户读取或下载WWW目录中的文件;执行权限 ——允许用户运行WWW目录下的程序和脚本。具体设置方法如下:选择“开始”选单→“程序”→“Microsoft InternetServer(公用) ”→“Internet服务管理器” →启动MicrosoftInternet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“目录”选项卡→选定需要编辑的WWW目录→选择“编辑属性”中的“目录属性”进行设置。
5.IP地址的控制
IIS可以设置允许或拒绝从特定IP发来的服务请求,有选择地允许特定节点的用户访问。可以通过设置来阻止指定IP地址外的网络用户访问Web服务器。具体设置方法如下:选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→双击“WWW”启动WWW服务属性页→启动Web属性页中“高级”选项卡;进行IP地址的控制设置。
6.端口安全性的实现
对于IIS服务,无论是WWW站点、Fpt站点,还是NNpt、SMpt服务等都有各自侦听和接收浏览器请求的TCP端口号(Post),一般常用的端口号为:WWW是80,Fpt是21,SMpt是25,可以通过修改端口号来提高IIS服务器的安全性。如果修改了端口设置,只有知道端口号的用户才可以访问,不过用户在访问时需要指定新端口号。
7.IP转发的安全性
IIS服务可提供IP数据包的转发功能,此时,充当路由器角色的IIS服务器将会把从Internet接口收到的IP数据包转发到内部网中,禁用这一功能将提高IIS服务的安全性。设置方法如下:选择“开始”选单→“程序”→“Microsoft InternetServer(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“协议”选项卡→在TCP/IP属性中去掉“路由选择”。
8.SSL安全机制
SSL(加密套接字协议层)位于HTpt层和TCP层之间,建立用户与服务器之间的加密通信,确保信息传递的安全性。SSL是工作在公共密钥和私人密钥基础上的。任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。使用SSL安全机制时,首先客户端与服务器建立连接,服务器把它的数字证书与公共密钥一并发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密,这样,客户端和服务器端就建立了一个唯一的安全通道。具体设置方法如下:
选择“开始”选单→“程序”→“Microsoft Internet Server(公用) ”→“Internet服务管理器” →启动Microsoft Internet Service Manager→ 双击“WWW”启动WWW服务属性页→选择“目录安全性”选项卡→单击“密钥管理器”按钮→通过密钥管理器生成密钥文件和请求文件→从身份认证权限中申请一个证书→通过密钥管理器在服务器上安装证书→激活Web站点的SSL安全性。
建立了SSL安全机制后,只有SSL允许的客户才能与SSL允许的Web站点进行通信,并且在使用URL资源定位器时,注意输入的是“htpts://”,而不是“htpt://”。
SSL安全机制的实现,将增加系统开销,增加服务器CPU的额外负担,从而会在一定程度上降低系统性能。笔者建议在规划网络时,仅考虑为高敏感度的Web目录使用SSL安全机制。另外,SSL客户端需要使用IE 3.0及以上版本才能使用。附录资料:
Ehcache缓存配置
简介
Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。
你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:
· 在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
· 发布时可更改Cache配置。
· 可再安装阶段就检查出配置错误信息,而避免了运行时错误。
本文将会对ehcache.xml配置文件进行详细的阐述。在配置的时可以拷贝一个现有的ehcache.xml,如果没有请点击这里去下载。
ehcache-failsafe.xml
如果你调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件,否则它会到类路径下找ehcache-failsafe.xml文件。而ehcache-failsafe.xml被包含在jar包中,所有它肯定能找的到。
ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。
不过这样做Ehcache会提醒用户创建一个正确的Ehcache配置。
ehcache.xml片段:
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
ehcache.xml和其他配置文件
在Ehcache-1.6之前的版本,只支持ASCII编码的ehcache.xml配置文件。在Ehcach-1.6之后版本中,支持UTF8编码的ehcache.xml配置文件。因为向后兼容,所有采用ASCII编码的配置文件完全没有必要转换为UTF8。
一个CacheManager必须要有一个XML配置。由于磁盘路径或是监听端口,多个CacheManager使用同一个配置文件时会出现错误。
下面是ehcache.xml具体实例以及配置指南
<ehcache xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
· CacheManager配置
DmulticastGroupPort=4446,这样可以配置监听端口。
· DiskStore配置
如果你使用的DiskStore(磁盘缓存),你必须要配置DiskStore配置项。如果不配置,Ehcache将会使用java.io.tmpdir。
diskStroe的“path”属性是用来配置磁盘缓存使用的物理路径的,Ehcache磁盘缓存使用的文件后缀名是.data和.index。
<disStore path=”java.io.tmpdir”/>
· CacheManagerEventListener配置
我们通过CacheManagerEventListenerFactory可以实例化一个CacheManagerPeerProvider,当我们从CacheManager中added和removed Cache时,将通知CacheManagerPeerProvider,这样一来,我们就可以很方面的对CacheManager中的Cache做一些统计。
注册到CacheManager的事件监听类名有: adding a Cache和removing a Cache
<cacheManagerEventListenerFacotory class=”” properties=””/>
· CacheManagerPeerProvider配置
在集群中CacheManager配置CacheManagerPeerProviderFactory创建CacheManagerPeerProvider。具体的实例如下:
<cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.
RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual, rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1| //server1:40000/sampleCache2|//server2:40000/sampleCache2"
propertySeparator="," />
· CacheManagerPeerListener配置
CacheManagerPeerListener配置是用来监听集群中缓存消息的分发的。
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=fully_qualified_hostname_or_ip,
port=40001,
socketTimeoutMillis=120000"
propertySeparator="," />
· Cache配置
· name:Cache的唯一标识
· maxElementsInMemory:内存中最大缓存对象数。
· maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
· eternal:Element是否永久有效,一但设置了,timeout将不起作用。
· overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
· timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
· timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
· diskPersistent:是否缓存虚拟机重启期数据。(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。
· diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
· diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
· memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。
· Cache Exception Handling配置
<cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory" properties="logLevel=FINE"/>
总结
这里只对通用缓存的配置做了详细的阐述,至于RMI缓存和集群缓存可以参考这里。
下面给出几个配置示例:
· Ehcache默认Cache配置
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
· SampleCache1配置
简单配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好将其删除掉,自己配置。
缓存名sampleCache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。
超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。
<cache name="sampleCache1"
maxElementsInMemory="10000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
/>
· SampleCache2配置
Cache名为SampleCache2,内存中最多可以缓存1000个element,超出1000不能输出到磁盘中。缓存是永久有效的。
<cache name="sampleCache2"
maxElementsInMemory="1000"
eternal="true"
overflowToDisk="false"
memoryStoreEvictionPolicy="FIFO"
/>
· SampleCache3配置
Cache名为SampleCache3。可缓存到磁盘。磁盘缓存将会缓存虚拟机重启期的数据。磁盘缓存失效线程运行间隔时间是10分钟。
<cache name="sampleCache3"
maxElementsInMemory="500"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="1"
memoryStoreEvictionPolicy="LFU"
/>
· sampleDistributedCache1配置
Cache名为sampleDistributedCache1。
<cache name="sampleDistributedCache1"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
</cache>
· sampleDistributedCache2配置
<cache name="sampleDistributedCache2"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=false,
replicateUpdates=true, replicateUpdatesViaCopy=true,
replicateRemovals=false"/>
</cache>
· sampleDistributedCache3配置
<!--
Sample distributed cache named sampleDistributedCache3.
This cache replicates using defaults except that the asynchronous replication
interval is set to 200ms.
-->
<cache name="sampleDistributedCache3"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="asynchronousReplicationIntervalMillis=200"/>
</cache>
展开阅读全文