内网安全之:Exchange 服务器安全
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
Exchange 服务器安全
1 Exchange 邮件服务器介绍
Exchange是由微软推出的用于企业环境中部署的邮件服务器。Exchange 在逻辑上分为三个层次:网络层(network layer)、目录层(directory layer)、消息层(messaging layer)。
1.1 Exchange 服务器角色
服务器角色正是在消息层上的一个细分。以 Exchange Server 2010 为例,共有五个服务器角色:
邮件服务器(Moilbox Serber):
提供托管邮件、公共文件夹及相关消息数据(例如地址表)的后段组件,是必选的服务器角色客户端访问服务器(C lient Access Server):
接收和处理来自不同客户端的请求的服务器角色,为通过不同的协议进行的访问提供支持。在一个Exchange环境中,至少需要部署一个客户端访问服务器集线传输服务器(Hub transport Server):
也称中心传输服务器。该服务器角色的核心服务就是Microsoft Exchange transport,负责处理哦Mail Flow(Exchange管理员通过Mail Flow实现邮件出站与进站配置)、对邮件进行路由及在Exchange组件中进行分发。该服务器角色处理所有发往本地邮箱和外部邮箱的邮件,确保邮件发送者和接收者的地址被正确地解析并能够执行后特定的策略(例如邮件地址过滤、内容过滤、格式转换),同时,可以进行记录、审计、添加免责声明等操作。其角色相当于一个邮件传输的中继站,在一个Exchange环境中,至少需要部署一个集线传输服务器统一消息服务器(Unified Messaging Server):
将专用交换机和Exchange服务器集成在一起,允许用户通过邮件发送、存储语音消息和传真消息。该服务器角色为可选角色边缘传输服务器(Edge transport Server):
专用服务器,可用于路由发往内部或外部的邮件,通常部署在网络边界并用于设置安全边界。该服务器角色接受来自内部组织和外部可信服务器的邮件,对这些邮件应用特定的反垃圾邮件、反病毒策略、将通过策略筛选的邮件路由到内部的集线传输服务器上。该服务器角色为可选角色
除了边缘传输服务器以外其他角色都可以在同一台主机上进行部署添加,其中邮箱服务器、集线传输服务器、客户端访问服务器是核心服务器角色,部署这三个角色就能提供基本的邮件处理功能。
1.2 客户端/远程访问接口和协议
电子邮件通信一般分为邮件发送和邮件接收两个过程。邮件发送使用统一的通信协议,既SMTP(简单邮件传输协议)。
邮件接收则会使用多种协议标准,例如POP(邮局协议)
发展而来的POP3
,以及使用较为广泛的IMAP(internet邮件访问协议)
Exchange开发了私有的MAPI协议(用于收取邮件)。新版本的Outlook通常使用MAPI协议
与Exchange进行交互。早期Outlook使用名为Outlook Anywhere
的RPC进行交互
Exchange支持的访问接口和协议列举如下
OWA(Outlook Web App):
Exchange提供的Web邮箱EAC(Exchange Administrator center):
Exchange管理中心,是组织中的Exchange的Web控制台OutlookAnywhere(RPC-over-HTTP, RPC/HTTP)
MAPI (MAPI-over-HTTP, MAPI/HTTP)
Exchange ActiveSync(EAS, XML/HTTP)
Exchange Web Service(EWS, SOAP-over-HTTP)
2 部署 Exchange 服务
Exchange 2010的部署_简单、自然就好的技术博客_51CTO博客_exchange2010部署架构
Exchange 2010 FilterPack64bit下载
3 Exchange服务发现
3.1 基于端口扫描发现
使用 nmap 扫描端口寻找 Exchange 服务器,需要与主机进行交互产生大量流量很容易造成 IDS 告警。
nmap -A -Pn -p25 10.1.1.20
3.2 SPN 查询
在安装Exchange时,SPN就被注册在活动目录中了,在域环境中,可以通过 SPN 来发现 Exchange 服务器。
setspn -T test.lab -F -Q */*
其中,ExchangeRFR、ExchangeAB、ExchangeMDB等都是Exchange注册的服务。
4 Exchange的操作
Exchange数据库后缀为.edb,通过Exchange发送和接受的邮件都会保存在Exchange数据库中。
# 在正常的powershell中,下面的命令是没有的,需要输入如下命令,将Exchange管理单元添加到当前会话中:
add-pssnapin microsoft.exchange*
4.1 查看 Exchange 基本操作
# 使用“-Server”参数,可以在指定服务器上进行查询。在powershell命令行下输入如下命令:
Get-MailboxDatabase -server "win08"
# 查询数据库的详细信息:如物理路径
Get-MailboxDatabase -Identity 'Tests_DB' | Format-List Name,EdbFilePath,LogFolderPath
# 获取现有用户的邮件地址
Get-Mailbox | Format-table Name,WindowsEmailAddress
# 查看指定用户的邮箱使用信息:查询指定用户的邮箱空间和最后登录时间
Get-Mailboxstatistics -identity test01 | Select Dispayname,ItemCount,TotalItemSize,TotalTimeSize,LastLogonTime
# 获取用户邮箱中的邮件数量
Get-Mailbox -ResultSize Unlimited | Get-Mailboxstatistics | Sort-Object TotalItemSize -Descend
4.2 导出指定的电子邮件
Exchange邮件文件的后缀为“.pst”。Exchange Server 2010 之前需要使用 Export-Mailbox
命令导出邮件。
Export-Mailbox -Identity test01 -PSTFolderPath c:\shares
Exchange Server 2010 SP1 之后的需要使用以下方式导出:
4.2.1 配置用户的导入导出权限
# 查看有导入/导出权限的用户
Get-ManagementRoleAssignment -role "Mailbox Import Export" | Format-List RoleAssigneeName
# 添加权限
# 将 mailadmin 用户加入 Mailbox Import Export 角色组中,就可以通过 powershell 导出用户的邮件了
# 注:将用户添加到角色组后,需要重启Exchange服务才能执行导出操作。
New-ManagementRoleAssignment -Name "Import Export_Domain Admins" -User "mailadmin" -Role "Mailbox Import Export"
# 删除权限
# 导出工作完成后,可以将刚刚添加的Mailbox Import Export角色组中的用户删除。
Remove-ManagementRoleAssignment "Import Export_Domain Admins" -Confirm:$false
4.2.2 设置网络共享文件夹
不论使用哪种方式导出邮件,都需要将文件放置在UNC(Universal Naming Convention,通用命名规则,也称通用命名规范)路径下。类似于“\\hostname\sharename”、“\\ipaddress\sharename”
的网络路径下,sharename为网络共享名称。
# 开启共享,将C盘 shares 文件夹设置为everyone可读写。
CMD 下:
net share Win08Shares=c:\shares /GRANT:everyone,full
4.2.3 导出用户的电子邮件
-
使用powershell导出电子邮件
# 用户的电子邮箱目录一般为Inbox(收件箱)、SentItems(已发送邮件)、DeleteItems(已删除邮件)、Drafts(草稿)等。使用New-MailboxExportRequest命令,将指定用户所有的电子邮件导出。 New-MailboxExportRequest -Mailbox mailadmin -FilePath \\10.1.1.20\shares\mailadmin.pst
-
通过图形化界面导出电子邮件
访问
https://10.1.1.20\ecp\
,打开 Exchange 管理中心的登录界面。输入账号密码进入 Exchange 管理中心,点击收件人右边的“+”号可以将当前用户加入管理员组中,然后右键刷新按钮右边的更多,即可进行导出操作。 -
管理导出请求
无论是通过Powershell导出还是通过图形化的方式导出,都会在Exchange中生成一条告警信息.
# 查看之前的导出请求记录信息 Get-MailboxExportRequest # 将指定用户已经完成的导出请求删除。 Remove-MailboxExportRequest -Identity test01\mailboxexport # 删除所有用户已完成的导出请求 Remove-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest