lunedì 23 novembre 2015

[FRITZ!Box] Alternativa a FRITZ!VPN Client

Per quanto concerne l'ultima release del client VPN di FRITZ!Box, purtroppo in Windows 10 non funziona (Novembre 2015), l'alternativa per poter instaurare una connessione client - to - site è usare Shrew Soft VPN Client (qui il link per scaricare il programma). Per la configurazione del FRITZ!Box e del client VPN procedere come di seguito:

Ipotizzando di avere i seguenti valori:
     
- Rete IP del FRITZ! Box192.168.50.0 (maschera di sottorete: 24 - 255.255.255.0)
- Indirizzo IP dell'utente VPN nella rete FRITZ! Box192.168.50.100

- Indirizzo di posta elettronica dell'utente VPNuser@gmail.com 
- Nome DNS del FRITZ! Boxrouterremoto.myfritz.net     


Creazione del file di configurazione della VPN per il FRITZ!Box:

Scaricare ed installare sul computer il programma  "Configure FRITZ!Box VPN Connection"
(qui il link per il download), una volta avviato il programma, premere su l'icona in alto a sinistra "new". Nella schermata che apparirà scegliere la voce "Configure VPN connection for one user" e cliccare su "Avanti", dopodiché selezionare la voce "Add new FRITZ!Box" e premere "Avanti", alla schermata successiva selezionare la voce "Computer with FRITZ!VPN" premere "Avanti", alla schermata che segue inserire l'indirizzo di posta elettronica dell'utente (in questo caso 'user@gmail.com') e premere su "Avanti", ora si deve inserire il nome DNS del FRITZ!Box (in questo tutorial è 'routerremoto.myfritz.net') premere "Avanti". Ora ci verrà chiesto la rete alla quale si vuol far accedere il client tramite VPN quindi si seleziona la voce "Use a different IP network" (che in questo caso è 192.168.50.0 con maschera di rete 24 - 255.255.255.0), premere su "Avanti", selezioniamo la voce "Export the configuration file"  e scegliamo il percorso dove salvare i files di configurazione (il primo con i parametri per il client ed il secondo con i paramteri per il FRITZ!Box).

Importazione del file di configurazione sul FRITZ!Box:

Una volta creati i files di configurazione per la connessione VPN, accedere via browser al proprio FRITZ!Box, selezionare dal menù a sinistra la voce "Internet" e dal sottomenù la voce "Abilitazioni", poi premere sulla scheda (l'ultima a destra) "VPN".
Ora premere il tasto "Aggiungere connessione VPN" e nella schermata successiva selezionare l'ultima voce ", nella seguente schermata selezionare il file "fritzbox_nome connessione_myfritz_com.cfg" e premere "ok", se il file è stato creato correttamente il FRITZ!Box ci confermerà la corretta importazione dei parametri per la VPN.

Configurazione del Shrew Soft VPN Client:

Una volta installato il client VPN (nella versione STANDARD così non ha nessuna scadenza di tempo), aprire con un editor di testo (notepad va bene), il file "vpnuser_indirizzo e-mail.cfg", dopodichè avviare "VPN Access Manager" e premere il tasto "Add", nella schermata che appare inserire nel campo "Host Name or IP Address" il nome DNS del FRITZ!Box (nel nostro caso "routerremoto.myfritz.net")


 nelle due schede successive (quali "client" e "Name Resolution") non modificare nessuna impostazione




passare quindi alla scheda "Authentication" e impostare i seguenti parameri:
Authentication Method: Mutual PSK
Nelle schede sottostanti:
Local identity:
Identification Type : impostare su "User Fully Qualified Domain Name"
UFQDN String: inserire l'indirizzo e-mail dell'utente (nel nostro caso "user@gmail.com")


Nella seconda scheda "Remote Identity" impostare la voce "Identification Type" su "IP Address"


Nell'ultima scheda "Credentials" inserire nell'ultimo campo la Pre Shared Key (la trovate all'interno del file di configurazione precedentemente aperto con l'editor di testo dopo la voce "key =").


Nella scheda "Phase 1" vanno impostati i seguenti parametri:
Nel menu a discesa "Exchange Type" selezionare "aggressive"
Dal menu a discesa "DH Exchange" selezionare "group 2"
Dal menu a discesa "Cipher Algorithm", selezionare "AES"
Dal menu a discesa "Cipher Key Length", selezionare "256" bit

Dal menu a discesa "Hash Algorithm" la voce "sha1"
E in Key Life Time Limit impostare il valore 3600 secs 



Nella scheda "Phase 2" si impostano i seguenti valori:
Dal menu a discesa "Trasform Algorithm" la voce "esp-aes"
Dal menu a discesa "Trasform Key Length" selezionare "256" bit
Dal menu a discesa "HMAC Algorithm" la voce "sha1"
Dal menu a discesa "PFS Exchange" selezionare "group 2"

Dal menu a discesa "Compress Algorithm" la voce "deflate" 
E in Key Life Time Limit impostare il valore 3600 secs


Infine nell'ultima scheda "Policy" vanno le seguenti impostazioni:
Disattivare le opzioni "Maintain Persistent Security Associations" e "Obtain Topology Automatically or Tunnell All".
Fare clic sul pulsante "Add" ed inserire nella scheda "Topology Entry" le seguenti impostazioni:
Dal menu a discesa "Type" selezionare "Include".
Inserire nel campo "Address" la rete IP (nel nostro caso 192.168.50.0) e il campo "Netmask" la subnet mask (255.255.255.0) del FRITZ! Box e fare clic su "OK".
 



giovedì 5 marzo 2015

[Powershell] Calcolo hash dei files

Per quanto concerne il calcolo dell'hash dei file (L’hash è una funzione matematica che prende in input una sequenza arbitraria di byte e produce in maniera deterministica una stringa di bit di lunghezza prefissata, tale che una modifica accidentale o intenzionale, per quanto piccola, della sequenza iniziale dà luogo ad una modifica sostanziale dell’hash.), si può far riferimento al seguente script, il quale, impostandogli una directory, calcola l'hash dei files e delle sottodirectory contenute:

cls

$dir = "digitare il nome della directory di dove si vuole calcolare l'hash dei file contenuti"
 

Get-ChildItem $dir -Recurse |Get-FileHash | Out-File scrivere il nome del file dove verranno scritti gli hash dei files -append -width 800 |select-object -property Alghoritm,Hash,Path|format-table -autosize
 

add-content -Path scrivere il nome del file dove verranno scritti gli hash dei files -Value (get-date)

salvare il file con estensione .ps1

giovedì 26 febbraio 2015

Creazione e compressione backup database SQL SERVER EXPRESS tramite script in Powershell

Lo script che segue permette di effettuare un backup di un database di SQL EXPRESS, compattarlo e creare un file di log.

Requisiti:

- SQL Server distribuzione EXPRESS (qui il link)

- 7-z (qui il link)

- Powershell

Istruzioni:

Installato e configurato SQL Server express e 7-z, procediamo nella creazione dello script, quest'ultimo è così suddiviso:

1 - Connessione al database del quale si vuole effettuare il backup.

2 - Creazione del backup del database (così creato "nomedb-giornomeseannooraminutisecondi.bak")

3 - Compressione e controllo del file (così creato "nomedb-giornomeseannooraminutisecondi.zip")

4 - Creazione del file di log riportante l'esito della compressione (così creato "nomedb-giornomeseannooraminutisecondi.txt")

5 (opzionale) - Invio mail con allegato il file di log

6 - Cancellazione del file di backup

7 (opzionale) - Cancellazione files più vecchi di X giorni

8 - Controllo spazio su disco ed invio mail di avviso

Aperto un editor di testo (anche il notepad va bene), incolliamo le seguenti stringhe:

#Dichiarazione variabili
 

$ServerName = "nome_server\istanza_SQL"
$BackupDirectory = "cartella salavataggio dati"
$dbToBackup = "nome database"


#pulizia schermo

cls

#connessione a SQL Server Management Object
 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null


#definizione variabili
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $ServerName

"Default Backup Directory: " + $backupDirectory 



$db = $server.Databases[$dbToBackup]
$dbName = $db.Name

$timestamp = Get-Date -format yyyyMMdd-HHmmss
$smoBackup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")

#esecuzione backup

$smoBackup.Action = "Database"
$smoBackup.BackupSetDescription = "Full Backup of " + $dbName
$smoBackup.BackupSetName = $dbName + "Backup"
$smoBackup.Database = $dbName
$smoBackup.MediaDescription = "Disk"
$smoBackup.Devices.AddDevice($backupDirectory + "\" + $timestamp + "_" + $dbName + ".bak", "File")
$smoBackup.SqlBackup($server)
 

#compressione del file di backup

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"}
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"  

$Source = ($backupDirectory + $timestamp + "_" + $dbName + ".bak")
$Target = ($backupDirectory + $timestamp + "_" + $dbName + ".zip")
$logFile = ($backupDirectory + $timestamp + "_" + $dbName + ".txt")

sz a -mx=9 $Target $Source  | set-content $logFile -encoding ascii
 

#cancellazione il file di backup

Remove-Item $Source -recurse

#invio email con allegato il log
 

#$emailFrom = "indirizzo e-mail mittente"
#$emailTo = "indirizzo e-mail destinatario"
#$subject = "Oggetto della mail"
#$body = "Testo della mail "
#$smtpServer = "indirizzo server smtp"
#$filePath = $logFile
#Function sendEmail([string]$emailFrom, [string]$emailTo, [string]$subject,[string]$body,[string]$smtpServer,[string]$filePath)
#{
#creazione e-mail
#$email = New-Object System.Net.Mail.MailMessage
#$email.From = $emailFrom
#$email.To.Add($emailTo)
#$email.Subject = $subject
#$email.Body = $body
# initiate email attachment
#$emailAttach = New-Object System.Net.Mail.Attachment $filePath
#$email.Attachments.Add($emailAttach)
#initiate sending email
#$smtp = new-object Net.Mail.SmtpClient($smtpServer)
#$smtp.Send($email)
#}

#avvio servizio spedizione e-mail
#sendEmail $emailFrom $emailTo $subject $body $smtpServer $filePath

#eliminazione di file più vecchi di 7 gg

$Daysback = "-inserire il numero dei giorni"

$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
#no sotto cartelle
Get-ChildItem $BackupDirectory | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item

#Visualizza il contenuto della directory



$activity = "Avvio creazione file compressi e relativi log"

$status = "Avvio"
for($counter = 0; $counter -lt 100; $counter++)
{
    $currentOperation = "Percentuale completamento $counter"
    Write-Progress $activity $status -PercentComplete $counter `
                   -CurrentOperation $currentOperation
    Start-Sleep -m 130
}


 Get-ChildItem -Path $BackupDirectory

#controllo spazio su disco ed eventuale invio mail

$min = 5;  #soglia per l'avviso in GB

 
$warningString = "* Warning < $min GB"
$smtpServer = "indirizzo server smtp"
$emailFrom = "indirizzo e-mail mittente"
$emailTo = "indirizzo e-mail destinatario"
$subject = "Report Disk Space ({0})" -f $env:computername

$minByte = $min * 1GB
$drives = Get-WmiObject  Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}

$frmt = @{l="Drive";e={"{0}" -F ($_.DeviceID)};width=10},`
 @{l="Message";e={if($_.freespace -lt $minByte) {$warningString} else {"OK"}};width=20}, `
 @{l="Free %";e={"{0:N2}" -f ([long]$_.FreeSpace / [long]$_.Size * 100)};width=10}, `
 @{l="Free GB";e={"{0:N2}" -f ($_.FreeSpace / 1GB)};width=10}, `
 @{l="Size GB";e={"{0:N2}" -f ($_.Size / 1GB)};width=10}
 

#mostra una barra di avanzamento   

$result = $drives | Format-Table $frmt | out-string

if($result.Contains($warningString) )
{
 $body = "Server: {0} - Date: {1:dd MMM yyyy HH:mm:ss} `r`n $result `r`n `r`n-- End Report --" -f $env:computername, [DateTime]::Now

 #send email
 $smtp = new-object Net.Mail.SmtpClient($smtpServer)
 $smtp.Send($emailFrom, $emailTo, $subject, $body)

 write-host $body


Ora salvare il file con estensione ".ps1", avviare (come ammistratore) powershell ed avviare lo script sopra creato.

martedì 24 febbraio 2015

Configurazione VPN pfSense client-to-site

Per dar modo a dispositivi mobili (cellulari, tablet, portatili etc.) di potersi collegare ad un computer remoto tramite una VPN configurare pfSense nel seguente modo:

- Dal menù in alto scegliere la voce “VPN”

- Scegliere la scheda “Mobile clients”

- Verrà visualizzato in alto un messaggio che avverte che per creare la VPN client-to-site bisogna creare la Phase 1, premere sul relativo tasto “Create Phase 1”

- Una volta comparso il menù VPN: IPsec: Edit Phase 1: Mobile Client, impostare i seguenti parametri:

Sezione General information :

* Key Exchange version = v1
* Internet Protocol = IPv4

* Interface = WAN

* Description = Inserire una descrizione (es. Vpn clients)


Sezione Phase 1 proposal (Autentication) :

* Authentication method = Mutual PSK + Xauth

* Negotiation mode = Main (preferibile all'agressive mode per questioni di sicurezza)

* My identifier = My IP address
* Peer identifier => Distinguished Name = Inserire un nome (es. VpnClients)

* Pre-Shared Key = in questo campo impostare una chiave segreta (es. VpN@0nL41N)

Sezione Phase 1 proposal (Algorithms) :

* Encryption algorithm = qui scegliere l'algoritmo di criptazione (per questioni di sicurezza consiglio la AES 256 bits)
* Hash algorithm = qui scegliere l'algoritmo di hash (SHA1 è impostato di default e può andare bene)
* DH key group = qui a vostra scelta impostate il gruppo

* Lifetime = 28800


Sezione Advanced Options :

* Disable Rekey = non spuntata

* Disable Reauth = non spuntata
* NAT Traversal = Auto
* Dead Peer Detection = per motivi di stabilità non va spuntata

Terminata l'impostazione dei vari parametri, premere su “save” (comparirà in alto una scrittà che vi avvertirà che sono state effettuate delle modifiche e che se si vuole confermarle bisogna premere sul tasto “Apply changes” e poi su “close”.
Ora si procede con la creazione della “Phase 2” nella seguente maniera:
- Premere sul tasto “+ - Show 0 Phase-2 entries ” che compare sotto la tabella riassuntiva della Phase1

- Premere il tasto ”+” a destra della tabella riassuntiva della Phase2

- All'apertura della finestra VPN: IPsec: Edit Phase 2: Mobile Client inserire i seguenti parametri:

* Mode = Tunnel IPv4

* Local Network = Lasciate sulla voce “LAN subnet”

* Remote Network = Inserite la rete remota lato LAN (es. 192.168.50.0)

* Protocol = lasciate su “ESP”

* Encryption algorithms = la stessa della Phase1

* Hash algorithms = la stessa della Phase1

* PFS key group = lasciate pure su “Off”

* Lifetime = 28800

Infine premete sul tasto “save”, alla comparsa dell'avviso che sono state effettuate delle modifiche premete su “apply changes” e poi “close”.

Come ultimo passaggio creiamo le utenze con le quali si potrà accedere alla VPN:
- Dal menù in alto “System”

- Andare all'ultima voce “User Manager”

- Andare alla seconda scheda “Groups”

- Premere il tasto a destra “+” e inseriamo il nome del gruppo e la relativa descrizione (es. nome gruppo: VpnClients) e scegliamo come privilegi “User - VPN - IPsec xauth Dialin” infine premiamo Save per confermare la creazione del gruppo.

- Andiamo alla scheda “Users”
- Premere il tasto a destra “+” e inseriamo il nome dell'utente, la password, un'eventuale descrizione dell'utenza e alla sezione “Group Memberships” selezioniamo il gruppo precedentemente creato (es. VpnClients) e lo spostiamo sul riquadro a destra “Member Of” (non inserire nessuna pre-shared key in quanto è stata inserita precedentemente nella creazione della Phase 1) infine premiamo su “save” per confermare la creazione dell'utente.

Configurazione VPN site-to-site tra due firewall pfSense

Una volta loggati sul firewall tramite l'interfaccia web, procedere nella seguente maniera per poter configurare il tunnel VPN site-site:

- Dal menù in alto cliccare sulla voce “VPN”

- Dal menù a tendina scegliere la voce “Ipsec”

- Una volta che compare la schermata VPN: Ipsec : Edit Phase 1 spuntare la voce “Enable Ipsec”

- Premere il quadratino a destra “+” (Add new phase1)

- Nella schermata che apparirà inserire i seguenti parametri:


Sezione General information :

* Key Exchange version = v1

* Internet Protocol = IPv4

* Interface = WAN

* Remote Gateway = Inserire l'indirizzo IP pubblico del firewall remoto (es. 10.0.0.1)

* Description = Inserire una descrizione (es. Vpn verso firewall remoto n° 1)


Sezione Phase 1 proposal (Autentication) :

* Authentication method = Mutual PSK

* Negotiation mode = Main (preferibile all'agressive mode per questioni di sicurezza)

* My identifier = My IP address

* Peer identifier = Peer IP address

* Pre-Shared Key = in questo campo impostare una chiave segreta (es. VpN@0nL41N)


Sezione Phase 1 proposal (Algorithms) :

* Encryption algorithm = qui scegliere l'algoritmo di criptazione (per questioni di sicurezza consiglio la AES 256 bits)

* Hash algorithm = qui scegliere l'algoritmo di hash (SHA1 è impostato di default e può andare bene)

* DH key group = qui a vostra scelta impostate il gruppo

* Lifetime = 28800


Sezione Advanced Options :

* Disable Rekey = non spuntata

* Disable Reauth = non spuntata

* NAT Traversal = Auto

* Dead Peer Detection = per motivi di stabilità non va spuntata


Terminata l'impostazione dei vari parametri, premere su “save” (comparirà in alto una scrittà che vi avvertirà che sono state effettuate delle modifiche e che se si vuole confermarle bisogna premere sul tasto “Apply changes” e poi su “close”.

Ora si procede con la creazione della “Phase 2” nella seguente maniera:

- Premere sul tasto “+ - Show 0 Phase-2 entries ” che compare sotto la tabella riassuntiva della Phase1

- Premere il tasto ”+” a destra della tabella riassuntiva della Phase2

- All'apertura della finestra VPN= IPsec: Edit Phase 2 inserire i seguenti parametri:

* Mode = Tunnel IPv4

* Local Network = Lasciate sulla voce “LAN subnet”

* Remote Network = Inserite la rete remota lato LAN (es. 192.168.50.0)

* Protocol = lasciate su “ESP”

* Encryption algorithms = la stessa della Phase1

* Hash algorithms = la stessa della Phase1

* PFS key group = lasciate pure su “Off”

* Lifetime = 28800

Infine premete sul tasto “save”, alla comparsa dell'avviso che sono state effettuate delle modifiche premete su “apply changes” e poi “close”

La stessa configurazione va fatta sul firewall remoto pfSense (gli unici parametri da cambiare sono nella Phase1 la voce Remote Gateway dove andrà inserito l'ip pubblico lato WAN del client remoto e nella Phase 2 la voce Remote network dove va inserita la rete lato LAN del client remoto).