如何用Powershell制作垃圾邮件监控隔离工具

本文阅读对象为Office365 Exchange管理员,鉴于作者水平有限,如有错误,欢迎指正

所需知识

  • Exchange Online 后台管理机制 【传输规则,隔离区,过滤器等】
  • Powershell

背景

由于钓鱼邮件日益猖獗,新型钓鱼邮件(图片,二维码,附件加密文件)层出不穷。我们需要在EOP提供的防护基础之上,更及时的对邮件标题,正文,发件人域名做分析统计,从而更好的去完成钓鱼邮件防护。

现实场景

三月企业内部收到大量退税邮件,标题为"重要通知,请尽快完成退税",公司要求对所有这类垃圾邮件进行处理。

作为管理员的您,应该如何处理?

  • 无脑版:拦截发件人,把发件人IP拉黑。
  • 粗暴版:用传输规则来对邮件主题为"重要通知"的全部放入隔离区。
  • 粗暴进化版:用传输规则,将非本公司域名发送的邮件主题为"重要通知"的全部邮件放入隔离区。
  • 粗暴进化黄牛版:用传输规则,将非本公司域名发送的邮件主题为"重要通知"的全部邮件放入隔离区。每一个小时查看隔离区,手动进行邮件释放。

作为管理员的您,怎么更好的完成隔离邮件工具?

  1. 事后拦截不如事前预防,(当然事后拦截,可以保证不重复踩坑。)
  2. 隔离区的邮件需要按域名归类分析。
  3. 利用分析好的域名报告,创建白黑名单,并生成白黑名单底稿,确保白名单的邮件不被拦截,黑名单的不被释放,且拦截不会重复出现在报告中。
  4. 手动检查隔离区,释放被错误拦截的邮件
  5. 统计每天释放,拦截的邮件数量,做到心中有数。

需要哪些工具?

工具流程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
}
相关推荐
红尘散仙5 小时前
谁说终端只能敲键盘?我用 Rust 给小说阅读器加上了鼠标
前端·后端·rust
陈随易7 小时前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
ZhengEnCi7 小时前
Agent 工具怎么折叠海量输出才「爽」:Trae、Claude Code 的渐进式披露设计原理
前端·agent
IT_陈寒10 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala10 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
ikoala10 小时前
AI 写页面像说明书,修 Bug 像贴膏药?把这两句话写进 AGENTS.md
前端·javascript·ai编程
去伪存真12 小时前
AI Agent Harness 深度测评与技术选型实战
前端·agent
FRing0315 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
疯华整猫18 小时前
被杀掉之后:我把 Android 的「唤起 + 常驻」重做了一遍
前端·面试·架构
IT_陈寒20 小时前
Java开发实战:从入门到精通
前端·人工智能·后端