如何用PowerShell屏蔽Windows Defender防火墙上的域或者网站?
让我们考虑一些方法来阻止在Windows中访问特定的网站、域名、url或者IP地址,而不使用第三方工具。在我们的例子中,我们将尝试使用内置的windows10工具和PowerShell自动化功能来阻止某些网站。
通常,在网络路由器(交换机或者Wi-Fi接入点,我们用于访问互联网)或者使用第三方软件(内容过滤器、DNS过滤器等)来阻止网站更容易。
Windows下使用Hosts文件屏蔽网站
在Windows上阻止特定网站最流行的方法是编辑 hosts文件。通常位于 %windir%\system32\drivers\etc\目录中。请注意hosts文件没有扩展名。
包含 hosts文件的目录路径在注册表项 HKEY U LOCAL U MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的 DataBasePath参数中设置。默认为%SystemRoot%\System32\drivers\etc。
hosts文件用于手动分配IP地址和DNS名称之间的映射。解析名称时,主机的优先级高于网络连接设置中指定的DNS服务器。
阻止特定网站(例如,脸谱网),打开hosts文件(具有管理员权限)并向其中添加以下字符串:
127.0.0.1 facebook.com 127.0.0.1 www.facebook.com
保存文件并重新启动计算机(或者使用以下命令清除DNS缓存:
ipconfig /flushdns
).
之后,当试图打开脸谱网在任何浏览器中,我们都会看到消息“Page not found”/“Page not available”。
我们可以使用这样的.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 } }
要将网站添加到阻止的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
如我们所见,该命令已返回多个分配给该网站的IP地址。你必须阻止他们。
运行Windows Defender防火墙管理管理单元(控制面板\All Control Panel Items\Windows Defender Firewall\Advanced Settings)或者 firewall.cpl).
在 出站规则部分,使用以下设置创建一个新规则:
规则类型:自定义
项目:所有项目
协议类型:任意
范围:在“此规则适用于哪些远程IP地址?”选择“这些IP地址”->Add。在下一个窗口中,输入要阻止的IP地址、子网或者IP地址范围。