Назад | Перейти на главную страницу

Блокировать весь трафик без VPN

Вскоре я поеду в страну с менее мягкими законами в отношении свободы слова.

У меня машина с 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 '<', '&lt;'
$ProfileXML = $ProfileXML -replace '>', '&gt;'
$ProfileXML = $ProfileXML -replace '"', '&quot;'
$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