如何用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
}
相关推荐
Eric_见嘉几秒前
真的能无限试(白)用(嫖)cursor 吗?
前端·visual studio code
DK七七30 分钟前
多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
开发语言·前端·微信小程序·小程序·php
老赵的博客41 分钟前
QSS 设置bug
前端·bug·音视频
Chikaoya42 分钟前
项目中用户数据获取遇到bug
前端·typescript·vue·bug
南城夏季42 分钟前
蓝领招聘二期笔记
前端·javascript·笔记
Huazie42 分钟前
来花个几分钟,轻松掌握 Hexo Diversity 主题配置内容
前端·javascript·hexo
NoloveisGod1 小时前
Vue的基础使用
前端·javascript·vue.js
GISer_Jing1 小时前
前端系统设计面试题(二)Javascript\Vue
前端·javascript·vue.js
海上彼尚2 小时前
实现3D热力图
前端·javascript·3d
杨过姑父2 小时前
org.springframework.context.support.ApplicationListenerDetector 详细介绍
java·前端·spring