mercoledì 30 aprile 2014

Configurare un secondo tunnel VPN con openvpn su zeroshell 1.0 beta 16 per permettere la connessione di Android senza root - Parte 1, della configurazione di OpenVPN e Android

Buongiorno a tutti.

Oggi sono finalmente riuscito a configurare quello che è nel titolo del post e che volevo fare da un po' di tempo...

Ho un piccolo box con l'ottimo zeroshell (zeroshell.org, da qui in avanti "ZS") che mi funge da firewall.
Avevo in precedenza utilizzato la sua ottima web interface per mettere a disposizione una VPN (Virtual Private Network) a dei client windows e Android (ma solo con root e busybox+openvpn).

Il motivo per cui non si potevano creare tunnel con Android non root è che in tal caso il tipo di interfaccia di rete virtuale deve essere "TUN", mentre ZS utilizza "TAP" e non c'è modo di cambiarlo.

Se pensate siano solo delle simpatiche onomatopee, rinunciate a leggere il resto. :-)

Allora, quello che vi dirò qui è un bel po' machinoso e complicato, ma la sola lettura del post e la comprensione di alcuni parametri serviranno a meglio comprendere parecchie cose su OpenVPN ed il suo modo di funzionare, nonchè su come rendere permamenti i cambiamenti (questi o altre personalizzazioni che potreste decidere di fare).

Nota per i non-informatici: se avete già mal di testa non continuate la lettura. Non mi assumo nessuna responsabilità di alcun genere per mal di testa formato famiglia ne' mi potrete addebitare spese per farmaci o cure neurologiche o di altro tipo....





OK, a parte gli scherzi, cominciamo. Allacciate le cinture.

Allora, siccome openvpn permette la creazione di più VPN contemporaneamente, mi è saltato il pallino che CI DEVE ESSERE UN MODO per permettermi di tenere su entrambe le device (TUN e TAP) senza quindi andarmi a rimodificare tutte le config. dei clients...
Questo articolo potrebbe anche titolare:
Come creare una VPN per Android con OpenVPN
Come permettere più tunnel contemporaneamente con OpenVPN / Zeroshell

ma, per motivi legati al tempo, diciamo che "unifico tutto" (unifico tutto?)

Dopo varie prove ho creato questi file di configurazione, per il server e per il client, rispettivamente:

############## SERVER FILE ####################
#imposto la device virtuale per essere TUN
dev tun
#ascolto per connessioni che vengono dall'interfaccia ESTERNA DEL FIREWALL
local 172.17.104.2

#modalità server, ovvio
mode server

#Transport-Layer-Security server. Cioè crittografa tutte le trasmissioni.
tls-server

#qui definisco la RETE sulla quale dovranno essere assegnati gli IP dei clients
server 192.168.250.0 255.255.255.0
# protocollo tcp-server
proto tcp-server

#porta 1195 (quella di default 1194 è già usata dall'altro tunnel)
port 1195

#una volta startato "demonizzati", ovvero diventa un demone in esecuzione e rilascia il comando da shell.
daemon VPNH2Ltun



#Qui imposto i vari certificati: CA, certificato per la TLS, ...
ca /DB/_DB.002/var/register/system/openvpn/Auth/X509/CAFile
cert /DB/_DB.002/var/register/system/openvpn/TLS/cert.pem
key /DB/_DB.002/var/register/system/openvpn/TLS/key.pem
dh /etc/ssl/dh.pem

#_DB.002 è il nome del vostro profilo attivo


# verbosity 5, perchè voglio vedere TUTTO nei log .
verb 5
push "redirect-gateway def1"
push "dhcp-option DNS 192.168.250.254"

# 192.168.250.254 è l'IP di ZS sulla interfaccia virtuale VPN principale.
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo
status /var/log/tmpOVPN/openvpn-status.log
log /var/log/tmpOVPN/openvpn.log
log-append /var/log/tmpOVPN/openvpn.log

client-cert-not-required
auth-user-pass-verify /root/kerbynet.cgi/scripts/ov_pw_auth via-env
username-as-common-name
comp-lzo
#ifconfig-pool 192.168.250.1 192.168.250.253 255.255.255.0
push dhcp-option DNS 10.36.40.242
push route remote_host 255.255.255.255 net_gateway 1
push route X.X.X.X 255.255.255.0
push route 172.17.100.0 255.255.255.0
push route 172.17.101.0 255.255.255.0
push route 172.17.102.0 255.255.255.0
push route 172.17.103.0 255.255.255.0
push route 172.17.105.0 255.255.255.0
push route 192.168.111.0 255.255.255.0 

# queste sono le VOSTRE subnet che volete siano raggiunte tramite la VPN.
client-connect /root/kerbynet.cgi/scripts/ov_connect
client-disconnect /root/kerbynet.cgi/scripts/ov_disconnect
mute 3
duplicate-cn
script-security 3

###############################################



########## CLIENT FILE #########################
remote Z.Z.Z.Z 1194
proto tcp


#Z.Z.Z.Z è l'IP PUBBLICO DEL VOSTRO ZS

auth-user-pass
# Chiaramente devi poi andare (in openvpn per android) a selezionare il file .pem che ti sei esportato da zeroshell..
ca CA.pem

# due righe commentate
;cert client.pem
;key  client.pem

comp-lzo
verb 3
mute 20
resolv-retry infinite
nobind
client
dev tap
persist-key
persist-tun


###############################################

Leggendo i commenti potrete apprendere cosa significano i vari  parametri.


a questo punto non ci resta che andare in Zeroshell e lanciare il tunnel con openVPN dalla SHELL (dovete abilitare SSH e loggarvi), per vedere se funziona.... ma questo lo vedremo nel prossimo articolo... :-)

Installazione automatica (unattended, silent, automatic) di Office 2013 Home & Business, Standard, Professional, Pro Plus, Home & student, 365, etc etc etc

Buongiorno a tutti, :-)


Oggi parliamo di utilizzo di Office 2013 in ambito Aziendale, e più specificamente di come sia possibile automatizzare l'installazione di Office sui PC.

Dovete sapere che (come in passato) esistono molte, moltissssssime versione di Office.

  • Home & Business
  • Home & Studend
  • Standard
  • Professional
  • Pro Plus
  • ......
Esistono anche molte moltisssssssime licenze diverse:

  • Retail (la scatola comprata al negozio, hai presente? :-) )
  • Volume License (licenze a chiave singola per volumi elevati (solitamente non richiede attivazione)
  • Software Assurance (contratto Con Microsoft per la fornitura di software sotto una licenza particolare)
  • Multiple Activation Key (chiave singola per attivazioni multiple. Quantità predefinita)
  • Key Management System (server in locale nella vs rete che si occupa della gestione licenze).
  • ....


Poi dovete sapere che esistono molti, moltissssssssssssssssssimi modi di automatizzarne l'installazione. Alcuni compatibili con talune edizioni ed altri compatibili solo con altre....

Questi i metodi:

  1. Creare un file XML con le configurazioni (seguendo questo schema) e passarlo all'installer di Office, distribuendolo via script .
  2. Creare un file .msp con lo strumento Office Configuration Tool e distribuirlo via GPO (policy) o via script. (ulteriori info qui)
  3. Lo strumento Office Deployment Tool for Click-to-Run, creando un file XML con le configurazioni (diverse, vedi QUI) e passadolo allo strumento. Questa modalità vi permette anche di SCARICARE da Microsoft in AUTOMATICO i file necessari (scarica la versione che definite nel tag PRODUCT, all'attributo ID). Questo metodo è supportato per queste versioni (scrivo i ProductIDs):
    • O365ProPlusRetail
    • VisioProRetail
    • ProjectProRetail
    • SPDRetail (SharePoint Designer)
    • AccessRetail
    • ExcelRetail
    • GrooveRetail
    • HomeBusinessRetail
    • HomeStudentRetail
    • InfoPathRetail
    • LyncEntryRetail
    • LyncRetail
    • ProfessionalRetail
    • O365HomePremRetail
    • O365SmallBusPremRetail
    • OneNoteRetail
    • OutlookRetail
    • PowerPointRetail
    • ProjectStdRetail
    • PublisherRetail
    • VisioStdRetail
    • WordRetail
  4. I parametri MSIEXEC (per le installazioni che ce l'hanno l'msi...).
  5. Scardinare il file .msi e modificarlo secondo i nostri bisogni ... un po' estremo... 
  6. .....


insomma: c'è una CONFUSIONE PAZZESCA!!!!

Disabiguiamo:

Metodo1:
quando usarlo:
Lo puoi usare con le versioni in teoria non retail, ma scaricate. Quindi tutte le altre.
Puoi anche omettere le informazioni di Chiave di attivazione (CD Key), che sarebbero contenute nel TAG e poi attivare il software dopo inserendola a mano.

in pratica:
Crei il file XML. c'è un esempio nella cartella di installazione di office che si chiama config.xml e + precisamente nella sottocartella con il nome della versione (es: standard.ww)
Leggi la guida di riferimento che ho linkato così sai tutto ciò che puoi fare.

esempio (l'ho creato io e l'ho pure testato su una versione standard):
ARPCOMMENTS="Office 2013 installato da Sistemi Informativi e Processi Della mia azienda"
ARPCONTACT=SupportoIT@miaAzienda.it"
ARPHELPLINK="http://SharepointTicket/sip"
ARPHELPTELEPHONE="telefonoAssistenza"
/>
\\altroserver\share\Office 2013 64Bit
" />



Metodo 2:
quando usarlo:
Quando vuoi distribuire con GPO o comunque vuoi creare un pacchetto autoeseguibile con le tue configurazioni specifiche.
in pratica:
  • esegui setup.exe /admin e segui le istruzioni grafiche per impostare tutti i parametri. 
esempio:
non serve: lancialo e vedrai.

Metodo 3:
quando usarlo:
Quando hai una installazione Retail (come l'economico Home & Business, che ho appunto scelto per la mia rete)
in pratica:
  • scarichi il Office Deployment Tool for Click-to-Run dal sito MS.
  • crei un XML (leggermente diverso dal metodo 1), che contiene alcune info. poi lanci
  • \setup.exe /download /configure
  • Questo gli fa SCARICARE i files di installazione necessari per la versione che hai scelto e messo nell'attributo ID del tag Product (es:  )
esempio (l'ho testato giusto oggi e funziona alla grande):
 
 
     
             
   
 
 
 
 
ARPCOMMENTS="Office 2013 installato da Sistemi Informativi e Processi Della mia azienda"
ARPCONTACT=SupportoIT@miaAzienda.it"
ARPHELPLINK="http://SharepointTicket/sip"
ARPHELPTELEPHONE="telefonoAssistenza"
 />
 
 
 




E lo script per l'installazione?
Eccolo:
@echo off
 SET instPath="\\das-fs01\utility\UtilitySoftware\Microsoft Office\Office 2013\Autodeploy"

REM scelgo la architettura processore
if %PROCESSOR_ARCHITECTURE%==AMD64 (
) ELSE (
 SET ARCHE=_32
)

REM leggi versione isntallata di Word
for /F "usebackq delims=. tokens=1,2,3,4,*" %%a IN (`reg query "HKEY_CLASSES_ROOT\Word.Application\CurVera"`) Do (
if not .%%c==. (
set versioneOff=%%c
)
)

set /A versioneOff=%versioneOff%+0
REM echo %versioneOff%
REM se già installato skip
// se la versione installata è >= 15 allora non installare niente.
if /I %versioneOff% GEQ 15 (
goto :giaInst
)

echo versione  attuale = %versioneOff%, sto installando Office 15 (2013)

REM se 32bit viene lanciato con config_click_to_run_32.xml, altrimenti con config_click_to_run.xml, all'interno dei quali ho scelto la architettura del software.
"%instPath:"=%\setup.exe" /configure "%instPath:"=%\config_click_to_run%ARCHE%.xml"

goto fine
:giaInst
echo inst. office non necessaria
:fine


Beh. spero di essere stato utile a qualcuno. Io ho perso qualche ora a capire 'sti stranfieri...

Ciao! :-)

giovedì 31 ottobre 2013

Come creare un connettore che permetta il relay solo agli utenti autenticati tramite SMTP in exchange 2010

A volte ci si trova nella condizione di dover "aprire una porticina" a quella rete DMZ, si quella là dimenticata da Dio....
...anche se la nostra (mia) paranoia ci fa prudere da ogni parte del corpo, dobbiamo farlo.

Ecco un semplice modo per far prudere un po' meno e mandare a spasso quell'omino che continua a ripeterti "e se..." (oltre a smanettare una settimana sul firewall layer7, finchè non siamo rassicurati, ovviamente ;-) ).

Creiamo si, un connettore, per quell'host di quella rete, ma almeno richiediamo utente e password per poter spedire la posta all'esterno del nostro dominio... (non ci piacerebbe essere inseriti in una black-list di spammers, ve lo assicuro. Uscirne è comunque, sempre, critico.)

Ma come si fa? Ecco allora la mini guida che svela questi piccoli segreti del sistemista:
Dalla Exchange Management Console, recati su Microsoft Exchange on-premises (tuo org name).

Crea un nuovo ocnnettore di ricezione sul server che vai a puntare sulla porta 25, in server configuration->Hub transport-> il server che scegli (se ne hai uno non puoi sbagliare...).

Pannello a destra, quindi, clicca su: "new Receive Connector".

Nella finestra che si apre (fig 1), scegli un nome, poi NEXT


fig 1

Se vuoi restringere gli indirizzi su cui il server ASCOLTA sulla porta 25, puoi operare sulla parte "local Network Settings" (fig 2) in alto, rimuovendo  "all available ipv4" e aggiungendo un IP disponibile alla volta. altrimenti lascia "all".
Scegli quindi il nome con cui il server si presenterà ai client che si connettono su questo connettore. poi NEXT
fig 2


Nella scheda "Remote Network Settings"  (fig 3) scegli quali indirizzi IP  o reti sono abilitati a connettersi a questo connettore. ATTENZIONE: se degli indirizzi sono già presenti in altri connettori NON PUOI metterli qui. Poi NEXT.
fig 3


A questo punto clicca su "New" ed il tuo connettore è creato, ma dovrai fare delle altre modifiche prima di usarlo, quindi:

cliccaci sopra col destro e seleziona properties. (fig 4)
fig 4

A questo punto vai sulla scheda Authentication  (fig 5) e metti la spunta solo su Basic Authentication...
fig 5

poi vai sulla scheda Permission Groups (fig 6) e metti la spunta su "anonymous users" e su "Exchange Users".
ATTENZIONE: in questa ultima scheda si specifica chi può CONNETTERSI al connettore, non c'entra con la autenticazione che poi serve per fare relay.
fig 6


Ultima cosa: devi lanciare il comando powershell per permettere il relay attraverso questo connettore agli utenti o gruppi selezionati.
Ti consiglio di fare un gruppo in Active Directory e di usare quello, in modo da non dover rilanciare il comando powershell ogni volta che si aggiungono o si tolgono utenti a quel diritto.

Creato? allora il comando (da lanciare in Exchange Management Shell, ovviamente) è:

Get-ReceiveConnector ""| Add-ADPermission -User "" -ExtendedRights "ms-Exch-SMTP-Accept-Any-Recipient".

Fatto questo puoi proseguire e testare che tutto funzioni.


NOTA:
ATTENZIONE: per qualche motivo l'invio autenticato in SMTP da .NET C#, se si specificano lo user e la pw con la classe SmtpClient, passandoglieli come System.Net.NetworkCredential non FUNZIONA.
Per fare funzionare la classe dovrai specificare i parametri nel web.config sotto system.net->mailSettings.

Esempio di codice che NON FUNZIONA:
        nei sorgenti:
            SmtpClient smtpClient = new SmtpClient("hostnameServerOppureIP", 25);
                       
            smtpClient.Credentials = new System.Net.NetworkCredential("username", "password", "dominio");
            smtpClient.UseDefaultCredentials = true;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.EnableSsl = false;
                   
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("prova@dominio.it", "il mio portale");
            mail.To.Add(new MailAddress("destinatario@ilSuoDominio.com", "destinatario@ilSuoDominio.com"));
            mail.Subject = "subject di test";
            mail.Body = "body di test";
            smtpClient.Send(mail);
           
           
           
Esmpio di codice che FUNZIONA:
        nei sorgenti:
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("prova@dominio.it", "il mio portale");
            mail.To.Add(new MailAddress("destinatario@ilSuoDominio.com", "destinatario@ilSuoDominio.com"));
            mail.Subject = "subject di test";
            mail.Body = "body di test";
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Send(mail);
       
        nel web.config:
            ...
           
               
                   
                       
                   

               

           

            ....
           
           
           
P.S. se qualcuno sa PERCHE' di preciso, mi erudisca, per favore. io ho provato a cambiare ogni parametro, mettere in base64 user e pw (per assurdo, perchè dovrebbe arrangiarsi lui), mettere il dominio nel nome utente, useDefault... false, e chi più ne ha più ne metta.


Ciao a tutti e buona serata!

martedì 19 marzo 2013

Controllare reports CSV che arrivano per e-mail (in una sottocartella di inbox)

Eccoci qui di nuovo a scrivere di un interessante script che mi sono trovato a fare...

Oggi parleremo di come sia possibile automatizzare il controllo di reports che vi arrivano in formato CSV nella posta elettronica.
Ovviamente, con piccolissime modifiche, sarà possibile controllare qualsiasi formato di allegato o matchare le parole importanti nel corpo del messaggio...

Chi fa di mestiere l'informatico, l'amministratore di rete o altro, sa per esperienza che moltissimi software (backup, antivirus centralizzati, antispam, etc...) hanno, integrata di default, la possibilità di inviare un report periodico per e-mail, spesso allegandolo in un formato "analizzabile" come il CSV.

Ma che noia leggersi il "giornale dei reports" tutti i giorni, cercando con gli occhi le stesse cose e facendo fatica mentale...
Meglio automatizzare!

Ecco lo script:

giovedì 27 dicembre 2012

Script COLORATI! - Livello AVANZATO

Ciao a tutti, oggi tratterò un argomento che sta a cuore a molti "scriptomani": come utilizzare i COLORI negli script BATCH (DOS, command line, command prompt, linea di comando, insomma...).

L'utilizzo dei colori è un annosa questione... i metodi proposti hanno tutti quanti qualche compromesso a cui attenersi (ad esempio due punti nella parola colorata, cicli di codice incomprensibile da includere e chi più ne ha più ne metta).

Oggi, per voi, ho messo insieme una cosa MAGICA! Uno script che permette di definire il colore e lo sfondo (potremmo chiamarla evidenziazione) di ciascuna parola di un messaggio che si vuole scrivere a schermo, includendo UNA SOLA RIGA DI CODICE all'interno del vostro script: la chiamata al mio, passandogli le parole come parametro (fino a 9 parole per riga, che mi sembra PIU' CHE SUFFICIENTE).

MA VOLETE METTERE richiedere un'azione ad un utente così:

con richiedergliela COSI' ?!?!?!?!?!?!?:




Allora cominciamo?
Ecco lo script:

giovedì 20 settembre 2012

Whitelist di un dominio per il filtro contenuti di Exchange 2010

Ciao a tutti, un post molto veloce...


Questo script permette di aggiungere un dominio alla whitelist del filtro contenuti di Exchange 2010. Permette di DELEGARE questo compito a qualcun'altro, che magari non si intende di powershell, in quanto richiede il dominio da aggiungere in una simpatica finestrella con un input di testo, che può essere compilata da chiunque.

L'avevo scritto tempo fa per un exchange 2007 ed ora l'ho aggiornato per la nuova versione di questo meraviglioso server.

Leggendolo, inoltre, ci si spiega per sommi capi anche come richiamare oggetti visual basic da powershell (WOW!).

Per eseguirlo, basta trascinare il file (nominatelo con estensione ".ps1") nella console Exchange Management Shell e premere invio.


mercoledì 19 settembre 2012

più che DIMEZZARE i tempi di backup di un DAG Exchange 2010 - livello medio

Ciao a tutti, mi è capitato di osservare qualche problemino strano sul backup di un DAG exchange 2010.

DAG (Database Access Group) è un sistema Exchange ad alta affidabilità che, mediante la replica dei database delle cassette postali su più servers, mantenendone attiva una sola copia, permette di ovviare ai problemi di un singolo server in maniera automatica e quasi trasparente per l'utente.
Questa tecnologia si basa "oscuramente" sul cluster di failover di Microsoft.
Dico "oscuramente" perchè non si ha il controllo di tutte le risorse del cluster, e ci si trova ad avere una gestione "splittata" tra le console di Exchange e quella di Failover Cluster.


Ho 4 servers di Exchange, 2 in un sito e 2 in un altro, geograficamente distante.
I software di Backup Cluster-aware e ExchangeVSS-aware permettono di fare il backup della soluzione Exchange senza preoccuparsi di quale sia il server attivo (e se sia online oppure offline per un guasto o una  manutenzione).
In poche parole, questi software si rivolgono all'IP del cluster, sia esso assegnato ad un nodo o ad un altro dei servers facenti parte del DAG (che sono automaticamente anche nodi del failover cluster).

Questa architettura può generare alcuni problemi di performance (ma anche di altra natura):

1- se il cluster group è sul server 1, nel sito primario, e il database delle cassette postali ATTIVO è sul server 2, sempre nel sito primario, il software di backup interroga il server1, chiedendogli di passare il database. Questo poi interroga il server 2.... con il risultato che l'agente del sw di backup sta girando inutilmente nel network-spazio.... praticamente il server del backup chiama server 1, che chiama server 2 ....

2- se il cluster group è addirittura girato su un nodo del sito SECONDARIO, il backup è forzato a passare dalla WAN.

nel caso 1 vedremmo le performances del nostro backup degradarsi anche del 300% o più, nel caso 2... probabilmente non basterebbe tutta la notte a terminare il backup e, se configurato bene, si auto-terminerebbe, fallendo.

Queste ( ed altre) cose possono succedere perchè il cluster group (che detiene l'indirizzo IP del DAG) NON è forzato ad attivarsi sul server che detiene la copia attiva del DB.



Del resto questo è logico, dato che i servers di exchange possono detenere più Database attivi su più servers. Potremmo anche avere un database attivo per ogni server con utenti che si connettono all'infrastruttura in base a quale sito e poi a quale database ospita la loro cassetta postale.
in questa condizione il server 1 deterrebbe la copia attiva di DB1 e le repliche di DB2 DB3 e DB4, il server 2 deterrebbe la copia attiva di DB2 e le replice di DB1, DB3 e DB4, e così via.

... se poi, come nel mio caso, il software di backup si crea un PROPRIO GRUPPO CLUSTER, con cui comunicare.... ...le cose si complicano non poco.


Ma torniamo a noi. Vediamo di "PETTINARE" la situazione.
Come fare in modo che l'agente di backup giri sullo stesso server che detiene la copia attiva del database delle cassette postali che vogliamo backuppare, in modo che i nostri backup siano sempre "scattanti"?


Powershell ha le risposte...