Archivi categoria: Articoli

PowerShell Direct: un nuovo modo di gestire le VM

Facebooktwittergoogle_plusredditlinkedin

Con l’arrivo di Windows Server 2016, e conseguentemente di Windows 10, Microsoft ha deciso di introdurre una funzionalità molto interessante per tutti coloro che intendono effettuare operazioni remote in ambienti virtuali.

PowerShell Direct consente di eseguire PowerShell in modo arbitrario all’interno di una macchina virtuale direttamente dall’host Hyper-V, indipendentemente dalle impostazioni di configurazione di rete o di gestione remota.

Per accedere a questa funzionalità è necessario che le VM siano basate su Windows 10 o Windows Server 2016 (e superiori).

Ma perché si dovrebbe usare questa modalità invece del classico PSSession, già disponibile dai tempi di Windows Server 2008 R2? Il motivo va ricercato nel fatto che è possibile collegarsi anche a macchine prive di network o che risiedono in reti diverse da quelle dell’host; inoltre PowerShell Direct consente di avere un canale diretto tra host e VM.

Requisiti di Configurazione

Per poter utilizzare PS Direct, è necessario assicurarsi che le seguenti condizioni siano rispettate:

  • La macchina virtuale deve essere eseguita localmente nell’host
  • La macchina virtuale deve essere attivata e in esecuzione con almeno un profilo utente configurato
  • È necessario accedere al computer host come amministratore di Hyper-V
  • È necessario specificare credenziali utente valide per la macchina virtuale

Creare una Sessione Remota

Per accedere alla macchina virtuale è sufficiente eseguire il comando: Enter-PSSession -VMName nomevm – come mostrato nella figura 1.

Figura 1 – Nuova Sessione PS

Una volta inserite, potrete iniziare a lavorare all’interno della macchina virtuale sfruttando i cmdlet messi a disposizione dalla stessa macchina, come mostra la figura 2. In questo caso è possibile eseguire comandi relativi a Docker, perché si trovano all’interno della macchina a cui mi sto collegato (comandi non disponibili nell’host Hyper-V).

Figura 2 – Esecuzione Comandi

Le connessioni basate su Enter-PSSession sono temporanee e questo significa che ogni volta che si esce, è necessario inserire nuovamente le credenziali di accesso.

Utilizzo Comandi Complessi

La semplice connessione può essere utile per quegli scenari in cui bisogna svolgere attività minori, mentre per attività più strutturate possiamo utilizzare Invoke-Command. Questo comando è perfetto per le situazioni in cui è necessario eseguire un comando, o uno script, su una macchina virtuale in modalità non controllata.

La sintassi può essere di due modi:

Comando: Invoke-Command -VMName nomevm -ScriptBlock { Get-Service }

Script: Invoke-Command -VMName nomevm -FilePath “C:\hyperv-folder\script.ps1”

Figura 3 – Esecuzione Comando

Copia File

Uno dei punti chiave di questa soluzione è sicuramente la possibilità di effettuare copia di file dall’host verso la macchina virtuale. Per usare il cmdlet Copy-Item è necessario però lavorare con una sessione persistente. Queste, una volta create, rimangono in background finché non si decide di eliminarle. Perciò è possibile fare riferimento più volte alla stessa sessione con senza passare credenziali.

Ecco un esempio per inviare dati verso una macchina virtuale:

$VM = New-PSSession -VMName nomevm -Credential (Get-Credential)

Copy-Item -ToSession $VM -Path C:\hyperv-folder\app.exe -Destination C:\guest-vm\

Figura 4 – Copia File

Le performance di questa operazione sono interessanti, perché grazie al VMBus si va a saltare lo strato di driver relativi alla scheda di rete e quindi la copia avviene in modo più rapido. Ovviamente tutto questo dipende anche dalla tipologia di file che vogliamo copiare, così come dalle prestazioni della macchina virtuale (se il vhdx si trova su un disco SSD sarà più veloce che su un disco SATA).

Veeam B&R e PowerShell Direct

Per offrire un livello di protezione delle macchine virtuali in modo avanzato, Veeam Backup & Replication utilizza un componente chiamato Guest Interaction Proxy, che ha il compito di eseguire i seguenti task:

  • Application-aware processing
  • Guest file system indexing
  • Transaction logs processing

Il processo viene eseguito e chiamato in ogni singola VM e consente la comunicazione anche se gli ambienti sono separati tra di loro.

Figura 5 – Guest Interaction Proxy

Importante ricordare che questo ruolo è disponibile solo per le licenze Enterprise ed Enterprise Plus. Per maggiori informazioni su come opera il GIP, potete consultare il seguente link: https://helpcenter.veeam.com/docs/backup/hyperv/guest_interaction_proxy.html?ver=95

Ovviamente la rete è uno dei punti critici di questo processo ma in caso di interruzioni o problemi, PowerShell Direct può intervenire per evitare errori in fase di backup. I requisiti lato host sono un server Hyper-V 2016, mentre le guest machine sono Windows 10 o Windows Server 2016 e superiori.

Figura 6 – PS Direct in Backup & Replication

Conclusione

PowerShell Direct consente di automatizzare facilmente le attività all’interno delle macchine virtuali senza la necessità di accedere al sistema operativo guest tramite GUI. Utile l’integrazione nativa in Backup & Replication che evita errori in caso di problemi.

Ricordate che una sessione interattiva consente di continuare l’attività di amministrazione in base all’output restituito dalla VM, ma con il comando Invoke-Command potete lanciare task avanzati.

Veeam Backup & Replication: recuperare le GPO

Facebooktwittergoogle_plusredditlinkedin

Uno degli scenari più frequenti che mi capita dover affrontare, quando mi trovo dai clienti, è il recupero delle Group Policy Object che vengono eliminate. Microsoft mette a disposizione diverse armi da questo punto di vista, a cominciare dal Recycle Bin di Active Directory, presente da Windows Server 2008 R2, che permette di recuperare gli oggetti eliminati entro un certo periodo di tempo.

Figura 1 – Recycle Bin AD

Un altro modo per proteggersi, è creare dei backup direttamente dalla console delle GPO, che permette di ripristinare le policy con il valore aggiunto di fare un rollback in caso si sia modificata una policy in modo errato.

Figura 2 – Backup GPO

Esiste anche una terza via, che è quella di utilizzare Microsoft Advanced Group Policy Management, un prodotto presente all’interno della suite MDOP, che permette di effettuare backup avanzati, fare restore, comparazioni e molto altro ancora.

Veeam Restore for Active Directory

Per chi volesse la vita semplificata, è possibile utilizzare Veeam Backup & Replication per fare il recupero degli oggetti Active Directory. Grazie all’integrazione nativa, introdotta dalla versione 8, è possibile ripristinare non solo utenti e gruppi, ma anche GPO eliminate.

NB: il restore funziona solo se si attiva l’Application-Aware Support.

Figura 3 – Ripristino AD Objects

La procedura di recupero è identica a quella adottata per gli altri oggetti, perciò avremo la nostra timeline in cui effettuare il restore, con annesse note.

Figura 4 – Timeline

Figura 5 – Elenco Oggetti

La cosa interessante della soluzione, sta nel poter effettuare le seguenti operazioni:

  • Restore su un Domain Controller
  • Export
  • Compare

Proprio il compare è una di quelle funzioni che può aiutare gli IT admin a fare non solo un ripristino, ma volendo è possibile recuperare solo la parte modificata. Ad esempio, potremmo avere la necessità di ripristinare solo le security policy perché qualcuno ha cancellato i target users.

Figura 6 – Confronto GPO

Non è possibile verificare cosa sia cambiato, ma di sicuro questa funzionalità aiuta parecchio a recuperare gli oggetti eliminati o modificati.

Conclusioni

Veeam Backup & Replication, se utilizzato al meglio, è sicuramente un valido alleato nel ripristino di tutte le tipologie di oggetti della propria infrastruttura IT. Grazie all’integrazione nativa, diventa facile e veloce recuperare gli elementi e riposizionarli all’interno della loro locazione iniziale.

SQL Server e SQL Azure Virtual Labs

Facebooktwittergoogle_plusredditlinkedin

Quante volte avreste voluto provare le nuove funzionalità di SQL Server 2017, ma siete stati frenati dai setup di installazione? Quante volte, dopo un SQL Saturday, non siete riusciti a rifare le demo per mancanza dell’ambiente su cui rifare le esercitazioni?

La risposta a queste domande la trovate nei Virtual Labs, ambienti virtuali, predisposti da Microsoft, dove è possibile svolgere esercitazioni guidate e mirate che vi permetteranno di scoprire o consolidare la conoscenza su nuove funzionalità di un prodotto o su una nuova tecnologia, comodamente a casa vostra o dall’ufficio.

Con i Virtual Labs di Microsoft avrete accesso ad una macchina virtuale già configurata con tutto quello che serve per svolgere l’esercitazione, senza preoccuparvi dei setup e senza il rischio di compromettere qualcosa in un server di produzione 🙂 Al termine dell’esercitazione la VM verrà distrutta e potrete ripartire da zero nel caso vogliate ripeterla.

I Virtual Labs predisposti non riguardano solo il “mondo” Data Platform, ma anche altre tecnologe, per accedere alla pagina generale dei Virtual Labs di Microsoft, cliccate qui.

In particolare, per quanto riguarda SQL Server 2017 e SQL Azure sono disponibili numerosi Virtual Labs che trovetere già filtrati a questo link.

Ora non avete più scuse, le funzionalità di SQL Server 2017 e SQL Azure sono davvero alla portata di tutti, è sufficiente ritagliarsi un paio d’ore con una tazzina di caffè.

Buon divertimento!!

Usate ancora netstat? Retrogradi, lo strumento del futuro è ss!

Facebooktwittergoogle_plusredditlinkedin

Il servizio che ho avviato si è messo in ascolto sulla porta che ho configurato?

In genere la risposta a questa domanda di apertura è racchiusa per la maggioranza degli utilizzatori in questo comando:

[root@anomalia ~]# netstat -nutlp

che utilizza il comando netstat per fornire una lista di porte numeriche (n) di tipo udp (u) o tcp (t) in ascolto (l) per mezzo di un processo (p). Ma forse non tutti sanno che le moderne distribuzioni installando, di default, un nuovo tool che permette di recuperare le stesse informazioni ed anche qualcosa di più: ss (socket statistics).

Ma come funziona ss? Quali informazioni fornisce? ss permette di recuperare informazioni di tipo summary (-s) per avere un’idea di quante e quali porte siano aperte nel proprio sistema, oppure permette di investigare nel dettaglio le porte in ascolto (-l) associate ai processi (-p), ottenendo un risultato del tutto simile a quello illustrato ad inizio articolo con netstat anzi, osservando questo comando in maniera del tutto identica (almeno in termini di opzioni):

[root@anomalia ~]# ss -nutlp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=1279,fd=5))
...

udp UNCONN 7680 0 [::]:5353 [::]:* users:(("avahi-daemon",pid=873,fd=16))

tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1001,fd=11))
...

tcp LISTEN 0 50 *:1716 *:* users:(("kdeconnectd",pid=1588,fd=12))

Sebbene quindi la conformazione dell’output sia leggermente differente, in particolare per quel che riguarda la composizione delle informazioni sul PID associato al socket aperto, tutto sommato i due comandi sono intercambiabili. Dove però ss può far la differenza è nella composizione di query per limitare l’output unicamente a quanto interessa.

Ad esempio, supponendo di trovarci su un server web, per capire quante connessioni sono aperte dallo stesso per la porta https basterà esplicitare il filtro come segue:

root@web-1:~# ss -np state established '( sport = :https )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:52017 users:(("apache2",pid=22173,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:50605 users:(("apache2",pid=20254,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:54608 users:(("apache2",pid=25649,fd=31))
tcp 0 0 ::ffff:172.16.0.11:443 ::ffff:172.16.0.254:47168 users:(("apache2",pid=16788,fd=31))

O qualcosa di più complesso, ad esempio tutte le porte in ascolto relative ad un mail server:

root@mail-1:~# ss -np state listening '( sport = :pop3s or sport = :imaps or sport = :ssmtp )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 100 *:993 *:* users:(("dovecot",pid=1132,fd=43))
tcp 0 100 *:995 *:* users:(("dovecot",pid=1132,fd=29))
tcp 0 100 *:465 *:* users:(("smtpd",pid=2052,fd=6),("master",pid=1260,fd=17))
tcp 0 100 :::993 :::* users:(("dovecot",pid=1132,fd=44))
tcp 0 100 :::995 :::* users:(("dovecot",pid=1132,fd=30))
tcp 0 100 :::465 :::* users:(("smtpd",pid=2052,fd=7),("master",pid=1260,fd=18))

Quali possono essere le opzioni per le query? È tutto elencato nella man page del comando, ad esempio per le porte TCP standard gli stati disponibili sono: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listen and closing.

Ma la capacità dei filtri va oltre, è possibile ad esempio effettuare la lista di porte che rispettando determinati range:

root@mail-1:~# ss -np state listening '( sport ge 500 and sport le 1000 )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 100 *:993 *:* users:(("dovecot",pid=1132,fd=43))
tcp 0 100 *:995 *:* users:(("dovecot",pid=1132,fd=29))
tcp 0 100 :::993 :::* users:(("dovecot",pid=1132,fd=44))
tcp 0 100 :::995 :::* users:(("dovecot",pid=1132,fd=30))

E quindi tutte le combinazioni possibili <= / le, >= / ge, == / eq, != / ne, < / lt, > / gt. Niente male per un tool che potrebbe essere la copia sbiadita di netstat, non credete?