vendredi 27 février 2015

Configuration DNS Globalnamezone via powershell sur un serveur 2012

Bien le bonjour,

Aujourd'hui, un article sur l'implémentation d'une technologie apparue avec 2008 serveur, la globalnamezone (GNZ) et que l'on va configurer sur un windows serveur 2012 en powershell.

La GNZ permet de faire le même travail que le serveur WINS (ancêtre du DNS), c'est à dire effectuer une résolution de nom unique (nom simple, donc sans nom de domaine), une résolution de nom complétant le protocole Netbios dans les environnement multi-réseau physique.
Le but étant de définitivement supprimer ce service WINS qui est de plus en plus que ponctuellement utilisé.

Une fois la GNZ créée, il est nécessaire d'ajouter des enregistrements pour chaque nom devant être résolu par des vieux systèmes d'exploitation (NT4, 95, 98...).

#Je considère que le rôle DNS est installé
#Activez la GNZ
Set-DnsServerGlobalNameZone -Enable:$true

#Création de la GNZ
add-dnsserverprimaryzone -name GlobalNames -ReplicationScope forest -DynamicUpdate None

#Création d'un enregistrement
Add-DnsServerResourceRecordA -zone GlobalNames -name test -IPv4address 10.0.0.4

#Permet de privilégié la recherche dans la GNZ
set-DnsServerGlobalNameZone -GlobalOverLocal $true

Prochain article sur la gestion du vieillissement des enregistrements DNS via powershell.

Salutation, Guillaume

mercredi 25 février 2015

Création d'une zone primaire et secondaire sur un Windows serveur 2012

Bien le bonjour,

Un article sur la mise en place d'une zone primaire et secondaire sur un Windows serveur 2012 via powershell

#Rappel sur le fonctionnement DNS primaire/secondaire
Lors de la mise en place d'un serveur secondaire pour une zone, il est nécessaire que le primaire autorise le transfert de zone vers le secondaire.
Le secondaire possédera une copie en lecture seule de la zone primaire (aucune modification ne peut être effectuée à partir du secondaire sur la zone). Note : Ce principe ne s'applique pas si la zone est intégrée à Active Directory.
Les mises à jours de zone sont dépendantes du numéro de série qui s'incrémente à chaque modification dans la zone.
Pour la mise à jour de la zone, le serveur secondaire contacte le primaire et vérifie le numéro de série de la zone et le compare au numéro de série de la zone qu'il détient:
- Si le numéro de série du primaire est supérieur à celui du secondaire alors le secondaire demande un transfert de zone
- Si le numéro de série du primaire est inférieur et égal à celui du secondaire alors ce dernier ne fait pas de mise à jour.
Fonctionnement DNS primaire/secondaire
Fonctionnement DNS primaire/secondaire
##Information sur les éléments utilisés dans les commandes
#Serveur DNS primaire
Nom : srv-1.domaine.tld
IP : 10.0.0.10

#Serveur DNS secondaire
Nom : srv-2.domaine.tld
IP : 10.0.0.11

Nom de la zone DNS : domaine.tld


##Création d'une zone primaire directe stockée dans un fichier :
#Commandes à exécuter sur le serveur DNS primaire
Install-WindowsFeature DNS -IncludeManagementTools -IncludeAllSubFeature
Add-DnsServerPrimaryZone domaine.tld -ZoneFile domaine.tld.dns
#Ajouter un enregistrement NS pour le serveur DNS secondaire :
Add-DnsServerResourceRecord -NS -ZoneName domaine.tld -Name "." -NameServer srv2.domaine.tld
#Puis autoriser le transfert de zone et la notification vers les serveurs NS secondaires
Set-DnsServerPrimaryZone domaine.tld -SecureSecondaries TransferToZoneNameServer -Notify Notify

##Création d'une zone secondaire
#Commandes à exécuter sur le serveur DNS secondaire :
Install-WindowsFeature DNS -IncludeManagementTools -IncludeAllSubFeature
Add-DnsServerSecondaryZone domaine.tld -ZoneFile domaine.tld.dns -MasterServers 10.0.0.10
#Vérifier si le secondaire possède une copie des enregistrements de la zone 
Get-DnsServerResourceRecord domaine.tld
#Au besoin, forcer le transfert de zone
Start-DnsServerZoneTransfer -Name "domaine.tld"

Prochain article, Mise en place d'une globalname zone

Salutation, Guillaume

lundi 23 février 2015

Schéma de fonctionnement d'une résolution DNS avec une zone de stub

Bien le bonjour,

Aujourd'hui, petit point sur la zone de stub.
Le principe d'une zone de stub est de pouvoir contacter directement un serveur (NS) en charge de la zone.
Pour créer se type de zone, il faut le nom de la zone ainsi que l'ip d'un serveur (NS) DNS de la zone.
Cette commande permet de récupérer les serveurs NS de google.fr
Resolve-Dnsname -name google.fr -type NS

On l'utilise, tout comme le redirecteur conditionnel, souvent pour les relations d'approbations de domaine Active Directory.
Une zone de stub à la différence d'une zone secondaire ne nécessite pas une autorisation du serveur DNS primaire de la zone.
Une zone de stub ne contient que les enregistrements DNS suivant :
- SOA
- NS
- A permettant résoudre les noms associés aux SOA et NS

Schéma de fonctionnement d'une résolution DNS avec une zone de stub
Schéma de fonctionnement d'une résolution DNS avec une zone de stub

Prochain article, mise en place d'un serveur DNS primaire et secondaire dans un environnement Microsoft 2012 via powershell.

Salutation,
Guillaume

vendredi 20 février 2015

Schéma de fonctionnement d'une résolution DNS avec redirecteur conditionnel

Bien le bonjour,

Précédemment l'article portait sur le fonctionnement d'une résolution DNS avec redirecteur, je vais présenter le cas du fonctionnement d'une résolution DNS avec redirecteur conditionnel.
Un redirecteur conditionnel peut être utilisé pour faire en sorte que pour le domaine spécifié, un autre serveur DNS se charge de la requête.
Il est principalement utilisé pour les relations d'approbation dans un domaine Active Directory (cela permet de contacter directement un serveur DNS en charge de la zone) ou pour des raisons de sécurité.
Dans l'exemple un redirecteur conditionnel est définit sur le serveur local pour google.fr.
Toutes les requêtes DNS sont gérées par le serveur DNS local exceptées celle de google.fr qui sont renvoyées à un autre serveur DNS qui est en charge d'effectuer la requête.

Schéma de fonctionnement d'une résolution DNS avec redirecteur conditionnel
Schéma de fonctionnement d'une résolution DNS avec redirecteur conditionnel
Prochain article, fonctionnement de la zone de stub.

Salutation,
Guillaume

mercredi 18 février 2015

Schéma de fonctionnement d'une résolution DNS avec redirecteur

Bien le bonjour,

Après le schéma du fonctionnement d'une requête DNS classique, voici le schéma de la même requête mais un serveur DNS configuré en redirecteur.
Dans cette configuration, le serveur DNS se comporte comme un client DNS et demande à un autre serveur DNS de faire le travail.
La configuration d'un serveur DNS en redirecteur peut être utilisé :
- Pour des raisons de sécurité : seul 1 ou 2 serveurs DNS sont autorisés à effectuer des requêtes sur internet)
- Pour limiter les flux DNS sortants sur le net : Utile si vous vous retrouver avec plus de 50 serveurs DNS sur votre réseau (vive les formations systèmes et réseau) et que votre box/routeur déclare forfait face à tout cela (nombre de connexions maximales gérées atteintes, même pas un problème de bande passante...).

Schéma de fonctionnement d'une résolution DNS avec redirecteur
Schéma de fonctionnement d'une résolution DNS avec redirecteur

Prochain article, Schéma de fonctionnement d'une résolution DNS avec redirecteur conditionnel cette fois.

Salutation,
Guillaume

lundi 16 février 2015

Schéma de fonctionnement d'une résolution DNS classique

Bien le bonjour,

Voici un schéma illustrant les étapes d'une résolution DNS classique.
Le schéma ne prend pas en compte le cache DNS côté client et côté serveur DNS local.
Toutes les requêtes sont effectuées en UDP sur le port 53.

Schéma de fonctionnement d'une résolution DNS classique
Schéma de fonctionnement d'une résolution DNS classique
Prochain article, schéma de fonctionnement d'une résolution DNS avec un serveur DNS configuré en redirecteur.

Salutation,
Guillaume


vendredi 13 février 2015

Powershell DNS - Les commandes côté client

Bien le bonjour,

Pour aujourd'hui, un petit point sur les commandes powershell permettant de gérer le DNS côté client

#Afficher le cache DNS
Get-dnsclientcache

#Afficher les enregistrement du cache DNS issues du fichier hosts
Get-DnsClientCache -TimeToLive 86400
#Vider le cache dns
Clear-DnsClientCache

#Affiche la liste des suffixes DNS
Get-DnsClient

#Enregistrer l'ip au niveau du serveur DNS
Register-DnsClient

#Afficher la liste des serveurs dns
Get-DnsClientServerAddress

#Vérifier la résolution de nom
Resolve-Dnsname

#Effectuer une requête pour un type d'enregistrement précis
Resolve-Dnsname google.fr -type NS

#Effectuer une requête en n'utilisant que le DNS (pas d'utilisation du cache, du netbios ou LLMNR)
Resolve-DnsName www.google.fr -dnsOnly

#Effectuer une requête en n'utilisant DNSSEC
Resolve-DnsName www.google.fr -dnssecok

Pour le reste get-help Resolve-DnsName

Prochain article, schéma des étapes d'une résolution DNS classique

Salutation,
Guillaume

mercredi 11 février 2015

Utiliser la cmdlet powershell test-netconnection

Bien le bonjour,

La commandlet test-netconnection permet en plus de pinger, de vérifier les ports tcp et et d'effectuer un traceroute, tout en affichant plus d'informations que test-connection.

#Vérifier la connectivité internet du poste courant
test-netconnection

#Vérifier la connectivité internet d'un poste spécifique
test-netconnection srv-1.domaine.tld

#Vérifier la connectivité internet d'un poste spécifique avec des informations détaillées
test-netconnection srv-1.domaine.tld -informationlevel detailed

#Vérifier la connectivité réseau en n'affichant en renvoyant $true ou $false
test-netconnection srv-1.domaine.tld -informationlevel quiet

#Vérifier l'accessibilité d'un service (seulement SMB, HTTP et RDP disponibles)
test-netconnection www.domaine.tld -CommonTCPPort HTTP

#Vérifier l'accessibilité d'un service TCP
test-netconnection www.domaine.tld -Port 80

#Effectuer un traceroute
test-netconnection www.google.fr -traceroute

Pour le reste get-help test-netconnection est votre ami.

Prochain article sur les commandes powershell liées au DNS côté client.

Salutation,
Guillaume

lundi 9 février 2015

Utiliser la cmdlet powershell test-connection

La commandlet test-connection est un "équivalent" de la commande ping

#Vérifier la connectivité réseau
test-connection srv-1.domaine.tld

#Vérifier la connectivité réseau de plusieurs postes
test-connection srv-1,srv-2,srv-3

#Vérifier la connectivité réseau en spécifiant 1 requête ICMP
test-connection srv-1.domaine.tld

#Vérifier la connectivité réseau en n'affichant pas les erreurs lorsque les postes sont indisponibles (renvoi  $true ou $false)
test-connection srv-1,srv-2,srv-3 -quiet

#Exemple d'utilisation
#Lister les postes de l'Active Directory et effecture une action sur les postes
$computers = Get-ADComputer -filter *
$computers.name | foreach {
if (Test-Connection $_ -Count 1 -Quiet ) {
#effectuer l'action ou le test désiré sur le poste en ligne
                                            }
                            } 

Pour le reste, je vous laisse regarder l'aide.

Prochaine article sur la cmdlet test-netconnection apparue avec powershell v4.

dimanche 8 juin 2014

Powershell : journal d'événements (get-eventlog et get-winevent)


Un article sur la gestion des événements en powershell.

Afficher les événements

Lister les événements classiques :
Get-eventlog -list

Lister tous les événements :
Get-winevent -listlog * | select logname

Lister les événements de sécurité dans les 100 dernières entrées
get-eventlog -new 100 -Logname Security

Lister les événements de sécurité dans les 100 dernières entrées (ouverture de session : 4624, fermeture de session 4634) pour un utilisateur (guillaume, syntaxe simple mais peu précise)
get-eventlog -new 100 -Logname Security -InstanceId 4624,4634 -Message "*guillaume*" | fl TimeWritten,entrytype,eventid,message

Même commande mais autre syntaxe, en utilisant le splatting :
$params = @{ new= 100
                        logname= "security"
                        instanceid = 4624,4634
                        message = "*guillaume*"  }
get-eventlog @params | fl TimeWritten,entrytype,eventid,message

Afficher un événement spécifique via id (index) :
Get-eventlog -logname system -Index 227211 | fl

Afficher les événements datant de 2 jours maximum 
$jours=(Get-Date).AddDays(-2)
Get-Eventlog -LogName "security" | Where-Object {$_.TimeGenerated -ge $jours}
ou
Get-WinEvent -LogName "security" | Where-Object {$_.TimeCreated -ge $jours}

Exporter et importer

Exporter les événements :
Get-EventLog System | Export-CliXml "c:\temp\eventsystem.clixml"

Vous pouvez ensuite travailler sur l'élément exporté :
$systemlogs = Import-CliXml "c:\temp\eventsystem.clixml"
$systemlogs | fl TimeWritten,entrytype,eventid,message

Vous pouvez aussi exporter les événements avec la commande suivante :
wevtutil epl System "c:\temp\eventsystem.evtx"
Et utiliser le fichier dans powershell de la manière suivante
Get-winevent -path "c:\temp\eventsystem.evtx"

Création d'événement et de catégories

Création de catégories
New-EventLog -Logname Script -Source eventtest
Logname : nom de la catégorie
Source : nom de l'élément (application) qui inscrit les événements dans le journal

Suppression d'une catégorie
Remove-EventLog -LogName script

Suppression d'une source
Remove-EventLog -Source eventtest

Inscrire un événement :
Write-EventLog -LogName script -Source eventtest -EventId 1234 -Message "Bonjour à tous"


vendredi 30 mai 2014

Powershell v3 et le réseau

Un petit article sur les cmdlets Powershell de gestion du réseau apparues avec Windows serveur 2012 pour ceux qui souhaitent faire du pure Powershell.
J'indique les commandes classiques (anciennes ???) au passage.
Bien sûr je ne vais pas développer toutes commandes.

Lister les commandes réseau tcpip :
Get-Command -Module nettcpip

Afficher la configuration réseau

Ancienne méthode :
ipconfig /all

Nouvelle méthode :
Get-NetIPConfiguration -All

Définir une IP fixe, passerelle par défaut et DNS

Ancienne méthode :
netsh interface ip set address "nom_de_la_carte_réseau" static 192.168.0.2 255.255.255.0 192.168.0.1 1
netsh interface ip set dns "nom_de_la_carte_réseau" static 192.168.0.1

Nouvelle méthode :
New-NetIPAddress 192.168.0.2 -PrefixLength 24 -InterfaceIndex 12 -DefaultGateway 192.168.0.1
Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 192.168.0.1,192.168.0.3
Interfaceindex est disponible via notamment la commande Get-NetAdapter

Afficher la table arp

Ancienne méthode :
arp -a

Nouvelle méthode :
Get-NetNeighbor -AddressFamily IPv4

Créer une arp statique

Ancienne méthode :
netsh interface ipv4 add neighbors "InterfaceName" "192.168.0.1 " "01-23-45-67-89-ab " store=persistent

Nouvelle méthode :
New-NetNeighbor InterfaceIndex 21 IPAddress 192.168.0.1 -LinkLayerAddress 0123456789ab

Supprimer une arp statique

Ancienne méthode :
netsh interface ipv4 del neighbors "InterfaceName" "192.168.0.1" "01-23-45-67-89-ab" store=persistent

Nouvelle méthode :
Remove-NetNeighbor 192.168.0.1

Afficher les connections réseau

Ancienne méthode :
netstat -a

Nouvelle méthode :
Get-NetTCPConnection
Get-NetUDPEndpoint

Afficher la table de routage

Ancienne méthode :
route print

Nouvelle méthode :
Get-NetRoute -AddressFamily IPv4

Ajouter une route

Ancienne méthode
route add -p 10.0.0.0/24 192.168.0.1

Nouvelle méthode
New-NetRoute 10.0.0.0/24 InterfaceIndex 12 NextHop 192.168.0.1
Interfaceindex est disponible via notamment la commande Get-NetAdapter.

 Supprimer une route

Ancienne méthode
route delete 10.0.0.0/24

Nouvelle méthode
Remove-NetRoute 10.0.0.0/24

samedi 14 janvier 2012

Serveur DHCP Windows en Workgroup non autorisé

Lors de la mise en place d’un serveur DHCP sous Windows serveur non membre d’un domaine, il arrive que le DHCP ne fonctionne pas après une configuration correcte.
La console DHCP nous gratifie d’une jolie flèche rouge en nous invitant à autoriser le serveur DHCP dans le domaine Active Directory.
Ca serait-y pas qu’on aurait un DHCP autorisé membre d’un domaine sur le même réseau??

Explication

Un serveur DHCP autonome vérifie automatiquement s’il existe d’autres serveurs DHCP sous Windows et qui eux sont autorisés dans un domaine Active Directory.
Pour cela, le serveur envoi un message d’information DHCP INFORM contenant plusieurs types d'options spécifiques connues et prises en charge par les autres serveurs DHCP exécutant Windows Serveur. Si un serveur DHCP autorisé dans un domaine reçoit le message, il renvoi les informations du domaine racine Active Directory. Si le serveur DHCP reçoit une réponse il ne s’initialise pas, dans le cas contraire il fonctionne tout à fait normalement et relance un DHCP INFORM toutes les 60 minutes.

Résolution

Pour changer la fréquence de vérification, suivre le lien suivant kb297847 et viser la clé de registre RogueAuthorizationRecheckInterval .
Pour résoudre le problème et permettre au serveur DHCP de fonctionner, il suffit de modifier une autre clé de registre :
Dans
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DHCPServer\Parameters
Modifier la clé
DisableRogueDetection
En indiquant la valeur : 1
Il suffit ensuite de redémarrer le serveur Windows pour valider le changement

Cette dernière clé de registre est aussi proposée par Microsoft pour corriger un problème de consommation mémoire trop importante du serveur DHCP sur un serveur 2008 en workgroup. Voir le kb949530.

Pour plus d’information vous pouvez bouquiner ces liens :
Autorisation des serveurs DHCP
DHCP: Rogue detection should be enabled

samedi 16 juillet 2011

Powershell script - générer un mot de passe aléatoire

Voici un script Powershell permettant de créer un mot de passe aléatoire en spécifiant le nombre de caractères ainsi qu'un niveau de complexité fort, moyen, faible.
Rien de bien exceptionnel, c'était juste pour améliorer mon skill sur ce langage mais je le poste tout de même si toutefois ça peut servir!

<#
.INFORMATIONS
Auteur : Guillaume Blin
Date : 16 juillet 2011

.DESCRIPTION
Ce script permet de générer des mots de passe de la longueur voulue en fonction de 3 niveaux de complexité disponibles.

La base de ce script est un script de John T Childers III disponible à cette adresse :
http://powershellcommunity.poshcode.org/2793

L'idée était de voir si j'étais capable de simplifier le code et d'améliorer aussi mes connaissances en powershell.

Pour ce faire, j'ai utilisé la possibilité de définir des caractères grâce à leur numéro ascii, permettant ainsi d'alléger un peu le code.
Un array composé de numéros ascii des caractères est renvoyé dans une boucle foreach pour être converti en caractère

J'ai ensuite supprimé les boucles for avec le write-host -nonewline qui permettait d'ajouter une lettre à côté de la précédente à chaque boucle.
Pour recréer le même résultat :
- Premièrement, j'ai renvoyé le résultat l'array contenant mes caractères dans get-random avec le commutateur -count qui permet d'indiquer combien d'objets (des caractères dans notre cas) sont retournés
- Deuxièmement, le résultat affichant 1 caractère par ligne, j'ai utilisé -join pour joindre le résultat sur plusieurs lignes de get-random et en faire une ligne unique

.UTILISATION
Par défaut, génère un mot de passe avec les options haute complexité et longueur 9 caractères
get-password

Définir un mot de passe de 8 caractères ainsi qu'un niveau de complexité moyen
get-password -l 8 -c m
ou
get-password 8 m
#>

function get-password {
#Paramètres de configurations
Param (
#Définis la longueur du mot de passe
[Alias("-l")]
[
Int]$longueur = 9,

#Définis le niveau de complexité du mot de passe ( h:hight, m:medium, l:low )
[Alias("-c")]
[ValidateSet(
"h","m","l")]
[
String]$complexite = "h" )

Process {
#48..57 : 012...789
#65..90 : ABC...XYZ
#97..122 : abc...xyz
#35..38+40..43+45,47,33+60..64+92,94,95,123,125 : # $ % & ( ) * + - / ! < = > ? @ \ ^ _ { }

# Chiffres, miniscules, majuscules et caractères spéciaux
$H = 35..38+40..43+45,33+47..57+60..90+92,94,95+97..123+125 | Foreach-Object { "$([char]$_)" }

# Chiffres, miniscules et majuscules
$M = 48..57+65..90+97..122 | Foreach-Object { "$([char]$_)" }

# Miniscules et majuscules
$L = 65..90+97..122 | Foreach-Object { "$([char]$_)" }

#Switch pour générer le mot de passe en fonction de la longueur et de la compléxité
Switch ($complexite) {
h { -join ($H | Get-Random -count $longueur) }
m {
-join ($M | Get-Random -count $longueur) }
l {
-join ($L | Get-Random -count $longueur) }
} }}

dimanche 10 avril 2011

Les RSAT pour windows 7 SP1 sont disponibles

Les RSAT pour windows 7 SP1 sont enfin disponibles en téléchargement.

Pour rappel, il n'était pas possible d'installer les RSAT sur un Windows 7 service pack 1.

"Les Outils d’administration de serveur distant pour Windows® 7 avec SP1 permettent aux administrateurs informatiques de gérer des rôles et des fonctionnalités installés sur des ordinateurs Windows Server® 2008 R2, Windows Server® 2008 ou Windows Server® 2003 à partir d’un ordinateur distant fonctionnant sous Windows 7 ou Windows 7 avec SP1."
 
Remote Server Administration Toolkit pour Windows 7 SP1