如何用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
}
相关推荐
原则猫8 小时前
UDP 到底怎么实现可靠的
前端
Java后端的Ai之路8 小时前
14、ReactJS - 路由(Router)
前端·react.js·状态模式
裕晟资质规划9 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
ShineWinsu9 小时前
对于JavaScript:JavaScript基础语法的解析
开发语言·前端·javascript·面试·web·基础语法·循环
月夏10 小时前
Vue3 转 React:18 项对照表 + 5 个必踩的坑(附 7 天上手路线)
前端
广州华水科技10 小时前
单北斗GNSS位移监测系统的应用与维护解析
前端
梦曦i10 小时前
uni-storage 0.1.0 发布:TTL过期管理+多实例隔离
前端·storage·uni-app x
猫头_11 小时前
AI 流式传输工程指南:模型吐出半截 JSON,前端如何边收边渲染?
前端·javascript·llm
console.log('npc')12 小时前
第 1 章 项目概述与环境搭建
前端·人工智能·大模型
定栓12 小时前
Webpack迁到Vite第七节(二):全家桶移除 — Babel 全家桶深度分析
前端·webpack·node.js