Вскоре я поеду в страну с менее мягкими законами в отношении свободы слова.
У меня машина с Windows 10. Я хочу заблокировать возможность этой машины общаться на всех интерфейсах, кроме VPN-туннеля (есть сетевой порт и WiFi). Если VPN-туннель не работает по какой-либо причине, сетевой трафик не разрешен. Даже по локальной сети.
Если с Windows Server это сделать проще, я с радостью перейду.
Я нашел несколько сообщений о брандмауэре Windows, которым я пытался следовать, но по моему опыту он не улавливает все (хотя могут быть ошибки с моей стороны).
У меня также есть программное обеспечение, такое как Windscribe VPN, но мне удалось обойти его брандмауэр, когда он выходит из строя, поэтому я не доверяю ему, и, похоже, он вообще не блокирует запросы DNS (я ловил много запросов DNS в PiHole когда Windscribe блокировал)
Можно ли этого добиться с помощью какой-нибудь умной оболочки питания?
Спасибо за помощь!
Самый простой способ добиться этого - использовать функцию LockDown VPN в Windows 10. С помощью этой функции весь трафик должен проходить ТОЛЬКО через VPN и не может проходить через другие интерфейсы (кроме трафика, необходимого для установления базового подключения, а также подключения VPN). Дополнительная информация при развертывании этой функции @ https://docs.microsoft.com/en-us/windows/client-management/mdm/vpnv2-csp
Пример XML профиля VPN для такой конфигурации выглядит следующим образом:
<VPNProfile>
<LockDown>true</LockDown>
<RememberCredentials>true</RememberCredentials>
<DnsSuffix>enter.dnsSuffix.forVPNInterface</DnsSuffix>
<NativeProfile>
<Servers>enterserveraddress.com</Servers>
<Authentication>
<UserMethod>Eap</UserMethod>
<MachineMethod>Eap</MachineMethod>
<Eap>
<Configuration>
<EapHostConfig xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><EapMethod><Type xmlns="http://www.microsoft.com/provisioning/EapCommon">13</Type><VendorId xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorId><VendorType xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorType><AuthorId xmlns="http://www.microsoft.com/provisioning/EapCommon">0</AuthorId></EapMethod><Config xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><Eap xmlns="http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1"><Type>13</Type><EapType xmlns="http://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV1"><CredentialsSource><CertificateStore><SimpleCertSelection>true</SimpleCertSelection></CertificateStore></CredentialsSource><ServerValidation><DisableUserPromptForServerValidation>false</DisableUserPromptForServerValidation><ServerNames></ServerNames></ServerValidation><DifferentUsername>false</DifferentUsername><PerformServerValidation xmlns="http://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV2">false</PerformServerValidation><AcceptServerName xmlns="http://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV2">false</AcceptServerName></EapType></Eap></Config></EapHostConfig>
</Configuration>
</Eap>
</Authentication>
</NativeProfile>
</VPNProfile>
Сценарий Powershell для подачи этого XML-кода профиля VPN также будет выглядеть следующим образом. Обратите внимание, что для запуска вам нужно будет запустить сценарий PS как систему, используя PSexec из: https://technet.microsoft.com/sysinternals/bb897553.aspx, запустив Psexec.exe -i -s cmd.exe
Param(
[string]$xmlFilePath,
[string]$ProfileName
)
$a = Test-Path $xmlFilePath
echo $a
$ProfileXML = Get-Content $xmlFilePath
echo $XML
$ProfileNameEscaped = $ProfileName -replace ' ', '%20'
$Version = 201606090004
$ProfileXML = $ProfileXML -replace '<', '<'
$ProfileXML = $ProfileXML -replace '>', '>'
$ProfileXML = $ProfileXML -replace '"', '"'
$nodeCSPURI = './Vendor/MSFT/VPNv2'
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_VPNv2_01"
$session = New-CimSession
try
{
$newInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", "$nodeCSPURI", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", "$ProfileNameEscaped", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ProfileXML", "$ProfileXML", 'String', 'Property')
$newInstance.CimInstanceProperties.Add($property)
$session.CreateInstance($namespaceName, $newInstance)
$Message = "Created $ProfileName profile."
Write-Host "$Message"
}
catch [Exception]
{
$Message = "Unable to create $ProfileName profile: $_"
Write-Host "$Message"
exit
}
$Message = "Complete."
Write-Host "$Message"
Дополнительную информацию о параметрах VPN в Windows 10 можно найти @ https://docs.microsoft.com/en-us/windows/access-protection/vpn/vpn-security-features