本文阅读对象为Office365 Exchange管理员,鉴于作者水平有限,如有错误,欢迎指正
所需知识
- Exchange Online 后台管理机制 【传输规则,隔离区,过滤器等】
- Powershell
背景
由于钓鱼邮件日益猖獗,新型钓鱼邮件(图片,二维码,附件加密文件)层出不穷。我们需要在EOP提供的防护基础之上,更及时的对邮件标题,正文,发件人域名做分析统计,从而更好的去完成钓鱼邮件防护。
现实场景
三月企业内部收到大量退税邮件,标题为"重要通知,请尽快完成退税",公司要求对所有这类垃圾邮件进行处理。
作为管理员的您,应该如何处理?
- 无脑版:拦截发件人,把发件人IP拉黑。
- 粗暴版:用传输规则来对邮件主题为"重要通知"的全部放入隔离区。
- 粗暴进化版:用传输规则,将非本公司域名发送的邮件主题为"重要通知"的全部邮件放入隔离区。
- 粗暴进化黄牛版:用传输规则,将非本公司域名发送的邮件主题为"重要通知"的全部邮件放入隔离区。每一个小时查看隔离区,手动进行邮件释放。
作为管理员的您,怎么更好的完成隔离邮件工具?
- 事后拦截不如事前预防,(当然事后拦截,可以保证不重复踩坑。)
- 隔离区的邮件需要按域名归类分析。
- 利用分析好的域名报告,创建白黑名单,并生成白黑名单底稿,确保白名单的邮件不被拦截,黑名单的不被释放,且拦截不会重复出现在报告中。
- 手动检查隔离区,释放被错误拦截的邮件
- 统计每天释放,拦截的邮件数量,做到心中有数。
需要哪些工具?
工具流程[3个规则+2个报告]
代码实现流程如下:
邮件命中关键词->关键词拦截的域名是什么【内容参考隔离区域报告样例】->确定拦截无误(人工确认)->手工加传输规则(内容参考"关键字隔离"样例) ->代码读trannsport rule,把新增加的域名写到黑名单文件【内容参考白黑名单txt样例】 ->生成每日邮件拦截报告拦截邮件总数部分【内容参考隔离区邮件每日分类统计报告】
邮件命中关键词->关键词拦截的域名是什么【内容参考隔离区域报告样例】->确定需要释放可(人工确认)->手工释放邮件->手工加传输规则((内容参考"关键字隔离"样例exception部门)) ->代码读传输规则,把新增加的域名写到白名单文件) ->生成每日邮件拦截报告释放邮件总数部分【内容参考隔离区邮件每日分类统计报告】
核心组件
传输规则 ---样例
关键字拦截
黑名单
隔离日报
白黑名单txt & 隔离区邮件每日分类统计报告
隔离区域名报告
核心代码
`` 感谢各位阅读,欢迎提供宝贵意见
perl
#获取所有隔离区邮件
$pages = 1000
$traces = @()
$FinalReports = @()
$page = 1
do{
$traces = Get-QuarantineMessage -StartReceivedDate $StartTime.AddDays(-1) -EndReceivedDate $StartTime -PageSize 1000 -Page $page |?{$_.ReleaseStatus -ne 'RELEASED'}
if($traces.count -eq 0){
Write-EOPLog "We only have $page page records"
break
}
$page ++
$FinalReports += $traces
}while($page -lt $pages)
#$fileName = $Logdate + '-MessageTraceHistory' + '.csv'
Write-EOPLog "Check how many domains & mails count for each domain were blocked."
$DomainDetails = $FinalReports |%{$_.SenderAddress.split('@')[1]}|group |select Count,Name
#$Domains = $DomainDetails |select -ExpandProperty Name
#对比白黑名单,去掉重复域名,发送邮件
Write-Host "compare domain info with black list & whitelist domains"
$attachment = "C:\TEMP\QuarantineMessages.CSV"
$FinalReports |Select-Object Subject,MessageId,SenderAddress,RecipientAddress,PolicyName,PolicyType,ReleaseStatusDirection,ReleaseStatus |Export-Csv $attachment -Encoding UTF8 -NoTypeInformation
$AllowDomains = Get-Content C:\QuarantineDomain\QuarantineWhiteList.TXT
$BlockDomains = Get-Content C:\QuarantineDomain\QuarantineBlackList.TXT
$IssueDomains = @($DomainDetails |?{$AllowDomains -notcontains $_.Name -and $BlockDomains -notcontains $_.Name})
if($IssueDomains.COUNT -ne 0){
$body = Format-HtmlTable $IssueDomains -keywords_color @{"Count"=$($CommonColor['Blue'])}
Send-MailMessage -Subject "($($FinalReports.count)) mails were blocked, Please check their doamin properties" -Body $body -Attachments $attachment -From <O365> -to <O365MailAddress> -Encoding UTF8 -SmtpServer PARTNER.OUTLOOK.CN
}