Perchè non installare FreeIPA in un ambiente para virtualizzato XEN? niente di meglio
Questo articolo spiega rapidamente come implementare FreeIPA su un guest XEN CentOS 6 paravirtualizzato in un host XEN Debian 6.
Cos’è FreeIPA
FreeIPA è un sistema integrato di sicurezza che integra differenti soluzioni per amministrare le credenziali di accesso. Combina diversi sistemi quali 389 (Fedora Directory Server), MIT Kerberos, NTP, DNS.
Installazione Guest XEN CentOS
Per l’installazione del guest CentOS su un host debian seguire questi semplici passi presenti nel seguente articolo.
FreeIPA pre-installazione specifica in XEN
Per lanciare il daemon Slapd dobbiamo controllare che il device shm (/dev/shm shared memory) sia disponibile nella nostra installazione CentOS.
Se i tools di FreeIPA non trovassero questo spazio di condivisione di dati tra programmi, otterremmo un errore simile al seguente:
Could not start the directory server using command ‘/usr/lib64/dirsrv/slapd-PKI-IPA/start-slapd’. The last line from the error log was ‘[17/Sep/2012:11:38:39 -0400] – Failed to create semaphore for stats file (/var/run/dirsrv/slapd-PKI-IPA.stats). Error 13.(Permission denied)
Per ovviare al problema, controllare che sia disponibile shm, in caso contrario:
echo tmpfs /dev/shm tmpfs defaults 0 0 >> /etc/fstab
mount /dev/shm
Installazione FreeIPA
Per installare FreeIPA ci serviamo dei repo standard di CentOS 6:
yum -y install ipa-server bind-dyndb-ldap
A questo punto lanciamo il tool guidato ipa-server-install:
ipa-server-install –setup-dns
Il tool è totalmente guidato, le interazioni e le domande che ci verranno sottoposte non meritano di essere commentate in quanto sono di facilissima risposta.
Iptables, Apertura porte FreeIPA
Prima di iniziare a testare e/o collegarsi ai tools di FreeIPa, controlliamo che le seguenti porte siano aperte:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp
Per aprire le porte:
for x in 80 443 389 636 88 464 53 ; do iptables -I INPUT -p tcp –dport $x -j ACCEPT ; done
for x in 88 53 123 ; do iptables -I INPUT -p udp –dport $x -j ACCEPT ; done
Per installare un XEN guest CentOS 6 paravirtualizzato su una macchina fisica Debian 6, in questo periodo storico non c’è ancora una procedura documentata e supportata al 100%.
Tuttavia, con qualche semplice passo è possibile ottenere il risultato. Ecco come installare un guest CentOS con il tool xen-tools.
Aggiungere i repo di testing di Debian
Prima cosa, attiviamo i repo di testing di Debian. Debian 6 ha una versione di xen-tools che non prevede la creazione di immagini di macchine virtuali CentOS con il metodo rinse.
Aggiungere i seguenti repo:
deb http://ftp.it.debian.org/debian/ testing main contrib non-free
deb-src http://ftp.it.debian.org/debian/ testing main contrib non-free
Installare il tool xen-tools
Lanciare il seguente comando per aggiornare il pacchetto xen-tools alla versione 4.3.1 che su Debian supporta nativamente la creazione di macchine paravirtualizzate CentOS
aptitude update
aptitude install xen-tools
Configurazione Rinse
Editare il file /etc/rinse/centos-6.packages e controllare che siano presenti i seguenti pacchetti che rinse installerà:
plymouth-core-libs
libuuid
plymouth
libblkid
passwd
libuser
Creazione guest CentOS 6 paravirtualizzato
Eseguiamo adesso il seguente comando per creare un guest CentOS paravirtualizzato nella nostra installazione Debian 6.
xen-create-image –hostname dir01.xsep.net –ip 10.34.33.111 –install-method=rinse –dist centos-6 –mirror=http://mi.mirror.garr.it/mirrors/CentOS/6.3/os/x86_64/
Questo passaggio potrebbe richiedere una minima conoscenza del tool xen-create-image e della preparazione anteriore del tool xen-tools.
Sostituire –hostname –ip con l’fqdn del futuro guest XEN.
Post Installazione
Una volta ultimata l’installazione della macchina virtuale CentOS, accenderla (xm create -c dir01.xsep.net.cfg) ed installare i seguenti pacchetti (opzionale).
aptitude install openssh-server vim
Commentare in seguito i repo di testing (se sono stati aggiunti con una procedura poco ortodossa come fatto in precedenza).
Note
Nella mia configurazione di test, ho riscontrato un problema risolvibile con le eth della macchina virtuale (bridge su dummy per la parte privata). In sostanza al primo avvio non sono state alzate correttamente. Lanciare se necessario il comando ifconfig eth[0,1,2..] up prima di iniziare ad installare i pacchetti aggiuntivi.
E se volessimo conoscere quanto tempo ci mette a caricarsi una pagina web? Facile!
Per ottenere il tempo di caricamento ci serviamo di cURL come da esempio sottostante:
curl -s -o /dev/null –write-out %{time_total} –connect-timeout 2 -m 10 www.website.foo
La prima cosa che facciamo quindi è sopprimere l’output di default cURL e, con l’opzione –write-out, dichiariamo la variabile che ci interessa, ovvero time_total
Ci sono anche altre variabili relative al tempo che possono essere utili, ecco le principali:
- %{time_connect}: tempo impiegato dal comando cURL per completare la connessione all’host remoto.
- %{time_starttransfer}: tempo impiegato calcolato dal primo byte trasferito.
Per maggiori dettagli consultare curl_easy_getinfo ampiamente discussa al seguente link: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
Ecco una veloce e comoda lista di comandi da tener sotto mano quando si inizia a prendere confidenza con la console di Asterisk:
Asterisk Console:
Per aprire una console asterisk basta lanciare: asterisk -rv
L’opzione v indica il livello di verbosing; vvv livello 3, vv livello 2, ecc…
Lista dei comandi più utili:
(la sintassi può variare in base alla versione di asterisk)
* Primario Telefonico (Primary Line), Dahdi:
*CLI> pri show span X ; dove X è il channel PRI dell'EuroISDN (normalente 1)
*CLI> pri intense debug span X ; abilita la modalità di debuggin intense
*CLI> dahdi show channels ; lista dei canali dahdi presenti
*CLI> core show channels ; lista dei canali attivi (core level)
*CLI> voicemail show users ; Visualizza informazioni delle caselle dei messaggi vocali attivi, visualizza il numero dei messaggi nuovi (NewMsg)
* Console debugging:
*CLI> core set debug X ; dove X è un numero, abilita/disabilita il livello di debugging
*CLI> core set verbose X ; dove X è un numero, abilita/disabilita il livello di verbosing
*CLI> sip set debug peer 699 ; dove XXX è l'estensione, abilita/disabilita il debugging di un peer SIP specifico
*CLI> sip set debug off ; disabilita tutti i debug SIP attivi
* Comandi Protocollo SIP:
*CLI> sip show peers ; visualizza informazioni di tutti i peer SIP configurati in Asterisk
*CLI> sip show peer XXX ; dove XXX è un'estensione, visualizza la configurazione corrente di un peer SIP
*CLI> sip show channels ; visualizza tutti i canali SIP al momento attivi
*CLI> sip show channel XXXXXX ; dove XXXXXX è il `Call ID`, visualizza tutte le informazioni di un dato canale SIP attivo
*CLI> sip show registry ; lista dei peer SIP registrati
* Comandi Protocollo IAX:
*CLI> iax2 show peers ; visualizza informazioni di tutti i peer IAX configurati in Asterisk
*CLI> iax2 show peer XXX ; dove XXX è un'estensione, visualizza la configurazione corrente di un peer IAX
*CLI> iax2 show channels ; lista dei peer IAX registrati
* Comandi di Reload:
*CLI> dialplan reload ; Reload del dialplan
*CLI> iax2 reload ; Reload del modulo iax2 (eseguire dopo aver effettuato cambi di configurazione IAX)
*CLI> sip reload ; Reload del modulo sip (eseguire dopo aver effettuato cambi di configurazione SIP)
*CLI> module reload ; Reload di tutti i moduli asterisk
Come possiamo verificare su che webserver gira una pagina web?
Ci sono diverse risposte alla domanda in questione, alcune possono sembrare meno ortodosse come ad esempio telnet (telnet www.foo.bar 80), altre molto più utili ed intuitive come cURL.
Il comando cURL è disponibile in tutte le distribuzioni linux e unix-like come anche Mac OSX.
Ecco come verificare l’identità del webserver con cURL:
curl -I http://www.foo.bar
L’output del comando sarà simile al seguente:
HTTP/1.1 200 OK
Server: Apache
Date: Mon, 10 Sep 2012 17:25:33 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
La compressione HTTP con il modulo gzip di Nginx è un’importante feature che ci permette di migliorare il rendimento del sito web hostato principalmente su diversi fronti:
- Riduzione di banda totale e transfert rate del nostro sito web.
- Best practices di Google per quanto riguarda il SEO e la velocità di risposta del sito internet.
- Velocizzare il tempo di caricamento delle pagine web.
Controindicazioni principali:
- Comprimere con gzip aumenta il carico sulle CPU del server.
- Il processo di compressione e decompressione può in alcuni casi essere controproducente se si tratta di pochi bytes.
Nei pacchetti Linux precompilati il modulo Nginz gzip static è quasi sempre attivo di default. Nel caso si sia compilato Ngix partendo dai sorgenti, controllare se si è passato l’opzione seguente in fase di compilazione:
./configure --with-http_gzip_static_module
La compressione HTTP con il modulo gzip static di Nginx è attivabile nei seguenti contesti:
http
server
location
Di seguito si trova un esempio di configurazione tipica del modulo di compressione gzip.
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
Alcune piccole delucidazioni sulla configurazione:
- gzip_types: con questa direttiva possiamo specificare quali tipi di MIME-Types desideriamo comprimere. Di default è abilitato solo text/html.
- gzip_min_length: determiniamo la dimensione minima dei file che vogliamo comprimere. Abbassare drasticamente questo parametro può provocare maggior carico sulle CPU del server e tempi di risposta aumentati che quindi non giustificano il risparmio ottenuto dalla compressione.
- gzip_disable: anche se ormai si assottiglia sempre più la percentuale di visitatori che navigano con browser che non supportano la compressione HTTP, questa direttiva ci permette di non creare problemi agli utenti di Internet Explorer fino al 6.
- gzip_vary: abilita il response header “Vary: Accept-Encoding”. Questa direttiva fa si che IE non esegua caching dei contenuti (Bug noto). Tratto da wikipedia: “Tells downstream proxies how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one from the origin server”.
Quando si eseguono integrazioni software o più semplicemente si interviene direttamente su database esistenti, ci si può imbattere in tabelle MySQL con campi contenenti timestamp in formato unixtime.
Il formato Unixtime, tipico dei sistemi Unix e Unix-like come Linux o MacOSX, rappresenta il tempo come offset in secondi rispetto alla mezzanotte del 1 gennaio 1970 (UTC).
Per convertire una data UnixTime in Timestamp in MySQL basta eseguire una semplice query come la seguente:
-- MySQL convertire data UnixTime Timestamp
SELECT TIMESTAMP(FROM_UNIXTIME(campo_unixtime)) FROM tabella;
Più di una volta sarà capitato di dover testar il funzionamento di un server di posta.
Lo strumento più diffuso rimane sempre il buon vecchio telnet
Per provare il funzionamento di un server di posta sarà sufficiente quindi seguire pochi passi:
- telnet mail.server.it 25 – Ci colleghiamo quindi al mail server utilizzando telnet sulla porta standard 25.
- helo
– Con questo comando SMTP “salutiamo” il server di posta remoto e comunichiamo il nostro ip o dominio (es. helo miodominio.it) - mail from:
– Il comando mail from indica qual’è la nostra email di origine, il sender. - rcpt to:
– RCPT TO specifica a chi sarà inviata l’email di prova. - data – il comando DATA specifica al mail server che stamo inviando il corpo del messaggio. Per terminare il comando digitare
.
Ovh è tra le più interessanti aziende del panorama europeo in ambito soluzioni web.
Tra i tanti servizi offerti, si distingue per economicità e qualità l’offerta “server dedicati” che include, tra le tant ecose, fino a 3 indirizzi IP.
XEN e OVH
Ovh ha una distribuzione XEN preconfigurata.
Nel caso si desideri utilizzare una distribuzione Xen non-ovh, questo howto può essere utile per configurare le IP failover e associarle a macchine virtuali xen. l’howto è basato su Debian, ma è applicabile a tutte le differenti distribuzioni linux.
Configurazione IP failover
Per prima cosa occorre configurare le IP failover come aliases sul server fisico (Xen Host). In debian modificare il file /etc/network/interfaces
# Sostituire address con l'ip failover assegnata auto eth0:1 iface eth0:1 inet static address 94.23.XX.YY netmask 255.255.255.255
A questo punto la nuova IP già risponderà al ping (naturalmente solo dopo aver eseguito il restart della rete o aver aggiunto manualmente l’indirizzo ip).
Preparazione del Bridge per le macchine virtuali
Il passo seguente consiste nel creare un bridge per le macchine virtuali. In soldoni, abbiamo bisogno di creare una rete privata virtuale dove le macchine virtuali e il server fisico possano comunicare.
I pacchetti proveninenti dalle macchine virtuali quindi, gireranno sulla rete privata dove il server fisico sarà il gateway delle macchine virtuali e si occuperà del forwarding dei pacchetti.
Consideriamo la rete 192.168.1.0 come rete privata e l’indirizzo 192.168.1.10 appartenente al server fisico (XEN host). Si procede quindi creando il bridge “br0″, aggiungendo la seguente entrata direttamente nel file /etc/network/interfaces di Debian:
Aggiungiamo al bridge l’interfaccia speciale dummy0 dal momento che non disponiamo di una seconda eth per la rete privata:
auto br0 iface br0 inet static bridge_ports dummy0 address 192.168.1.10 netmask 255.255.255.0
Il bridge “br0″ sarà l’interfaccia che si utilizzerà nei guest Xen
IP forwarding
Il server fisico (XEN Host) sarà quindi il gateway delle macchine virtuali e perciò, dal momento che sarà incaricato allo smistamento dei pacchetti verso l’esterno e quindi alle operazioni di forwarding, si deve abilitare l’ip forwarding con il seguente comando (nel caso non lo sia già):
echo 1 > /proc/sys/net/ipv4/ip_forward
Per far si che il parametro non si perda al prossimo reboot, settare net.ipv4.ip_forward a 1 direttamente nel file /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1
Iptables (PREROUTING POSTROUTING)
A questo punto, non ci rimane altro che configurare le regole di prerouting e postrouting.
Nel seguente esempio, la macchina virtuale con IP 192.168.1.11 riceverà il traffico entrante dall’IP failover 94.23.XX.YY
-A PREROUTING -d 94.23.XX.YY/32 -i eth0 -j DNAT --to-destination 192.168.1.11 -A POSTROUTING -s 192.168.1.11 -o eth0 -j SNAT --to-source 94.23.XX.YY
Configurazione XEN
La gestione del bridge e delle interfacce di rete avviene direttamente con linux e non con Xen. Per questa ragione, controllare bene che nel file /etc/xen/xend-config.sxp siano commentati parametri quali:
#(network-script network-bridge) #(network-script 'network-bridge netdev=eth1') #(vif-script vif-bridge) #(network-script network-nat)
Si possono recuperare files cancellati da supporti quali per esempio schede di memorie SD? La risposta è si!
Esistono diversi tools per recuperare files cancellati in linux anche se tra i tanti spiccano principalmente due:
* photorec
* foremost
Preparazione / Backup:
Prima di fare qualunque tipo di intervento, per evitare ulteriori perdite di dati, cloniamo la partizione in un file con il comando dd. La partizione in oggetto è sdb1 e la si clonerà nel file file.img:
dd if=/dev/sdb1 of=file.img bs=512
Photorec:
Photorec non ha molte opzioni e si limita a recuperare solo immagini e video. Tra le opzioni a linea di comando può risultare utile specificare la directory di destinazione dove il programma salverà i documenti recuperati:
photorec /d
file.img
Foremost:
Foremost è un software molto potente che permette recuperare sia documenti che immagini.
Possiamo anche discriminare la ricerca dei file persi ad un tipo esatto di documento.
Per esempio, se desideriamo recuperare solo le immagini jpg cancellate:
foremost -o
-T -t jpg file.img
Per conoscere tutti i formati supportati da foremost utilizzare il man di foremost (man foremost).
Con l’opzione “-t All”, per esempio, foremost cercherà di recuperare tutti i tipi di documenti conosciuti.
Risulta essere un programma molto valindo in quanto è capace di recuperare immagini anche parzialmente.