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
BaseUrletSlugpar 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
New-NetFirewallRule: https://learn.microsoft.com/en-us/powershell/module/netsecurity/new-netfirewallrule- gestion de Windows Firewall en ligne de commande : https://learn.microsoft.com/windows/security/operating-system-security/network-security/windows-firewall/configure-with-command-line