我需要在所有公司的计算机上启用防火墙,并且没有有关已用端口的任何文档,因此我计划使用PowerShell脚本记录所有入站连接以创建所需的例外。
如何使用PowerShell或C#监视创建到计算机的所有入站连接?因为y发现有一个Cmdlet列出了与计算机的所有连接,但是我还没有找到只选择入站连接的方法
有没有办法做到这一点?
答案 0 :(得分:0)
您为什么不仅仅使用FW软件呢?
至于……
因为您发现有一个Cmdlet列出了所有 与机器的连接,但我还没有找到一种选择方法 入站连接
您刚刚声明可以获取所有连接,这些连接线应显示触发的FW规则,并且从您的FW软件中,您已经知道什么规则是入口/出口。
过滤列出的入站规则以获取数据集。
# Get the configured FW ingress rules
$FirewallInboundRules = Get-NetFirewallRule | Where { $_.Enabled –eq ‘True’ –and $_.Direction –eq ‘Inbound’ }
然后将其匹配到所有连接数据集。
但这听起来像是您正在尝试使用PS创建自己的IDS。我会说这是一项过度的工程工作,因为现成的工具已经提供了这一点。
答案 1 :(得分:0)
谢谢@postanote,我已经用您给我的提示解决了问题,可以启用Windows防火墙,并且可以将日志重定向到文件共享以分析公司机器正在使用的入站端口。
我正在使用类似的脚本来启用防火墙并将所有日志转发到将成为测试组一部分的计算机列表。
$machines = Get-Content -Path '.\Desktop\servers.txt'
foreach ($machine in $machines)
{
Invoke-Command -ComputerName machine -ScriptBlock {Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True;Set-NetFirewallProfile -Profile Domain,Public,Private -LogFileName "\\localhost\C$\Block-$env:COMPUTERNAME.txt" -LogMaxSizeKilobytes 444 -LogAllowed False -LogBlocked True}
}
在我的情况下,这不能解决问题,因为这仅显示打开的入站端口,但不显示使用的入站端口
$FirewallInboundRules = Get-NetFirewallRule | Where { $_.Enabled –eq ‘True’ –and $_.Direction –eq ‘Inbound’ }