(注:本文参考以下前辈文章修改而来,源文章连接:http://itadmindev.blogspot.hk/2011/07/powershell-ad-dc-failed-logins-report.html)
原脚本只用于收集统计AD,过去一天时内,EventID为4625帐户登录失败的IP、主机名及登录次数。
EventID对应的内容可参考以下内容:http://support.microsoft.com/kb/947226/zh-cn
我现在依需求,修改为需要收集过去一天内,ID为4771:Kerberos预身份验证失败的信息,主要是指AD中认证失败的账号、客户端,并发邮件通知到指邮箱。
1、启用DC的Audit功能
修改GPO,针对DefaultDomainControllerPolicy,启用Auditaccountlogonevents/Auditlogonevents
2、修改powershell执行策略
因为默认PowerShell策略是不能执行未经签名的PS1,当我们直接调用时,会出现如下错误:
可参考说明KB:
http://technet.microsoft.com/zh-CN/library/hh847748.aspx
http://technet.microsoft.com/zh-cn/library/ee176949.aspx
而我们自已修改编辑的PS脚本是未经认证的,所以需要修改策略,方法如下:
1)先查看当前的执行策略:Get-ExecutionPolicy
显示为:Restricted,即只能执行经注册的PS脚本。
2)修改执行策略为Remotesigned:Set-Exectionpolicyremotesigned
然后输入”Y”确认修改。
3)再次查看当前执行策略:Get-ExecutionPolicy,
已显示为:RemoteSigned
3、下载、修改PowerShell代码
附件PS中,请自行修改以下内容:
1)DCName
PS脚本中第25行括号中为你现有DC名,如果有多台,请手动修改为你实际的DC名称,如:DC001,DC002
[email protected]("dc001",”dc002”)
2)SMTP设置部分
PS脚本中第134-136行修改为发件人、收件人的邮件地址和内部SMTP服务器的主机名或是IP地址:如下:
From="[email protected]"
To="[email protected]"
SmtpServer="mail.sysmicro.cn"
以上PS脚本修改好后,先手动执行,确保能正常后执行,没有错误后,保存为*.ps1文件,以方便随时调用!
4、将PowerShell加入到计划任务中,自动运行。
如果需要设定每天固定时间运行,将前一天认证失败的信息邮件方式通知指定人员,则可以用创建计划任务的方式,指定固定时间运行,具体方法可以参考:
1)创建计划任
Start\Allprograms\administrativetools\TaskScheduler,在右边选择CreatebasicTask…
2)在创建的任务名称中,输入你相要的名称,如:ADFailedLogonReport,然后下一步:
3)任务运行时间,选择Daily,然后下一步;
4)选择每天运行的时间,依你需求,定义好后,下一步:
5)在Action选项中,选择:StartProgram,然后下一步:
6)在Program/Script,点击Browse,选择刚才第3步中保存的.PS1文件,然后在修改为:Powershell–file”D:\Script\AD_DCs_Failed_Login_Report_4771_51cto.ps1”,然后下一步:
7)在弹出的TaskScheduler中选择“Yes”
8)在Finish中勾选:OpenthepropertiesdialogfortaskwhenIclickfinish,然后点击完成
9)完成后,可以预览任务属性,在General中,选择:Runwhetheruserisloggedonornot,即用户是否登录时,都执行此任务,点击OK后完成退出!
说明:以上以上方法供大家参考,大家可以修改需要的EventID查询你想要的信息!
经在我所在的工作环境中测试,效果不错,如果过去一天中,没有失败的认证,收到的邮件为一个空白的表,如下:
如果过去一天中,有失败的认证,则能显示具体的IP、账号、失败的次数,管理员刚可依此信息对相应IP地址的电脑、账号进行检查,以排除安全隐患!