当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

作者:精品下载站 日期:2024-12-14 20:08:52 浏览:16 分类:玩电脑

如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?


让我们考虑一些在不使用第三方工具的情况下阻止对 Windows 中特定网站、域名、URL 或 IP 地址的访问的方法。在我们的例子中,我们将尝试使用内置的 Windows 10 工具和 PowerShell 自动化功能来阻止某些网站。

通常,通过网络路由器(用于访问互联网的交换机或 Wi-Fi 接入点)或使用第三方软件(内容过滤器、DNS 过滤器等)来阻止网站会更容易。

在 Windows 中使用 Hosts 文件阻止网站

在 Windows 上阻止特定网站的最流行方法是编辑 hosts 文件。通常它位于 %windir%\system32\drivers tc\ 目录中。请注意,hosts 文件没有扩展名。

包含hosts 文件的目录路径在注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下的DataBasePath 参数中设置。默认情况下它是%SystemRoot%\System32\drivers tc。

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

Hosts 文件用于手动分配 IP 地址和 DNS 名称之间的映射。解析名称时,主机的优先级高于网络连接设置中指定的 DNS 服务器。

要阻止特定网站(例如 facebook.com),请打开主机文件(使用管理员权限)并向其中添加如下字符串:

127.0.0.1 facebook.com
127.0.0.1 www.facebook.com

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

保存文件并重新启动计算机(或使用以下命令清除 DNS 缓存:

ipconfig /flushdns

)。

之后,当尝试在任何浏览器中打开 facebook.com 时,您将看到消息“找不到页面”/“页面不可用”。

您可以使用这样的 .bat 文件将包含网站 URL 的新行添加到主机文件中:

@echo off
set hostspath=%windir%\System32\drivers\etc\hosts
echo 127.0.0.1 www.facebook.com >> %hostspath%
echo 127.0.0.1 facebook.com >> %hostspath%
exit

或者,您可以使用以下 PowerShell 函数自动阻止主机文件中的特定网站。

Function BlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If(-not $is_blocked) {
$hoststr="127.0.0.1 ” + $Url
Add-Content -Path $hosts -Value $hoststr
}
}
Function UnBlockSiteHosts ( [Parameter(Mandatory=$true)]$Url) {
$hosts = 'C:\Windows\System32\drivers\etc\hosts'
$is_blocked = Get-Content -Path $hosts |
Select-String -Pattern ([regex]::Escape($Url))
If($is_blocked) {
$newhosts = Get-Content -Path $hosts |
Where-Object {
$_ -notmatch ([regex]::Escape($Url))
}
Set-Content -Path $hosts -Value $newhosts
}
}

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

要将网站添加到阻止的 URL 列表中,只需执行以下命令:

BlockSiteHosts ("twitter.com")

要解锁网站,请运行:

UnBlockSiteHosts ("twitter.com")

使用 DNS 过滤阻止网站

如果您的客户端使用相同的 DNS 服务器,您可以通过在该 DNS 中创建 DNS 条目并在其中指定类似 127.0.0.1 之类的内容来阻止某些网站。顺便说一句,大多数商业 DNS 内容过滤器(OpenDNS、SafeDNS、Cisco Umbrella 等)都使用相同的原理。

如何在 Windows Defender 防火墙中阻止网站 IP 地址?

此外,您还可以使用内置的 Windows Defender 防火墙阻止某些网站。此方法的主要缺点是您无法在阻止规则中使用域名或网站 URL。 Windows Defender 防火墙允许您仅指定 IP 地址或子网作为源/目标。
首先,您必须获取要阻止的网站的 IP 地址。使用 nslookup 命令更容易做到这一点:

nslookup twitter.com

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

如您所见,该命令返回了分配给该网站的多个 IP 地址。你必须阻止他们所有人。

运行 Windows Defender 防火墙管理管理单元(控制面板\所有控制面板项\Windows Defender 防火墙\高级设置或通过运行 firewall.cpl)。

出站规则部分中,使用以下设置创建新规则:

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

  • 规则类型:自定义

  • 程序:所有程序

  • 协议类型:任何

  • 范围:在“此规则适用于哪些远程 IP 地址?”中。 ”部分选择“这些 IP 地址”-> 添加。在下一个窗口中,输入要阻止的 IP 地址、子网或 IP 地址范围。

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

单击确定 -> 下一步 -> 操作 -> 阻止连接

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

将所有选项保留在窗口中,并应用规则的防火墙配置文件。然后指定规则名称并保存。

之后,Windows Defender 防火墙将阻止到指定网站 IP 地址的所有传出连接。尝试连接到被阻止的站点时,您的浏览器中将显示以下消息:

Unable to connect

或者

Your Internet access is blocked
Firewall or antivirus software may have blocked the connection
ERR_NETWORK_ACCESS_DENIED

在 AD 域中,您可以部署 Windows 防火墙策略来阻止使用 GPO 访问用户计算机上的网站。然而,这并不理性。最好在您的互联网访问路由器(网关)上过滤网站。

使用PowerShell创建防火墙规则以通过域名或IP地址阻止网站

您还可以使用 PowerShell 创建防火墙规则来阻止与网站的连接:

New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound -LocalPort Any -Protocol Any -Action Block -RemoteAddress 104.244.42.129, 104.244.42.0/24

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

字符串“规则已从存储中成功解析”表示新的防火墙规则已成功应用。您可以在 Windows Defender 防火墙的图形界面中找到它。

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

为了不手动将网站名称解析为 IP 地址,您可以使用 Resolve-DnsName PowerShell cmdlet 来获取网站 IP 地址:

Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

因此,您可以将网站名称转换为其 IP 地址,并向防火墙设置添加阻止规则:


$IPAddress = Resolve-DnsName "twitter.com"| Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Site" -Direction Outbound -LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress

因此,您现在可以同时向 Windows 防火墙添加针对多个网站的阻止规则:

$SitesToBlock = "facebook.com","instagram.com","youtube.com"
$IPAddress = $SitesToBlock | Resolve-DnsName -NoHostsFile | Select-Object -ExpandProperty IPAddress
New-NetFirewallRule -DisplayName "Block Web Sites" -Direction Outbound -LocalPort Any -Protocol Any -Action Block -RemoteAddress $IPAddress

我已将 -NoHostsFile 参数添加到 Resolve-DnsName cmdlet,以便不使用主机文件进行解析。

让我们确保 Windows 防火墙控制台中出现了阻止出站规则。

[玩转系统] 如何使用 PowerShell 在 Windows Defender 防火墙上阻止域或网站?

这篇文章主要是大脑训练练习。在企业网络中,您必须在 Internet 访问网关、路由器或代理服务器上使用网站过滤。主机级别的阻止效果不是很好。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯