Ce guide applique les publications Phase 19 à Windows Defender Firewall avec PowerShell.

Le script fourni :

windows/Sync-Blocklist.ps1

utilise les routes publiques IPv4/IPv6, revalide via ETag, valide le contenu, crée une nouvelle version des règles, puis supprime l'ancienne version uniquement après succès complet.

1. Principe

Windows Firewall accepte des adresses distantes sous forme :

  • IP unique ;
  • sous-réseau IPv4/IPv6 avec préfixe CIDR ;
  • plage d'adresses.

La publication Phase 19 fournit précisément une IP/CIDR par ligne.

Au lieu de créer 50 000 règles indépendantes, le script groupe plusieurs réseaux dans la propriété RemoteAddress d'une même règle.

Valeur d'exemple : 500 réseaux par règle.

2. Installation

Créer le répertoire :

New-Item -ItemType Directory -Path 'C:\Program Files\BlocklistSync' -Force

Copier :

Sync-Blocklist.ps1

vers :

C:\Program Files\BlocklistSync\Sync-Blocklist.ps1

L'état est stocké par défaut dans :

C:\ProgramData\BlocklistSync

3. Premier test

Ouvrir PowerShell en administrateur :

& 'C:\Program Files\BlocklistSync\Sync-Blocklist.ps1' `
  -BaseUrl 'https://blocklist.example.net' `
  -Slug 'all'

Résultat attendu :

Applied slug=all version=<hash> IPv4=<n> IPv6=<n>

Lister les règles :

Get-NetFirewallRule | Where-Object Name -Like 'BlocklistSync-all-*' |
    Select-Object Name, Enabled, Direction, Action

Afficher les filtres d'adresses :

Get-NetFirewallRule | Where-Object Name -Like 'BlocklistSync-all-*' |
    Get-NetFirewallAddressFilter

4. Mise à jour sans trou de protection

Pour une nouvelle publication, le script calcule une version courte à partir du contenu et crée d'abord :

BlocklistSync-all-<version>-v4-0
BlocklistSync-all-<version>-v4-1
...
BlocklistSync-all-<version>-v6-0
...

Ensuite seulement, si toutes les nouvelles règles ont été créées, il supprime les règles d'ancienne version.

Conséquences :

  • pendant quelques instants, ancienne et nouvelle versions peuvent coexister ;
  • il n'y a pas de fenêtre volontaire où aucune règle n'existe ;
  • si la création échoue, les règles partielles de la nouvelle version sont retirées et l'ancienne version reste active.

5. Direction du filtrage

Le script fourni crée des règles :

-Direction Inbound -Action Block -Profile Any

C'est le comportement recommandé pour bloquer des sources malveillantes qui contactent le serveur.

Ne créez des règles Outbound que si vous souhaitez aussi empêcher la machine de se connecter vers les réseaux publiés ; c'est une politique différente.

6. Profil Phase 19 selon le rôle du serveur

Exemples :

-Slug 'rdp'

pour une passerelle RDP, ou :

-Slug 'all'

pour un filtrage global.

Autres profils standards documentés : ssh, web, mail, tcp-22, tcp-25, tcp-443, tcp-3389.

7. Planifier toutes les 5 minutes

Avec schtasks.exe, depuis un terminal administrateur :

schtasks /Create /F /SC MINUTE /MO 5 /TN "Blocklist Sync" /RU SYSTEM /RL HIGHEST /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File \"C:\Program Files\BlocklistSync\Sync-Blocklist.ps1\" -BaseUrl \"https://blocklist.example.net\" -Slug \"all\""

Lancer immédiatement :

schtasks /Run /TN "Blocklist Sync"

Afficher l'état :

schtasks /Query /TN "Blocklist Sync" /V /FO LIST

Supprimer la tâche :

schtasks /Delete /F /TN "Blocklist Sync"

L'intervalle de 5 minutes est un exemple client. ETag évite normalement de retélécharger une publication inchangée.

8. ETag et cache

Le script conserve :

C:\ProgramData\BlocklistSync\all-state.json
C:\ProgramData\BlocklistSync\all-ipv4.txt
C:\ProgramData\BlocklistSync\all-ipv6.txt

Si le serveur renvoie HTTP 304, la copie locale précédente est revalidée puis réutilisée.

Si le serveur renvoie 404/503 ou si la connexion échoue, le script lève une erreur sans supprimer les règles actives.

9. Liste vide

Une réponse HTTP 200 avec un fichier vide est valide selon Phase 19.

Si IPv4 et IPv6 deviennent tous les deux vides après une nouvelle publication valide, le script crée la nouvelle version logique puis retire les anciennes règles : le résultat attendu est donc l'absence de règles BlocklistSync pour ce slug.

Cette situation est différente d'un 404, 503 ou timeout, qui conserve la dernière version valide.

10. ChunkSize

Par défaut :

-ChunkSize 500

Pour diagnostiquer une limite locale :

-ChunkSize 200

Un chunk plus petit produit davantage de règles ; un chunk plus grand réduit leur nombre mais crée des objets plus volumineux. Mesurez sur la version de Windows Server réellement déployée.

11. Retrait manuel

Supprimer uniquement les règles de ce synchroniseur :

Get-NetFirewallRule | Where-Object Name -Like 'BlocklistSync-all-*' |
    Remove-NetFirewallRule

Pour un autre slug, remplacez all.

12. Déploiement GPO

Dans un parc Active Directory, vous pouvez :

  • distribuer le script par GPO / outil de gestion ;
  • créer la tâche planifiée sous SYSTEM ;
  • fournir BaseUrl et Slug par unité d'organisation ou rôle serveur.

Évitez en revanche de déployer directement la liste complète comme milliers de règles GPO : cela couple fortement la politique AD à une donnée dynamique et complique les mises à jour fréquentes.

13. Références externes Microsoft

Fichiers prêts à adapter