代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”
新建维护计划的时候遇到下图的报错信息
标题: Microsoft SQL Server Management Studio------------------------------
“代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。有关启用“代理 XP”的详细信息,请参阅 SQL Server 联机丛书中的“外围应用配置器”。 (ObjectExplorer)
运行下面语句就可以了
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO
sp_configure 这是一个系统的存储过程的调用 ,服务器选项总共有36个,
默认情况下,sp_configure存储过程只显示其中的10个,显示结果中不包含高级选项,而且所有新的SQL Server配置选项都不会出现在这个精简的清单中。
然而,我们可以使用show advanced options命令参数让SQL Server显示出所有选项。
要启用show advanced options,我们使用如下命令格式: EXEC sp_configure 'show advanced options', '1' RECONFIGURE
要安装一个选项,必须在使用sp_configure配置服务器之后运行RECONFIGURE命令。
上面命令的输出结果如下:“配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。”
运行过这个存储过程后 一定要记得运行一次reconfigure
【转载】关于sql server 代理(已禁用代理xp)
原文地址:http://blog.sina.com.cn/s/blog_493cafbb0100qy91.html
症状:
SQL SERVER2005里面,启动SQL代理服务,启动正常,但是在sql server 代理还是显示已禁用代理 xp
在Management Studio中新建维护计划时,提示以下错误信息:
“代理XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用sp_configure来启用“代理XP”。有关启用“代理XP”的详细信息,请参阅SQL Server联机丛书中的“外围应用配置器”。
解决方法:
Sql代码
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO
这是帮助文档给出的答案,详细可查看http://msdn.microsoft.com/zh-cn/library/ms178127.aspx
但是当执行上面的语句,却报错:“不支持对系统目录进行即席更新。”
在网上找了下,终于找到答案,sql如下:
Sql代码
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE; --加上WITH OVERRIDE
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE WITH OVERRIDE --加上WITH OVERRIDE
GO
配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'Agent XPs' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
保护内网安全之Windows工作站安全基线开发
保护Windows工作站免受现代的网络攻击威胁是一件非常具有挑战性的事情。 似乎每个星期攻击者们总有一些新的方法用来入侵系统并获取用户凭据。
创建一个非常安全的Windows工作站的最佳方法是下载Microsoft安全合规管理器(当前版本为4.0),并在要为其创建安全基线GPO的操作系统版本下选择“安全合规”选项。
查看选项,根据需要进行更改,并导出为GPO备份(文件夹)。 创建新的并且为空的GPO然后从SCM GPO备份中导入设置。
然后将新创建的GPO应用到你的工作站。 如果你已配置为最小的安全设置,这将改进你的工作站安全基线,特别是如果你还没有创建现有的工作站GPO。
作为开发Windows工作站安全基线GPO的一部分,有几个大型组织花费了一些时间和金钱确定了什么才是“安全”:
DoD STIG:http://iase.disa.mil/stigs/os/windows
DoD Windows 10安全主机基准文件:https://github.com/iadgov/Secure-Host-Baseline
澳大利亚信息安全手册:http://www.asd.gov.au/infosec/ism/index.htm
CIS基准:https://benchmarks.cisecurity.org/downloads/browse/?category=benchmarks.os.windows
用于通过组策略控制设置的Microsoft管理模板如下:
Windows 7和Windows Server 2008 R2:https://www.microsoft.com/en-us/download/details.aspx?id=6243
Windows 8.1和Windows Server 2012 R2:https://www.microsoft.com/en-us/download/details.aspx?id=43413
Windows 10(v1607)和Windows Server 2016:https://www.microsoft.com/en-us/download/details.aspx?id=53430
Office 2010:https://www.microsoft.com/en-us/download/details.aspx?id=18968
Office 2013:https://www.microsoft.com/en-us/download/details.aspx?id = 35554
Office 2016:https://www.microsoft.com/en-us/download/details.aspx?id=49030
请注意,这些链接可能会随着更新而更改。
Windows及Windows Server的组策略设置参考:https://www.microsoft.com/en-us/download/details.aspx?id=25250
Windows 10(v1607)和Windows Server 2016安全配置基线设置:https://blogs.technet.microsoft.com/secguide/2016/10/17/security-baseline-for-windows-10-v1607-anniversary-edition-和-windows-server-2016
/
如果你已经使用一个GPO配置了工作站的安全性,你还可以使用Microsoft的策略分析器将你现有的GPO与SCM生成的“安全合规性”的GPO进行比较。
除了标准的“Windows安全事件”之外,还存在许多遗留和经常未使用的组件,它们从早期的Windows版本中遗留下来,而现有的版本通常不再需要,但由于考虑到兼容性的原因而继续保留。
本文涵盖了许多此类以及其他一些很不错的安全实践和配置。
保护Windows工作站:
部署免费/几乎免费的Microsoft工具以提高Windows安全性:
部署Microsoft AppLocker以锁定可以在系统上运行的文件。使用推荐的软件设置部署当前Windows版本的EMET。部署LAPS对本地管理员(RID 500)的密码进行管理。强制组策略在“刷新”期间重新应用设置。
禁用Windows旧版本中通常不会使用到的功能:
禁用Net会话枚举(NetCease)禁用WPAD禁用LLMNR禁用Windows浏览器协议禁用NetBIOS禁用Windows脚本宿主(WSH)并且控制脚本文件扩展名部署禁用Pass-The-Hash的安全补丁(KB2871997)。阻止本地管理员(RID
500)帐户通过网络进行身份验证确保WDigest已禁用从Windows 8.1和Windows Server 2012 R2中移除SMB
v1
Windows 10和Windows 2016的安全配置:
Windows 10&2016系统映像配置阻止不受信任的字体启用凭据保护配置设备保护
应用程序安全设置:
禁用Microsoft Office宏禁用Microsoft Office OLE组件
其他组策略安全设置
将Lanman验证配置为安全设置配置未认证的RPC客户端的限制设置配置NTLM会话安全
使用免费或几乎免费的Microsoft工具提高Windows安全性
部署AppLocker以锁定可以在系统上运行的文件
Microsoft AppLocker为Windows提供了开箱即用的应用程序白名单功能。
强烈建议在那些你需要设置高级别安全性的Windows工作站和服务器上使用AppLocker锁定可以在系统上执行的操作。
AppLocker可用于将应用程序执行限制为特定的已批准的应用程序。这里有几个我需要推荐的有关于AppLocker的不同设置阶段:
阶段1:审核模式 -
审核用户的所有执行操作及其运行的路径。这个阶段的日志记录模式会提供有关企业中运行的程序的信息,并将此数据记录到事件日志中。阶段2:“黑名单模式”
-
配置AppLocker以阻止执行用户的主目录,配置文件路径和用户对其具有写入和访问权限的临时文件夹位置(例如c:\temp)中的任何文件。阶段3:“文件夹白名单模式”
- 通过添加新规则以允许执行特定文件夹(如c:\Windows和c:\Program
Files)中的文件,这种AppLocker配置是在阶段2的基础上进行构建。阶段4:“应用程序白名单” -
列出企业环境中正在使用的所有应用程序,并通过路径和/或文件哈希(优先使用数字签名)将这些应用程序列入白名单。这需要确保只有经过批准的企业或组织的应用程序才会执行。
AppLocker组策略创建和管理的步骤:
计算机配置\策略\ Windows设置\安全设置\应用程序控制策略\ AppLocker
查看AppLocker策略设计指南以获取部署帮助。
此方案预计的努力水平:中等偏上
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
使用推荐的软件设置部署当前Windows版本的EMET
Microsoft增强型缓解体验工具包(EMET)有助于防止应用程序漏洞被利用(包括减少许多0day)。它是一个免费的产品,能够有效地“包装” 热门的应用程序,所以当尝试漏洞利用时,尝试的行为将被阻断在“包装器”中,而不会接触到操作系统。
有几个用于部署的配置方式:
默认配置。推荐软件。热门软件。
至少,使用默认配置方式部署EMET会强化核心应用程序。
使用EMET管理模板(EMET.admx和EMET.adml)通过GPO启用EMET管理,可在安装了EMET的系统上的<系统盘符> \Program Files\EMET\Deployment\Group Policy File
文件夹中找到。将这些复制到Active Directory GPO中央存储。
通过组策略自定义EMET配置
最好对应用程序进行测试,因为一些“更安全”的设置可能会导致程序崩溃如Outlook和Chrome以及一些安全软件。
请注意,微软EMET将在2018年终止生命(EOL),因为它是由微软开发的,它被发布的目的是帮助改进Windows安全的某些元素。 Windows 10已经极大的提升了安全性,超过了大多数EMET的安全增强功能。
此方案预计的努力水平:中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
使用LAPS对本地管理员(RID 500)的密码进行管理
Microsoft本地管理员密码解决方案(LAPS)为Active
Directory中的每台计算机提供了自动对本地管理员帐户进行管理的功能(LAPS特别适用于工作站的本地管理员密码管理)。
安装在每台计算机上的客户端组件会生成随机的密码,并更新与本机相关联的AD计算机帐户上的LAPS密码属性,并在本地设置密码。
LAPS配置通过组策略管理,该策略需要提供密码复杂性,密码长度,密码更改的本地帐户名称,密码更改频率等设置值。
点此查看LAPS部署信息。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
强制组策略在“刷新”期间重新应用设置
默认的组策略应用程序会在客户端上“刷新组策略”,虽然这实际上并不意味着重新应用GPO设置。默认情况下,只有在刷新之前修改GPO才会重新应用GPO的设置。这意味着可以通过计算机的注册表(通常具有管理员权限)撤消GPO强制设置,并且未经授权的设置将一直保持到GPO被修改(如果有的话),之后才会重新应用GPO设置。
通过测试后发现,更改组策略默认设置以在每次刷新时重新应用GPO设置 – “即使组策略对象未更改也会进行处理”。这对客户端有潜在的性能损失,但是能确保所有的GPO强制设置重新应用生效。
计算机配置,策略,管理模板,系统,组策略,配置安全策略处理:设置为启用。
同时也要选中“即使组策略对象未更改也进行处理”的选择框,
同样建议为以下每个配置相同的设置:
计算机配置,策略,管理模板,系统,组策略,配置注册表策略处理计算机配置,策略,管理模板,系统,组策略,配置脚本策略处理以及根据需要的任何其他的策略设置。
启用LSA保护/审核模式
从Windows 8.1 / Windows Server 2012
R2开始,可以添加注册表项来启用LSA保护,以防止未签名的代码与LSASS(如Mimikatz)进行交互。在启用LSA保护之前,最佳实践是启用LSA审核模式以了解哪些代码可能与LSASS交互,否则将被阻止。
Microsoft的“配置额外的LSA保护”中有如下描述:
LSA 包含本地安全机构服务器服务 (LSASS) 进程,可以验证用户的本地和远程登录,并强制本地安全策略。Windows 8.1
操作系统为 LSA 提供附加保护,以防止未受保护的进程读取内存及注入代码。 这为 LSA 存储和管理的凭据提供了更高的安全性。 LSA
的受保护进程设置可以在 Windows 8.1 中配置,但不能在 Windows RT 8.1 中配置。
将此设置与安全启动结合使用时,便可以实现附加保护,因为禁用
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项不起作用。
插件或驱动程序的受保护进程要求
要使 LSA 插件或驱动程序以受保护进程的形式成功加载,它必须符合以下条件:
1. 签名验证
保护模式要求加载到 LSA 中的任何插件都已使用 Microsoft 签名进行数字签名。 因此,未签名的或者未使用 Microsoft 签名进行签名的任何插件都无法加载到 LSA 中。 这些插件的示例包括智能卡驱动程序、加密插件和密码筛选器。
用作驱动程序(例如智能卡驱动程序)的 LSA 插件需要使用 WHQL 认证进行签名。 有关详细信息,请参阅 WHQL 版本签名(Windows 驱动程序)。
不需要经历 WHQL 认证过程的 LSA 插件必须使用 LSA 的文件签名服务进行签名。
2. 遵守 Microsoft 安全开发生命周期 (SDL) 过程指导
所有插件必须符合适用的 SDL 过程指导。 有关详细信息,请参阅 Microsoft 安全开发生命周期 (SDL) 附录。
即使插件已使用 Microsoft 签名正确地进行签名,但如果不符合 SDL 过程,也可能会导致加载插件失败。
建议的做法
在广泛部署该功能之前,请使用以下列表来全面测试是否已启用 LSA 保护:
识别组织中使用的所有 LSA 插件和驱动程序。 这包括非 Microsoft
驱动程序或插件(例如智能卡驱动程序和加密插件),以及内部开发的、用于强制密码筛选器或密码更改通知的所有软件。确保使用 Microsoft
证书对所有 LSA 插件进行数字签名,以防止插件加载失败。确保正确签名的所有插件都能成功加载到 LSA
中,并且能按预期工作。使用审核日志来识别无法以受保护进程运行的 LSA 插件和驱动程序。如何识别无法以受保护进程运行的 LSA
插件和驱动程序本部分所述的事件位于 Applications and Services
Logs\Microsoft\Windows\CodeIntegrity 下的运行日志中。 这些事件可帮助你识别由于签名方面的原因而无法加载的
LSA 插件和驱动程序。 若要管理这些事件,可以使用 wevtutil 命令行工具。 有关此工具的信息,请参阅 Wevtutil
[Vista]。
在选择加入之前:如何识别 lsass.exe 加载的插件和驱动程序?
可以使用审核模式来识别 LSA 保护模式下无法加载的 LSA 插件和驱动程序。 在审核模式下,系统将生成事件日志,标识在启用 LSA 保护的情况下无法在 LSA 下加载的所有插件和驱动程序。 将会记录消息,而不阻止这些插件或驱动程序。
在一台计算机上通过编辑注册表为 Lsass.exe 启用审核模式的步骤
1.打开注册表编辑器
(RegEdit.exe),然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Image File Execution Options\LSASS.exe。2.将该注册表项的值设置为
AuditLevel=dword:00000008.。3.重新启动计算机。
分析事件 3065 和事件 3066 的结果。
事件 3065:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合共享区域的安全要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。
事件 3066:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合 Microsoft 签名级别要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用Windows旧版和通常未使用的功能:
禁用Net会话枚举(NetCease)
默认情况下,Windows计算机允许任何经过身份验证的用户枚举其网络会话。这意味着攻击者可以枚举托管主目录的文件共享或域控制器的网络会话,以查看谁连接到SYSVOL(应用组策略),并确定每个用户和管理员帐户登录到哪个工作站。
Bloodhound广泛地使用此功能来映射网络中的凭证。
禁用网络会话枚举将会删除任何用户枚举网络会话信息(Recon-探测)的功能。
这些设置也可以通过组策略进行部署:
在参考工作站上运行NetCease PowerShell脚本。打开
组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。在计算机配置下的控制台树中,展开首选项文件夹,然后展开Windows设置文件夹。右键单击注册表节点,指向“新建”,然后选择“注册表向导”。选择存在所需注册表设置的参考工作站,然后单击下一步。浏览到HKEY_LOCAL_MACHINE
\ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \
DefaultSecurity
\并选中要从中创建注册表首选项条目的“SrvsvcSessionInfo”复选框。仅当您要为键而不是键中的值创建注册表项时,才选中键的复选框。单击“完成”。你所选择的设置会在注册表向导值集合中显示为首选项。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用WPAD
Web代理自动发现协议(WPAD)是一种由客户端使用的方法,用于使用DHCP和/或DNS发现方法来定位配置文件的URL。一旦配置文件的检测和下载完成,就可以执行这个配置文件,以确定指定URL的代理。
禁用WPAD会使得用于被动窃取证书的方法以及Responder程序不可用。仅在环境中未使用时禁用。
通过部署以下选项通过组策略禁用WPAD:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \
Internet Settings \
Wpad新建名为“WpadOverride”的DWORD(32位值)类型,并设置值为“1”禁用服务“WinHTTP
Web代理自动发现服务”计算机配置/策略/ Windows设置/安全设置/系统服务
注意:
通过安装Microsoft修补程序KB3165191(MS16-077)可以部分缓解WPAD问题。
此修补程序会强化WPAD进程和系统响应NetBIOS请求的时间。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用LLMNR
链路本地多播名称解析(LLMNR):
简而言之,当DNS分配无法解析名称时,链路本地多播名称解析(LLMNR)就会解析本地子网上的单个标签名称(如:COMPUTER1)。如果你处于Ad-Hoc网络场景或DNS条目不包括本地子网上的主机的情况下,这将非常有用。LLMNR应在不使用时禁用,因为禁用它会删除响应程序,此程序用于被动证书窃取。
组策略:计算机配置/管理模板/网络/ DNS客户端
将“关闭多播名称解析”设置为“已启用”
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用Windows浏览器协议(浏览器服务)
Windows
NT使用浏览器服务(浏览器协议)发现和共享本地网络上的资源信息。该过程通过在网络上广播和收集该广播的结果来工作。网络广播有点像在一个充满着人的房间里每30秒去寻找一个朋友(一旦你发现你的朋友,你注意到他的位置,但过一会儿后可能会忘记,必须重新发现他的当前位置)。为了使该过程效率稍低,在每个子网上选择“主浏览器”,其跟踪资源并响应这些资源广播请求。在Windows域中,PDC充当域主浏览器,这些子网主浏览器将资源信息转发给这些子浏览器。使用Windows
Browser广播的资源发现协议最终被Windows Internet名称服务(WINS)和Active
Directory(含DNS)取代。尽管浏览器服务的必要性已降至几乎为零,但Windows中的计算机浏览器服务仍然在Windows
10和Windows Server 2012 R2中存在(虽然该服务在Windows 10 v1607和Windows Server
2016中已删除)。
Windows浏览器协议是Responder程序用于被动窃取凭据的另一种方法。
Windows计算机浏览器服务设置为手动启动,但通常会在Windows启动时启动。
禁用Windows浏览器协议的简单方法是禁用计算机浏览器服务。
在Windows 10 v1607(又名“周年更新”)和Windows Server 2016中,计算机浏览器服务已删除,不再可用。
通过组策略禁用计算机浏览器:
打开组策略管理控制台。
右键单击需要修改的组策略对象(GPO),然后单击编辑。在计算机配置下的控制台树中,展开策略文件夹,展开Windows设置,展开安全设置,然后展开系统服务文件夹。向下滚动到“计算机浏览器”服务,右键单击服务名称,然后选择属性。选中“定义此策略设置”复选框,选择“禁用”作为服务启动模式,单击“确定”。
注意:组策略首选项也可用于管理服务。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用NetBIOS
NetBIOS是Windows使用的最早的协议之一。
NetBIOS over TCP / IP由RFC 1001和RFC
1002指定。Netbt.sys驱动程序是支持TDI接口的内核模式组件。服务(例如工作站和服务器)直接使用TDI接口,而传统的NetBIOS应用程序通过Netbios.sys驱动程序将其调用映射到TDI调用。使用TDI调用NetBT是一个更困难的编程任务,但可以提供更高的性能和免受历史NetBIOS限制。
NetBIOS定义了软件接口和命名约定,而不是协议。 NetBIOS over TCP/IP通过TCP/IP协议提供NetBIOS编程接口,将NetBIOS客户端和服务器程序的范围扩展到IP互联网络,并提供与各种其他操作系统的互操作性。
Windows 2000工作站服务,服务器服务,浏览器,信使和NetLogon服务都是NetBT客户端,并使用TDI与NetBT通信。
Windows 2000还包括NetBIOS仿真器。仿真器从NetBIOS应用程序接收标准NetBIOS请求,并将其转换为等效的TDI功能。
Windows 2000使用NetBIOS over TCP/IP与以前版本的Windows NT和其他客户端(如Windows
95)进行通信。但是,Windows 2000重定向器和服务器组件现在支持直接托管与运行Windows
2000的其他计算机进行通信。使用直接托管,NetBIOS不用于名称解析。
DNS用于名称解析,Microsoft网络通信直接通过TCP发送,不使用NetBIOS头。通过TCP/IP的直接托管使用TCP端口445而不是NetBIOS会话TCP端口139。
大多数版本的Windows正在使用中,可以利用TCP/IP直接传输SMB,这意味着今天在网络上使用NetBIOS只是为了兼容老版本的系统。
2005年,Daniel Miessler写道:
事实上,可以在Windows 2000 / XP机器上完全禁用基于TCP / IP的NetBIOS,因为这些新的操作系统(通过TCP/445)使SMB直接在TCP顶部传输而不是在NetBIOS上。 Microsoft称之为SMB的“直接托管”。
禁用NetBIOS需要一些工作来确定在网络上使用NetBIOS的方式和位置。禁用它会使得用于被动窃取证书的方法以及Responder程序不可用。
请注意,旧版系统(旧版本的Windows以及非Windows系统等)可能需要NetBIOS。
通过(Microsoft)DHCP禁用NetBIOS:
打开Microsoft DHCP。
在导航窗格中,展开SERVERNAME,展开Scope,右键单击Scope选项,然后单击配置选项。单击高级选项卡,然后单击供应商类列表中的Microsoft
Windows 2000选项。确保在用户类列表中选择默认用户类。单击以选中可用选项列下的001
Microsoft禁用Netbios选项复选框。在数据输入区域中,在较长的输入框中输入0x2,然后单击确定。
参考:禁用NetBIOS
在基于Linux / Unix的DHCP服务器上,设置选项43会将DHCP配置为禁用NetBIOS
选项43 hex 0104.0000.0002
禁用计算机上的NetBIOS:
转到计算机上的所有网络设备的属性,TCPIPv4属性,高级,WINS,禁用TCP / IP上的NetBIOS
此方案预计的努力水平:中等偏上
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
作者:why233
来源:51CTO
保护内网安全之Windows工作站安全基线开发(一)
本文讲的是保护内网安全之Windows工作站安全基线开发(一),保护Windows工作站免受现代的网络攻击威胁是一件非常具有挑战性的事情。 似乎每个星期攻击者们总有一些新的方法用来入侵系统并获取用户凭据。
创建一个非常安全的Windows工作站的最佳方法是下载Microsoft安全合规管理器(当前版本为4.0),并在要为其创建安全基线GPO的操作系统版本下选择“安全合规”选项。 查看选项,根据需要进行更改,并导出为GPO备份(文件夹)。 创建新的并且为空的GPO然后从SCM GPO备份中导入设置。 然后将新创建的GPO应用到你的工作站。 如果你已配置为最小的安全设置,这将改进你的工作站安全基线,特别是如果你还没有创建现有的工作站GPO。
作为开发Windows工作站安全基线GPO的一部分,有几个大型组织花费了一些时间和金钱确定了什么才是“安全”:
DoD STIG:http://iase.disa.mil/stigs/os/windows
DoD Windows 10安全主机基准文件:https://github.com/iadgov/Secure-Host-Baseline
澳大利亚信息安全手册:http://www.asd.gov.au/infosec/ism/index.htm
CIS基准:https://benchmarks.cisecurity.org/downloads/browse/?category=benchmarks.os.windows
用于通过组策略控制设置的Microsoft管理模板如下:
Windows 7和Windows Server 2008 R2:https://www.microsoft.com/en-us/download/details.aspx?id=6243
Windows 8.1和Windows Server 2012 R2:https://www.microsoft.com/en-us/download/details.aspx?id=43413
Windows 10(v1607)和Windows Server 2016:https://www.microsoft.com/en-us/download/details.aspx?id=53430
Office 2010:https://www.microsoft.com/en-us/download/details.aspx?id=18968
Office 2013:https://www.microsoft.com/en-us/download/details.aspx?id%20=%2035554
Office 2016:https://www.microsoft.com/en-us/download/details.aspx?id=49030
请注意,这些链接可能会随着更新而更改。
Windows及Windows Server的组策略设置参考:https://www.microsoft.com/en-us/download/details.aspx?id=25250
Windows 10(v1607)和Windows Server 2016安全配置基线设置:https://blogs.technet.microsoft.com/secguide/2016/10/17/security-baseline-for-windows-10-v1607-anniversary-edition-和-windows-server-2016%20/
如果你已经使用一个GPO配置了工作站的安全性,你还可以使用Microsoft的策略分析器将你现有的GPO与SCM生成的“安全合规性”的GPO进行比较。
除了标准的“Windows安全事件”之外,还存在许多遗留和经常未使用的组件,它们从早期的Windows版本中遗留下来,而现有的版本通常不再需要,但由于考虑到兼容性的原因而继续保留。
本文涵盖了许多此类以及其他一些很不错的安全实践和配置。
保护Windows工作站:
部署免费/几乎免费的Microsoft工具以提高Windows安全性:
部署Microsoft AppLocker以锁定可以在系统上运行的文件。
使用推荐的软件设置部署当前Windows版本的EMET。
部署LAPS对本地管理员(RID 500)的密码进行管理。
强制组策略在“刷新”期间重新应用设置。
禁用Windows旧版本中通常不会使用到的功能:
禁用Net会话枚举(NetCease)
禁用WPAD
禁用LLMNR
禁用Windows浏览器协议
禁用NetBIOS
禁用Windows脚本宿主(WSH)并且控制脚本文件扩展名
部署禁用Pass-The-Hash的安全补丁(KB2871997)。
阻止本地管理员(RID 500)帐户通过网络进行身份验证
确保WDigest已禁用
从Windows 8.1和Windows Server 2012 R2中移除SMB v1
Windows 10和Windows 2016的安全配置:
Windows 10&2016系统映像配置
阻止不受信任的字体
启用凭据保护
配置设备保护
应用程序安全设置:
禁用Microsoft Office宏
禁用Microsoft Office OLE组件
其他组策略安全设置
将Lanman验证配置为安全设置
配置未认证的RPC客户端的限制设置
配置NTLM会话安全
使用免费或几乎免费的Microsoft工具提高Windows安全性
部署AppLocker以锁定可以在系统上运行的文件
Microsoft AppLocker为Windows提供了开箱即用的应用程序白名单功能。
强烈建议在那些你需要设置高级别安全性的Windows工作站和服务器上使用AppLocker锁定可以在系统上执行的操作。
AppLocker可用于将应用程序执行限制为特定的已批准的应用程序。这里有几个我需要推荐的有关于AppLocker的不同设置阶段:
阶段1:审核模式 - 审核用户的所有执行操作及其运行的路径。这个阶段的日志记录模式会提供有关企业中运行的程序的信息,并将此数据记录到事件日志中。
阶段2:“黑名单模式” - 配置AppLocker以阻止执行用户的主目录,配置文件路径和用户对其具有写入和访问权限的临时文件夹位置(例如c:\temp)中的任何文件。
阶段3:“文件夹白名单模式” - 通过添加新规则以允许执行特定文件夹(如c:\Windows和c:\Program Files)中的文件,这种AppLocker配置是在阶段2的基础上进行构建。
阶段4:“应用程序白名单” - 列出企业环境中正在使用的所有应用程序,并通过路径和/或文件哈希(优先使用数字签名)将这些应用程序列入白名单。这需要确保只有经过批准的企业或组织的应用程序才会执行。
AppLocker组策略创建和管理的步骤:
计算机配置\策略\ Windows设置\安全设置\应用程序控制策略\ AppLocker
查看AppLocker策略设计指南以获取部署帮助。
此方案预计的努力水平:中等偏上
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
使用推荐的软件设置部署当前Windows版本的EMET
Microsoft增强型缓解体验工具包(EMET)有助于防止应用程序漏洞被利用(包括减少许多0day)。它是一个免费的产品,能够有效地“包装” 热门的应用程序,所以当尝试漏洞利用时,尝试的行为将被阻断在“包装器”中,而不会接触到操作系统。
有几个用于部署的配置方式:
默认配置。
推荐软件。
热门软件。
至少,使用默认配置方式部署EMET会强化核心应用程序。
使用EMET管理模板(EMET.admx和EMET.adml)通过GPO启用EMET管理,可在安装了EMET的系统上的<系统盘符> \Program Files\EMET\Deployment\Group Policy File
文件夹中找到。将这些复制到Active Directory GPO中央存储。
通过组策略自定义EMET配置
最好对应用程序进行测试,因为一些“更安全”的设置可能会导致程序崩溃如Outlook和Chrome以及一些安全软件。
请注意,微软EMET将在2018年终止生命(EOL),因为它是由微软开发的,它被发布的目的是帮助改进Windows安全的某些元素。 Windows 10已经极大的提升了安全性,超过了大多数EMET的安全增强功能。
此方案预计的努力水平:中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
使用LAPS对本地管理员(RID 500)的密码进行管理
Microsoft本地管理员密码解决方案(LAPS)为Active Directory中的每台计算机提供了自动对本地管理员帐户进行管理的功能(LAPS特别适用于工作站的本地管理员密码管理)。 安装在每台计算机上的客户端组件会生成随机的密码,并更新与本机相关联的AD计算机帐户上的LAPS密码属性,并在本地设置密码。 LAPS配置通过组策略管理,该策略需要提供密码复杂性,密码长度,密码更改的本地帐户名称,密码更改频率等设置值。
点此查看LAPS部署信息。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
强制组策略在“刷新”期间重新应用设置
默认的组策略应用程序会在客户端上“刷新组策略”,虽然这实际上并不意味着重新应用GPO设置。默认情况下,只有在刷新之前修改GPO才会重新应用GPO的设置。这意味着可以通过计算机的注册表(通常具有管理员权限)撤消GPO强制设置,并且未经授权的设置将一直保持到GPO被修改(如果有的话),之后才会重新应用GPO设置。
通过测试后发现,更改组策略默认设置以在每次刷新时重新应用GPO设置 – “即使组策略对象未更改也会进行处理”。这对客户端有潜在的性能损失,但是能确保所有的GPO强制设置重新应用生效。
计算机配置,策略,管理模板,系统,组策略,配置安全策略处理:设置为启用。
同时也要选中“即使组策略对象未更改也进行处理”的选择框,
同样建议为以下每个配置相同的设置:
计算机配置,策略,管理模板,系统,组策略,配置注册表策略处理
计算机配置,策略,管理模板,系统,组策略,配置脚本策略处理
以及根据需要的任何其他的策略设置。
启用LSA保护/审核模式
从Windows 8.1 / Windows Server 2012 R2开始,可以添加注册表项来启用LSA保护,以防止未签名的代码与LSASS(如Mimikatz)进行交互。在启用LSA保护之前,最佳实践是启用LSA审核模式以了解哪些代码可能与LSASS交互,否则将被阻止。
Microsoft的“配置额外的LSA保护”中有如下描述:
LSA 包含本地安全机构服务器服务 (LSASS) 进程,可以验证用户的本地和远程登录,并强制本地安全策略。Windows 8.1 操作系统为 LSA 提供附加保护,以防止未受保护的进程读取内存及注入代码。 这为 LSA 存储和管理的凭据提供了更高的安全性。 LSA 的受保护进程设置可以在 Windows 8.1 中配置,但不能在 Windows RT 8.1 中配置。 将此设置与安全启动结合使用时,便可以实现附加保护,因为禁用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项不起作用。
插件或驱动程序的受保护进程要求
要使 LSA 插件或驱动程序以受保护进程的形式成功加载,它必须符合以下条件:
1. 签名验证
保护模式要求加载到 LSA 中的任何插件都已使用 Microsoft 签名进行数字签名。 因此,未签名的或者未使用 Microsoft 签名进行签名的任何插件都无法加载到 LSA 中。 这些插件的示例包括智能卡驱动程序、加密插件和密码筛选器。
用作驱动程序(例如智能卡驱动程序)的 LSA 插件需要使用 WHQL 认证进行签名。 有关详细信息,请参阅 WHQL 版本签名(Windows 驱动程序)。
不需要经历 WHQL 认证过程的 LSA 插件必须使用 LSA 的文件签名服务进行签名。
2. 遵守 Microsoft 安全开发生命周期 (SDL) 过程指导
所有插件必须符合适用的 SDL 过程指导。 有关详细信息,请参阅 Microsoft 安全开发生命周期 (SDL) 附录。
即使插件已使用 Microsoft 签名正确地进行签名,但如果不符合 SDL 过程,也可能会导致加载插件失败。
建议的做法
在广泛部署该功能之前,请使用以下列表来全面测试是否已启用 LSA 保护:
识别组织中使用的所有 LSA 插件和驱动程序。 这包括非 Microsoft 驱动程序或插件(例如智能卡驱动程序和加密插件),以及内部开发的、用于强制密码筛选器或密码更改通知的所有软件。
确保使用 Microsoft 证书对所有 LSA 插件进行数字签名,以防止插件加载失败。
确保正确签名的所有插件都能成功加载到 LSA 中,并且能按预期工作。
使用审核日志来识别无法以受保护进程运行的 LSA 插件和驱动程序。
如何识别无法以受保护进程运行的 LSA 插件和驱动程序
本部分所述的事件位于 Applications and Services Logs\Microsoft\Windows\CodeIntegrity 下的运行日志中。 这些事件可帮助你识别由于签名方面的原因而无法加载的 LSA 插件和驱动程序。 若要管理这些事件,可以使用 wevtutil 命令行工具。 有关此工具的信息,请参阅 Wevtutil [Vista]。
在选择加入之前:如何识别 lsass.exe 加载的插件和驱动程序?
可以使用审核模式来识别 LSA 保护模式下无法加载的 LSA 插件和驱动程序。 在审核模式下,系统将生成事件日志,标识在启用 LSA 保护的情况下无法在 LSA 下加载的所有插件和驱动程序。 将会记录消息,而不阻止这些插件或驱动程序。
在一台计算机上通过编辑注册表为 Lsass.exe 启用审核模式的步骤
1.打开注册表编辑器 (RegEdit.exe),然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe。
2.将该注册表项的值设置为 AuditLevel=dword:00000008.。
3.重新启动计算机。
分析事件 3065 和事件 3066 的结果。
事件 3065:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合共享区域的安全要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。
事件 3066:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合 Microsoft 签名级别要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用Windows旧版和通常未使用的功能:
禁用Net会话枚举(NetCease)
默认情况下,Windows计算机允许任何经过身份验证的用户枚举其网络会话。这意味着攻击者可以枚举托管主目录的文件共享或域控制器的网络会话,以查看谁连接到SYSVOL(应用组策略),并确定每个用户和管理员帐户登录到哪个工作站。 Bloodhound广泛地使用此功能来映射网络中的凭证。
禁用网络会话枚举将会删除任何用户枚举网络会话信息(Recon-探测)的功能。
这些设置也可以通过组策略进行部署:
在参考工作站上运行NetCease PowerShell脚本。
打开 组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。
在计算机配置下的控制台树中,展开首选项文件夹,然后展开Windows设置文件夹。
右键单击注册表节点,指向“新建”,然后选择“注册表向导”。
选择存在所需注册表设置的参考工作站,然后单击下一步。
浏览到HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ DefaultSecurity \
并选中要从中创建注册表首选项条目的“SrvsvcSessionInfo”复选框。仅当您要为键而不是键中的值创建注册表项时,才选中键的复选框。
单击“完成”。你所选择的设置会在注册表向导值集合中显示为首选项。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用WPAD
Web代理自动发现协议(WPAD)是一种由客户端使用的方法,用于使用DHCP和/或DNS发现方法来定位配置文件的URL。一旦配置文件的检测和下载完成,就可以执行这个配置文件,以确定指定URL的代理。
禁用WPAD会使得用于被动窃取证书的方法以及Responder程序不可用。仅在环境中未使用时禁用。
通过部署以下选项通过组策略禁用WPAD:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Wpad
新建名为“WpadOverride”的DWORD(32位值)类型,并设置值为“1”
禁用服务“WinHTTP Web代理自动发现服务”
计算机配置/策略/ Windows设置/安全设置/系统服务
注意:
通过安装Microsoft修补程序KB3165191(MS16-077)可以部分缓解WPAD问题。
此修补程序会强化WPAD进程和系统响应NetBIOS请求的时间。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用LLMNR
链路本地多播名称解析(LLMNR):
简而言之,当DNS分配无法解析名称时,链路本地多播名称解析(LLMNR)就会解析本地子网上的单个标签名称(如:COMPUTER1)。如果你处于Ad-Hoc网络场景或DNS条目不包括本地子网上的主机的情况下,这将非常有用。LLMNR应在不使用时禁用,因为禁用它会删除响应程序,此程序用于被动证书窃取。
组策略:计算机配置/管理模板/网络/ DNS客户端
将“关闭多播名称解析”设置为“已启用”
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用Windows浏览器协议(浏览器服务)
Windows NT使用浏览器服务(浏览器协议)发现和共享本地网络上的资源信息。该过程通过在网络上广播和收集该广播的结果来工作。网络广播有点像在一个充满着人的房间里每30秒去寻找一个朋友(一旦你发现你的朋友,你注意到他的位置,但过一会儿后可能会忘记,必须重新发现他的当前位置)。为了使该过程效率稍低,在每个子网上选择“主浏览器”,其跟踪资源并响应这些资源广播请求。在Windows域中,PDC充当域主浏览器,这些子网主浏览器将资源信息转发给这些子浏览器。使用Windows Browser广播的资源发现协议最终被Windows Internet名称服务(WINS)和Active Directory(含DNS)取代。尽管浏览器服务的必要性已降至几乎为零,但Windows中的计算机浏览器服务仍然在Windows 10和Windows Server 2012 R2中存在(虽然该服务在Windows 10 v1607和Windows Server 2016中已删除)。
Windows浏览器协议是Responder程序用于被动窃取凭据的另一种方法。
Windows计算机浏览器服务设置为手动启动,但通常会在Windows启动时启动。
禁用Windows浏览器协议的简单方法是禁用计算机浏览器服务。
在Windows 10 v1607(又名“周年更新”)和Windows Server 2016中,计算机浏览器服务已删除,不再可用。
通过组策略禁用计算机浏览器:
打开组策略管理控制台。 右键单击需要修改的组策略对象(GPO),然后单击编辑。
在计算机配置下的控制台树中,展开策略文件夹,展开Windows设置,展开安全设置,然后展开系统服务文件夹。
向下滚动到“计算机浏览器”服务,右键单击服务名称,然后选择属性。
选中“定义此策略设置”复选框,选择“禁用”作为服务启动模式,单击“确定”。
注意:组策略首选项也可用于管理服务。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
禁用NetBIOS
NetBIOS是Windows使用的最早的协议之一。
NetBIOS over TCP / IP由RFC 1001和RFC 1002指定。Netbt.sys驱动程序是支持TDI接口的内核模式组件。服务(例如工作站和服务器)直接使用TDI接口,而传统的NetBIOS应用程序通过Netbios.sys驱动程序将其调用映射到TDI调用。使用TDI调用NetBT是一个更困难的编程任务,但可以提供更高的性能和免受历史NetBIOS限制。
NetBIOS定义了软件接口和命名约定,而不是协议。 NetBIOS over TCP/IP通过TCP/IP协议提供NetBIOS编程接口,将NetBIOS客户端和服务器程序的范围扩展到IP互联网络,并提供与各种其他操作系统的互操作性。
Windows 2000工作站服务,服务器服务,浏览器,信使和NetLogon服务都是NetBT客户端,并使用TDI与NetBT通信。 Windows 2000还包括NetBIOS仿真器。仿真器从NetBIOS应用程序接收标准NetBIOS请求,并将其转换为等效的TDI功能。
Windows 2000使用NetBIOS over TCP/IP与以前版本的Windows NT和其他客户端(如Windows 95)进行通信。但是,Windows 2000重定向器和服务器组件现在支持直接托管与运行Windows 2000的其他计算机进行通信。使用直接托管,NetBIOS不用于名称解析。 DNS用于名称解析,Microsoft网络通信直接通过TCP发送,不使用NetBIOS头。通过TCP/IP的直接托管使用TCP端口445而不是NetBIOS会话TCP端口139。
大多数版本的Windows正在使用中,可以利用TCP/IP直接传输SMB,这意味着今天在网络上使用NetBIOS只是为了兼容老版本的系统。
2005年,Daniel Miessler写道:
事实上,可以在Windows 2000 / XP机器上完全禁用基于TCP / IP的NetBIOS,因为这些新的操作系统(通过TCP/445)使SMB直接在TCP顶部传输而不是在NetBIOS上。 Microsoft称之为SMB的“直接托管”。
禁用NetBIOS需要一些工作来确定在网络上使用NetBIOS的方式和位置。禁用它会使得用于被动窃取证书的方法以及Responder程序不可用。
请注意,旧版系统(旧版本的Windows以及非Windows系统等)可能需要NetBIOS。
通过(Microsoft)DHCP禁用NetBIOS:
打开Microsoft DHCP。
在导航窗格中,展开SERVERNAME,展开Scope,右键单击Scope选项,然后单击配置选项。
单击高级选项卡,然后单击供应商类列表中的Microsoft Windows 2000选项。
确保在用户类列表中选择默认用户类。
单击以选中可用选项列下的001 Microsoft禁用Netbios选项复选框。
在数据输入区域中,在较长的输入框中输入0x2,然后单击确定。
参考:禁用NetBIOS
在基于Linux / Unix的DHCP服务器上,设置选项43会将DHCP配置为禁用NetBIOS
选项43 hex 0104.0000.0002
禁用计算机上的NetBIOS:
转到计算机上的所有网络设备的属性,TCPIPv4属性,高级,WINS,禁用TCP / IP上的NetBIOS
此方案预计的努力水平:中等偏上
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。
原文发布时间为:2017年3月6日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接
实战:Windows Server 2008 使用WSUS实现内网计算机系统更新
实战:使用WSUS实现内网计算机系统更新
实战目标:
u 能够在域环境中配置系统更新服务器
u 使用组策略将计算机分成三个组,办公用户的计算机主要安装Windows XP和Vista,将这些计算机指定到“workstation”组,将生产环境的服务器计算机指定到“Server”组,将测试的服务器指定到“test”组。
u 使用组策略配置客户使用WSUS进行系统更新
系统更新要求:
u “Workstation”组的计算机,即Vista和Windows XP的操作系统不需要测试,直接从WSUS下载和安装系统补丁。
u “test”组中的计算机主要用来测安装系统更新之后的系统的稳定性,在真实环境中该组中的服务器和生产环境中的服务器安装的操作系统和应用程序应该一样。
u “Server”组中的计算机是是用于生产环境的服务器,为了避免某些系统更新可能造成关键应用程序启动失败,先给测试组“test”中的服务器应用更新,正常运行一段时间后,再将更新指定给成产环境的服务器。
试验环境:
u DCServer是ess.com域中域控制器,安装有Windows Server 2008企业版操作系统。
u WSUS是ess.com域中的成员服务器,安装Windows Server 2008企业版操作系统。
u Vista是ess.com域中的成员计算机,安装Vista企业版操作系统。
u WebServer是ess.com域中的成员服务器,安装Windows Server 2008企业版操作系统。
u Web是ess.com域中的成员服务器,安装Windows Server 2003企业版操作系统,主要用于测试系统更新后的系统稳定性。
实战网络拓扑:
图11-5 实战环境
11.2.1 安装WSUS 3.0
WSUS并不是Windows Server 2003/2008自带的服务,需要从微软站点上下载安装专门的安装程序。安装完成后会自动启动配置向导,可用来完成一系列的配置,当然,在安装之前还需要做好准备工作。
WSUS 3.0 SP1安装程序可以从如下站点下载:
http://www.microsoft.com/downloads/details.aspx?familyId=F87b4c5e-4161-48af-9ff8-a96993c688df&displaylang=en
Report Viewer是使用WSUS 3.0SP1用户界面的必备的组件,可以查看WSUS更新或同步的各种报告。
Microsoft Report Viewer Redistributable 2005 SP1的下载地址为:
http://www.microsoft.com/downloads/details.aspx?familyid=e7d661ba-dc95-4eb3-8916-3e31340ddc2c&displaylang=zh-cn
任务:
u 配置网卡IP地址,使之能够连接到Internet。
u 安装IIS服务
u 安装后台智能传输服务(BITS)2.0
u 安装Report Viewer
u 安装WSUS服务器
步骤:
1. 以域管理员的身份登录到WSUS服务器。
2. 如图11-6所示,打开服务器管理器,点击“添加角色”。
3. 如图11-7所示,再出先的开始之前对话框,点击“下一步”。
图11-6 添加角色 图11-7 添加角色向导
4. 如图11-8所示,在出现的选择服务器角色对话框,选中“Web服务器(IIS)”,点击“下一步”。
5. 如图11-9所示,在出现的Web服务器(IIS)对话框,点击“下一步”。
图11-8 选择角色 图11-9 Web服务器简介
6. 如图11-10所示,在出现的选择角色服务对话框,为了能够顺利安装WSUS,可选中除“FTP发布服务”之外的所有复选框,点击“下一步”。
7. 如图11-11所示,在出现的确认安装选择对话,点击“安装”。
图11-10 选择角色服务 图11-11 确认安装选择
8. 如图11-12所示,在出现的安装结果对话框,点击“完成”。
9. 如图11-13所示,在服务器管理器对话框,点中“功能”,点击“添加功能”。
图11-12 安装结果 图11-13 添加功能
10. 如图11-14所示,在出现的选择功能对话框,选中“BITS”服务器扩展,在出现的对话框,点击“添加必须的角色服务”,点击“下一步”。
11. 如图11-15所示,在出现的Web服务器(IIS)对话框,点击“下一步”。
图11-14 添加必需的角色服务 图11-15 Web服务简介
12. 如图11-16所示,在出现角色服务对话框,保持默认选择,点击“下一步”。
13. 如图11-17所示,在出现的确认安装选择对话框,点击“安装”。
图11-16 选择角色服务 图11-17 确认安装选择
14. 如图11-18所示,在出现安装结果对话框,点击“完成”。
15. 如图11-19所示,双击ReportViewer.exe,安装报表查看软件。在出现的欢迎使用Microsoft报表查看器可再发行组建2005安装程序对话框,点击“下一步”。
图11-18 安装结果 图11-19 安装报表查看软件
16. 如图11-20所示,在出现的最终用户许可协议对话框,选中“我接受许可协议中的条款”,点击“安装”。
17. 如图11-21所示,在安装完成对话框,点击“完成”。
图11-20 安装报表查看软件 图11-21 完成安装
18. 如图11-22所示,点击WSUSSetup_30SP1_x86.exe,出现欢迎使用Windows(R)Server Update Services 3.0 SP1安装向导,点击“下一步”。
19. 如图11-23所示,在出现的安装模式选择对话框,选择“包括管理控制台的完整服务器安装”,点击“下一步”。
图11-22 安装WSUS 图11-23 安装模式选择
20. 如图11-24所示,在出现的许可协议对话框,选择“我接受许可协议条款”,点击“下一步”。
21. 如图11-25所示,在出现的选择更新源对话框,选中“本地存储更新”,复选框,指定存储更新文件的位置。为了系统安全,应该选择空间较大的非系统分区。
图11-24 许可协议 图11-25 指定存储路径
22. 如图11-26所示,在出现的数据库选项对话框,选择“在此计算机上安装Windows Internal Database”,并指定保存WSUS数据库文件的位置。WSUS数据库中存储的信息包括WSUS服务器配置信息,用于描述更新程序作用的元数据和客户端、更新程序信息、以及客户端所进行的更新情况,通常不会占用太多空间。
23. 如图11-27所示,在出现的网站选择对话框,选择“使用现有IIS默认网站”,即可使用系统默认的80端口作为此站点的通信端口,点击“下一步”。如果当前服务器上存在正在运行的Web站点,且已占用80端口,则可以选择“创建Windows Server Update 3.0 SP1网站”。
图11-26 数据库选项 图11-27 网站选择
24. 如图11-28所示,在出现的准备安装Windows Server Update Services 3.0 SP1对话框,点击“下一步”。
25. 如图11-29所示,在出现的正在完成Windows Server Update Services 3.0 SP1安装向导对话框,点击“完成”。
图11-28 安装WSUS 图11-29 完成安装
26. 如图11-30所示,出现对话框,点击“确定”,重启系统。
图11-30 重启系统
11.2.1 配置WSUS 3.0
任务:
u 配置WSUS更新源和代理服务器
u 配置下载哪些产品的补丁以及哪类补丁
u 设置更新文件下载以及下载哪些语言的补丁
u 配置同步计划
u 设置WSUS更新自动审批
u 配置如何为计算机配置分组
u 创建计算机组
步骤:
1. 点击“开始”à“程序”à“管理工具”à“Microsoft Windows Server Update Services 3.0 SP1”,打开WSUS管理工具。
2. 如图11-31所示,点中“选项”,点击“更新源和代理服务器”。
3. 如图11-32所示,在出现的更新源和代理服务器对话框,您可以直接从 Microsoft Update 获取更新,或者从另一台 WSUS 服务器获取更新,具体取决于 WSUS 的配置方式。默认情况下,服务器从 Microsoft Update 获取更新。如果希望 WSUS 服务器直接从 Microsoft Update 进行同步,请单击“从 Microsoft Update 进行同步”。如果要从网络中的另一台 WSUS 服务器进行同步,请单击“从其他 Windows Server Update Services 服务器进行同步”,然后在相应的框中键入服务器名称和端口号。现在,另一台服务器是您的服务器的上游服务器。保持默认,点击“确定”。
图11-31 配置更新源和代理服务器 图11-32 指定更新源
4. 如图11-33所示,在“代理服务器”选项卡中,选择“在同步时使用代理服务器”,然后键入代理服务器的服务器名称和端口号,默认端口是 80(您不再需要在服务器名称前面加前缀 http://)。 如果要使用特定用户凭据连接到代理服务器,请选中“使用用户凭据连接到代理服务器”,然后在相应的框中键入用户名、域和用户密码。 如果要为连接到代理服务器的用户启用基本身份验证,请选中“允许基本身份验证(以明文形式发送密码)”。在本实验中不需要代理服务器,点击“确定”。
5. 如图11-34所示,点击“产品和分类”。
图11-33 指定代理服务器 图11-34 指定产品和分类
6. 如图11-35所示,在出现的产品和分类对话框,选中您的企业中使用的微软产品,点击“确定”,在这里您看不到Windows Server 2008产品,更新WSUS后就会出现微软更多的产品。
7. 如图11-36所示,点击“分类”标签,选中您认为必须的更新分类,点击“确定”。
图11-35 指定产品 图11-36 指定分类
8. 如图11-37所示,点击“更新文件和语言”。
9. 如图11-38所示,在出现的更新文件和语言对话框,选择“将更新文件本地存储在此服务器上”,选中“仅当审批更新后才能将更新文件下载到此服务器上”,选中“下载快速安装文件”,如果要使更新文件不必审批即可下载到本地服务器上,则清除“仅当审批更新后才能将更新文件下载到此服务器上”。
WSUS服务器的主要功能就是将所有的更新文件发送至客户端,更新内容即WSUS服务器分发到客户端的安装程序,主要包括元数据和更新文件两部分。
元数据:主要指更新程序的属性信息及EULAs(End-User License Agreements终端用户协议)等相关数据,保存在WSUS服务器使用的数据库中,它与安装WSUS服务器时的相关设置无关,只能完全下载并保存在指定的数据库中,下载的更新元数据软件包通常远远小于实际的更新文件软件包。
更新文件:是客户端安装更新时使用的安装包,相对于元数据而言,占用空间较多,通常保存在WSUS服务器指定的目录分区中。如果安装WSUS服务器时设置的是只下载安装信息而不下载安装文件,则这些文件保存在微软的Microsoft Update站点上。
图11-37 更新文件和语言 图11-38 更新文件
10. 如图11-39所示,点击“更新语言”标签,如果您企业中安装的操作系统有多语言版本操作系统,选择所需语言,在这里只选择“中文(简体)”,点击“确定”。
11. 如图11-40所示,点击“同步计划”。
图11-39 选择更新语言 图11-40 同步计划
12. 如图11-41所示,在出现的同步计划对话框,可以设置手动同步,也可以设置自动同步,在这里选中“自动同步”,指定第一次同步时间和每天同步次数,指定一个网络不繁忙的时间同步,点击“确定”。
13. 如图11-42所示,点击“计算机”。
图11-41 配置同步计划 图11-42 配置计算机分组
14. 如图11-43所示,在出现的计算机对话框,选择“使用计算机上的组策略或注册表设置”。要想将计算机分组,需要在WSUS创建计算机组,然后在客户端指定计算机所属的组。
15. 如图11-44所示,点击“自动审批”。
图11-43 使用客户端的设置 图11-44 配置自动审批
16. 如图11-45所示,在出现的自动审批对话框,点击“高级”标签,可以看到WSUS更新,已经选中了“自动审批WSUS产品本身的更新”、“自动审批已审批的更新的新修订”和“当新修订导致更新时过期时自动拒绝更新”。
审批指系统管理员允许或拒绝将更新程序分发到客户计算机。为了安全起见,系统管理员应查看更新,以决定允许或拒绝安装。对于不适用于指定客户端的更新,可以选择拒绝审批或删除。
17. 如图11-46所示,点中“同步”,点击“立即同步”。
图11-45 WSUS更新自动审批 图11-46 立即同步
18. 如图11-47所示,可以看到同步的进度。
19. 如图11-48所示,再次点中“选项”,点击“产品和分类”,在产品标签下,可以看到更多的微软的产品,包括Windows Server 2008所有的版本。
图11-47 同步进度 图11-48 再次查看产品
20. 如图11-49所示,点击“更新”可以看到所有更新的图示。
21. 如图11-50所示,点击“更新”下面的“安全更新”,可以筛选查看所有的安全更新。
图11-49 报表 图11-50 查看安全更新
22. 如图11-51所示,点中“计算机”à“所有计算机”,点击“添加计算机组”,在出现的对话框,输入test,点击“添加”。
23. 如图11-52所示,以相同的方法添加“workstation”和“Server”组。
图11-51 添加计算机组 图11-52 输入组名
11.2.2 使用组策略配置WSUS客户端
任务:
u 为域中的计算机创建组织单元
u 创建组织单元组织域中的计算机
u 为每个组织单元创建一个组策略配置更新位置
u 使用组策略为组织单元中的计算机进行分组
步骤:
24. 以域管理员的身份登录域控制器。
25. 点击“开始”à“运行”,输入“dsa.msc”,点击“确定”,打开Active Directory用户和计算机管理工具,或点击“开始”à“程序”à“管理工具”à“Active Directory用户和计算机”。
26. 如图11-53所示,右击“ess.com”,点击“新建”à“组织单位”。
27. 如图11-54所示,在出现的新建对象-组织单位对话框,输入名称“公司服务器”。按照相同的方法创建“测试服务器”和“工作站”组织单位。
图11-53 创建组织单位 图11-54 输入名称
28. 如图11-55所示,将computers目录下的计算机账号拖拽到相应的组织单元。
29. 点击“开始”à“程序”à“管理工具”à“组策略管理”,打开组策略管理工具。
30. 如图11-56所示,右击“公司服务器”,点击“在这个域中创建GPO并在此处链接”。
图11-55 移动计算机 图11-56 创建并连接GPO
31. 如图11-57所示,在出现的新建GPO对话框,输入组策略的名称“公司服务器GPO”,点击“确定”。
32. 如图11-58所示,右击“公司服务器GPO”,点击“编辑”。
图11-57 输入GPO名称 图11-58 编辑GPO
33. 如图11-59所示,打开组策略管理编辑器,点击“计算机配置”à“策略”à“Windows设置”à“管理模板”à“Windows组件”à“Windows Update”,点击“配置自动更新”。
34. 如图11-60所示,在出现的配置自动更新属性对话框,选择“已启用”,选择“4-自动下载并计划安装”,计划安装日期选择“每天”,计划安装时间“12:00”,点击“确定”。
图11-59 配置自动更新 图11-60 配置自动更新
35. 点击“指定Intranet Microsoft更新服务位置”。
36. 如图11-61所示,在出现的指定Intranet Microsoft更新服务位置属性对话框,点中“已启用”,设置检查更新的Intranet更新服务的位置,输入http://wsus.ess.com,在设置Intranet统计服务器位置,输入http://wsus.ess.com,点击“确定”。
37. 点击“允许客户端目标设置”。
38. 如图11-62所示,在出现的允许客户端目标设置属性对话框,选择“已启用”,在此计算机的目标组名称,输入“Server”。该组织单元中的所有计算机将被设置成“Server”组。关闭组策略管理编辑工具。必须关闭才能保存更改。
图11-61 指定更新位置 图11-62 将计算机分组
39. 如图11-63所示,依照上面的步骤,在“工作站”组织单元上创建并连接一个组策略,并设置Windows 更新位置,以及计算机的目标组名称“workstation”。关闭组策略管理编辑工具。
40. 依照上面的步骤,如图11-64所示,在“测试服务器GPO”组织单元上创建并连接一个组策略,并设置Windows 更新位置,以及计算机的目标组名称“test”。关闭组策略管理编辑工具。
图11-63 将计算机分组 图11-64 将计算机分组
41. 如图11-65所示,在WebServer上,点击“开始”à“运行”,输入“gpupdate /force”,点击“确定”,刷新组策略。
42. 如图11-66所示,点击“开始”à“设置”à“控制面板”à“Windows Update”,点击“更改设置”。
图11-65 刷新组策略 图11-66 查看更新设置
43. 如图11-67所示,在出现的更改设置对话框,可以看到组策略已经生效,不能更改。
44. 如图11-68所示,在Web服务器上,点击“开始”à“运行”,输入“gpupdate /force”,点击“确定”,刷新组策略。
图11-67 组策略生效 图11-68 刷新组策略
45. 如图11-69所示,在Web服务器上,右击“我的电脑”,点击“属性”。
46. 如图11-70所示,在出现的系统属性对话框,点击“自动更新对”标签,可以看到组策略已经生效。
图11-69 查看计算机属性 图11-70 查看更新设置
11.2.3 为Test组和Windows XP以及Vista配置自动审批
在WSUS服务器上,补丁和更细必须得到管理员的审批才能在客户端下载和安装,你可以创建规则,自动针对特定更新或特定计算机分组或特定系统自动审批。
任务:
u 为Test组的计算机设置自动审批
u 为Windows XP和Vista的操作系统配置自动审批
步骤:
47. 在WSUS计算机上,点击“开始”à“程序”à“管理工具”à“Microsoft Windows Server Update Services 3.0 SP1”,打开WSUS管理工具。
48. 如图11-71所示,点击“WSUS”à“计算机”à“所有计算机”à“test”,可以看到WSUS服务器已经根据客户端的设置将Web服务器自动列在test组中。
49. 如图11-72所示,点中“选项”,点击“自动审批”。
图11-71 查看计算机 图11-72 查看自动审批
50. 如图11-73所示,在出现的自动审批对话框,点击“新建规则”。
51. 如图11-74所示,在出现的添加规则对话框,选中“当更新属于特定分类时”,点击“任何分类”。
图11-73 创建审批规则 图11-74 更改分类
52. 如图11-75所示,在出现的选择“更新分类”对话框,去掉“feature Pack”、“工具”和“驱动程序”,点击“确定”。
53. 如图11-76所示,点击“所有计算机”。
图11-75 选择自动审批的分类 图11-76 选择计算机分组
54. 如图11-77所示,在出现的选择计算机组对话框,只选中“test”,点击“确定”。
55. 如图11-78所示,指定规则名称“自动审批test组计算机”,点击“确定”。
图11-77 选择计算机分组 图11-78 自定规则名称
56. 如图11-79所示,点中刚才创建规则,点击“运行规则”。
57. 如图11-80所示,出现运行规则对话框,提示在运行之前保存,点击“是”。
图11-79 运行规则 图11-80 保存
58. 如图11-81所示,提示审批结果。点击“关闭”。
59. 如图11-82所示,在自动审批对话框,点击“新建规则”。
图11-81 自动审批 图11-82 创建规则
60. 如图11-83所示,在出现的添加规则对话框,选中“当更新属于特定产品时”,点击“任何产品”。
61. 如图11-84所示,在出现的选择产品对话框,选中“Windows XP”和“Vista”,点击“确定”。
图11-83 选择产品 图11-84 选择产品
62. 如图11-85所示,在指定规则名称“自动审批XP Vista更新”,点击“确定”。
63. 如图11-86所示,选中“自动审批XP Vista更新”点击“运行规则”。
图11-85 选择Vista 图11-86 运行规则
64. 如图11-87所示,可以看到审批的更新的数量,点击“关闭”,通过审批的更新,下次同步时会下载更新用的安装文件。
图11-87 Vista的系统更新自动通过审批
11.2.4 为Server组的计算机审批特定更新
测试组中的服务器应用完更新后,能够稳定运行一段时间,可将这些经过测试过的更新指派到生产环境中的服务器。
任务:
u 将指定的更新指派给“Server”组的计算机
u 指定最后期限
u 拒绝不再适合的补丁
步骤:
65. 在WSUS服务器上,点击“开始”à“程序”à“管理工具”à“Microsoft Windows Server Update Services 3.0 SP1”,打开WSUS管理工具。
66. 如图11-88所示,点中“更新”à“安全更新”下的更新,右击选中的更新,点击“审批”。
67. 如图11-89所示,在出现的审批更新对话框,右击“Server”组,点击“已审批进行安装”。
图11-88 手动审批特定补丁 图11-89 选择计算机组
68. 如图11-90所示,右击“Server”,点击“最后期限”,点击“一周”。指定一周之内客户端安装更新,客户端也并不会一到最后期限立刻开始强制安装该补丁,Background Intelligent Transfer服务会智能的根据网络状况,在网络状况较好的情况下,尽快的安装该补丁。
69. 如图11-91所示,可以看到这些更新已经批准Server组中计算机安装更新,并设置了最后期限,点击“确定”。
图11-90 指定最后期限 图11-91 确定
70. 如图11-92所示,可以看到审批进度,点击“关闭”。
71. 如图11-93所示,如果有的补丁已经被更新的补丁替换了,可以在WSUS服务器的更新管理窗口将其拒绝。在拒绝更新时,默认情况下,“更新”窗口中将不再显示且无法对其进行审批,但可以在所有的更新中查看被拒绝的更新。
图11-92 应用审批 图11-93 拒绝客户端更新
72. 如图11-94所示,在出现的拒绝更新对话框,点击“是”。
图11-94 确定
11.2.5 在客户端查看上补丁更新情况
如图11-95所示,配置成WSUS客户端,在Windows目录下会生成windowsUpdate.log文件,打开后可以看到此客户端是从何处升级的补丁及升级了哪些补丁。
如图11-96所示,安装更新后,替换下来的文件放到了系统目录中蓝色的文件夹中,是压缩文件夹。卸载补丁$NtUninstallKB873339$是用来卸载补丁的,里面保存着先前被替换的老版本文件或者卸载信息文件,如果你确定不卸载补丁你可以删掉。
图11-95 在客户端查看补丁更新情况 图11-96 替换的文件
11.2.6 查看报告
借助于从 WSUS 3.0 获得的报告,您可以监视通过服务器管理的计算机和 WSUS 服务器的更新、计算机以及同步结果。也可以选择从连接到您的服务器的下游服务器汇总数据。WSUS Reporters 安全组的成员具有运行和查看 WSUS 报告的权限。
您可以从 WSUS 控制台中的不同位置来访问计算机和更新状态。在任何计算机或更新视图中,您可以选择一个或多个计算机或更新,右键单击选择的项,然后单击“状态报告”。该报告将显示所选项的状态,并允许选择更多项或对结果进行筛选。也可以从“Update Services”树的“报告”节点中生成报告。从此节点中获得的报告可划分为以下类别:
u 更新:“更新状态摘要”、“更新详细状态”和“更新表格状态”
u 计算机:“计算机状态摘要”、“计算机详细状态”和“计算机表格状态”
u 同步:同步结果
更新状态摘要报告提供每个更新的详细摘要,其中包括更新属性和审批状态。生成此报告时,将会在树窗格中看到报告条件中包含的所有更新。通过在树中选择某个更新,您将会看到该更新的属性和审批状态信息。您可以打印报告或将其导出为 Microsoft Office Excel 或 Adobe Acrobat (PDF) 格式。通过在工具栏中单击“报告视图”并选择另一个选项,可以将报告视图从“摘要”切换到“详细”或“表格”。
行更新状态摘要报告:查看test组中Windows 2003更新情况
73. 在“Update Services”树中,展开要运行报告的服务器,然后单击“报告”。
74. 如图11-97所示,在“结果”窗格的“更新报告”下面,单击“更新详细状态”。
75. 如图11-98所示,在“更新报告”框中,点击“任何产品”,在出现的选择产品对话框,选择“Windows Server 2003”,点击“确定”。
图11-97 更新报告 图11-98 选择产品
76. 如图11-99所示,在“更新报告”对话框中,点击 “任何计算机组”,在出现的“选择计算机组”,只选中“test”,点击“确定”。
77. 如图11-100所示,在“更新报告”对话框中,点击“运行报告”。
图11-99 选择计算机组 图11-100 运行报告
78. 如图11-101所示,可以看到生成的报告,默认情况下,每页仅显示一项更新的相关信息,包括描述、分类、严重等级、编号,以及审批情况。
图11-101产生的报告
计算机报告
计算机报告主要用于显示客户端系统更新状态和系统信息,网络管理员可以根据计算机报告来了解当前网络安全状态,包括以下3中。
u 计算机状态摘要报告:计算机状态摘要报告提供每台计算机的详细摘要,其中包括计算机组信息和更新安装状态。
u 运行计算机状态详细报告:计算机状态详细报告显示计算机状态摘要以及每个更新的状态。
u 运行计算机状态表格报告:计算机状态表格报告提供多台计算机的计算机状态。
任务:查看test组计算机更新情况
79. 如图11-102所示,点击“计算机详细状态”。
80. 如图11-103所示,在出现的WSUS的计算机报告对话框,点击“任何计算机”。
81. 在出现的选择计算机组对话框,选中“test”,点击“确定”。
图11-102 计算机详细状态 图11-103 选择计算机组
82. 如图11-104所示,在WSUS的计算机报告对话框,点击“运行报告”。
83. 如图11-105所示,可以看到web.ess.com计算机补丁更新情况,操作系统版本,IP地址以及上次报告状态的日期。
图11-104 运行报告 图11-105 查看安装的更新
同步报告
同步结果报告显示 WSUS 服务器的上次同步结果,或者显示特定时间段内的同步结果。默认情况下,同步报告仅显示最近30天的同步结果,但可以根据需要选择不同的时间段来筛选报告结果。
84. 如图11-106所示,点击“同步结果”。
85. 如图11-107所示,在出现的WSUS的同步结果,选择“在以下日期之间,单击“运行报告”。
图11-106 查看同步结果 图11-107 选择时间段
86. 如图11-108所示,完成后显示曾经执行的同步操作以及最新的更新。
87. 如图11-109所示,如果要查看某个同步的详细信息,在在“同步摘要”选项组中单击该同步。显示该次同步的时间及更新。
图11-108 查看同步报 图11-109 查看同步更新
本文转自 onesthan 51CTO博客,原文链接:http://blog.51cto.com/91xueit/1133954,如需转载请自行联系原作者
RIS实现系统的远程安装之三使用远程安装
第3部分 使用远程安装服务
1. 远程安装服务服务器授权
“远程安装服务 (RIS)”服务器授权特性可防止将未经授权的 RIS 服务器添加到使用 Active Directory 的网络中。
使用 RIS 可确定哪些 RIS 服务器能接受和处理请求,以及哪些 RIS 服务器仅能为网络上的客户端提供服务。必须先授权 RIS 服务器在 Active Directory 中运行,它才能接受请求。若要在 Active Directory 中授权 RIS,您必须首先以 Enterprise Admins 组成员的帐户登录到要在其中授权 RIS 服务器的域中。应运行 RISETUP -Check 授权该服务器。
当 RIS 服务器尝试在网络上启动时,将查询 Active Directory,并且 Internet 协议 (IP) 地址与授权的 RIS 服务器的列表相比较。如果发现匹配项,则 RIS 服务器已得到授权且可以在网络上启动。如果没有匹配项,该服务器未获得授权。此时,RIS 将没有应答。
2. 运行远程安装服务安装向导
运行“远程安装服务安装向导”前,您必须确保在要运行该向导的服务器上的 Administrators 组中有帐户。也应确保完成清单:安装远程安装服务中所述的全部必要步骤。
完成安装后,您可选择“远程安装服务 (RIS)”作为可选组件。为此,请使用“控制面板”中的“添加或删除程序”。如果使用无人参与应答文件运行安装,则也可在安装过程中安装 RIS。这种情况下,在您选择 RIS 后,“安装向导”将引导您完成安装和配置的必要步骤。
该“安装向导”显示以下选项:
l 第一次运行该向导时,该向导将提示您输入 \RemoteInstall 目录树的位置。此位置必须位于 NTFS 文件系统卷上,而不能位于系统卷或启动卷上。
l 响应客户端计算机的请求服务选择此选项能够使 RIS 服务器开始响应客户端计算机。取消选中该选项可防止 RIS 服务器进行响应。
l 不响应未知客户端计算机如果希望 RIS 服务器仅响应已知(预安排)的客户端计算机,则选择该选项。如果希望该 RIS 服务器响应请求远程安装的任何客户端计算机,则取消选中该选项。
l 预安排可以作为 RIS 的安全策略的一部分。因为您可使用预安排防止通过 RIS 安装未知客户端计算机。对于与PXE 体系结构和 RIS 有关的安全考虑事项,请参阅 PXE 体系结构、RIS 和安全考虑事项。
l “安装向导”将提示您输入该安装文件的位置。这可以是光盘或包含该安装文件的网络位置。
l “安装向导”将提示您输入目录名称,以便将 RIS 服务器上的安装文件复制到该目录中。您应当将目录命名为能表示要复制的操作系统的形式(例如,WindowsXP.pro)。
l “安装向导”将提示您输入描述此操作系统安装映像的易懂描述和“帮助”文本。在启用远程启动的客户端计算机上执行客户端安装过程中,系统将向用户显示易懂描述和“帮助”文本。输入操作系统安装选择的描述。例如,易懂描述可以是“Windows XP Professional 用于销售人员”。当用户在“客户端安装向导”中选择易懂描述时,将显示“帮助”文本。
l 此“安装向导”显示安装过程的摘要信息。若要更改其中的任何信息,请单击“上一步”。
3. 从命令行使用 Risetup
通过 Risetup,您可从命令行管理运行“远程安装服务 (RIS)”的服务器。可使用 Risetup 添加新安装映像或验证服务器,并确保它正常运行。
若要运行 Risetup,请在命令行键入:
risetup
4. 远程安装服务管理概述
要管理“远程安装服务 (RIS)”,请使用 Active Directory 内指定对象的属性页。要访问属性页,请右键单击想要管理的服务器对象,然后单击“属性”。在“远程安装”属性页中可以设置下列选项:
1) 客户端服务
可以指定服务器响应所有的客户端请求服务,或只响应已知的(预安排)客户端。使用以下选项指定 RIS 服务器如何响应来自客户端计算机的服务请求:
l 响应客户端请求服务: 如果选择该选项,RIS 将启用,并响应客户端计算机请求服务。
l 不响应未知客户端计算机:如果选择该选项,RIS 服务器仅响应 Active Directory 中预安排的客户端计算机。否则,RIS 服务器将响应请求远程安装的任何客户端计算机。
有关预安排的详细信息,请参阅预安排客户端计算机。
2) 验证服务器
如果服务器似乎出现故障或运行状况异常,或者需要从备份中还原 RIS 卷,则选择该选项。该选项将调用一个向导,检查所有的设置、服务和配置选项是否都已正确设置并正常工作。
选择该选项前,请确保安装光盘可用。在“验证服务器”过程中可能会提示您需要光盘。
您只能在 RIS 服务器上本地使用“验证服务器”,或者通过“管理远程桌面”连接到该服务器来使用“验证服务器”。如果正在从远程服务器执行 RIS 管理任务,就不能使用“验证服务器”。
注意:如果因为需要从备份中还原 RIS 卷而验证服务器配置,则必须在还原该卷之前验证服务器配置。
3) 显示客户端
如果选择此选项,您就能够在 Active Directory 中搜索 RIS 客户端。
选择该选项将显示客户端计算机的列表,这些客户端计算机按它们的全局唯一标识符 (GUID) 排序。该列表也包括已预安排的客户端计算机。
4) 高级设置
如果选择该选项,则可控制如何安装客户端计算机。以下为高级设置选项:
l 自动客户端计算机帐户命名格式
l 客户端计算机帐户的 Active Directory 位置
l 管理安装在该 RIS 服务器上的安装映像和操作系统预维护工具
5. RIPrep 创建安装映像
使用“远程安装准备 (RIPrep) 向导”,您可以创建当前安装的映像,并将该映像复制到网络上可用的“远程安装服务(RIS)”服务器。若要执行该过程,您必须是客户端计算机上 Administrators 组的成员,或者必须已被委派了适当的权限。Domain Admins 组的成员也可执行此过程。您还必须具有写入 RIS 服务器上 RIS 文件夹的权限(包含所有 RIS 文件夹的文件夹的默认名为 RemoteInstall)。
确保您具有写入 RIS 服务器上 RIS 文件夹的权限的方法之一是明确地为您指派此权限。另一种方法是成为 RIS 服务器上本地 Administrators 组的成员。
l 建议您使用 RIS 安装为安装映像选择的操作系统。然而,RIPrep 仅能用于为它所支持的特定操作系统创建映像。不必使用 RIS 安装操作系统;您可通过光盘进行安装。
l 安装操作系统后,您应安装要使用客户端进行部署的客户端计算机应用程序。
注意:如果您想安装不符合“Windows Installer”技术的应用程序,则应执行本步骤。您也可以安装符合“Windows Installer”技术的应用程序。
l 安装适当的客户端计算机应用程序后,您应将源计算机配置为符合任何必要的公司桌面标准。例如,您可能希望定义特定的屏幕颜色、设置背景位图为公司徽标、删除由基本操作系统安装的任何游戏以及配置 Internet Explorer 代理服务器设置。要保存桌面配置,请将发生配置更改时登录的用户的配置文件复制到默认用户配置文件中。
注意:启动“远程安装准备向导”前,确保删除源客户端计算机中的所有机密信息。
l 然后,您应关闭所有应用程序并运行“远程安装准备向导”。
l 此向导将源计算机配置成一般状态,删除对客户端安装特有的任何内容,如计算机的唯一安全标识符 (SID)、计算机名称以及对客户端源计算机特有的任何注册表设置。
l 然后,此向导将提示您输入映像创建过程所必需的安装信息。这些信息包括客户端安装映像复制的位置、应复制到服务器上的目录的名称以及向运行“客户端安装向导”的用户说明安装映像的易懂描述及相关“帮助”文本。由于在远程启动过程中的内存限制,所以您能为一组安装映像选择提供的完整文本将受到限制。对于相对大量的安装映像选择,易懂描述和“帮助”文本必须限制长度;对于较少的选择,易懂描述和“帮助”文本可较长一些。如果客户端计算机的安装映像选择数量接近 12 到 16,则通常对于完整文本存在这些限制。
l 复制完成之后,安装映像将自动添加到可用操作系统安装选项的列表中并且可以被使用远程启动技术的客户端计算机使用。使用 RIPrep 创建新映像时,该映像仅对具有相同类型“硬件抽象层 (HAL)”的客户端计算机可用。使用 RIPrep 创建的映像对于经授权可以查看它们的所有客户端都可用。
注意:启用远程启动的客户端计算机不必具有与用于创建安装映像的源计算机相同的硬件(HAL 除外)。在映像安装过程中,“远程安装准备向导”使用即插即用功能检测源计算机硬件和目标计算机硬件之间的差异。对于任何即插即用设备,这可确保安装正确的设备驱动程序。
l 通过在安装映像 .sif 文件上设置访问控制权限,您可控制可用于用户的安装选项,或者,为了获得更大的控制,您可在包括该安装映像的文件夹上设置权限。
1) 计划 RIPrep 时要考虑的因素
计划使用 RIPrep 创建安装映像时要考虑的因素。它们主要包括:
Ø RIPrep 复制过程的要求
Ø 安装映像、产品标识号以及授权
Ø 源客户端计算机和目标计算机上的磁盘特征
2) RIPrep 复制过程的要求
打算运行 RIPrep 时,了解源客户端计算机、映像和用来复制映像的媒体所要符合的要求,这非常重要。
Ø “远程安装准备向导”当前支持将安装的单磁盘和单启动分区复制到单独的 RIS 服务器。这意味着,操作系统和组成标准安装映像的所有应用程序都必须保存在源客户端计算机的单个分区上。
Ø 源客户端计算机上的文件一定不要加密。不支持加密文件的复制。
Ø 不支持修改复制的安装映像。
Ø 此向导允许将源映像仅复制到可用的 RIS 服务器上。目前还不支持将源复制到备用驱动器或备用媒体类型上。
3) 安装映像、产品标识号以及授权
Ø 使用“远程安装准备向导 (RIPrep)”创建最初使用零售版操作系统安装的客户端计算机的安装映像时,必须修改RIS 的无人参与安装应答文件 (sif) 以包括该产品的标识号 (PID)。PID 是专用于每个操作系统副本的唯一标识号。如果没有在 .sif 文件中输入 PID,那么在安装 RIPrep 映像的过程中会停止安装并且提示用户输入产品标识符的信息。在与该安装映像关联的 .sif 文件的 [UserData] 部分添加产品标识符,可以避免在安装过程中提示用户输入 PID。例如,在 .sif 文件的 [UserData] 部分键入如下内容(包括连字符和引号):
ProductKey = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
Ø 映像复制过程结束之后,源客户端计算机将关机。重新启动源计算机时,简化的安装程序将自动运行。如果需要使用该客户端计算机创建另一个安装映像,则必须完成此安装过程。如果您使用零售版的 PID,则仅能创建三次附加的安装映像。但是,卷授权 PID 允许您创建三次以上的安装映像。
Ø 使用 RIS 制作或安装的 Microsoft 软件的所有副本都必须完全得到许可。使用 RIS 制作或安装的非 Microsoft软件的所有副本也都必须获得许可,而且持有许可证的一方有责任确保非 Microsoft 软件的任何副本都已得到许可。
4) 源客户端计算机和目标计算机上的磁盘特征
打算运行 RIPrep 时,了解源客户端计算机上具有的磁盘配置,然后将它与要安装映像的客户端计算机上的磁盘配置进行比较,这很重要。以下要求涉及:
Ø 目标计算机的磁盘容量必须等于或大于源计算机的磁盘容量。
Ø RIPrep 安装映像保留了源计算机磁盘的卷和分区特征。
以下示例解释了这一点,但也说明了并不建议使用的文件分配表 (FAT) 和 FAT32 文件系统的用法。对于 RIS,建议使用 NTFS 文件系统。具体示例,请参阅下面内容:例如,如果使用 2 GB 的 FAT 卷从源计算机创建安装映像,然后将该映像安装在 4 GB 驱动器的客户端计算机上,则生成的安装会将此驱动器格式化为使用 FAT32 的 4 GB 卷。目标计算机文件系统类型的更改是由于 FAT 文件系统的限制引起的。如果目标卷大于 32 GB,则不能进行目标计算机文件系统类型的此类更改(从 FAT 更改为其他文件系统)。对于大于 32 GB 的目标卷,源计算机必须使用 NTFS 文件系统。
目标计算机的磁盘准备容量必须等于源计算机的磁盘容量,除非按照本列表下一项中的指导操作,否则将格式化目标计算机上所有剩余的磁盘容量。例如,如果源计算机的磁盘容量是 1 GB,而目标计算机的磁盘容量是 2 GB,那么目标计算机上的整个 2 GB 都将被格式化。
Ø 通过更改与安装映像相关联的 .sif 文件中的信息,您可以限制磁盘重新格式化,以便它与用来创建安装映像的源计算机一样。例如,打开位于 \\Server_name\REMINST\Setup\Applicable language\Images\Applicable image name\I386\Templates\Riprep.sif 文件夹中的 Riprep.sif 文件,并将 UseWholeDisk 参数修改为 NO。客户端计算机安装该映像时,磁盘将按照与源计算机匹配的容量进行格式化,且不格式化目标计算机剩余的磁盘容量。
6. RIS 客户端计算机属性
“远程安装服务 (RIS)”使用属性页包括有关 RIS 客户端计算机的信息。若要查看或更改有关 RIS 客户端计算机的信息,请右键单击某个客户端列表,然后单击“属性”。
1) 计算机的唯一标识符 (GUID)
属性页上显示的一个重要属性是计算机的全局唯一标识符 (GUID),也称作通用唯一标识符 (UUID)。RIS 服务器使用该标识符定位客户端计算机。以下列表提供有关 GUID 的详细信息:
GUID 由客户端计算机的制造商提供。
输入 GUID 时,您一般以 {dddddddd-dddd-dddd-dddd-dddddddddddd} 的显示格式输入它,其中 d 是十六进制的文本数字。在第一个连字符前有 8 个数字,其后的三组数中每组都有 4 个数字,最后一个连字符后又 12 个数字。如以下示例所示:
{67452301-AB89-EFCD-0123-456789ABCDEF}
GUID 仅使用十六进制的文本数字和连字符,即以下列表中的字符(不区分大小写):
0 1 2 3 4 5 6 7 8 9
a b c d e f - A B C D E F
不要在 GUID 中键入空格。
GUID 也可以按电报格式输入。在电报格式的 GUID 中,将通过与显示格式的 GUID 进行比较而调换最初的 16 个数字。以下示例将电报格式与显示格式进行比较:
以电报格式表示的 GUID:0123456789ABCDEF0123456789ABCDEF
以显示格式表示的相同的 GUID:{67452301-AB89-EFCD-0123-456789ABCDEF}
2) 查找客户端计算机
每台客户端计算机由其 GUID 标识。在 Active Directory 中,您可使用“显示客户端”功能显示按其 GUID 排序的客户端计算机的列表。该列表包括预安排客户端计算机。可以在整个 Active Directory 结构或仅限制在特定的域执行该搜索。
“显示客户端”搜索过程为当前 RIS 服务器计算机名附加一个通配符搜索属性。例如,如果命名 RIS 服务器为 RISsvr1,那么“显示客户端”功能将使用 RISsvr1* 作为服务器名称。
在多个 RIS 服务器环境中使用“显示客户端”功能时,搜索结果可能包含从多个服务器获得的客户端计算机。例如,如果您有多个 RIS 服务器具有像 RISsvr1、RISsvr10 和 RISsvr100 这样的计算机名称,当您搜索 RISsvr1 时,列表将显示从所有这三个服务器安装的客户端计算机。
7. 远程安装服务的安全信息
1) PXE 体系结构、RIS 和安全考虑事项
“远程安装服务 (RIS)”所使用的“预启动执行环境 (PXE)”体系结构由于其设计问题使得在 PXE 中存在某些固有的安全风险。PXE 是一种行业标准,所以使用 PXE 的远程安装方法都具有同样的风险。
这些安全风险包括以下方面:
Ø PXE 没有提供防止未知服务器在启用 PXE 的客户端计算机上执行远程安装的措施。如果某个服务器可与客户端建立连接,它即可在这些客户端上执行远程安装。
Ø PXE 并没有提供完全阻止数据包欺骗的措施。这意味着,客户端计算机将接收攻击者发送的数据包,并将该数据包结合到此客户端计算机的安装中。
Ø PXE 没有提供一种措施来防止未知的启用 PXE 的计算机安装服务器(如果该启用 PXE 的计算机能连接到网络)。但是,RIS 提供了 PXE 所不具有的某些安全性,因为 RIS 仅在用户登录后才执行远程安装。没有有效用户名和密码的用户无法使用 RIS 执行安装。
Ø 另外,如果您预安排客户端计算机并配置您的 RIS 服务器仅响应已知(预安排的)客户端,则可通过 RIS 获得更高的安全性。这样,如果入侵者成功地将未知的、启用 PXE 的客户端计算机连接到您的 RIS 服务器,则不会向该客户端计算机发送任何安装文件。该入侵者不会获得您用于 RIS 客户端计算机的配置信息。
由于存在这些安全性问题,所以建议您在包括启用 PXE 的客户端计算机的网络周围实施保护措施。
您可采取如以下列表中所述的那些步骤确保由您组织外的人员控制的计算机不要连接到启用 PXE 的客户端:
Ø 使用防火墙,并正确配置它。
Ø 使用适当的审核和监控方法来监测对网络的入侵。
Ø 限制对网络的物理访问。
Ø 在整个组织内使用强密码。
Ø 执行加强网络安全的其他最佳操作。
2) 为 RIS 管理员选择适当的组成员
如果您组织中某些人员的职责包括配置“远程安装服务 (RIS)”服务器和创建安装映像,则使这些人员成为诸如 Domain Admins 或 Enterprise Admins 等管理组的成员。这能使他们执行所有 RIS 配置任务。对于通过在 Active Directory 中授权 RIS 服务器的方式完成安装 RIS 服务器的单独任务,需要在 Enterprise Admins 中具有成员身份。
也应为您组织的管理员提供未在任何管理组的用户帐户。使用这些帐户,管理员可以作为用户以安全性最佳操作进行登录,然后使用运行方式执行管理任务。
在任何可能的情况下,按照仅提供对域帐户和资源必要的访问的方式选择组成员身份和分配权限。例如,可能您组织中某些人员的职责包括管理帐户和权限但不包括配置 RIS 服务器或创建客户端安装映像。不要授予这些人员在诸如Domain Admins 或 Enterprise Admins 等组中的成员身份,而授予他们在诸如 Account Operators 组中的成员身份,并授予他们对 RIS 服务器上文件夹的权限。
下表说明组成员身份和仅管理与权限、计算机帐户和用户帐户相关的 RIS 任务的人员所必需的权限:
任务
执行那些任务的管理员所必需的权限或组成员身份
管理客户端安装映像,包括:
² 将无人参与安装应答文件与安装映像相关联。
² 允许或阻止用户或组安装 RIS 映像。
² 允许或阻止用户或组查看和安装 RIS 映像。
对“Images”文件夹,或“Images”文件夹中的一个或多个子文件夹的完全控制。
管理使用了预安排的域中的帐户,包括:
预安排客户端计算机。
设置使用预安排客户端计算机的 RIS 用户所需的权限。
删除不再被预安排的计算机的帐户。
Account Operators 中的成员身份。
3) 在包含 RIS 的网络上设置“LAN Manager 身份验证级别”
您可使用“LAN Manager 身份验证级别”设置指定某些身份验证协议是否可用于网络通信的级别。用户登录到 RIS 客户端时,“远程安装服务 (RIS)”使用第一版的 NTLM 身份验证协议,或使用第二版的 NTLM 身份验证协议(即NTLMv2)。这两个协议中,NTLMv2 由于其处理加密密钥的方法而明显比第一版的协议更为安全。
有关在包含 RIS 的网络上选择最合适“LAN Manager 身份验证级别”的信息,请参阅本主题以下内容中所示的表。
设置“LAN Manager 身份验证级别”时,您应考虑网络安全的需要以及使用各种操作系统的需要。如果您选择最高的级别(仅发送 NTLMv2 响应\拒绝 LM & NTLM),则仅使用更为安全的 NTLMv2 协议;身份验证中所涉及的所有计算机都必须运行支持 NTLMv2 的软件。如果您选择较低级别(仅发送 NTLM 响应),则任何可能的情况下都使用NTLMv2,仅在要求使用 NTLM 的情况下使用它(即当身份验证中涉及的一台或多台计算机不支持 NTLMv2 的情况下)。
最合适的“LAN Manager 身份验证级别”取决于在域控制器上安装哪个操作系统、RIS 服务器以及所要安装的客户端。下表提供您可用来确定合适的“LAN Manager 身份验证级别”的标准。
用于“仅发送 NTLM 响应”的标准
用于“仅发送 NTLMv2 响应\拒绝 LM & NTLM”的标准
域控制器:任何域控制器可包括运行 Windows 2000(不带特定软件补丁程序)的那些域控制器。它们不必限于本表其他列中所示的内容。
域控制器:运行带特定软件补丁程序的 Windows 2000 或运行 Windows Server 2003为了使用该身份验证级别,域控制器必须运行带特定软件补丁程序的 Windows 2000 或必须运行 Windows Server 2003。有关为使用此身份验证级别运行 Windows 2000 所需的软件补丁程序的信息,请搜索Microsoft 网站 ([url]http://www.microsoft.com[/url]) 上的“Knowledge Base”(知识库)。
另外,RIS 服务器和客户端必须符合本表中的要求。
RIS 服务器:任何RIS 服务器可包括运行 Windows 2000 的那些服务器。它们不必限于运行 Windows Server 2003 的那些服务器。
RIS 服务器:仅运行 Windows Server 2003为了使用该身份验证级别,所有 RIS 服务器必须运行 Windows Server 2003。另外,域控制器和客户端必须符合本表中的要求。
客户端:任何客户端可包括运行 Windows 2000 或 Windows XP(不带 service pack)的那些客户端。它们不必限于运行 Windows Server 2003 或运行带有 Service Pack 1 (SP1)或更高版本 Service Pack 的 Windows XP 那些客户端。
客户端:运行带有 SP 1 或更高版本 SP 的 Windows XP,或运行 Windows Server 2003为了使用该该身份验证级别,客户端必须运行带有 SP 1或更高版本 SP 的 Windows XP,或运行 Windows Server 2003。另外,域控制器和 RIS 服务器必须符合本表中的要求。
使用“仅发送 NTLM 响应”的整体效果安全性并不很强,但可供选择的操作系统范围较广。
使用“仅发送 NTLMv2 响应\拒绝 LM & NTLM”的整体效果安全性更强,但可供选择的操作系统范围较小。
本文转自xubenxin 51CTO博客,原文链接:http://blog.51cto.com/windows/83629,如需转载请自行联系原作者
Linux常用的安全工具
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chenguang.blog.51cto.com/350944/857907
Linux常用的安全工具
“工欲善其事,必先利其器”。作为一个合格的系统管理员,要应对可能发生的安全事件,掌握Linux下各种必须的安全工具是首要大事。本文主要介绍Linux上常用的安全工具,例如,Nmap、Snort、Nesseu等安装、使用和维护知识。通过这些工具管理人员能够了解其系统目前存在的安全隐患、入侵者可能利用的漏洞,及时发现入侵,并构造一个坚固的防御体系将入侵拒之门外。
一、安全信息收集软件
对于系统管理员来说,了解和掌握系统当前的安全状态是做到“知己”的第一个步骤。安全信息收集软件就是用来收集目前系统安全状态的有力工具。端口扫描软件和漏洞扫描软件是常用的信息收集软件。入侵者通常通过端口扫描软件来掌握系统开放端口,运行服务器软件版本和操作系统版本等相关信息。而对于管理人员,通过这些软件可以让管理人员从入侵者的角度来审视系统,并且能够根据这些信息进行相应的配置和修改来迷惑入侵者。漏洞扫描软件能够获得具体的漏洞信息,利用这些漏洞信息,入侵者能够轻易地访问系统、获得非授权信息,甚至是获得整个系统的控制权限。而对于管理人员,通过漏洞扫描软件获得的信息能够帮助自己及时对系统进行加固和防御,让入侵者无机可乘。
1、Nmap
Nmap是一个网络探测和安全扫描程序,使用这个软件可以扫描大型的网络,以获取那台主机正在运行及提供什么服务等信息。Nmap支持很多扫描技术,例如UDP、TCPconnect()、TCPSYN(半开扫描)、FTP代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。Nmap还提供了一些高级的特征,例如,通过TCP/IP协议栈特征探测操作系统类型、秘密扫描、动态延时、重传计算和并行扫描,通过并行ping扫描探测关闭的主机、诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射)、碎片扫描,以及灵活的目标和端口设定。
(1)安装
Nmap的安装很简单,Linux各发行版本上通常都已经安装了Namp。这里首先用“nmap-v”查看当前系统所安装的nmap版本号:
#nmap-v
StartingnmapV.4.00.(www.insecure.org/nmap/)
……
由于目前系统所安装的Nmap为4.00,不是最新版本,因此要首先从http://www.insecure.org/nmap/下载最新版本的源代码。目前最新版本为Nmap-5.5.tar.bz2,该文件为源代码压缩包,需要用bzip2进行解压缩。我们将该文件下载并保存在/root/nmap下,以root用户进行安装。
#bzip2–cdnmap-5.5.tar.bz2∣tarxvf-
该命令将Nmap源代码解压缩至目录nmap-5.5。
进入该目录进行配置:
#./configure
配置结束后用make命令进行编译:
#make
编译结束后用makeinstall进行安装:
#makeinstall
(2)使用
◆各种扫描模式与参数
首先需要输入要探测的主机IP地址作为参数。假设一个LAN中有两个节点:192.168.12.1和192.168.12.2
#nmap192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:24CST
Interestingportson192.168.12.1:(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:4B(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)
Scannedin22.882seconds
上面是对目标主机进行全面TCP扫描的结果,显示了监听端口的服务情况,这一基本操作不需要任何参数。但是,由于在扫描过程中建立了完整的TCP连接,主机可以很容易地监测到这类扫描。该命令是参数开关-sT的缺省。
-sS选项可以进行更加隐蔽地扫描,并防止被目标主机检测到,但此方式需要用户拥有root权限。-sF、-sX和-sN则可以进行一些超常的扫描。假如目标主机安装了过滤和日志软件来检测同步空闲字符SYN,那么-sS的隐蔽作用就失效了,此时可以采用-sF(隐蔽FIN)、-sX(XmasTree)及-sN(Null)方式扫描。
这里需要注意的是,由于微软的实现方式不同,对于运行Win2003,Vista等NT的机器FIN、Xmas或Null的扫描结果都是将端口关闭,由此可作为推断目标主机运行Windows操作系统的一种方法。以上命令都需要有root权限。-sU选项是监听目标主机的UDP,而不是默认的TCP端口。尽管在Linux机器上有时慢一些,比如,输入上面的例子:
#nmap-sU192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:28CST
Interestingportson192.168.12.1:
(The1472portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
135/udpopenmsrpc
137/udpopen∣filterednetbios-ns
138/udpopen∣filterednetbios-dgm
445/udpopen∣filteredmicrosoft-ds
500/udpopen∣filteredisakmp
3456/udpopen∣filteredIISrpc-or-vat
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)scannedin4.381seconds
◆操作系统探测
使用-O选项可推断目标主机的操作系统,既可与上述的命令参数联合使用,也可单独调用。Nmap利用TCP/IP“指纹”技术来推测目标主机的操作系统。还使用前面的例子:
#nmap-O192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2416:03CST
Interestingportson192.168.12.1:
(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Devicetype:generalpurpose
Running:MicrosoftWindows95/98/ME∣NT/2K/XP
OSdetails:MicrosoftWindowsMillenniumEdition(Me),Windows2000ProorAdvancedServer,orWindowsXP
Nmapruncompleted–1IPaddress(1hostup)scannedin3.398seconds
Nmap提供了一个OS数据库,上例中检测到了该主机运行的操作系统为Windows系列操作系统,可能为Windows98、Windows2000Pro,或者为Windewsvista/Windows7等。
◆更进一步的应用
除了一次只扫描一个目标主机外,还可以同时扫描一个主机群,比如“nmap–sT–O203.187.1.1-50”就可以同时扫描并探测IP地址在203.187.1.1到203.187.1.50之间的每一台主机。当然这需要更多的时间,耗费更多的系统资源和网络带宽,输出结果也可能很长。所以,可以使用下面命令将结果重定向输送到一个文件中:
#nmap-sT-O-oNtest.txt202.96.1.1-50
另外的一些命令参数选项如下:
-I进行TCP反向用户认证扫描,可以透露扫描用户信息;
-iR进行随机主机扫描;
-p扫描特定的端口范围;
-v长数据显示,“-v-v”是最长数据显示;
-h快捷帮助。
下面给一个综合了上述参数的例子:
#nmap-sS-p23,80-oNftphttpscan.txt203.187.53.50-100
◆Nmap图形用户界面
Nmap有一些图形用户前端,比如,NmapFE(GTK界面)网址为
http://codebox.net/nmapfe.html;Kmap(Qt/KDE前端)网址为
http://www.edotorg.org/kde/kmap/;KNmap(KDE前端)网址为
http://pages.infinit.net/rewind/。
2.Nessus
Nessus是一个功能强大而又易于使用的远程安全扫描器,它有免费版本和收费版本,而且更新很快,几乎适应所有常见操作系统。安全扫描器的功能是对指定网络进行安全检査,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为Client/Sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了plug-in的体系,允许用户加入执行特定功能的插件,该插件可以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称之知识库,其中保存了前面进行检査的结果。检查的结果可以HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。在未来的新版本中,Nessus将会支持速度更快的安全检查,而且这种检查将会占用更少的带宽,其中可能会用到集群的技术以提高系统的运行效率。
Nessus的主要优点在于其采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况;它是免费的,比起商业的安全扫描工具,如ISS具有价格优势;扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞。
Nessus的安全检查完全是由plug-ins的插件完成的。目前Nessus提供的安全检查插件已达18类多800d个,而且这个数量还会增加。比如,在uselessservices类中,Echoportopen和Chargen插件用来测试主机是否易受到已知的echo-chargen攻击;在backdoors类中,PcAnywhere插件用来检查主机是否运行了BO、PcAnywhere等后台程序。更可喜的是,其中包括了对最近肆虐一时的CodeRed及其变种的检测。
在Nessus主页中不但详细介绍了各种插件的功能,还提供了解决问题的相关方案。有关plug-in的详细说明,请参看http://cgi.nessus.org/plugins/dump.php3?viewby=family。
除了这些插件外,Nessus还为用户提供了描述攻击类型的脚本语言,进行附加的安全测试,这种语言称为Nessus攻击脚本语言(NSSL),用它来完成插件的编写。在客户端,用户可以指定运行Nessus服务的机器、使用的端口扫描器、测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数。这样用户在远端就可以设置Nessus的工作配置。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。
(1)安装软件
Nessus由客户端和服务器端两部分组成。首先看服务器端的安装。安装时注意由于屏蔽了我国IP,所以下载界面会跳到注册页面中,无法现在,大家要使用只要跳过这层就可以,你懂得。然后还需要激活码(激活码:6C1A-F33B-60A0-5000-4001)注册成功后方可使用。
◆创建用户
Nessus服务端有自己的用户资料库,其中对每个用户都做了约束。用户可以在整个网络范围内通过nessusd服务端进行安全扫描。用nessus-adduser命令创建用户,根据命令提示创建用户。
Nessus-adduser是Nessusd的附带工具,安装完毕后,在安装目录下会产生这个程序。
◆配置Nessus服务端程序Nessusd
Nessusd的配置文件为nessusd.conf,位于/usr/local/etc/nessus/目录下,一般情况下不需要改动。这里还需要运行nessus-mkcert来生成服务器证书,可以按照默认设置。
◆启动nessusd
在上面的准备工作完成后,以root用户身份用下面的命令启动服务端:
#netssusd–D
Loadingtheplugins...3570(outof5830)
载入完所有插件后将以系统服务进程的身份运行。
(2)使用
按照上面的方法启动Nessus的服务进程后,就可以执行客户端程序进行安全扫描了。
首先提示登录到Nessus服务器,在NessusHost后面输入Nessus服务器所在的Linux机器IP地址,端口号及加密方式不需要做改动。输入用户名,单击“Login”登录。系统会询问是否接受服务器证书,选择第一项,然后单击“YES”接受证书。
一旦登录成功,“Login”按钮会变为“Logout”,对话框的旁边还会有connected的提示。登录后就可以进行相应的漏洞扫描了。下面通过选择Plug-in插件来进行相应的安全扫描。下面是插件所能检査的攻击方法,单击每个攻击方法会弹出一个对话框介绍它的危害性及解决方法。然后选择扫描的目标主机,单击“targetselection”,在窗口中输入目标地址,如上面所输入的192.168.12.2。这里作者用的是一个内部地址,还可以用192.168.6.0/24的方式指定扫描192.168.6.1到192.168.6.255整个网段。
设置完毕后,单击“startscan”开始进行扫描。根据选择的插件数量、扫描的范围扫描时间不等。扫描结束后会有扫描结果。
在窗口的中列出了所有被扫描的网络、主机和主机相应的端口,Nessus给出了安全漏洞的严重等级、问题的产生原因及解决方法。最后,扫描结果还能够以XML、ASCⅡ、HTML、NSR等多种格式存盘,做为参考资料供以后使用。
入侵检测系统(IDS)
1、原理
入侵检测系统(IntrusionDetectionSystem,IDS)是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统监测攻击行为,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检测被认为是防火墙之后的第二道安全闸门,能够在不影响网络性能的情况下能对网络进行监测,防止或减轻上述的网络威胁。
入侵检测系统有很多种,从部署的位置可以分为以下几种:
◆基于网络的系统,它放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
◆基于主机的系统,其经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。
◆最近出现的一种系统,位于操作系统的内核之中,并监测系统的最底层行为。
从检测的技术手段上可以分为以下两种:
◆误用检测是将收集到的数据与预先确定的特征知识库里的各种攻击模式进行比较,如果发现有攻击特征,则判断有攻击。特征知识库是将己知的攻击方法和技术的特征提取出来建立的一个知识库。
◆异常检测则是对收集到的数据进行统计分析。它首先假定所有的攻击行为与正常行为不同,这样发现与正常行为有不同时,则判断存在攻击。它需要建立正常行为的标准,如登录时错误次数为多少时视为正常。
相比而言,误用检测的原理简单,很容易配置,特征知识库也容易扩充。但它存在一个致命的弱点――只能检测到已知的攻击方法和技术。异常检测可以检测出已知的和未知的攻击方法和技术,但是其问题在于正常行为标准只能采用人工智能、机器学习算法等来生成,并且需要大量的数据和时间,同时,由于现在人工智能和机器学习算法仍处于研究阶段。所以现在的入侵检测系统大多采用误用检测的分析方法。
下面给介绍的Snort就是一个基于网络的、采用误用分析技术的入侵检测系统。
2.Snort的安装、配置和使用
Snort是一个开放源码的网络入侵检测系统。Snort的功能包括采用Libpcap捕获数据链路层的分组,并进行协议栈分析(TCP/IP协议)。Snort在内部使用Misused检测模型进行入侵检测,即通过一个完整的入侵规则库来实时匹配,并探测入侵行为。这个规则库非常全面,包含了探测缓冲区溢出、端口扫描、CGI攻击等,并处于不断更新当中。Snort可以轻易发现使用Nmap或Trin00等进行的攻击。Snort也允许用户方便地编写和加人自己的规则。日志可以存储成Tcpdump二进制格式、ASCⅡ格式或数据库格式(包括MYSQL、PostgreSQL),甚至XML格式。
(1)安装
在http://www.snort.org/可以下载最新版本的Snort,目前最新稳定版本是2.8.0,下载文件为Snort-2.8.0RC2.tar.gz。安装的方法同上面介绍的几个软件类似。依次经过解压缩后运行“./configure”、“make”和“makeinstall”。要注意的是,Snort需要libpcap库支持,如果尚未安装可以到http://www.tcpdump.org/下载libpcap源代码进行安装,目前最新版本为0.8.3。
执行文件安装完毕后还需要下载最新的规则文件。Snort采用基于误用的检测技术,需要按照预先定义好的规则同网络当中的流量进行比对,特征一致时认为有入侵事件发生,从而釆取相应动作,因此保持最新的特征库对Snort来说尤其重要。将下载到的规则文件解压缩,得到rules目录,其内容为按照攻击类型和攻击目标划分为不同规则文件。
(2)配置
Snort依靠命令启动时指定的配置文件进行配置,通常是/etc/snort.conf,可以编辑Snort配置文件源文件所在目录下/etc/snort.conf来进行配置。
#vi/root/snort/snort-2.8.0RC2/etc/
其中需要修改的地方如下:
VarHOME_NETyournetwork
VarRULE_PATH/etc/snort/rules
Preprocessorhttp_inspect:global\
此外还可以根据需要选择规则集合当中的规则文件,例如:
iis_unicode_map/etc/snort/rules/Unicode.map1252
Include/etc/snort/rules/reference.config
Include/etc/snort/rules/classification.config
yournetwork即为所釆用的IP地址段,规则文件所在目录为刚才下载规则文件解压缩所在目录。
(3)使用
输入下面代码:
#snort–D–c/root/snort/snort-2.8.0RC2/etc/snort.conf
其中,-D参数表明Snort以后台进程方式运行,-c指名所釆用的配置文件位置。启动之后可以查看/var/log/snort/alert内容来检査结果。
#vialert
[**][1:469:3]ICMPPINGNMAP[**]
[Classification:AttemptedInformationLeak][Priority:2]
01/28-17:30:33.813923192.168.100.122->202.12.37.7
ICMPTTL:50TOS:0x0ID:36381IpLen:20Dgmlen:28
Type:8Code:0ID:51597Seq:14292ECHO
[Xref=>http://www.whitehats.com/info/IDS162]
[**][122:1:0](portscan)TCPPortscan[**]
01/28-17:30:33.916752192.168.12.1->202.12.37.7
PROTO255TTL:0TOS:0x0ID:0iplen:20Dgmlen:182DF
由上可以看到,告警文件中记录了网络当中一次Nmap端口扫描的行为。
防火墙系统
1、基本原理
防火墙适用于用户网络系统的边界,属于用户网络边界的安全保护设备。所谓网络边界即是釆用不同安全策略的两个网络连接处,比如用户网络和互联网之间连接、跟其它业务往来单位的网络连接及用户内网不同部门之间的连接等。防火墙的目的就是在网络连接之间建立一个安全控制点,通过允许、拒绝或重新定向经过防火墙的数据流,实现对进、出内部网络的服务和访问的审计和控制。
目前,有很多厂商提供各种类型的防火墙平台,通常有几种常用的分类方法:
按照产品形式可分为硬件防火墙和软件防火墙;
按照性能可以分为百兆级和千兆级防火墙;
按照操作模式可分为透明模式、路由模式和NET(网络地址转换);
按照部署位置可分为边界防火墙和主机/个人防火墙;
l按照OSI模型层次可分为包过滤防火墙、状态检测防火墙和应用代理防火墙。
其中包过滤防火墙是最基本的防火墙,由一些基本路由设备通过内部的网络访问控制规则实现。它一般是工作在网络层,但在现代网络结构中,为了实现负载均衡/高可用性,也可能在网络第二层实现。包过滤防火墙的访问控制功能由一套规则集组成,这些规则集是基于网络报文的以下信息实现的源地址、目的地址、流量类型、网络会话特征或物理端口。
下面介绍的iptables就是一款优秀的网络层防火墙用他能很容易构建一个功能强大、性能优异的防火墙系统。
2.iptables的安装、配置和使用
Netfilter/iptablesIP数据包过滤系统是一个功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做数据包过滤决策时防火墙所遵循和组成的规则。这些规则存储在专用的数据包过滤表中,而这些表则集成在Linux内核中。Linux2.4内核提供的防火墙系统实际上由netfilter和iptables组成。netfilter组件是内核的一部分,由一些数据包过滤表组成、这些表包含内核用来控制数据包过滤处理的规则集。iptables组件是一种工具,运行在用户空间,它用来维护存储在内核中的数据包过滤表中的规则。通过iptalbes可以方便地修改、添加和删除规则,也可以构建自己的定制规则。内核根据规则来决定,对来自某些源、前往某些目的地或具有某些协议类型的数据处理,可以是ACCEPT(允许该数据包通过)、DROP(丢弃该数据包),或者是REJECT(阻塞数据包)。
根据规则处理的数据包类型,可以将规则分组在不同链中。处理入站数据包的规则被添加到INPUT链中;处理出站数据包的规则被添加到OUTPUT链中;处理正在转发的数据包的规则被添加到FORWARD链中。这三个链是基本数据包过滤表中内置的缺省主链。
此外,还有其它许多可用链类型,如PREROUTING和POSTROUTING,以及提供用户定义的链。每个链都可以有一个策略,它定义“缺省目标”,也就是要执行的缺省操作,当数据包与链中的任何规则都不匹配时,执行此操作。
建立规则并将链放在适当的位置之后,就可以开始进行真正的数据包过滤工作。这时内核空间从用户空间接管工作。当数据包到达防火墙时,内核先检查数据包的头信息,尤其是数据包的目的地,这个过程称为路由。
如果数据包源自外界并前往系统,而且防火墙是打开的,那么内核将它传递到内核空间数据包过滤表的INPUT链。如果数据包源自系统内部或系统所连接的内部网上的其它源,并且此数据包要前往另一个外部系统,那么数据包被传递到OUTPUT链。类似的,源自外部系统并前往外部系统的数据包被传递到FORWARD链。接下来,将数据包的头信息与它所传递到的链中的每条规则进行比较,看它是否与某条规则全匹配,如果数据包与某条规则匹配,那么内核就对该数据包执行由该规则的目标指定的操作。但是,如果数据包与这条规则不匹配,那么它将与链中的下一条规则进行比较。最后,如果数据包与链中的任何规则都不匹配,那么内核将参考该链的策略来决定如何处理该数据包。
(1)安装
通常的Linux发行版本都支持iptalbes,很多情况下它已经随着操作系统而被安装。如果在安装操作系统时没有选择防火墙支持,那么需要重新编译内核才能使用iptables。对于如何重新编译内核,这里就不再赘述。关于iptables的安装可以参看iptables使用手册,或者相应How-to文档http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.html
(2)配置
下面介绍iptalbes的常用参数。
◆对规则的操作
加入(append)一个新规则到一个链(-A)的最后。
在链内某个位置插入(insert)一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace)一条规则(-R)。
在链内某个位置删除(delete)一条规则(-D)。
删除(delete)链内第一条规则(-D)。
◆指定源地址和目的地址
通过“――source/--src/-s”可以指定源地址(这里的/表示或者的意思,下同),通过“—destination/--dst/-s”可以指定目的地址。有四种方法可以指定IP地址:使用完整的域名,如www.buaa.educn;使用IP地址,如192.168.1.1;用X.X.X.X/X.X.X.X指定一个网络地址,如192.168.1.0/255.255.255.0;
用X.X.X.X/X指定一个网络地址,如192.168.1.0/24,这里的24表明了子网掩码的有效位数。
◆指定网络接口
使用”—in-interface/-i”或“—out-interface/-o”来指定网络接口。
◆指定协议及端口
通过“――protocol/-p”选项来指定协议,如果是UDP和TCP协议,还可使用“—source-port/--sport”和“—destination-port/--dport”来指明端口。
关于防火墙的具体应用,这里限于篇幅就不详细介绍,在以后的文章中会以一个具体的例子来说明如何利用iptables的防火墙和网络地址转换(NAT)功能来提供一个安全、稳定、可靠的Internet接入。
小结
Linux系统以其强大的功能和开放的平台,为许多安全工具提供支持。除了以上列举到的Nmap、Nessue、Snort、iptables等软件,将这些软件都集成在一起的工具包有BT4/5 以及后续我给大家介绍的Ossim平台。但掌握这些工具的原理、配置和使用对使用Ossim这个工具非常重要。
本文出自 “李晨光原创技术博客” 博客,请务必保留此出处http://chenguang.blog.51cto.com/350944/857907
Linux常用的安全工具
Linux常用的安全工具
“工欲善其事,必先利其器”。作为一个合格的系统管理员,要应对可能发生的安全事件,掌握Linux下各种必须的安全工具是首要大事。本文主要介绍Linux上常用的安全工具,例如,Nmap、Snort、Nesseu等安装、使用和维护知识。通过这些工具管理人员能够了解其系统目前存在的安全隐患、入侵者可能利用的漏洞,及时发现入侵,并构造一个坚固的防御体系将入侵拒之门外。
一、安全信息收集软件
对于系统管理员来说,了解和掌握系统当前的安全状态是做到“知己”的第一个步骤。安全信息收集软件就是用来收集目前系统安全状态的有力工具。端口扫描软件和漏洞扫描软件是常用的信息收集软件。入侵者通常通过端口扫描软件来掌握系统开放端口,运行服务器软件版本和操作系统版本等相关信息。而对于管理人员,通过这些软件可以让管理人员从入侵者的角度来审视系统,并且能够根据这些信息进行相应的配置和修改来迷惑入侵者。漏洞扫描软件能够获得具体的漏洞信息,利用这些漏洞信息,入侵者能够轻易地访问系统、获得非授权信息,甚至是获得整个系统的控制权限。而对于管理人员,通过漏洞扫描软件获得的信息能够帮助自己及时对系统进行加固和防御,让入侵者无机可乘。
1、Nmap
Nmap是一个网络探测和安全扫描程序,使用这个软件可以扫描大型的网络,以获取那台主机正在运行及提供什么服务等信息。Nmap支持很多扫描技术,例如UDP、TCPconnect()、TCPSYN(半开扫描)、FTP代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。Nmap还提供了一些高级的特征,例如,通过TCP/IP协议栈特征探测操作系统类型、秘密扫描、动态延时、重传计算和并行扫描,通过并行ping扫描探测关闭的主机、诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射)、碎片扫描,以及灵活的目标和端口设定。
(1)安装
Nmap的安装很简单,Linux各发行版本上通常都已经安装了Namp。这里首先用“nmap-v”查看当前系统所安装的nmap版本号:
#nmap-v
StartingnmapV.4.00.(www.insecure.org/nmap/)
……
由于目前系统所安装的Nmap为4.00,不是最新版本,因此要首先从http://www.insecure.org/nmap/下载最新版本的源代码。目前最新版本为Nmap-5.5.tar.bz2,该文件为源代码压缩包,需要用bzip2进行解压缩。我们将该文件下载并保存在/root/nmap下,以root用户进行安装。
#bzip2–cdnmap-5.5.tar.bz2∣tarxvf-
该命令将Nmap源代码解压缩至目录nmap-5.5。
进入该目录进行配置:
#./configure
配置结束后用make命令进行编译:
#make
编译结束后用makeinstall进行安装:
#makeinstall
(2)使用
◆各种扫描模式与参数
首先需要输入要探测的主机IP地址作为参数。假设一个LAN中有两个节点:192.168.12.1和192.168.12.2
#nmap192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:24CST
Interestingportson192.168.12.1:(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:4B(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)
Scannedin22.882seconds
上面是对目标主机进行全面TCP扫描的结果,显示了监听端口的服务情况,这一基本操作不需要任何参数。但是,由于在扫描过程中建立了完整的TCP连接,主机可以很容易地监测到这类扫描。该命令是参数开关-sT的缺省。
-sS选项可以进行更加隐蔽地扫描,并防止被目标主机检测到,但此方式需要用户拥有root权限。-sF、-sX和-sN则可以进行一些超常的扫描。假如目标主机安装了过滤和日志软件来检测同步空闲字符SYN,那么-sS的隐蔽作用就失效了,此时可以采用-sF(隐蔽FIN)、-sX(XmasTree)及-sN(Null)方式扫描。
这里需要注意的是,由于微软的实现方式不同,对于运行Win2003,Vista等NT的机器FIN、Xmas或Null的扫描结果都是将端口关闭,由此可作为推断目标主机运行Windows操作系统的一种方法。以上命令都需要有root权限。-sU选项是监听目标主机的UDP,而不是默认的TCP端口。尽管在Linux机器上有时慢一些,比如,输入上面的例子:
#nmap-sU192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:28CST
Interestingportson192.168.12.1:
(The1472portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
135/udpopenmsrpc
137/udpopen∣filterednetbios-ns
138/udpopen∣filterednetbios-dgm
445/udpopen∣filteredmicrosoft-ds
500/udpopen∣filteredisakmp
3456/udpopen∣filteredIISrpc-or-vat
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)scannedin4.381seconds
◆操作系统探测
使用-O选项可推断目标主机的操作系统,既可与上述的命令参数联合使用,也可单独调用。Nmap利用TCP/IP“指纹”技术来推测目标主机的操作系统。还使用前面的例子:
#nmap-O192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2416:03CST
Interestingportson192.168.12.1:
(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Devicetype:generalpurpose
Running:MicrosoftWindows95/98/ME∣NT/2K/XP
OSdetails:MicrosoftWindowsMillenniumEdition(Me),Windows2000ProorAdvancedServer,orWindowsXP
Nmapruncompleted–1IPaddress(1hostup)scannedin3.398seconds
Nmap提供了一个OS数据库,上例中检测到了该主机运行的操作系统为Windows系列操作系统,可能为Windows98、Windows2000Pro,或者为Windewsvista/Windows7等。
◆更进一步的应用
除了一次只扫描一个目标主机外,还可以同时扫描一个主机群,比如“nmap–sT–O203.187.1.1-50”就可以同时扫描并探测IP地址在203.187.1.1到203.187.1.50之间的每一台主机。当然这需要更多的时间,耗费更多的系统资源和网络带宽,输出结果也可能很长。所以,可以使用下面命令将结果重定向输送到一个文件中:
#nmap-sT-O-oNtest.txt202.96.1.1-50
另外的一些命令参数选项如下:
-I进行TCP反向用户认证扫描,可以透露扫描用户信息;
-iR进行随机主机扫描;
-p扫描特定的端口范围;
-v长数据显示,“-v-v”是最长数据显示;
-h快捷帮助。
下面给一个综合了上述参数的例子:
#nmap-sS-p23,80-oNftphttpscan.txt203.187.53.50-100
◆Nmap图形用户界面
Nmap有一些图形用户前端,比如,NmapFE(GTK界面)网址为
http://codebox.net/nmapfe.html;Kmap(Qt/KDE前端)网址为
http://www.edotorg.org/kde/kmap/;KNmap(KDE前端)网址为
http://pages.infinit.net/rewind/。
2.Nessus
Nessus是一个功能强大而又易于使用的远程安全扫描器,它有免费版本和收费版本,而且更新很快,几乎适应所有常见操作系统。安全扫描器的功能是对指定网络进行安全检査,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为Client/Sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了plug-in的体系,允许用户加入执行特定功能的插件,该插件可以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称之知识库,其中保存了前面进行检査的结果。检查的结果可以HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。在未来的新版本中,Nessus将会支持速度更快的安全检查,而且这种检查将会占用更少的带宽,其中可能会用到集群的技术以提高系统的运行效率。
Nessus的主要优点在于其采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况;它是免费的,比起商业的安全扫描工具,如ISS具有价格优势;扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞。
Nessus的安全检查完全是由plug-ins的插件完成的。目前Nessus提供的安全检查插件已达18类多800d个,而且这个数量还会增加。比如,在uselessservices类中,Echoportopen和Chargen插件用来测试主机是否易受到已知的echo-chargen攻击;在backdoors类中,PcAnywhere插件用来检查主机是否运行了BO、PcAnywhere等后台程序。更可喜的是,其中包括了对最近肆虐一时的CodeRed及其变种的检测。
在Nessus主页中不但详细介绍了各种插件的功能,还提供了解决问题的相关方案。有关plug-in的详细说明,请参看http://cgi.nessus.org/plugins/dump.php3?viewby=family。
除了这些插件外,Nessus还为用户提供了描述攻击类型的脚本语言,进行附加的安全测试,这种语言称为Nessus攻击脚本语言(NSSL),用它来完成插件的编写。在客户端,用户可以指定运行Nessus服务的机器、使用的端口扫描器、测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数。这样用户在远端就可以设置Nessus的工作配置。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。
(1)安装软件
Nessus由客户端和服务器端两部分组成。首先看服务器端的安装。安装时注意由于屏蔽了我国IP,所以下载界面会跳到注册页面中,无法现在,大家要使用只要跳过这层就可以,你懂得。然后还需要激活码(激活码:6C1A-F33B-60A0-5000-4001)注册成功后方可使用。
◆创建用户
Nessus服务端有自己的用户资料库,其中对每个用户都做了约束。用户可以在整个网络范围内通过nessusd服务端进行安全扫描。用nessus-adduser命令创建用户,根据命令提示创建用户。
Nessus-adduser是Nessusd的附带工具,安装完毕后,在安装目录下会产生这个程序。
◆配置Nessus服务端程序Nessusd
Nessusd的配置文件为nessusd.conf,位于/usr/local/etc/nessus/目录下,一般情况下不需要改动。这里还需要运行nessus-mkcert来生成服务器证书,可以按照默认设置。
◆启动nessusd
在上面的准备工作完成后,以root用户身份用下面的命令启动服务端:
#netssusd–D
Loadingtheplugins...3570(outof5830)
载入完所有插件后将以系统服务进程的身份运行。
(2)使用
按照上面的方法启动Nessus的服务进程后,就可以执行客户端程序进行安全扫描了。
首先提示登录到Nessus服务器,在NessusHost后面输入Nessus服务器所在的Linux机器IP地址,端口号及加密方式不需要做改动。输入用户名,单击“Login”登录。系统会询问是否接受服务器证书,选择第一项,然后单击“YES”接受证书。
一旦登录成功,“Login”按钮会变为“Logout”,对话框的旁边还会有connected的提示。登录后就可以进行相应的漏洞扫描了。下面通过选择Plug-in插件来进行相应的安全扫描。下面是插件所能检査的攻击方法,单击每个攻击方法会弹出一个对话框介绍它的危害性及解决方法。然后选择扫描的目标主机,单击“targetselection”,在窗口中输入目标地址,如上面所输入的192.168.12.2。这里作者用的是一个内部地址,还可以用192.168.6.0/24的方式指定扫描192.168.6.1到192.168.6.255整个网段。
设置完毕后,单击“startscan”开始进行扫描。根据选择的插件数量、扫描的范围扫描时间不等。扫描结束后会有扫描结果。
在窗口的中列出了所有被扫描的网络、主机和主机相应的端口,Nessus给出了安全漏洞的严重等级、问题的产生原因及解决方法。最后,扫描结果还能够以XML、ASCⅡ、HTML、NSR等多种格式存盘,做为参考资料供以后使用。
入侵检测系统(IDS)
1、原理
入侵检测系统(IntrusionDetectionSystem,IDS)是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统监测攻击行为,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检测被认为是防火墙之后的第二道安全闸门,能够在不影响网络性能的情况下能对网络进行监测,防止或减轻上述的网络威胁。
入侵检测系统有很多种,从部署的位置可以分为以下几种:
◆基于网络的系统,它放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
◆基于主机的系统,其经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。
◆最近出现的一种系统,位于操作系统的内核之中,并监测系统的最底层行为。
从检测的技术手段上可以分为以下两种:
◆误用检测是将收集到的数据与预先确定的特征知识库里的各种攻击模式进行比较,如果发现有攻击特征,则判断有攻击。特征知识库是将己知的攻击方法和技术的特征提取出来建立的一个知识库。
◆异常检测则是对收集到的数据进行统计分析。它首先假定所有的攻击行为与正常行为不同,这样发现与正常行为有不同时,则判断存在攻击。它需要建立正常行为的标准,如登录时错误次数为多少时视为正常。
相比而言,误用检测的原理简单,很容易配置,特征知识库也容易扩充。但它存在一个致命的弱点――只能检测到已知的攻击方法和技术。异常检测可以检测出已知的和未知的攻击方法和技术,但是其问题在于正常行为标准只能采用人工智能、机器学习算法等来生成,并且需要大量的数据和时间,同时,由于现在人工智能和机器学习算法仍处于研究阶段。所以现在的入侵检测系统大多采用误用检测的分析方法。
下面给介绍的Snort就是一个基于网络的、采用误用分析技术的入侵检测系统。
2.Snort的安装、配置和使用
Snort是一个开放源码的网络入侵检测系统。Snort的功能包括采用Libpcap捕获数据链路层的分组,并进行协议栈分析(TCP/IP协议)。Snort在内部使用Misused检测模型进行入侵检测,即通过一个完整的入侵规则库来实时匹配,并探测入侵行为。这个规则库非常全面,包含了探测缓冲区溢出、端口扫描、CGI攻击等,并处于不断更新当中。Snort可以轻易发现使用Nmap或Trin00等进行的攻击。Snort也允许用户方便地编写和加人自己的规则。日志可以存储成Tcpdump二进制格式、ASCⅡ格式或数据库格式(包括MYSQL、PostgreSQL),甚至XML格式。
(1)安装
在http://www.snort.org/可以下载最新版本的Snort,目前最新稳定版本是2.8.0,下载文件为Snort-2.8.0RC2.tar.gz。安装的方法同上面介绍的几个软件类似。依次经过解压缩后运行“./configure”、“make”和“makeinstall”。要注意的是,Snort需要libpcap库支持,如果尚未安装可以到http://www.tcpdump.org/下载libpcap源代码进行安装,目前最新版本为0.8.3。
执行文件安装完毕后还需要下载最新的规则文件。Snort采用基于误用的检测技术,需要按照预先定义好的规则同网络当中的流量进行比对,特征一致时认为有入侵事件发生,从而釆取相应动作,因此保持最新的特征库对Snort来说尤其重要。将下载到的规则文件解压缩,得到rules目录,其内容为按照攻击类型和攻击目标划分为不同规则文件。
(2)配置
Snort依靠命令启动时指定的配置文件进行配置,通常是/etc/snort.conf,可以编辑Snort配置文件源文件所在目录下/etc/snort.conf来进行配置。
#vi/root/snort/snort-2.8.0RC2/etc/
其中需要修改的地方如下:
VarHOME_NETyournetwork
VarRULE_PATH/etc/snort/rules
Preprocessorhttp_inspect:global\
此外还可以根据需要选择规则集合当中的规则文件,例如:
iis_unicode_map/etc/snort/rules/Unicode.map1252
Include/etc/snort/rules/reference.config
Include/etc/snort/rules/classification.config
yournetwork即为所釆用的IP地址段,规则文件所在目录为刚才下载规则文件解压缩所在目录。
(3)使用
输入下面代码:
#snort–D–c/root/snort/snort-2.8.0RC2/etc/snort.conf
其中,-D参数表明Snort以后台进程方式运行,-c指名所釆用的配置文件位置。启动之后可以查看/var/log/snort/alert内容来检査结果。
#vialert
[**][1:469:3]ICMPPINGNMAP[**]
[Classification:AttemptedInformationLeak][Priority:2]
01/28-17:30:33.813923192.168.100.122->202.12.37.7
ICMPTTL:50TOS:0x0ID:36381IpLen:20Dgmlen:28
Type:8Code:0ID:51597Seq:14292ECHO
[Xref=>http://www.whitehats.com/info/IDS162]
[**][122:1:0](portscan)TCPPortscan[**]
01/28-17:30:33.916752192.168.12.1->202.12.37.7
PROTO255TTL:0TOS:0x0ID:0iplen:20Dgmlen:182DF
由上可以看到,告警文件中记录了网络当中一次Nmap端口扫描的行为。
防火墙系统
1、基本原理
防火墙适用于用户网络系统的边界,属于用户网络边界的安全保护设备。所谓网络边界即是釆用不同安全策略的两个网络连接处,比如用户网络和互联网之间连接、跟其它业务往来单位的网络连接及用户内网不同部门之间的连接等。防火墙的目的就是在网络连接之间建立一个安全控制点,通过允许、拒绝或重新定向经过防火墙的数据流,实现对进、出内部网络的服务和访问的审计和控制。
目前,有很多厂商提供各种类型的防火墙平台,通常有几种常用的分类方法:
按照产品形式可分为硬件防火墙和软件防火墙;
按照性能可以分为百兆级和千兆级防火墙;
按照操作模式可分为透明模式、路由模式和NET(网络地址转换);
按照部署位置可分为边界防火墙和主机/个人防火墙;
l按照OSI模型层次可分为包过滤防火墙、状态检测防火墙和应用代理防火墙。
其中包过滤防火墙是最基本的防火墙,由一些基本路由设备通过内部的网络访问控制规则实现。它一般是工作在网络层,但在现代网络结构中,为了实现负载均衡/高可用性,也可能在网络第二层实现。包过滤防火墙的访问控制功能由一套规则集组成,这些规则集是基于网络报文的以下信息实现的源地址、目的地址、流量类型、网络会话特征或物理端口。
下面介绍的iptables就是一款优秀的网络层防火墙用他能很容易构建一个功能强大、性能优异的防火墙系统。
2.iptables的安装、配置和使用
Netfilter/iptablesIP数据包过滤系统是一个功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做数据包过滤决策时防火墙所遵循和组成的规则。这些规则存储在专用的数据包过滤表中,而这些表则集成在Linux内核中。Linux2.4内核提供的防火墙系统实际上由netfilter和iptables组成。netfilter组件是内核的一部分,由一些数据包过滤表组成、这些表包含内核用来控制数据包过滤处理的规则集。iptables组件是一种工具,运行在用户空间,它用来维护存储在内核中的数据包过滤表中的规则。通过iptalbes可以方便地修改、添加和删除规则,也可以构建自己的定制规则。内核根据规则来决定,对来自某些源、前往某些目的地或具有某些协议类型的数据处理,可以是ACCEPT(允许该数据包通过)、DROP(丢弃该数据包),或者是REJECT(阻塞数据包)。
根据规则处理的数据包类型,可以将规则分组在不同链中。处理入站数据包的规则被添加到INPUT链中;处理出站数据包的规则被添加到OUTPUT链中;处理正在转发的数据包的规则被添加到FORWARD链中。这三个链是基本数据包过滤表中内置的缺省主链。
此外,还有其它许多可用链类型,如PREROUTING和POSTROUTING,以及提供用户定义的链。每个链都可以有一个策略,它定义“缺省目标”,也就是要执行的缺省操作,当数据包与链中的任何规则都不匹配时,执行此操作。
建立规则并将链放在适当的位置之后,就可以开始进行真正的数据包过滤工作。这时内核空间从用户空间接管工作。当数据包到达防火墙时,内核先检查数据包的头信息,尤其是数据包的目的地,这个过程称为路由。
如果数据包源自外界并前往系统,而且防火墙是打开的,那么内核将它传递到内核空间数据包过滤表的INPUT链。如果数据包源自系统内部或系统所连接的内部网上的其它源,并且此数据包要前往另一个外部系统,那么数据包被传递到OUTPUT链。类似的,源自外部系统并前往外部系统的数据包被传递到FORWARD链。接下来,将数据包的头信息与它所传递到的链中的每条规则进行比较,看它是否与某条规则全匹配,如果数据包与某条规则匹配,那么内核就对该数据包执行由该规则的目标指定的操作。但是,如果数据包与这条规则不匹配,那么它将与链中的下一条规则进行比较。最后,如果数据包与链中的任何规则都不匹配,那么内核将参考该链的策略来决定如何处理该数据包。
(1)安装
通常的Linux发行版本都支持iptalbes,很多情况下它已经随着操作系统而被安装。如果在安装操作系统时没有选择防火墙支持,那么需要重新编译内核才能使用iptables。对于如何重新编译内核,这里就不再赘述。关于iptables的安装可以参看iptables使用手册,或者相应How-to文档http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.html
(2)配置
下面介绍iptalbes的常用参数。
◆对规则的操作
加入(append)一个新规则到一个链(-A)的最后。
在链内某个位置插入(insert)一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace)一条规则(-R)。
在链内某个位置删除(delete)一条规则(-D)。
删除(delete)链内第一条规则(-D)。
◆指定源地址和目的地址
通过“――source/--src/-s”可以指定源地址(这里的/表示或者的意思,下同),通过“—destination/--dst/-s”可以指定目的地址。有四种方法可以指定IP地址:使用完整的域名,如www.buaa.educn;使用IP地址,如192.168.1.1;用X.X.X.X/X.X.X.X指定一个网络地址,如192.168.1.0/255.255.255.0;
用X.X.X.X/X指定一个网络地址,如192.168.1.0/24,这里的24表明了子网掩码的有效位数。
◆指定网络接口
使用”—in-interface/-i”或“—out-interface/-o”来指定网络接口。
◆指定协议及端口
通过“――protocol/-p”选项来指定协议,如果是UDP和TCP协议,还可使用“—source-port/--sport”和“—destination-port/--dport”来指明端口。
关于防火墙的具体应用,这里限于篇幅就不详细介绍,在以后的文章中会以一个具体的例子来说明如何利用iptables的防火墙和网络地址转换(NAT)功能来提供一个安全、稳定、可靠的Internet接入。
小结
Linux系统以其强大的功能和开放的平台,为许多安全工具提供支持。除了以上列举到的Nmap、Nessue、Snort、iptables等软件,将这些软件都集成在一起的工具包有BT4/5 以及后续我给大家介绍的Ossim平台。但掌握这些工具的原理、配置和使用对使用Ossim这个工具非常重要。
本文转自 李晨光 51CTO博客,原文链接:http://blog.51cto.com/chenguang/857907,如需转载请自行联系原作者
LR常见问题整理
1.LoadRunner录制脚本时为什么不弹出IE浏览器?
当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。
LR11 无法弹出ie浏览器,或者ie已停止工作问题的解决方法汇总 . 1)系统属性,高级选项卡下,性能里面,单击设置按钮,修改数据执行保护为“只为关键windows程序和服务启用数据执行保护”,然后,重启; 上述方法我采用了第一个,重启后问题解决。
2)若果被测试系统在本机上,访问地址为:http://127.0.0.1:端口/程序名称,需要将URL改为:http://localhost:端口/程序名称,这样就可以产生脚本了。这个现象我也觉得很奇怪,不知道到底为什么?但是,改成(http://localhost:端口/程序名称)的确可以产生脚本了,呵呵!
3)lr本身的稳定性,再加上在系统中安装软件时有可能会将其注册表修改掉,尤其是安装dotnet2005的时候,导致lr录制脚本时不能弹出IE页面。其实单就这个问题来看,主要是LR的注册信息被修改,无法找到IE路径。如何重新注册LR呢?关闭loadrunner和IE,在lr的安装目录(例如D:\Program Files\Mercury\LoadRunner\bin)下,单击register_vugen.bat文件,然后重启loadrunner,尝试录制。4)IE->工具->internet选项->高级 ,把"启用第三方浏览器扩展"前面的勾取消掉,再"确定".重启一次IE也许可以解决;
5)如果实在被逼无奈。请重装系统,重装loadrunner。
2.录制Web脚本时,生成的脚本中存在乱码该如何解决?
录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。
3.HTML-based script与URL-based script的脚本有什么区别?
使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。
通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。
4.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?
由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。
进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。
检查执行结果时推荐使用web_reg_find方法。
5.运行时的Pacing设置主要影响什么?
Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。
根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。
6.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?
Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。
7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?
造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。
解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。
8.VuGen支持Netscape的客户证书吗?
不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。
9.VuGen会修改录制浏览器中的代理服务器设置吗?
会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。
10.在LoadRunner脚本如何输出当前系统时间?
LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。
调用语句与返回值如下示例:
typedef long time_t;
Action()
{
time_t t;
lr_message(“Time in seconds since 1/1/70: %ld\n”,time(&t));
lr_message(“System time and date: %s”,ctime(&t));
}
输出结果为:
Time in seconds since 1/1/70: 1185329968
System time and date:Wed Jul 25 10:19:28 2007
11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?
这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。
由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。
12.虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?
如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。
另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。
13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。
进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。
14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%\system32\csrss.exe bjectDirectory=\Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off MaxRequestThreads=16
SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。
(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。
通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。
15. 录制脚本为空 LR录制是客户端与服务器的数据交互,只有在有交互的时候才可以录制到脚本。 1)交互方式不一样,通过客户端的server进行交互,在scrīpt中选择最后一个track processes created as COM local servers [选择scrīpt里的最后一个选项]. 2. 非客户端与服务器的交互的一种操作,在页面上点前进或后退,如果页面是从缓存中取出来的,那么也就没有和服务器数据交互,所以也录制的为空脚本。 [windows注册表中禁用缓存]. 3. 协议选择错误,b/s不一定走http协议,还可能是https(http+ssl)。 [最基础的错误].录制出错。 2) 选择internet里选项里的连接里的局域网设置的代理不能选,因为LR在录制的时候会动态选择。 3) 网页里的恶意代码,检测的时候响应LR录制脚本[用工具检测恶意代码,然后卸载恶意代码,eg:Ad_Aweare].
4)防病毒软件和防火墙,在录制时暂时关闭。 5) 因为LR自身原因报错或者有些脚本不能录制下来[录制是最好选用scrīpt view,此时会报错,但能写下脚本,是因为LR无法解析,可以手工修改,而tree view 就直接停止了。 16. Loadrunner不支持默认的浏览器 有时候,我们上网的时候,不小心会将某个浏览器设置为默认的浏览器,而我们不知道,这个时候,我们用loadrunner进行录制的时候,会提示loadrunner不支持系统设置的默认的浏览器,因此,需要我们重新选择浏览器,我们可以利用Reconding optiom中的Browser选项设置支持的浏览器,我们还可以利用下面的方法,将IE设置为默认的浏览器,因为loadrunner是支持IE的。设置方法如下: 在IE“工具(T)”菜单→“Interner选项”→“程序”选项卡里,确保“检查Internet Explorer是否为默认的浏览器”选项打上√。然后在你启动IE时,如果IE非默认浏览器就会出现提示窗是否把IE设置为默认。
一、Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤: 1、修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000。run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数。 2、办法一不能解决的情况下,解决办法如下: 设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对windows系统起作用,此法来自zee的资料。 二、问题描述Connection reset by peer. 这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。 解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”。 三、问题描述connection refused 这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同。 1、首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于oracle数据库连接数最大值。 2、如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数、端口数,还有tcp连接等待时间间隔大小,wiodows类似,只不过windows修改注册表,具体修改注册表中有TcpTimedWaitDelay和MaxUserPort项,键值在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\]。因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占满后,就会出现上面的错误。执行netstat –na命令,可以看到打开了很多端口。所以就调整TCP的time out。即在最后一个端口还没有用到时,前面已经有端口在释放了。 1,这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。 2,也可以把MaxUserPort调大(如果这个值不是最大值的话)。 四、问题描述open many files 问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法: 1、修改操作系统的文件数限制,aix下面修改limits下的nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改。 2、方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大。修改前记住备份此文件,防止修改出错。 3、linux上可以通过ulimit –HSn 4096来修改文件打开数限制,也可以通过ulimit -a 来查看。 4、linux上可以通过lsof -p pid | wc -l 来查看进程打开的句柄数。 五、问题描述has shut down the connection prematurely 一般是在访问应用服务器时出现,大用户量和小用户量均会出现。 来自网上的解释: 1>应用访问死掉 小用户时:程序上的问题。程序上存在数据库的问题 2>应用服务没有死 应用服务参数设置问题 例如: 在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25% Java连接池的大小设置,或JVM的设置等 3>数据库的连接 在应用服务的性能参数可能太小了 数据库启动的最大连接数(跟硬件的内存有关) 以上信息有一定的参考价值,实际情况可以参考此类调试。 如果是以上所说的小用户时:程序上的问题。程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和600用户时曾出现过jvm锯齿型的变化,上升下降都很快,这应该是不太正常的。 --------------------------------------- 实际测试中,可以用telent 站点看看是否可以连接进去,可以通过修改连接池中的连接数和适当增加应用内存值,问题可以解决。 六、问题描述Failed to connect to server 这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个网络延迟严重,解决办法: 1、修改负载机器注册表中的TcpTimedWaitDelay减小延时和MaxUserPort增加端口数。注:这将增加机器的负荷。 2、检查网络延迟情况,看问题出在什么环节。 建议为了减少这种情况,办法一最好测试前就完成了,保证干净的网络环境,每个负载机器的压力测试用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就很小了。 七、问题描述Overlapped transmission of request to ... WSA_IO_PENDING 这个问题,解决方法: 1、方法一,在脚本前加入web_set_sockets_option("OVERLAPPED_SEND", "0"),禁用TTFB细分,问题即可解决,但是TTFB细分图将不能再使用,附图。 2、方法二,可以通过增加连接池和应用系统的内存,每次增加25%。 八、问题描述Deleted the current transaction ... since response time is not accurate 这个问题不多遇见,一般出现在压力机器上发生ping值为负数(AMD双核CPU),可以重新启动pc机或者打补丁,附图。 九、问题描述HTTP Status-Code=500 (Internal Server Error) for 1、应用服务当掉,重新启动应用服务。 2、当应用系统处于的可用内存处于阀值以下时,出现HTTP Status-Code=500的概率非常高,此时只要增加应用系统的内存,问题即可解决。 十、问题描述Failed to transmit data to network: [10057]Socket is not connected 这个错误是由网络原因造成的,PC1和PC2上面都装了相同的loadrunner 9.0,且以相同数量的虚拟用户数运行相同的业务(机器上的其他条件都相同),PC1上面有少部分用户报错,PC2上的用户全部执行通过。 十一、问题描述 Error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and reset at the end of iteration number 1 解决方法:web_reg_save_param位置放错了,应该放到请求页面前面。 十二、问题描述 通过Controler调用远程代理时报错,Error: CCI security error:You are running under secure mode and the function system is not allowed in this mode. 解决方法:在代理开启的时候,去掉勾选防火墙选项。 1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。 错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。 错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。 解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。 错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do 错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。 如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。 解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。 如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。 最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout”或者“HTTP-request receive”的值。 2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。 错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。 错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。 解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。 3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。 错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。 错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。 解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。 错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。 错误分析:服务器碰到了意外情况,使其无法继续回应请求。 解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。 4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。 错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979] Action.c(41): web_submit_form. highest severity level was “ERROR”,0 body bytes, 0 header bytes [MsgId: MMSG-27178]” 这时在tree view中看不到此组件的相关URL。 错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。 解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。 5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。 错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。 错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。 解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。 6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。 错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。 错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version=”1.0″encoding=”zh_cn” ?>,所以才会有此错误提示。 解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。 1. error:missing newline in d:\loadrunner\name.dat 场景执行时报error:missing newline in d:\loadrunner\name.dat 第二次执行不报 两个解决办法: 第一:如果参数不是很多的话,不要打开记事本去编辑参数,就直接在LR提供的参数的表格中进行编辑即可。 第二:如果参数很多超过100条的话。在记事本中编辑好了之后,记着在最后一个参数后打个回车,让鼠标的光标移动到下一行。 2.load generator is currently running the maximum number of vuser of this type 使用的是loadrunner8.0,有10000个用户的web的license,global的有10个。 在测试的时候发现running vuser到达1000以后就不能再提高,后面的vuser就会出错。错误是“The load generator is currently running the maximum number of vuser of this type”. 已经可以排除是load generator机器本身资源的问题。因为换了性能比较强的酷睿2还是同样的问题,CPU和memory都有空闲。 解决办法: 在load generator中有一个Vuser limits tab,可以设置running user的最大数目。 即设置 load generator----Details------Vuser limits ----Other Vusers 的最大参数 3.LoadRunner 常见问题: (1)sofeware caused connction:这种情况,一般是脚本有问题,或者loadrunner有问题。解决方法:重新启动机器,或者重新录制脚本,估计是loadrunner的bug。 (2)cannot connect to server:无法连接到服务器。这种情况是服务器的配置有问题,服务器无法承受过多的并发连接了。需要优化服务器的配置, 如操作系统采用windows 2003 server, 优化tomcat配置:maxThreads="500" minSpareThreads="400" maxSpareThreads="450"。但是tomcat 最多支持500个并发访问 优化apache配置: ThreadsPerChild 1900 MaxRequestsPerChild 10000 其他的错误如: Action.c(10): Error -27791: Server has shut down the connection prematurely HTTP Status-Code=503 (Service Temporarily Unavailable) 一般都是由于服务器配置不够好引起的,按照问题(2)处理,如果仍旧不行,需要优化硬件和调整程序了。 Apache问题: (1) File does not exist: C:/Apache/htdocs/favicon.ico: 这个问题是apache,htdocs目录没有favicon.ico文件引起的,该文件是网站的图标,仅在firefox,myIE等浏览器出现。 (2) 图片无法显示: 配置apache后,却无法显示图片。 解决方法:把程序的图片,按照程序结构copy到apache的htdocs目录下。 (3) 无法处理请求: 当我们输入 ***.do 命令后,apache确返回错误信息,而连接tomcat却没有问题。原因是没有把.do命令转发给tomcat处理。解决方法如下: 在apache配置文件中配置如下内容: DocumentRoot "C:/Apache/htdocs" JkMount .jsp loadbalancer JkMount .do loadbalancer 4、Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤: 1、 修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在controler组件的option的run time setting中设置相应的参数; 2、 办法一不能解决的情况下,解决办法如下: 设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对windows系统起作用。 5、问题描述Connection reset by peer 这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。 解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”; 6、问题描述connection refused 这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同; 1、首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加 25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于oracle数据库连接数最大值; 2、如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数,还有 tcp连接等待时间间隔大小,wiodows类似,只不过wendows修改注册表,具体修改方法查手册,注册表中有TcpDelayTime项; 7、问题描述open many files 问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法: 1、修改操作系统的文件数限制,aix下面修改limits下的nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改; 2、方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大;修改前记住备份此文件,防止修改出错; 8、问题描述has shut down the connection prematurely 一般是在访问应用服务器时出现,大用户量和小用户量均会出现; 来自网上的解释: 1> 应用访问死掉 小用户时:程序上的问题。程序上存在数据库的问题 2> 应用服务没有死 应用服务参数设置问题 例如: 在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25% Java连接池的大小设置,或JVM的设置等 3> 数据库的连接 在应用服务的性能参数可能太小了 数据库启动的最大连接数(跟硬件的内存有关) 以上信息有一定的参考价值,实际情况可以参考此类调试。 如果是以上所说的小用户时:程序上的问题。程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和600用户时曾出现过jvm锯齿型的变化,上升下降都很快,这应该是不太正常的; 9、问题描述Failed to connect to server 这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个网络延迟严重,解决办法: 1、 修改负载机器的tcpdelaytime注册表键值,改小; 2、 检查网络延迟情况,看问题出在什么环节; 建议为了减少这种情况,办法一最好测试前就完成了,保证干净的网络环境,每个负载机器的压力测试用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就很小了。 10.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。 错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。 错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。 解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。 错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。 错误分析:服务器碰到了意外情况,使其无法继续回应请求。 解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。 11.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。 错误现象:Action.c(41): Error -27979: Requested form. not found [MsgId: MERR-27979] Action.c(41): web_submit_form. highest severity level was "ERROR",0 body bytes, 0 header bytes [MsgId: MMSG-27178]" 这时在tree view中看不到此组件的相关URL。 错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这时则使用“URL-based script”模式进行录制。 解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。 12.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。 错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。 错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。 解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。
1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。
启动浏览器,打开Internet选项对话框,切换到高级标签,去掉"启用第三方浏览器扩展(需要重启动)"的勾选,然后再次运行VuGen即可解决问题
还有就是点击“我的电脑-》属性-》高级-》性能设置-》数据执行保护-》选择“仅为基本WINDOWS程序和服务启用DEP”
提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。
2.录制Web脚本时,生成的脚本中存在乱码该如何解决?
录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选"Support charset",然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。
3.HTML-based script与URL-based script的脚本有什么区别?
使用"HTML-based script"的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用"URL-based script"模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。
通常,基于浏览器的Web应用会使用"HTML-based script"模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用"URL-based script"模式进行录制。
4.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?
由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。
进入"Run-time Setting"对话框,依次进入"Internet Protocol→Preferences",勾选Checks下的"Enable Image and text check"选项即可。
检查执行结果时推荐使用web_reg_find方法。
5.运行时的Pacing设置主要影响什么?
Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。
根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。
6.运行时设置Log标签中,如果没有勾选"Enable logging",则手工消息可以发送吗?
Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。
7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示"Error:server returned an incorrectly formatted SOAP response"。这时说明原因引起的?
造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0" encoding="zh_cn"?>,因此会有上面的错误提示。
解决方法:把"LR80WebservicesFPI_setup.exe"和"lrunner_web_sevices_path_1.exe"两个补丁打上即可解决。
8.VuGen支持Netscape的客户证书吗?
不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。
9.VuGen会修改录制浏览器中的代理服务器设置吗?
会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。
10.在LoadRunner脚本如何输出当前系统时间?
LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。
调用语句与返回值如下示例:
typedef long time_t;Action(){ time_t t; lr_message("Time in seconds since 1/1/70: %ld\n",time(&t)); lr_message("System time and date: %s",ctime(&t));}
输出结果为:
Time in seconds since 1/1/70: 1185329968System time and date:Wed Jul 25 10:19:28 2007
11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?
这种现象多是由于在"Run-time Setting"的"Browse Emulation"的设置中,勾选了"Simulate a new user on each iteration"及其下面的选项"Clear cache on each iteration"这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。
由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。
12.虚拟客户脚本"Run-time Setting"中的线程和进程运行方式的区别?
如果选择"Run Vuser as a process",则场景运行时会为每一个虚拟用户创建一个进程;选择"Run Vuser as a thread"则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。
另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的"Expert Mode",然后将Tools菜单下的"Options>General"标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。
13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。
进入"Run-time Setting"对话框后,依次进入"Internet Protocol→Preference"。然后点击"Options…"按钮,进入高级设置对话框,可以修改各类超时设置的默认值。
14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:
System\CurrentControlSet\Control\Session Manager\SubSystems
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%\system32\csrss.exe bjectDirectory=\WindowsSharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2ProfileControl=Off MaxRequestThreads=16SharedSection=1024,3072,512
关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。
(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。
通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。15.Controller中设置了用户并发数量,但是运行时为何初始化的用户数量少于实际数量?
主要时设置问题。在Tools→options→Run-time setting中可以设置每次最多初始化的虚拟用户。如果需要100个并发用户,则将该值设置为大于100的数值。另外,注意LoadRunner相关协议License的更新,确保使用的License能够允许所需要的并发用户数量。
16.如何让场景的用户执行发生错误继续运行,以保证不间断进行压力测试?
用VuGen打开虚拟用户脚本后,进入"Run-time Settings"对话框后,依次进入"General→Miscellaneous",可以看到Miscellaneous设置中关于"Error Handling"的配置。勾选"Continue on error"即可让虚拟用户发生错误继续运行。
17.为什么.NET虚拟用户有时不能在远程主机执行?
主要时LoadRunner的版本问题。根据笔者的经验,如果是Microsoft Visual Studio 2005开发的虚拟用户,同时LoadRunner客户端的版本低于8.1,执行Controller的主机将会发生错误。
因此要想正确的运行Microsoft Visual Studio 2005开发的.NET虚拟用户,客户端最好装8.1以上的版本,Controller的主机则安装8.0和8.1两个版本均可。此外,产生压力的 LoadRunner客户端上预先应该安装.NET运行环境,如果Microsoft Visual Studio 2005开发的是.NET虚拟用户,则应该安装Microsoft .NET Framework SDK v2.0。
18.测试分析结果中会统计Action时间,而实际上可能并不须要这些数据,如何只显示自己定义的用户事务?
进入脚本的运行时设置,依次进入General→Miscellaneous。默认情况下,自动事务配置"Automatic Transactions"下有两个选项:第一个是把脚本的Action部分定义为一个事务;第二个时把脚本的每一部分定义为一个事务。去掉这两个勾选后,测试结果将会只显示自己定义的用户事务。
19.测试结果中,Summary和平均事务响应时间图里的各个事务的最大值、平均值、最小值为什么显示不一样?
主要是受采样时间的影响。Summary里的事务平均响应时间是根据整个场景执行过程得到的数据计算所得,最大值与最小值也是从整个场景中得到的。平均事务响应时间图主要时按照LoadRunner分析出来的采样频率来获取事务响应时间的最大值与最小值,然后计算平均值。
可以通过"Set Granularity"来修改平均事务响应时间图的采样频率。如果把"Granularity"设为场景执行时间,则统计结果将会一致。
20.统计结果中的总点击量Total Hits时用户的鼠标点击次数吗?
Total Hits不时按照用户的鼠标点击次数来计算的,而是按照各个虚拟客户端向后台发起的总的请求数来进行统计的。例如在向服务器请求的一个页面中,如果该页面包含5个图片,用户只要单击鼠标就可以访问该页面,而单个虚拟用户在LoadRunner访问的点击量为1+5=6次。
21.有些Web测试结果分析图(例如每秒返回页面数)在测试结果分析图中无法看到,如何进行配置?
用VuGen打开虚拟用户脚本后,进入"Run-time Settings"对话框后,依次进入"Internet Protocol>Preference",可以看到一些Web性能图配置。
勾选上面得选项后,Controller将会在测试执行过程中生成数据,然后可在Analysis中查看相应的性能结果分析图。
注:转载需注明出处及作者。
流柯
ISAPI_Rewrite中文手册
参考:http://blog.csdn.net/fanxiaojie119/article/details/5353186
第一章:软件介绍ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2兼容性图表这一节。ISAPI_Rewrite最重要的功能:? ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行为,使仅仅拷贝.htaccess文件就完成配置移植成为功能。(要想阅读更多关于与mod_rewrite的兼容性,请参阅3.2兼容性图表这一节。)? 正则表达式支持灵活而强大的配置。? 极速而且容易升级的纯C++代码。? 真正的分布式配置:实时监控服务器全局级别、虚拟主机(网站)级别、目录级别的.htaccess文件。? 隔离性:用户级配置只影响本地用户环境,从而使ISAPI_Rewrite成为Web主机提供商的理想解决方案。重要的应用示例:? 搜索引擎优化。? 一台Web服务器的代理内容经过另一台web服务器。? 防止内容被吸血(盗链)。? 阻断特定主机、反向链接或者烦人的搜索机器人。? 内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例? 为群集式服务器架构模拟负载均衡。定价资料? 45天的试用期? 单机版99美元? ISAPI_Rewrite精简版是免费的。在这里可以看到受限的细节说明。? 大宗采购可议折扣。
2.1系统要求ISAPI_Rewrite可以被安装在下列操作系统中:? Windows 2000 with IIS 5? Windows XP with IIS 5.1? Windows Server 2003 with IIS 6.0? Windows Vista with IIS 7.0? Windows Server 2008 with IIS 7.0在安装ISAPI_Rewrite之前,操作系统中必须先安装IIS。32位和64位的Windows版本都是支持的,但是你必须下载32位版和64位版两种不同的安装包。Windows Installer 2.0必须运行安装程序。你可以从微软的网站上下载到最新版本的Windows Installer。在Windows Vista和Windows Server 2008上安装ISAPI_Rewrite,还必须先安装下面两个模块(默认情况下这两个模块是不安装的)? ISAPI过滤器? ISAPI 扩展
2.2安装程序在运行安装包之前请先阅读系统要求部分。下载并安装某个版本的ISAPI_Rewrite.msi,依照安装向导的说明操作。安装过程是自动的,并有自我描述。ISAPI_Rewrite在自动安装过程中必须重启IIS。下列服务必须被重启:IISADMIN、W3SVC。不需要手工把任何ISAPI筛选器或者扩展加入到网站或者全局列表中。它能够在安装和配置过程中自动完成。命令行安装ISAPI_Rewrite也能够通过命令行进行后台安装。请使用以下命令行语法来安装:
msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIONNAME=Name
用命令行来后台反安装ISAPI_Rewrite请使用下面的语法:
msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes
2.3手工安装要手工安装ISAPI_Rewrite的话,你必须下载不同的手工安装包包含所有必须的文件。ISAPI_Rewrite精简版不支持手工安装。你可以安装全部功能或者仅仅安装它们中的一部分。手工安装包包含下列文件:? ISAPI_Rewrite.dll - 这是ISAPI筛选器本身。? ISAPI_RewriteProxy.dll - 这是为代理操作的ISAPI扩展模块必不可少的。? license.rtf - EULA的产品许可证。? ISAPI_Rewrite.chm - .文档文件。? httpd.conf - 全局配置文件示例。安装ISAPI_Rewrite,首先你必须在你在IIS系统中注册ISAPI_Rewrite.dll作为ISAPI筛选器。按默认ISAPI_Rewrite.dll文件是用来作为全局ISAPI筛选器的。而且它还能够被安装到某个特定的网站里,你需要记住在同一时间段里只有一个ISAPI_Rewrite.dll实例能够加载到一个IIS工作进程里,这意味着如果你决定把ISAPI_Rewrite的ISAPI筛选器单独地安装到每个站点里的话,你必须把这些站点切换高隔离模式,从而为这些网站产生独立的工作进程。如果你需要在每个站点上分别安装ISAPI_Rewrite,我们通常会建议改为在整个IIS上全局地安装它。在Window 2000,Window XP 和Windows Server 2003中注册ISAPI 筛选器,无论是整个IIS服务器要用它还是个别WEB网站要用它,都要用IIS 的MMC管理单元来把ISAPI_Rewrite.dll添到ISAPI筛选器列表。在Windows Vista和Windows Server 2008中首先你需要安装可选IIS组件:万维网服务、应用程序开发功能、ISAPI筛选器。如果你需要代理服务器功能,你还需要将ISAPI_RewriteProxy.dll注册为ISAPI扩展来侍服文件扩展名“*. rwhlp”。在不同的IIS版本中要求不同的操作。请参阅你管理的IIS版本的文档来了解如何注册一个新的ISAPI扩展并把它映射到IIS系统的文件扩展名上。在Windows Vista和windows server 2008首先必须安装可选的IIS组件:万组网服务、应用程序开发功能、ISAPI筛选器。使用短路径名(8.3模式)作为ISAPI_RewriteProxy.dll的模块路径,如果路径里有一个空格字符,IIS载入这个模块时将失败。把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目录下并编辑它。把下列两行内容放到httpd.conf文件中以注册ISAPI_Rewrite 产品:
RegistrationName=Your registration nameRegistrationCode=REG-CODE-PROVIDED-FROM-HELICON
依照“运行ISAPI_Rewrite的权限需求”这一部分的说明来检查文件系统权限。
2.4反安装反安装程序会删除所有安装程序所生成的文件、从管理元库中注销筛选器,并删除所有由安装程序所添加的其它管理元库变化。如果用户决定在反安装过程中保留用户文件的话,下列用户数据文件在反安装后会被留下来。
文件名
说明
Program Files/Helicon/ISAPI_Rewrite/httpd.conf
用户规则的主配置文件
Program Files/Helicon/ISAPI_Rewrite/error.log
包含错误日志的文件
Program Files/Helicon/ISAPI_Rewrite/rewrite.log
包含重写日志的文件
.htaccess (various folders)
用户创建的含有规则的配置文件
“删除用户创建的文件”的选项在将反安装过程中提供给用户。如果启用这个选项则卸载程序也将删除位于Program Files文件夹里用户创建的文件。 .htaccess文件不会被删除。要用命令行后台卸载ISAPI_Rewrite,请使用下面的语法:
msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes
2.5运行ISAPI_Rewrite所需的权限在一个干净的默认Windows系统上自动安装ISAPI_Rewrite不要求任何权限调整。但是一些其它产品比如说Plesk、IIS锁定工具的安装,等等,可能收紧服务器的安全性,并妨碍ISAPI_Rewrite的正常运行。下面是ISAPI_Rewrite的权限需求的列表单子:在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,筛选器运行在System帐户下的inetinfo.exe进程中。那个system帐户至少得被授予放置ISAPI_Rewrite安装文件的那个文件夹的“读取”和“目录浏览”的权限。我们还建议给予system帐号对这个文件夹的一般修改权。这将允许生成一些包含解析或者其它错误的文件。system帐号还必须在任何包含了.htaccess文件的网站文件夹里同样被授予这些权限,否则ISAPI_Rewrite将不能加载并监视它。请稍留意ISAPI_Rewrite安装目录上的任何一点拒绝权限设置,因为在Windows 操作系统中,拒绝权限优先于任何允许权限记录。在Windows 2003的天然IIS模式(WPI模式)以及Windows Server 2008中,无论是筛选器还是代理服务都运行在每个网站相应的运行程序池的w3p.exe工作进程中,每个应用程序池都可以使用它自己的定制来配置,这可能使权限设置成了一种复杂的工作。然而,在一个正确的IIS配置中,每个使用中的定制必须是IIS_WPG组的一个成员。因此,IIS_WPG组可以被用来代替System帐号去分配前面所写的权限需求。在Windows Vista 中权限配置是和Windows 2003的配置差不多的,只是它没有IIW_WPG组。所以,所有的WPI帐号(一般Network Service是它的惟一帐号)都必须授予上述必需权限。此外,为了让代理服务功能能工作,你必须在网站属性或者运行代理服务的web应用程序的属性中给予一个“纯脚本”的执行权限。
2.6MSI的自定义行为自定义行为
自定义行为
说明
WiseAltStartup自动智能启动
为运行在延时模式中的自定义行为保存属性的当前状态。使用一个可执行文件(dll)发生在:安装、反安装。
WiseCleanup智能清理
这个行为被调用来清理上一个自定义行为所遗留下的临时文件使用一个可执行文件(dll)发生在:安装、反安装。
WiseStartup智能启动
这个行为使调用一个.dll文件或者提取必要Wisescript.exe文件和.dll文件的行为可以传递参数。使用一个可执行文件(dll)发生在: 安装、反安装
WiseUpgradeCheck智能可选择地升级
这个行为被调用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。使用一个可执行文件(dll)发生在:安装。
WiseUpgradeCheckEx智能预选升级
添加这个行为用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。使用一个可执行文件(dll)发生在:安装。
WiseGetIISVersion智能获得IIS版本
对主要的IIS版本设置属性(IISVERSION).使用一个可执行文件(dll)发生在:安装。
RegisterFilterInMetabase在管理元库中注册筛选器
这个行为添加一个命名为ISAPI_Rewrite3的全局ISAPI筛选器到IIS管理元库里IIS5, IIS6 管理元库: IIS:/LM/W3SVC/Filters/ add key ISAPI_Rewrite3IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3"使用一个可执行文件(dll)发生在:安装。
RemoveFilterFromMetabase从管理元库中删除筛选器
这个行为从IIS管理元库里移除了名为ISAPI_Rewrite3的全局ISAPI筛选器。IIS5, IIS6 管理元库: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3IIS:/LM/W3SVC/Filters/FilterLoadOrder remove"ISAPI_Rewrite3"使用一个可执行文件(dll)发生在:反安装、回滚。
AddApplicationExtension添加应用程序扩展
只用于Windows 2003机器添加ISAPI_RewriteProxy.dll到ISAPI扩展中,并使Web服务器扩展名列表中的这个ISAPI扩展名可用。IIS6管理元库: IIS:/LM/W3SVC/adds entry to the在管理元库属性 WebSvcExtRestrictionList中增加metabase property "ISAPI_Rewrite3 proxy"条目;在管理元库属性 ApplicationDependencies 增加"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;使用一个可执行文件(dll)发生在:安装。
RemoveApplicationExtension删除应用程序扩展
只用于Windows 2003从ISAPI扩展中删除ISAPI_RewriteProxy.dll,并从web服务器扩展名列表中删除这个ISAPI扩展名。IIS6管理元库: IIS:/LM/W3SVC/1.从管理元库属性 WebSvcExtRestrictionList 中删除"ISAPI_Rewrite3 proxy"条目;2.从管理元库属性 ApplicationDependencies中删除"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;使用一个可执行文件(dll)发生在:反安装、回滚。
RegisterExtensionInScriptMap在脚本映射中注册扩展
在IIS管理员库中将ISAPI_RewriteProxy.dl注册为ISAPI扩展来处理*.rwhlp文件扩展名IIS5,IIS6管理元库: IIS://LM/W3SVC/使用一个可执行文件(dll)发生在:安装。
RemoveExtensionFromScriptMap从脚本映射中删除扩展
从IIS管理元库中移除作为ISAPI扩展、用于处理*.rwhlp文件扩展名的ISAPI_Rewrite.dll的注册信息IIS5, IIS6管理元库: IIS://LM/W3SVC/使用一个可执行文件(dll)发生在:反安装、回滚。
GetServisesStatus获得服务状态
保存IISADMIN、W2WC、NNTP、SMTP 和FTP 服务的当前状态创建msi属性: [SERVICES_STATUS]使用一个可执行文件(dll)发生在: 安装、反安装。
StartServicesEx按预设开启服务
根据状态预设来启动ISADMIN、W2WC、NNTP、 SMTP 和 FTP 服务使用msi 属性: [SERVICES_STATUS]使用一个可执行文件(dll)发生在: 安装、反安装。
SaveProductID保存产品ID
如果要注册产品的话,保存REGISTRATIONNAME和REGISTRATIONCODE的属性值使用msi 属性: [REGISTRATIONNAME] , [REGISTRATIONCODE];使用文件: [INSTALLDIR]\ISAPI_Rewrite3\httpd.conf使用一个可执行文件(dll)发生在: 安装。
Check32bitMode检测32位模式
在64位系统中检查32位IIS兼容模式是否可用,从而安装正确的ISAPI筛选器版本。IIS6, IIS7使用管理元库路径: IIS://LM/W3SVC/AppPools property Enable32bitAppOnWin64;使用msi 属性:[ENABLE32BITAPPONWIN64]检查一个32位的应用程序是否能运行在一台安装了64位版本的windows的电脑上。使用javascript脚本发生在: 安装。
CheckIISModules检测IIS模块
在IIS7的机器上检查是否需要安装IsapiFilterModule和IsapiModule模块IIS7 管理元库路径:<system.webServer><globalModules><add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" /><add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" /> </globalModules></system.webServer>使用javascript脚本发生在: 安装。
AddGlobalIsapiFilter添加全局ISAPI筛选器
只用于IIS7的机器。这个行为会在IIS管理元库里添加一个命名为ISAPI_Rewrite3的全局ISAPI_Rewrite筛选器IIS7的管理元库路径:<configuration><system.webServer><isapiFilters><filters><filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false"></filter></filters></isapiFilters></system.webServer></configuration>使用JavaScript脚本发生在:安装。
DeleteGlobalIsapiFilter删除全局ISAPI过滤器
只用于IIS7的机器,这个行为会从IIS管理元库中删除名为ISAPI_Rewrite3的全局ISAPI筛选器。IIS7的管理元库路径:<configuration><system.webServer><isapiFilters><filters><filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false" ></filter></filters></isapiFilters></system.webServer></configuration>使用JavaScript脚本发生在:反安装、回滚。
AddIsapiCgiRestriction添加ISAPI CGI约束
Only for IIS7 machines register ISAPI_RewriteProxy.dll as ISAPI extension in IIS metabase.只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dl为ISAPI扩展IIS7管理元库路径:<configuration><system.webServer><security><isapiCgiRestriction><add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" /> </isapiCgiRestriction></security></system.webServer></configuration>使用JavaScript脚本发生在:安装。
DeleteIsapiCgiRestriction删除ISAPI CGI约束
只用于IIS7的机器,从IIS管理元库中删除用作ISAPI扩展的ISAPI_RewriteProxy.dll。IIS7 管理元库路径:<configuration><system.webServer><security><isapiCgiRestriction><add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" /></isapiCgiRestriction></security>使用JavaScript脚本发生在:反安装、回滚。
AddScriptMap添加脚本映射
只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dll注册为ISAPI扩展用于处理*.rwhlp文件扩展名。IIS7管理元库路径:<configuration><system.webServer><handlers><add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\ProgramFiles\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/></handlers></system.webServer></configuration>使用JavaScript脚本发生在:安装。
DeleteScriptMap删除脚本映射
只用于IIS7的机器,从IIS管理元库里去除用作ISAPI扩展以处理*.rwhlp文件扩展名的ISAPI_RewriteProxy.dll的注册IIS7管理元库路径:<configuration><system.webServer><handlers><add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\ProgramFiles\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/></handlers></system.webServer></configuration>使用JavaScript脚本发生在:反安装、回滚。
3.1基本概念
ISAPI_Rewrite提供了一个基于规则的重写引擎能飞速重写被请求的URL。它支持几乎无限量的规则和几乎无限量的附加规则条件来提供真正灵活和有效的URL处理机制。可以根据HTTP头、服务器变量、被请求的URL本身以及其它不同的条件的测试结果来对URL作出处理。URL数据处理是用一个文本配置文件来定制的,内含各种指令设置。配置分几种等级。首先是全局(服务器范围的)配置指令,放置在ISAPI_Rewrite安装目录里的一个名为httpd.conf的文件里。那里还有若干个标签可以封装应用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最后ISAPI_Rewrite支持可以放在任何网站目录里的.htaccess文件,那些文件中的规则可以应用到该位置以及它的子目录中。所有的配置文件在每次修改文件后都会被自动重载。允许用第三方程序和脚本来修改文件。在很多情况下ISAPI_Rewrite是用来重写URL的。除了重写之外,ISAPI_REWRITE能够修改、生成、删除任何其它客户端Request中的HTTP头。模块操作可以载入改写、代理、重定向或者阻断原始客户端到服务器的请求。Rewriting可能使服务器在得到了一个客户端的源请求时用一个新的URL继续请求处理。新的URL可以包括查询串部分(跟在问号后面),也可以指向任何一个完全的静态文件或者脚本(例如asp)、或者程序(例如.exe),等等。对用户和网站配置来说重写是彻底透明的。因为它Web应用程序收到请求之前在服务器内部执行。Proxying使URL经过内部处理后指向另一台服务器,并很快传递到远程服务器上(换言之,规则处理在这里中止了)。远程服务器的响应很快被传回客户端。代理服务器要求你指定完整的有效URL,以协议、包括主机名开头等等。ISAPI_Rewrite使用ISAPI扩展来处理代理请求,你可以在“代理服务器配置”这一章里读到更多信息。Redirection将发送一个带有重定向指令的即时响应(HTTP响应码为302或者说301),将网址设置为一个新的位置。您可以在重定向指令里使用绝对URL格式(这是RFC2616所要求的)将请求重定向到不同的主机、端口和协议。如果此信息被忽略, ISAPI_Rewrite将自动照当前的协议、服务器名称和目录位置提供URL。重定向指令总是导致重写引擎中止处理后面的规则序列。每个规则按它在配置文件中出现的顺序来应用。目录级配置文件从父路径开始一个接一个地处理,来自于全局配置文件的规则最先适用。在修改URL之前ISAPI_Rewrite会保存原URL到Http头,命名为X-Rewrite-URL。然后它能够在脚本中作为HTTP_X_REWRITE_URL服务器变量取回。因为在IIS里,系统变量名不能被修改,所以ISAPI_Rewrite不能提供与Apache兼容的变量名REQUEST_URI。如果你的应用程序的设计要依赖于REQUEST_URI变量,你必须修改它,用HTTP_X_REWRITE_URL变量来代替。下面是一个PHP代码补丁的示例:
if (isset($_SERVER['HTTP_X_REWRITE_URL'])){$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];}
后面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令只影响单个规则。如果一些条件需要被用于多个规则,必须重复写这些条件指令以应用到每条规则上。3.2和Apache下mod_rewrite的兼容性
这个版本的ISAPI_Rewrite是为了最大程度上保持与Apache的mod_rewrite的兼容性。这个目标已经很大程度上实现了,尽管有一些功能无法执行,因为它们和Apeach以及UNIX结构高度绑定,而且它们在IIS上执行是不敏感的。举例说明:第H条:“强制内容处理”标记不能执行,因为在IIS中内容处理的范围依赖于扩展名。或者第[NS]条:“没有子请求”标记是无意义的,因为在IIS中是没有子请求的。这里有一个完整的ISAPI_Rewrite和mod_rewrite兼容性图表。标记为绿色的功能或指令是充分支持的,黄色的功能是部分支持或计划在下一版本中支持,标示为红色的功能是不支持的。· 兼容Perl的正则表达式 (plus extended syntax) · 服务器级httpd.conf配置· 虚拟网站.htaccess配置文件· 目录.htaccess配置文件· <VirtualHost> · <Directory> · <DirectoryMatch> · <Files> · <FilesMatch> · <Location> · <LocationMatch> · AccessFileName · RewriteEngine · RewriteRule o $N 规则后向引用o %N RewriteCond 后向引用o ${mapname:key|default} o %{VARNAME} 服务器变量o '!' 取非o [C] 与下一个规则联锁o [CO=name:val:domain:lifetime:path] 设置cookie o [E=var:val] 设置环境变量o [F] 强制禁止应答o [G] 强制继续应答o [H=content-handler] 明确的内容处理 (不适用) o [L] 上一个规则标记o [N] 再次应用规则o [NC] 大小写不敏感o [NE] 不转义输出o [NS]非内部子请求o [P]代理通过o [PT] 传递通过下一个处理程序 (一直开启) o [QSA] 追加查询字符串o [R =code] 重定向o [S=num] 跳到下面第 n条规则o [T=MIME-type] 强制明确应答 MIME 类型· RewriteCond o [NC] 大小写不敏感o [OR] 逻辑并集o %{HTTP:header} o '!' 非o '<CondPattern' 大于比较符o '>CondPattern' 小于比较符o '=CondPattern' 等于比较符o '-d' 目录存在o '-f' 文件存在o '-s' 非零文件o '-l' 符号链接o '-x' 有可执行权限的文件o '-F' 通过子请求文件存在o '-U' 通过子请求URL存在· RewriteBase · RewriteMap o txt: 文本映射o rnd: 随机映射o int: 内部函数 toupper, tolower, escape, unescape o prg: 外部程序o dbm: 散列文件· RewriteLog · RewriteLogLevel · RewriteOptions · RewriteLock · AllowOverride
3.3使用环境以及处理顺序以下是这个程序文档中要被用到的使用环境的详解:server config这个标志表示该指令可以用在全局httpd.conf配置文件中,但是不能用在任何一个分区(例如<Virtualhost>或者<Directory>)内部。它不允许放在.htaccess文件中。vitrual host这意味着指令可以出现在<VirtualHost>容器内。directory这个标志表示指令在<Diretory>、<Location>、<Files>容器内可用,而且它们的正则表达式是等价的。.htaccess使用环境标为它的指令可以出现在每个目录的.htaccess文件中。记住当RewriteRule指令用在.htaccess配置文件中时,它将自动从路径中剥去本地目录前缀,只对剩下的部分应用规则。你可以使用RewriteBase指令显式地给这些规则指定一个基本路径。应用次序当同一分区内的多条指令同时适用时,理解每个分区应用的次序是很重要的,因为它会对最终效果起作用。应用次序如下所述:1.<Directory>(正则表达式除外):多个<Directory>分区可以应用于单个请求,如果多个(非正则表达式)<Directory>分区匹配了包含文档的这个目录(或者它的上级目录中的一个),则按照从短到长的匹配次序应用指令。2..htaccess文件按父目录到子目录的顺序应用。3.<Files>和<FileMatch>同时被执行。4.<Location>和<LocationMatch>也同时被执行。先应用虚拟主机外面定义的相应分区和指令,再应用<VirtualHost>分区中的分区和指令。同一时间只有一个<VirtualHost>分区可以应用给请求。较晚的分区优先于较早的那些。3.4正则表达式正则表达式语法指南是Rege++文档的一部分,由John Maddock博士友情提供,Copyright ?1998-2004,包含在《Boost license》这本书里。完整的语法说明可以在《Boost.Regex documentation》中找到。字面值所的字符都是字面值,除了“.”“*”“?”“+”“(”“)”“{”“}”“[”“]”“^”和“$”。当这些字符由“\”前导时也是字面值。一个字面值是个匹配它自己的字符。通配符点字符“.”匹配空字符和换行符以外的任何单个字符。重复重复是被重复任意次数的表达式。一个表达式跟着“*”可以被重复任意次数,包括重复零次。一个表达式跟着“+”可以被重复任意次数,但是至少重复一次。一个表达式跟着“?”可以被只重复零次或者一次。当需要明确指定重复的最低次数和最高次数时,可以用限定运算符“{}”。这样“a{2}”是字母“a”重复两次。“a{2,4}”表示字母“a”重复2到4次。“a{2,}”表示字母“a”重复2到无限多次。注意“{}”里面必须没有空格。而且它没有对上限值和下限值限定范围。所有的重复表达式参考尽可能短的前子表达式:一个单独字符,一个字符集,或者一个用“()”括起来的子表达式,举几个例子:? "ba*"匹配所有的"b","ba","baaa" 等等。? "ba+"匹配"ba"或"baaa",但是不匹配"b"。? "ba?"匹配"b"或者"ba"。? "ba{2,4}"匹配"baa","baaa","baaaa"。懒惰型重复在重复之后附加一个“?”就是懒惰型的重复了。一个懒惰型的重复是指匹配尽可能短的字符串。例如:匹配HTML标记对可以使用下面这样的正则表达式:"<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>"在这种情况下$1将包含标签对之间的文本,而且是最短的匹配字符串。插入成份插入成分有两个用处——把项目编组到子表达式中,并且对生成的匹配标号。例如,表达式"(ab)*"将匹配所有的这类字符串"ababab"。所有的被插入成份标号的子匹配将可以用\N或者$N语法来回溯引用到。它允许子表达式匹配空字符串,子表达式以1为开始从左往右编号。子表达式0就是整个表达式。正则表达式
无标记插入有时候你需要把子表达式编组为插入成份,但是不想为这个插入成分而吐出另一个标记的子表达式。在这种情况下,一个非标记插入(?:expression)可能有用。例如,下例表达式可以创建一个非子表达式:"(?:abc)*"N择1标记当表达式可以匹配一个子表达式或另一个的时候,N择1标记起作用了。每个N择1可以用|隔开。每个N择1标记是一个最大可能性前缀子表达式,它是和重复操作符相反的行为。示例:? "a(b|c)"匹配"ab"或"ac"? "abc|def"匹配"abc"或"def"预置符一个预置符是一个可以匹配所有作为预置成员的单个字符的预置。预置字符用方括号“[”和“]”括起来,可以容纳字面值、字符序列、字符类、经整理过的对象以及等价的类。用^打头的预置声明可以排除包含的内容。示例:字面值? "[abc]"匹配"a"或"b"或"b"。? "[^abc]"匹配"a"和"b"和"c"之外的所有字符。字符序列? "[a-z]"匹配所有的从"a"到"z"的字符? "[^A-Z]"匹配所有的字符除了从"A"到"Z"的这些字符。字符类字符类用语法"[:classname:]"来表示,classname是声明过的预设值中的一个。例如:"[[:space:]]"是所有的空白占位符的预设。下表中的字符类是可用的:
alnum
所有的alpha数字字母
alpha
字母表字符[a-zA-Z]。其它字符也可以包含在内,这取决于本地环境
blank
所有的空白字符,包含回车或者空格
cntrl
所有的控制字符
digit
从0到9的数字
graph
所有的图画字符
lower
所有的小写字母[a-z],其它的字符也可以包含在内,这取决于本地环境
print
所有的印刷字符
punct
所有的标点符号
space
所有的空白占位符
upper
所有的大写字母[A-Z],其它的字符也可以包含在内,这取决于本地环境
xdigit
所有的16进字字符0~9,A-F
word
所有的词汇字符,包括字母数字外加underscore
unicode
所有的编码大于255的字符,这只对大范围字符特征类生效
这里有一些缩写法可以代替以上字符类:? \w 代替 [:word:]? \s 代替 [:space:]? \d 代替 [:digit:]? \l 代替 [:lower:]? \u 代替 [:upper:]
正则表达式
集合元素集合元素一般采用预置声明内加[.tagname.]的格式。其中tagname既可以是一个单个字符,也可以是一个集合元素名。例如:[[.a.]]等价于[a],[[.comma.]]等价于[,]。ISAPI_Rewrite支持所有的标准POSIX集合元素名,以及下面的这些字符组合:“ae”、“ch”、“ll”、“ss”、“nj”、“dz”、“lj”、任意小写、大写、首字母大写的变化组合。多个字符集合元素可以导致预置匹配一个以上的字符。例如:[[.ae.]]将匹配两个字符,但是[^[.ae.]]只会匹配一个字符。等价类等价类一般采用预置声明内加[=tagname=]的格式,其中tagname既可以是单个字符,也可以是一个集合元素的名称,它能匹配同样的主要等价类成员的字符,就跟集合元素[.tagname.]一样。一个等级类是一个相同整理的字符预设,但主要是一个等价类的字符集,其主要排序关键字都是一样的(例如,字符串通常先依字符整理,然后根据重音,然后根据大小写。主要排序键与字符相关,次要与重音相关,再次与大小写相关。如果没有等价类符合tagname,则[=tagname=]是与[.tagname.]完全一样的。Equivalence classes take the general form [=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].要在一个预设中包含字面值“-”,请这样做:使它成为开放的“[”或者“[^”后面的第一个字符、一个系列或者一个集合元素的末点,或者用一个前置的转义字符如“[\-]”。要在一个预设中包含一个字面值“[”或者“]”或者“^”,请把它们作为一个系列或者一个集合元素的末点,或者用一个前置的转义字符。行锚锚用来匹配一行开头或结尾的空串。“^”匹配行开头的空串,“$”匹配行结尾的空串。回溯引用回溯引用是引用前面已经被匹配的子表达式。这个引用是被匹配的子表达式,而不是表达式本身。回溯引用包括转义字符“\”跟着一个从1到9的数字。“\1”引用第一个子表达式,“\2”引用第二个,依次类推。举个例子,表达式“(.*)\1”匹配任何关于它的中点重复的字符串,比如说“abcabc”或者“xyzxyz”。一个对子表达式的回溯引用不参加任何匹配,匹配空字符串。在ISAPI_Rewrite中,所有的回溯引用是对整个RewriteRule和相应的RewriteCond指令是全局性相关的。RewriteRule指令中如果有RewirteCond子令的话,子匹配从相应的RewriteRule指令的第一个RewriteCond指令开始从上到下从左往右编号。向前查找向前查找有两种形式:正向前查找和负向前查找。• "(?=abc)"匹配跟在表达式"abc"后面的零字符。• "(?!abc)"匹配不跟在表达式"abc"后面的零字符。通配符下面的运算符提供了与GNU正则表达式库的兼容性。• "\w"匹配任意单个组词字符,它等价于表达式“[[:word:]]”。• "\W"匹配任意一个非组词字符,它等价于表达式“[^[:word:]]”。• "\<"匹配词头空字符串。• "\>"匹配词尾空字符串。• "\b"匹配词头或者词尾空字符串。• "\B"匹配词语中的空字符串。转义字符转义字符“\”含有多重意义:• 转义字符可以引导一个运算符,例如:回溯引用、词操作符• 转义字符可以使下面的字符正常,比如说“\*”代表一个字面值“*”,而不是重复运算符。
单个字符转义序列下面的转义序列是单个字符的别名:
转义序列
字符代码
含义
\a
0x07
信号铃记号.
\t
0x09
制表符
\v
0x0B
垂直制表符
\e
0x1B
ASCII转义字符
\0dd
0dd
八进制字符代码,其中dd是一个或多个八进制数字。
\xXX
0xXX
十六进制字符代码,其中XX是一个或多个八进制数字。
\x{XX}
0xXX
十六进制字符代码,其中XX是一个或更多十六进制数字,可选用Unicode字符。
\cZ
z-@
ASCII转义序列control-Z,其中Z是任意一个编码大于或等于“@”的编码的ASCII字符。
杂项转义序列以下提供perl的大部分兼容性,但是在\l、\L、\u和\U上有一些区别
转义序列
含义
\w
等价于 [[:word:]].
\W
等价于[^[:word:]].
\s
等价于[[:space:]]。
\S
等价于[^[:space:]]。
\d
等价于[[:digit:]]。
\D
等价于[^[:digit:]]。
\l
等价于[[:lower:]]。
\L
等价于[^[:lower:]]。
\u
等价于[[:upper:]]。
\U
等价于[^[:upper:]]。
\C
任何单个字符,等价于“.”
\X
匹配任何Unicode组合字符序列,例如“a\x0301”(字符a和一个尖角)
\Q
开始引号运算符。后面跟前的所有的内容都被当作字面值,直到发现一个\E结束运算符。
\E
结束引用运算符,终止一个由\Q开头的引用序列。
怎样得到匹配正则表达式将匹配第一个可匹配字符串。如果从给定的起始处可以匹配到不止一个字符串,则它会匹配那个能匹配得最长的字符串。如果从同一个起始处有多个合适的匹配,而且每个匹配的长度都一样,则将选择那个第一子表达式匹配得最长的匹配。如果有两个以上的匹配字符串它们的第一子表达式匹配得一样长,则比较第二子表达式匹配的长度,如此类推。注意:ISAPI_Rewrite使用比封演算法。只有表达式匹配了整个顺序串才能得到匹配结果。例如:• RewriteCond URL ^/somedir/.* #将匹配任何导向somedir目录以及它的子目录的请求,与此同时,• RewriteCond URL ^/somedir/ #只匹配somedir根目录的请求。对“病态”正则表达式的特别提示:ISAPI_Rewrite 使用了一个非常强大的来自Boost库的正则表达式引擎。但是它依然有一些局限性:有着一些“病态”的表达式,它可能会指数级地消耗匹配时间。这些都涉及到嵌套重复运算符,例如试图对N个连续字母a匹配表达式“(a*a)*b”,消耗的时间将与N2成正比。这些表达式常常能改成另一种写法来避免这种问题。例如,“(a*a)*b”可以被改写成“a*b”,解析它消耗的时间与N成正比。在多数情况下,非嵌套重复表达式消耗的时间与N2成正比,但是,如果条款是相互排斥的,则它们会在线性时间里完成匹配。在“a*b”这种情况下,每个字符将要么匹配a要么匹配b或者不匹配。相较之下,“a*a”匹配器不能告知哪个分支被采取(第一个 a还是第二个a)因此必须尝试两种。Regex可以检测出这种“病态”的正则表达式并终止和它们的匹配。这将使ISAPI_Rewrite的规则失效。当一个规则失效时,ISAPI_Rewrite将给客户端发送一个"Internal Server error - Rule Failed"的状态,以表示配置错误。
4.1AccessFileName指令
说明
设置分布式配置文件的名称
语法
AccessFileName filename [filename] ...
默认值
AccessFileName .htaccess
使用环境
server config
指定一个ISAPI_ReWrite寻求分布式配置的文件名列表。默认文件名是.htaccess。ISAPI_ReWrite只能载入它能在这个列表中找到的第一个文件。默认情况下ISAPI_ReWrite管理者会以hidden属性标记配置文件-它将防止文件被远程用户直接访问到。如果配置文件进行了任何修改,它将在下次请求服务器时自动加载。
4.2AllowOverride指令
说明
明确规定了每个目录重写的基准URL。
语法
AllowOverride All|None|directive-type [directive-type] ...
默认值
AllowOverride All
使用环境
server config, virtual host, directory
这个指令声明了在分布式.htaccess文件里的指令是否可以覆盖父级别的httpd.conf中的指令。在ISAPI_Rewrite的使用环境中,这个指令实际上控制了特定虚拟主机或者目录的.htaccess文件的可用或者不可用。目前只支持三个值:All、None和FileInfo。All和FileInfo使.htaccess文件以及它里面的整个ISAPI_Rewrite目录可用,None使所有的.htaccess文件以及目录不可用。这些目录具有继承性。这意味着如果你为一些目录或者虚拟主机指定AllowOverride none,.htaccess文件将对整个子目录树不可用。
4.4RewriteRule指令
说明
定义URL重写规则
语法
RewriteRule Pattern Substitution [flags]
使用环境
server config, virtual host, directory, .htaccess
这个指令定义了单个URL重写操作。它可能在一个配置文件中出现多次,每个实例定义一个重写URL的规则。RewriteRule指令包含URL匹配模式、替换字符串以及可选的标志设置。Pattern(模式)是一个用来匹配当前URL的Perl兼容正则表达式。当前的URL可以是原来请求的URL或者已经由优先级高的规则替改过的URL。网址从不包含协议或者主机名,从第一个斜杠字符开始(只对httpd.conf文件适用)。而且当前网址还因不同的应用配置级别而异。对于目录级配置(.htaccess文件),结尾的斜线和配置文件的目录名,会在匹配时被从URL中忽略掉。在创建正则表达式时,请阅读这个文档的正则表达式语法部分来得到更多的信息。"!"字符打头的模式将否定整个表达式。否定模式不能产生子匹配,所以你不能使用$N的替代引用。Substitution(替换)字符串指定了模式是匹配时生成URL的格式字符串。除了纯文本,它可以包括这些特殊字符。• 对Rewrite模式的回溯引用 $N• 对Rewrite模式的回溯引用 %N• 服务器变量 %{VARNAME}• 条件格式模式 ?Ntrue_string:false_string • 分组括号“(”和“)”替换字符串将所有的字符视为字面值,除了$'、'\'、'('、')','?',':'和'\'。为了字面化地读出特殊字符,它定义了用"\"引导的转义字符。下面的特殊字符是允许的。
$&
输出匹配的整个表达式。
$`
输出上一个的匹配结束到当前匹配的开始之间的文本(如果之前没有找到匹配串,则输出从开头到当前匹配的开始之间的文本)。
$'
输出当前匹配之后跟着的所有文字。
$$
输出字面值$
\a
信号铃字符
\f
表单反馈字符
\n
新行字符
\r
回车符
\t
制表符
\v
垂直制表符
\x
十六进制字符,比如说\x0D.
\x{}
一个可能的Unicode十六进制字符-例如\x{1A0}
\cx
ASCII的转义字符x,例如\c @等价于escape-@。
\e
The ASCII 转义字符
\dd
八进制字符常量,例如\10。
\l
导致下一个字符被小写输出。
\u
导致下一个字符被大写输出。
\L
导致整个后继字符串被小写输出,直到遇到\E。
\U
导致整个后继字符串被大写输出,直到遇到\E。
\E
结束\L或者\U的后续字符串
\\
单个反斜杠字符'\'
RewriteRule从父配置文件开始按照在配置文件中出现的次序应用。每个规则只有在它的Pattern匹配了一个URL而且所有连接条件(RewriteCond)都匹配时才会被应用。在该URL用Substitution完成替换之后,重写过程还在继续,一直到配置文件结束或者遇到一个用了任何停止标志的规则。在Substitution中的特殊字符串"-"(短横)意味着没有替换,而且当你需要应用该规则并留下的原始的未被染指过的URL时它是很有用的。此外,这里有一个支持的flag(标志)列表。这些标识可以改变规则的表现。与Apache完全兼容的标志被标记为绿色,不支持的标志被标记为绿色,只在 ISAPI_Rewrite中被支持的标识被标记成黄色。CU (Case Upper)把替换字符串改成大写.CL (Case Lower)把替换字符串改成小写.chain|C将当前规则与后一条规则链接起来,后一条规则只有在当前规则被匹配的情况下才能被执行。链接可以再后续链接。cookie|CO=NAME:VAL:domain[:lifetime[:path]]设置一个有指定字段的cookies头,并把它和当前请求的响应一起发送到客户端。env|E=VAR:VAL不支持,在UNIX环境中设置一个环境变量,在Windows系统中无意义。forbidden|F发送即时403 FORBIDDEN响应到客户端,停止这个请求的规则处理以及所有其他的替换处理。gone|G发送一个即时401Gone响应到客户端,停止这个请求的规则处理以及所有其他的替换过程。handler|H=Content-handler不支持,为请求明确指定了处理处理。在IIS的世界中这是可以通过重写请求的文件扩展名来实现。但是没有从Apache处理到IIS文件扩展名的直接转换方法。last|L停止这里的重写处理,不再应用当前配置文件中的其它规则。在这种情况下,后代的.htaccess文件依然能被用到。loop|LP在一个循环中重复运行当前单个规则直到它的模式以及条件不再被匹配了。循环次数被限定为200免得陷入无限循环。next|N从当前配置文件开始处重复运行重写处理。循环次数被限定为200免得陷入无限循环。nocase|NC这个标记使Pattern大小写不敏感。noescape|NE不转义输出。在ISAPI_Rewrite默认情况下,在输出中会把所有的非ANSI字符编码为十六进制数%xx。nosubreq|NS这个标识在ISAPI_Rewrite中与在Apache中含义不同。精确的转换是不可能的,但这个标志可能仍然是有用的。每当配置文件处理完成之后,URL被重写了,ISAPI_Rewrite将启动这个新的URL处理过程(与Apache相同)使它可以应用到另一个配置文件中。此标识意思是该规则只针对初始用户的请求执行,不针对已被重写过的请求执行,以防可能出现的循环。ISAPI_Rewrite限定循环重复次数为10。nounicode|NU如果设置了NU标记,从Unicode转换为UTF - 8将不会发生。所有Unicode字符会保持它的%xx格式不变。O (nOrmalize)留着用于与ISAPI_Rewrite 2.x兼容。如果使用了RewriteCompatibility2,这个指令在处理之前将URL规范化。规范化包括移除一个URL编码、错误字符,等等。同时URL的规范化将完全移除它的查询字符串。如果RewriteCompatibility2 没有被使用,URL按照默认被规范化(就如同它在mod_rewrite中所做的),此标志的含义将反转。proxy|P将结果URL强制内部处理为另一台服务器上的目标,并即时传到远程服务器上,并且,规则处理在这里中断了。远程服务器的响应将被传递回客户端。proxy需要您指定完整的URL,由协议、主机名称等开头。ISAPI_Rewrite使用ISAPI扩展来处理代理请求。你可以在代理配置章节中阅读到更多有关于此的内 容。passthrough|PT不支持或者始终支持。在IIS中结果始终传递到下一个处理qsappend|QSA追加当前查找串的数据到替换串而不是由一个替换字符串取代它。当你需要在保留原来的参数再添加更多的查询字符串参数时,可以使用它。redirect|R [=code]强制服务器用重定向指令给客户端发送一个即时响应,提供一个新的接替位置。可以选加前缀http://thishost[:thissport]/从而把URL带到一个可用的绝对形式。如果没有给出代码,将使用一个302响应(暂时性移动)。你可以选择在3XX系列范围内指定任何代码。skip|S=num如果当前的规则匹配,强制rewrite引擎跳过后面num个规则。type|T=MIME-type强制目标文件的MIME类型转换成被设定的MIME类型。这能够被用来根据一些条件设置内容类型。U (Unmangle log)无损记录。记录它原来请求的网址,而不是被重写的URL。
4.5RewriteCond指令
说明
为以下的RewriteRule定义一个条件
语法
RewriteCond TestString CondPattern
使用环境
server config, virtual host, directory, .htaccess
该指令为后面的RewriteRule,RewriteHeader或RewriteProxy指令规定了一个条件。一个规则指令前可以有一个或多个条件,规则只有在所有条件得到满足的情况下才被应用。TestString附加到纯文本可以包含下列结构。• 用语法$N回溯引用RewriteRule模式• 用语法%N回溯引用前面的RewriteCond模式• 用语法${mapname:key|default}扩展RewriteMap• 用语法%{HTTP:header}指代HTTP头值• 用语法%{NAME_OF_VARIABLE}指代服务器变量以下是可用的服务器变量列表:
HTTP_USER_AGENTHTTP_REFERERHTTP_COOKIEHTTP_FORWARDEDHTTP_HOSTHTTP_PROXY_CONNECTIONHTTP_ACCEPTREMOTE_ADDRREMOTE_HOSTREMOTE_PORTREMOTE_USERREMOTE_IDENTREQUEST_METHODSCRIPT_FILENAMEPATH_INFOQUERY_STRINGAUTH_TYPE
DOCUMENT_ROOTSERVER_NAMESERVER_ADDRSERVER_PORTSERVER_PROTOCOLSERVER_SOFTWAREAPI_VERSIONTHE_REQUESTREQUEST_URIREQUEST_FILENAMEHTTPS
TIME_YEARTIME_MONTIME_DAYTIME_HOURTIME_MINTIME_SECTIME_WDAYTIME另外,所有的IIS特有的变量都是支持的。
CondPattern指定一个应用于TestString实例的正则表达式,以下特殊值也支持:1.在正则表达式前头加“!”符号指明否定模式。2.'<CondPattern'将CondPattern作为一个纯字符串按字典顺序比较,结果比较大3.'>CondPattern'按字典顺序比较,结果比较小4.'=CondPattern'按字典顺序比较,结果相等5.'-d' 检测字符串是否存在目录。6.'-f' 检测字符串是否存在文件。7.'-s' 检测字符串是不是一个非零大小的文件。8.'-l' (链接) 不支持的,始终为false。9.'-x' (拥有可执行权限) 不支持的,始终为true。10.'-F' (存在的文件,通过子请求) 不支持,和'–f'一样。11.'-U' (存在的URL,通过子请求) 不支持的,始终为false。下面的标记也是支持的:'nocase|NC'这个标记使模式大小写不敏感。'ornext|OR' 这个标记用逻辑或而不是隐含的逻辑与结合子请求RewriteCond指令。O留用于ISAPI_Rewrite 2.x的兼容性。在处理前规范化字符串。规范化包括移除一个URL编码、错误字符,等等。同时URL的规范化将完全移除它的查询字符串。
4.6RewriteBase指令
说明
为每个目录的重写设置一个基准的URL
语法
RewriteBase URL-path
默认值
RewriteBase requested-directory-path
使用环境
directory, .htaccess
当RewriteRule指令用于每个目录的配置文件(.htaccess)时,它将自动从路径中剥去本地目录前缀,只对剩下的部分应用规则。RewriteBase指令允许你为这些规则精确指定一个基准。比如,哪部分要被剥离。和Apache的mod_rewrite不同,ISAPI_Rewrite的访问不仅仅针对于物理路径,同时还针对于虚拟路径,而且可以自动地选择正确的基准。所以这个指令只是为了兼容性原因而被保留的。URL-path可以是相对于根的路径也可以是空,空的URL-path意味着规则的基准等同于网站的根目录。
4.7RewriteProxy指令
说明
代理请求到一个远程服务器
语法
RewriteProxy Pattern Substitution [flags]
使用环境
server config, virtual host, directory, .htaccess
使结果URL被内部处理为另一台服务器上的目标,并即时传递到远程服务器,从此中断了规则处理。远程服务器的响应将被传递回客户端。代理要求您指定完整的URL,由协议,主机名称等开头。ISAPI_Rewrite使用ISAPI扩展来处理代理请求。你可以在配置代理的章节里阅读到更多。语法和操作符与RewriteRule指令是相同的。但是RewroteProxy指令支持一些额外的标记。H (preserve Host)代理模块在连接远程服务器时将使用随着源请求一起发送过来的主机头,如果没有这个标志代理服务器则将用主机名和远程服务器的端口号组成主机头。A (Add authentication headers)允许从代理服务器将一个认证信息传递到局域网服务器上,当客户端认证和代理服务器冲突时它很有用。服务模块将对一个请求的服务器变量
AUTH_TYPE,AUTH_USER,LOGON_USER,REMOTE_USER
追加相应的头
X-ISRW-Proxy-AUTH-TYPE,X-ISRW-Proxy-AUTH-USER,X-ISRW-Proxy-LOGON-USER,X-ISRW-Proxy-REMOTE-USER
到被代理的服务器。CR (use Credentials)代理模块将尝试用在URL中指定的证书身份验证登录远程服务器,或者用基本身份验证头登录远程服务器。用了这个标志,你可以在一个替换字符串中使用http://user:password@host.com/page语法作为一个URL。
4.8RewriteHeader指令
说明
重写任何请求的HTTP头
语法
RewriteHeader HeaderName: Pattern Substitution [flags]
使用环境
server config, virtual host, directory, .htaccess
这个RewriteHeader指令是RewriteRule指令中的一个很常用的变量。而且它被设计用来重写客户端的URL部分以及HTTP头的部分。技术上的RewriteRule指令,相当于RewriteHeader的URL Pattern Substitution [flag]。这个指令可用于在IIS里更多应用程序的处理之前重写、创建或者删除任何客户端请求的HTTP头。HeaderName:指定将被重写的HTTP头的名字。pattern、Substitution和flag与RewriteRule指令中都是相同的。
4.9RewriteMap指令
说明
为一个映射函数值定义一个键
语法
RewriteMap MapName MapType:MapSource
使用环境
server config, virtual host, directory, .htaccess
RewriteMap指令被用来定义一个键到值的查找功能。当你需要映射大量的值时,它会很有用的,而且它的速度远远快过用规则匹配来做到它。映射功能的性能受映射文件的大小影响微乎其微。有三种类型的映射:• txt:用一个文本文件映射• rnd:从多个可选项中产生随机值• int:内部函数MapName是这个映射功能的名字,在RewriteRule命令中被用来指定这个映射。请确保每个映射用唯一的名称定义。你可以使用以下语法在RewriteRule指令的Substitution参数中调用映射功能
${ MapName : LookupKey | DefaultValue }
如果这个结构是在Substitution中出现,ISAPI_Rewrite将在映射中查找这个键,万一找到了一个,就用它的值替换这个结构。如果什么值也没有被找到,将用可选的DefaultValue。如果没有指定DefaultValue,它将用一个空串替换。下面的标志也是支持的:‘nocase|NC’这个标志使该查找键大小写不敏感。下面是一个大小写不敏感映射文件指令的示例
RewriteMap examplemap txt:C:/path/to/file/map.txt [NC]
到MapSource文件的路径,既可以是绝对地址也可以是相对地址。相对地址将被从当前配置的文件夹开始推算,换言之,就是从这个定义映射的配置文件的路径开始推算。然后你可以在RewriteRule中如下使用这个映射:
RewriteRule ^/ex/(.*) ${examplemap:$1}
下列MapType和MapSource的组合是可用的:txt:纯文本映射,它的source是到一个可用的文本文档的windows文件系统路径。文本文档必须是如下格式的:
#This is a commentkey1 value1 #Another commentkey2 value2keyN valueN
rnd:随机查找多个值。Source是一个文本文档的路径,文本文档必须是以下格式:
#This is a commentkey1 value1|value2|value3key2 value4|value5|value6|valueN
int: 调用内部函数。 Source必须是下列预定义的内部函数之一:• toupper: 转换关键词为大写形式。• tolower:转换关键词为小写形式。• escape:把特定字符编码为十六进制。• unescape:把十六进制值编译为特定字符。
4.10RewriteLog指令
说明
设置ISAPI_Rewrite日志文件的名称
语法
RewriteLog file-path
默认值
RewriteLog installdir\rewrite.log
使用环境
server config
这个指令用来设定记录ISAPI_Rewrite动作的日志文件的文件名。示例:
Rewritelog "C:\local\path\rewrite.log"
4.11RewriteLogLevel指令
说明
设置日志级别
语法
RewriteLogLevel Level
默认值
RewriteLogLevel 0
使用环境
server config
这个指令设置日志的输出长度。默认值0表示不记日志,而最大的级别9则表示所有的动作都要记录。使用使用较高的级别值可能会降低ISAPI_Rewrite的操作速度。我们建议你当你完成规则调试之后,通过设置日志级别为零来禁用日志。
4.12RewriteOptions指令
说明
指定特殊选项
语法
RewriteOptions Options
使用环境
server config, virtual host, directory, .htaccess
这个指令可以为ISAPI_Rewrite设置特定选项。当前只有惟一一个选项可用:inherit。inherit:强迫当前配置从父级继承所有的选项和规则。这意味着来自父级配置的所有的规则将被再次执行,除非当前环境另有相应重写规则。
4.13RewriteCompatibility2指令
说明
启用或禁用ISAPI_Rewrite 2.x兼容模式
语法
RewriteCompatibility2 on|off
默认值
RewriteCompatibility2 off
使用环境
server config, virtual host, directory, .htaccess
这一指令将激活与ISAPI_Rewrite 2.x版的兼容性,将一些2.X的规则正确地翻译为3.0版本的语法。这并不意味着ISAPI_Rewrite 3将开始懂得不经修改旧的语法。如果您有针对ISAPI_Rewrite 2.X的旧设计请使用ISAPI_Rewrite提供的翻译工具将这些旧规则转化为新的语法规则。现在通过设置指令RewriteCompatibility2唯一改变的是,它将关闭网址常规前缀并删除查询字符串。 Apache的mod_rewrite将删除匹配的URL的查询字符串的这部分,相较之下ISAPI_Rewrite 2.X将匹配整个网址(包括查询字符串在内),而且[O]标记的意思将由该指令倒置。
4.14ErrorLog指令
说明
一般的错误文件的位置
语法
ErrorLog file-path
默认值
ErrorLog installdir\rewrite.log
使用环境
server config
这个指令设置存放ISAPI_Rewrite整体错误和消息的日志文件的名称。例如httpd.conf file load, .htaccess file load,等等例:ErrorLog "C:local\path\error.log"
4.15LogLevel指令
说明
设置一般的错误的日志级别
语法
LogLevel Level
默认
LogLevel warn
使用环境
server config
这个指令设置一般日志的输出长度,跟它的重写过程无关。这里有一个level的可用值列表:emerg、alert、crit、error、warm、notice、info、debug。当前的ISAPI_Rewrite日志只记录错误信息。设置LogLevel调试来解决配置文件中加载的问题。
4.16<VirtualHost>指令
说明
把应用于特定IP地或者主机的指令编组
语法
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
使用环境
server config
<VirtualHost> ... </VirtualHost>标签用来对应用到特定虚拟主机里的指令进行分组。addr的可用值为:• 特定的IP地址• 完整的域名• 字符'*'可以匹配任何主机或者特定服务器的任何端口号。例如:
RewriteEngine offAllowOverride none<VirtualHost onesite.com www.onesite.com>RewriteEngine onAllowOverride all</VirtualHost>
不要忘了在每个<VirtualHost>标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.17<Directory>指令
说明
将适用于特定的文件系统的目录和子目录的指令编组
语法
<Directory directory-path> ... </Directory>
使用环境
server config, virtual host
<Directory> ... </Directory>标签被用来对应用到特定文件系统目录以及子目录的指令进行分组。通配符?和*是可用的。正则表达式也是可用的,需要以~字符打头。对目录路径参数必须小心:它们必须字面匹配用来访问文件的文件系统路径,用于某一特定<Directory>的指令并不适用于来自同一目录下通过不同的路径的文件访问,例如通过不同的符号链接。只有完整的文件路径是被允许使用的。示例:
<Directory C:/inetpub/> AllowOverride None</Directory><Directory C:/inetpub/home/> AllowOverride FileInfo</Directory><Directory ~ "C:/inetpub/wwwroot/.*/[0-9]{3}"> # ... directives here ...</Directory>
不要忘了在每个<Directory>标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.18<DirectoryMatch>指令
说明
将适用于特定的文件系统的目录和子目录的指令编组
语法
<DirectoryMatch regex> ... </DirectoryMatch>
使用环境
server config, virtual host
<DirectoryMatch> ... </DirectoryMatch> 被用来封装一个只适用于指定的文件系统的目录和子目录的指令组。这个指令和<Directory ~> 语法相同。示例:
<DirectoryMatch "^/www/(.+/)?[0-9]{3}"> # ... directives here ... </DirectoryMatch>
不要忘了在每个< DirectoryMatch>标签中包含 RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.19<Files> 指令
说明
将应用于匹配文件名的指令包装起来
语法
<Files filename> ... </Files>
使用环境
server config, virtual host, directory, .htaccess
<File>指令以文件名限定了封装的指令的作用域。filename参数必须包含一个文件名,支持?和*以及以~字符打头的正则表达式。示例:
<Files index.*> # ... directives here ... </Files><Files ~ "\.(gif|jpe?g|png)$"> # ... directives here ... </Files>
不要忘了在每个<Files>标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.20<FilesMatch>指令
说明
将应用于匹配文件名的指令包装起来
语法
<FilesMatch regex> ... </FilesMatch>
使用环境
server config, virtual host, directory, .htaccess
<FilesMatch>指令的语法和_指令"><Files ~>语法完全一样。
<FilesMatch "\.(gif|jpe?g|png)$">
不要忘了在每个<FilesMatch>标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。
4.21<Location>指令
说明
把被包装起来的指令集应用到匹配的URL或者虚拟路径
语法
<Location URL-path|URL> ... </Location>
使用环境
server config, virtual host
<Location> ... </Location>标签用来将应用到特定URL或者虚拟路径的指令分组。<Location>将运算符完全从文件系统中分划出来,因此那些指令将不会用来控制对文件文件系统位置的访问。因为有几个不同的URL可能映射到相同的文件系统位置。该URL-path是一个形式为“/path/”的虚拟路径。没有协议、主机名、端口号、查询请求字符串被包含在内。URL-path可以包含通配符?和*或者以~字符打头的正则表达式。示例:
<Location /directory> # ... rules go here</Location><Location /> # ... more rules go here</Location>
不要忘了在每个<Location>标签中包含RewriteEngine on指令,也不要将不需要用到的规则封套进去。
4.22<LocationMatch>指令
说明
把被包装起来的指令集应用到正则表达式匹配的URL上
语法
<LocationMatch regex> ... </LocationMatch>
使用环境
server config, virtual host
这个指令的语法和指令"><Location ~>正则表达式语法完全一样。示例:
<LocationMatch "/(home|section)/bin"> # ... rules go here</LocationMatch>
不要忘了在每个<LocationMatch>标签中包含RewriteEngine on指令,也不要将不能应用的规则封装进去。
示例
注意:这些示例中所有的规则只适用于httpd.conf文件。在ISAPI_Rewrite以及在Apache的mod_rewrite中,规则的基本路径是不同的,取决于你放置.htaccess文件的目录。如果你将规则放在httpd.conf里的话,初始领头斜线必须存在,而在.htaccess文件中,到这些文件的虚拟路径会被截断。规则取决于以RewriteBase /指令引导的根路径,来允许它们在httpd.conf和目录级的.htaccess文件的任何位置上运作。简单的搜索引擎友好的网址下面这个例子演示了如何轻松地使用循环标记藏匿查询字符串参数。假设你有一个如下的URL:http://www.mysite.com/foo.asp?a=A&b=B&c=C,而且你希望以这样的地址来访问它:http://www.myhost.com/foo.asp/a/A/b/B/c/C请尝试用下面的规则来达到预期的效果:
RewriteEngine onRewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]
注意这个规则可能破坏页面与CSS文件、图片等的相对链接。至所以这样是因为在浏览器中用于推算完整资源URI的基本路径(页面的父文件夹)发生了变化。只有在您使用目录分隔符作为替代字符时才会发生这个问题。有三种可用的解决方案:1.使用下面的规则,它不影响基本路径,因为它没有用到目录分隔符“/”。2.借助于<base href="/folder/">标签直接为页面指定正确的base路径3.把所有的页面相对链接都变成相对于根目录的地址或者绝对地址形式。还存在着很多种用了不同的分隔符和文件扩展名的规则。例如,使用像这样的URL:http://www.myhost.com/foo.asp~a~A~b~B~c~C。下面的规则可以用来实现它:
RewriteEngine onRewriteRule ^(.*?\.asp)~([^~]*)~([^~]*)(.*) $1$4?$2=$3 [NC,LP,QSA]
富关键词URLs在上面的例子中,我们使用很一般的技术来简单地藏匿查询字符串标记。但是很多对搜索引擎优化很有用的解决方案是让您的URL关键字丰富。看看下面的网址,例如:http://www.mysite.com/productpage.asp?productID=127这是大部分网站的常见情况。但是你可以通过使用这样形式的链接来显著地提高你的网页搜索引擎抓取率:http://www.mysite.com/products/our_super_tool.asp,URL中的关键词“our super tool”会被索引,并提高网页排名,但是“our_super_tool”不能直接被用来收回productid=127,这个问题存在几种解决方案。第一个解决方案,我们建议你使用简短、只包含少数几个参数(既有关键词也有数字标识符)的URL形式,在样您的URL可能看起来如下:http://www.mysite.com/products/our_super_tool_127.asp。实现这一重写目标只需要一个规则:
RewriteEngine onRewriteBase /RewriteRule ^products/[^?/]*_(\d+)\.asp /productpage.asp?productID=$1 [QSA]
另一个更复杂的解决方案是创建一对一的映射文件,并用它来映射“our_super_tool”到127。该解决方案对一些有很多参数的长URL来说很有用,并允许你隐藏数字标识符。这URL看起来像是http://www.mysite.com/products/our_super_tool.asp。请注意“our_supper_tool”部分必须是产品的唯一标识,是它的标识符。下面是这种解决方案的一个示例:
RewriteEngine onRewriteBase /RewriteMap mapfile txt:mapfile.txtRewriteRule ^products/([^?/]+)\.asp /productpage.asp?productID=${mapfile:$1}
而且你必需创建包含以下内容的mapfile.txt映射文件:
one_product 1another_product 2our_super_tool 127more_products 335
这种方法的优点是:你可以使用它来组合十分复杂的URL转换,但是这是一个小例子,是这个指南中的题外之话。使用IIS作为反向代理 假设你有运行IIS的互联网服务器以及几台后台服务器或者应用程序运行在其它平台或者机器上。这些服务器不能直接在互联网上阅览,但是你必须为他人提供访问这些服务器的渠道。这里有一个演示如何简单地将某个网站的完整内容映射到另一个运行了ISAPI_Rewrite的站点的文件夹的示例:
RewriteEngine onRewriteBase / RewriteRule mappoint(.+) http://sitedomain$1 [NC,P]
藏匿文件扩展名: 虽然不可能将一个站点的所有的文件的扩展名都藏匿起来,但是我们可以使用ISAPI_Rewrite的文件检查功能来隐藏某些已知扩展名。这里有一个藏匿网站上.asp文件扩展名的规则示例:
RewriteEngine on#Redirect extension requests to avoid duplicate contentRewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]#Internally add extensions to requestRewriteCond %{REQUEST_FILENAME}.asp -f RewriteRule (.*) $1.asp
仿真基于主机头的虚拟网站 例如你已经注册了两个域名www.site1.com和www.site2.com。现在你可以使用同一个物理站创建两个不同的站点了。这里是一个规则示例:
RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Emulate site1RewriteCond %{HTTP:Host} ^(?:www\.)?site1\.com$RewriteRule (.*) /site1$1 [NC,L,NS]#Emulate site2RewriteCond %{HTTP:Host} ^(?:www\.)?site2\.com$RewriteRule (.*) /site2$1 [NC,L,NS]
现在只要把你的站点分别放到/site1和/site2目录下就可以了。注意www.site1.com和www.site2.com这两个域名必须在IIS中被映射到这个网站里,从而使ISAPI_Rewrite能拦截到请求。或者,你可以使用更多通用的规则,从而把任何请求都映射到与请求主机名同名的文件夹里。
RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Map requests to the foldersRewriteCond %{HTTP:Host} ^(www\.)?(.+)RewriteRule (.*) /%2$1 [NS]
网站的目录名应该是这样子的:/somesite1.com,/somesite2.info,等等。阻断内联图像(阻止盗链) 假如你有一些页面插入了http://www.mysite.com/下的gif图片。一些其它站点将通过网页超链接插入这些图片。这会给你的网站增加很多无用的通讯量,而且你希望阻止这种做法。虽然用ISAPI_Rewrite不能100%地保护图片不被盗链(只有专门的反盗链产品才能做到它),你至少可以在浏览器发来HTTP引用头的时候限制这种情况。下面的规则可以让你只允许来自同一主机的引用页或者空地址访问到这些图片。
RewriteEngine onRewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]
重定向非www的版本到www如果你的网站同时可以通过两种形式的URL比如说http://helicontech.com和http://www.helicontech.com来访问到,那么最好将一种地址重定向到另一种地址里,来避免搜索引擎对重复内容做出的处罚。下面是一个能将所有的非www地址重定向到相应的www地址上去的301重定向规则。
RewriteEngine onRewriteCond %{HTTPS} (on)?RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]RewriteCond %{REQUEST_URI} (.+)RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]
强制SSL或者非SSL到一个指定的位置这里是一个演示如何将SSL强制转到指定的文件夹的示例。只要简单地把下面的规则放到该文件夹下的.htaccess文件里就可以了。
RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Redirect non-HTTPS to HTTPSRewriteCond %{HTTP:Host} (.*)RewriteCond %{HTTPS} offRewriteCond %{REQUEST_URI} (.*)RewriteRule .? https://%1%2 [R,L]
而这个示例作用正好相反:将非SSL强制转到指定文件夹。
RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Redirect HTTPS to non-HTTPSRewriteCond %{HTTP:Host} (.*)RewriteCond %{HTTPS} onRewriteCond %{REQUEST_URI} (.*)RewriteRule .? http://%1%2 [R,L]
转移站点位置当你把网站从一个域名移到另一个域名,或者从一个文件夹移动另一个文件夹里的时候,这是经常会遇到的问题。你希望将一个网站的所有请求重定向到另一个网站里,而且不丢失请求资源名以及参数。当你希望保留现有的网页的排名和外链接的时候,它是非常有用的。这个解决方案是在旧的网站服务器上使用ISAPI_Rewrite:
RewriteEngine on#Permanent redirect to update old linksRewriteRule (.+) http://newserver.com$1 [R=301,L]
平衡负荷仿真这个示例模拟某种DNS轮换负荷平衡技术。假设你有主站www.mysite.com和数台web服务器分别注册为www[1-9].mysite.com。如果你在主服务器上安装了ISAPI_Rewrite,你可以将初始的客户端请求重定向到几台特定服务器,从而在几台服务器之间随机摊开通讯量。一旦已重定向,客户端将一直使用这一台服务器。虽然这种解决方案并不非常理想,但是它确实能分摊你的通讯量并避免在维护会话状态方面发生的问题。使用下面的规则来重定向客户端:
RewriteEngine onRewriteMap hosts rnd:hosts.txtRewriteCond %{HTTP:Host} (www)\.mysite.com [NC]RewriteRule (.*) http://${hosts:%1}.mysite.com$1 [R,L]
下面是hosts.txt文件的内容
www www1|www2|www3|www4|www5|www6|www7|www8|www9
你还可以在Apeche文档里找到很多其它有用的例子。它们多数不需要修改就可以在ISAPI_Rewrite3里使用。
故障处理
Chapter 6故障处理在这里你可以一步步找到你在安装ISAPI时遇到的问题的解决方法。1.首先要正确解决您的问题,我们需要你运行最新的可用版本的ISAPI_Rewrite软件。你可以随时到我们的网站下载最新版的软件来升级你的ISAPI_Rewrite。地址是http://www.helicontech.com/download-isapi_rewrite3.htm 。2.多数运行ISAPI_Rewrite的问题发生在服务器上NTFS权限限制上。所以,请先阅读需要运行ISAPI_Rewrite文件的权限。3.请检查应用程序和系统日志中的错误信息。这可能指出您的错误原因。4.不要忘记设置RewriteEngine on指令在你所用的每个配置文件中。5.把下列代码行放到httpd.conf文件中:
RewriteLogLevel 9LogLevel debug
它将创建error.log和rewrite.log两个日志文件,默认放在安装目录下。如果日志文件被创建了,它表明ISAPI_Rewrite正在运行。阅读作为结果的error.log和rewrite.log文件,将能告诉你一些问题的根源线索。6.如果httpd.conf规则正在生效,但是.htaccess文件却没有载入,请再次检查.htaccess文件的NTFS权限,并确保你没有在使用ISAPI_Rewrite的精简版。7.如果规则在httpd.conf里能生效,但是有其它部分或者.htaccess文件里不能生效,请确保在每个部分的或者.htaccess文件里包含RewriteEngine on指令。同样的,不要忘掉.htaccess文件里的默认rewriting base值与httpd.conf是不同的。在.htaccess文件里或者<Directory>部分里,ISAPI_Rewrite会自动从路径中剥离本地目录前缀并只对剩下的部分应用规则。所以如果你的规则以“/”字符开头的话,在网站根目录的.htaccess文件中它必须被去掉。如果你在使用ISAPI_Rewrite时依然有问题,请到技术支持论坛里来写下你的问题,或者发送电子邮件到技术支持邮箱里。请在您的支持请求里包括以下信息:1.您的ISAPI_Rewrite配置文件,包括路径和文件名。2.您的网站的地址链接。3.你用到测试你的规则的URL。4.与失败的请求error.log和rewrite.log的文件副本。5.包括失败的请求的部分IIS日志文件。请记住你提供的信息越多,我们越容易为你解决问题。这样你更有机会快速地得到解决方案。
ISAPI_Rewrite 发布历史发布 3.1.0.67================[筛选器功能] 增强映射文件的动态加载[代理帮助文件错误]如果后端不设置内容长度头的话,并不会返回所有的响应。发布 3.1.0.66================
精简版的限制ISAPI_Rewrite的精简版拥有相同的引擎和重写功能。但是也有下面这些限制:? 不支持分布式.htaccess配置、目录以及网站级配置,只有一个精简版安装目录中的全局的httpd.conf配置能被载入。? 不支持<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、<FilesMatch>、<Location> 以及<LocationMatch>这几个标签。? 精简版中没有代理服务模块,因而所有的和代理服务功能相关的比如说RewriteProxy指令以及[P]标记都会被忽略。? 精简版没有针对于虚拟主机环境的手工安装包ISAPI_Rewrite精简版完全免费,它对开发或者测试目的以及只有几个网站而且不需要分布式配置或者代理功能的小型服务器来说是一个很好的解决方案
技术信息 ISAPI_Rewrite由四个部分组成:ISAPI筛选器、ISAPI扩展帮助、GUI管理器以及MMC嵌入式管理单元扩展。ISAPI_Rewrite筛选器和扩展都是用纯C++语言写的快速DLL模块。当安装ISAPI_Rwrite的时候, MMC嵌入式管理单元会被自动注册。ISAPI筛选器将安装在一个全局级别上,你不需要手工注册它。ISAPI扩展也会被安装并注册。ISAPI_Rewrite管理器实用工具可以在没有安装MMC的系统中运行ISAPI_Rewrite MMC嵌入式管理单元。Windows Vista以及Windows Server 2008系统中的ISAPI_Rewrite管理器实用工具(Helicon Manager.exe)要求管理员权限来执行,因为较小权限的用户没有权力读取IIS管理元库,而它对显示网站配置来说是必需的。如果用受限的帐号运行ISAPI_Rewrite管理器,你会得到登录管理员帐号的自动提示。ISAPI_Rewrite筛选器已经有足够地快,因此不用担心它的性能。除非你的服务器运行在最大负荷之下。用户在响应时间或者CPU负荷方面几乎不能发现什么区别,但是如果用了很多的规则的话,服务器最大带宽可能掉下一点来。所以请注意你用的配置决定了性能。建议每个网站使用的规则不要超过100条。在多数情况下,可以利用RewriteMap来避免使用大量的规则。该程序使用了Regex++ 库。Regex++ (Version Boost 1.31)Copyright ?1998-2004, Dr John Maddock
使用和传播许可该使用许可覆盖了所有的现有版本的ISAPI_Rewite,包括ISAPI_Rewrite、ISAPI_Rewrite完全版、ISAPI_Rewrite精简版、ISAPI_Rewrite测试版,后面统称为ISAPI_Rewrite除非另有指明。1.所有未明确授予的权利均由Helicon Tech保留。2.所有的关于ISAPI_Rewrite的版权都由它的作者Helicon Tech独家保留。3. Helicon Tech准予免费使用ISAPI_Rewrite精简版产品。4. Helicon Tech准予免费试用ISAPI_Rewrite产品30天,当试用期结束时,请要么购买ISAPI_Rewrite,要么删除ISAPI_Rewrite产品。5.未注册过的ISAPI_Rewrite试用版,可以在不被改动的前提下自由传播,除非有下例情况。任何个人或者公司都不用为在未得版权持有人书面许可的情况下传播ISAPI_Rewrite而付费。未经版权持有者的书面许可,未注册的试用版ISAPI_Rewrite不允许捆绑其它安装包。6. ISAPI_Rewrite必须被原样传播,不提供任何形式的保证明示或暗示。你可以在你自己的磁盘上使用ISAPI_Rewrite。作者不为因为滥用本软件导致的数据丢失、损坏,或任何其他类型的损失承担责任。7.你不得使用、复制、模仿、克隆、出租、出售、修改、反编译、反汇编以及其它任何反向工程,或者转让许可程序,或者任何许可程序的一个子集,除非本协议有提供。任何未经授权的使用将导致本许可自动终止。并可能导致刑事或民事起诉。8.本许可协议的条款是在未来版本的ISAPI_Rewrite将会有所变化。9.当你购买ISAPI_Rewrite时,将发给你“注册码”。这种“注册码”可以个人或者公司购买,并只在一台计算机上使用。如果您购买一个以上的ISAPI_Rewrite副本,发给你们的“注册码”只能在等于你购买的许可证数的计算机上使用。10.您只能使用来自Helicom Tech以及与Helicom Tech有业务合作或者技术合作的公司的注册码。11. 安装和使用ISAPI_Rewrite意味着接受这些条款及许可条件。12. 如果您不同意本许可证的条款或违反本许可与您当地的法律规定,您必须从您的存储设备中删除ISAPI_Rewrite文件,并停止使用该产品。13.我们坚持严格的隐私的准则,不会收集个人识别信息,除非是自愿提供的。如果您有进一步的问题或意见,请访问我们的http://www.helicontech.com。感谢你使用ISAPI_Rewrite。Helicon Tech Corporation.