Bloquer l’usage du DoH sur Windows

Le DoH DNS over HTTPS va devenir un vrai casse-tête pour les administrateurs réseau et système. Il a été conçu pour bloquer la censure dans les pays où la liberté d’expression serait limitée. C’est évidemment un leurre dans la mesure où il suffit de bloquer les adresses IP de ces serveurs DoH pour empêcher les requêtes  DNS en HTTPS.

Le DoH dans les navigateurs

Sur Chromium, allez dans Paramètres > Confidentialité et sécurité > Sécurité ou tapez à partir de la barre d’adresses de votre navigateur chrome://settings/security. Et désactivez Utilisez un DNS sécurisé. Ce service est surtout fait pour piller vos données personnelles. Les GAFAM et d’autres pourront ainsi collecter tous les sites sur lesquels vous êtes allés. OpenDNS appartient à Cisco. Sur Chromium, il n’est pas activé par défaut. Sur Google Chrome, Edge, Opera, Vivaldi, Brave et compagnie, je n’ai pas été voir.

Chromium > Paramètres > Confidentialité et sécurité > Sécurité > Utiliser un DNS sécurisé

Pour Firefox, c’est vraiment pas mieux, même s’il n’est pas activé par défaut. Allez dans Paramètres > Vie privée et sécurité > Mode HTTPS uniquement.

Firefox > Paramètres > Vie privée et sécurité > Mode HTTPS uniquement

Le client DNS

Le client DNS ou Dnscache présent sur les systèmes Microsoft peut être configuré pour faire du DoH. Il n’est pas activé par défaut. Il faut créer la valeur DWORD  EnableAutoDoh > 2 dans la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters. Vous pouvez aussi couper ce service qui a tout de même l’intérêt de mettre en cache votre résolution DNS.

Regedit > HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters > EnableAutoDoh > 2

Pour ma part, j’utilise Unbound. A souligner que ce redirecteur DNS peut être configuré en DoH !

Bloquer les adresses de serveurs publics DoT

J’ai trouvé sur le site AdGuard DNS la liste des serveurs publics utilisables en DoH. J’ai scrappé la page en PowerShell, pour en extraire une liste d’adresses Ip v4 et v6 des serveurs DoH répertoriés, que j’ai décidé de bloquer au niveau du pare-feu Windows.

[string[]] $ips=@()
Clear-Host
#Get your user agent from https://dsfc.net/useragent.php
$ua='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'
$url='https://adguard-dns.io/kb/fr/general/dns-providers/'
$page=Invoke-WebRequest -Uri $url -UserAgent $ua
$codes=$page.content|Select-String -Pattern '<code>([^<]+)</code>' -AllMatches
ForEach($code in $codes.Matches)
{
  $element=$code.Value -replace '</?code>',''
  $element=$element -replace '^(tls|https?|quic)://',''
  $element=$element -replace '/[^$]*$',''
  $element=$element -replace '([a-z]):[0-9]{2,5}$','$1'
  $element=$element -replace '^\[([^\]]+)\]','$1'
  $element=$element -replace ':[0-9]{2,5}',''
  If($element -notmatch ':' -and $element -match '[a-z]')
 {
    $addresses=Resolve-DnsName -Name $element -type A_AAAA -ErrorAction SilentlyContinue|Select-Object -Property IPAddress
    If($addresses.Count -gt 0)
    {
      ForEach($address in $addresses)
      {
        if($address.IPAddress)
        {
          $ips+=($address.IPAddress).Trim()
        }
      }
    }
  }
  else
  {
    $ips+=$element.Trim()
  }
}
$ips=$ips|Sort-Object -Unique|Where { -not($_ -Match '[0-9a-fA-F]{5,}' -or $_ -Match '^([0-9a-fA-F]{1,4}:?){1,6}$') }
Remove-NetFirewallRule -DisplayName 'DNS interdits'-ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName 'DNS interdits' -Name 'DNS interdits' -Enabled True -Action Block -Direction Outbound -RemoteAddress $ips

Réseau /