sabato 31 luglio 2010

Better keep it simple, better keep it slow...



"Better keep it simple, better keep it slow,
very very simple, very very slow"

venerdì 30 luglio 2010

Zimbra su Reverse Proxy (apache2)


Visto che devo ancora mettere a punto l'installazione di Zimbra in chroot per ora vediamo come fare ad affacciare al pubblico un'installazione di Zimbra in una macchina interna alla lan tramite un reverse proxy apache2!

Ci sono due cose utili da sapere su Zimbra:
  • Il suo webserver non è configurato per servire virtualhosts: le richieste all'IP ed al nome di dominio/alias che vi punta vengono servite alla stessa maniera. Questo ci evita complicazioni con il reverse proxy.
  • Ha bisogno di tre percorsi per funzionare: /zimbra/, /service/, /home/. Quindi bisogna mettere anche quelli dietro il reverse proxy.

Tuttavia questi tre percorsi non si possono cambiare, questo vuol dire che con un reverse proxy semplice dovremo accontentarci di tenerci il percorso finale http://nomedominio.it/zimbra. Se cambiassimo /zimbra/ in /webmail/ (ad esempio) incorreremo in degli errori dopo il login perchè verremmo comunque rediretti ad un percorso su /zimbra/. Per ovviare a questo bisogna utilizzare il modulo proxy_html che fa anche un rewrite. E' un pò più complesso e lo tratterò successivamente, magari.

La porzione di configurazione da inserire in apache (aggiungendola ad un virtualhost o in quella generale, a seconda delle esigenze) è questa, 10.0.0.2 è la macchina sulla quale gira Zimbra:

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>




<Location "/service">
ProxyPass http://10.0.0.2/service
ProxyPassReverse http://10.0.0.2/service
ProxyPassReverse /
#SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLURLMap /service /service
</Location>


<Location "/zimbra">
ProxyPass http://10.0.0.2/zimbra
ProxyPassReverse http://10.0.0.2/zimbra
ProxyPassReverse /
ProxyHTMLExtended On
#SetOutputFilter proxy-html
ProxyHTMLURLMap /zimbra /zimbra
</Location>




<Location "/home">
ProxyPass http://10.0.0.2/home
ProxyPassReverse http://10.0.0.2/home
ProxyPassReverse /
ProxyHTMLExtended On
#SetOutputFilter proxy-html
ProxyHTMLURLMap /zimbra /zimbra
</Location>


Personalmente, come spiegato nel mio precedente articolo, ho preferito mettere questa porzione di configurazione in /etc/apache2/conf.d/zimbra (con conf.d disattivato in apache2.conf) per poi includerla nella configurazione di un virtualhost, in maniera tale da poter rendere disponibile zimbra solo ai virtualhosts che desidero senza reincollare porzioni di configurazione ma solo inserendo una direttiva Include.

Praticamente:
<VirtualHost *:80>
ServerAdmin webmaster@trinhackria.org
ServerName trinhackria.org
Include /etc/apache2/conf.d/zimbra


Ovviamente tutto questo non riguarda il pannello di amministratore di dominio. Visto che è in ascolto sulla porta 7071 ed usa SSL non si può mettere dietro reverse proxy alla stessa maniera detta sopra. E' un po' più complesso e tratterò anche questo argomento successivamente, magari.

:%s/magari/quando ci proverò/g :D

mercoledì 28 luglio 2010

Debian, occhio a quello che sta dentro /etc/apache2/conf.d!

Quando si prepara un webserver Debian che dovrebbe servire più virtualhosts ed anche più applicazioni (tipo cacti, phpmyadmin, websvn, etc, etc) bisogna ricordarsi che di default i pacchetti debian contengono già anche uno snippet di configurazione che verrà installato in /etc/apache2/conf.d e caricato globalmente.

Questo significa che se abbiamo un webserver che serve diversi virtual hosts in tutti saranno accessibili le applicazioni installate. Bene, e se non vogliamo che tutti i virtualhost servano l'alias /cacti/ ?!? Lo cancelliamo da conf.d e lo mettiamo le direttive a mano nella configurazione del virtualhost ?!? E se un domani vogliamo metterlo anche in un altro virtualhost ma non in tutti gli altri?!? Mettiamo a mano le direttive anche in quello?!? Naa... è un peccato non sfruttare l'ordine di Debian. Anche perchè se poi un domani vogliamo cancellare del tutto una applicazione con apt-get remove --purge lasceremmo sicuramente qualche pezzo di configurazione orfano che avevamo messo a mano!

La soluzione meno invasiva per la struttura della configurazione apache di Debian è disattivare conf.d ed inserire una direttiva Include nei singoli file di configurazione dei vhosts!

Ovvero fare così:

Disattivare l'inclusione di tutto il contenuto di conf.d in /etc/apache2/apache2.conf e lasciare solamente i due snippet charset e security forniti di default (ovviamente se c'è uno snippet che volete caricare lo stesso per tutti i virtualhost dovete aggiungerlo in questo file di conf)

# Include generic snippets of statements
#Include /etc/apache2/conf.d/
Include /etc/apache2/conf.d/charset
Include /etc/apache2/conf.d/security


Inserire nei singoli file di conf dei virtualhost in /etc/apache2/sites-enabled/ una direttiva Include che punta al file di configurazione dell'applicazione che vogliamo rendere raggiungibile.

Esempio, voglio che graph.dominio.it offra solamente cacti e che admin.dominio.it offra sia cacti che phpmyadmin.

in /etc/apache2/sites-enabled/graph.dominio.it:
ServerAdmin webmaster@dominio.it
ServerName graph.dominio.it
Include /etc/apache2/conf.d/cacti.conf


in /etc/apache2/sites-enabled/admin.dominio.it:
ServerAdmin webmaster@dominio.it
ServerName admin.dominio.it
Include /etc/apache2/conf.d/cacti.conf
Include /etc/apache2/conf.d/phpmyadmin.conf


In questa maniera si evita di pasticciare troppo i file di configurazione cancellando gli snippet da dove erano stati installati automaticamente e di aggiungere blocchi di configurazione ad altri file.

Per eventuali modifiche è molto più ergonomico aggiungere o rimuovere una riga con una direttiva Include che aggiungere o rimuovere un blocco indentato!

keep it simple ;)

domenica 25 luglio 2010

Impostare la data con il comando ‘date’

Inutile nascondersi dietro ad un dito! Sembra una cazzata ma a tutti, almeno una volta nella vita, è capitato di trovarsi a dover impostare l'orario di un sistema senza ntp e una connessione ad internet, senza server grafico né utility adeguate: solo il comando date e la sua ostica man page dalla quale non siamo riusciti a capire granchè sul come fare.

In effetti all'inizio della man page, nella sintassi, c'è scritto! Ma con tutte quelle parentesi quadre pensi che sia meglio continuare a leggere cercando un esempio che trovi alla fine della man page ma sei talmente confuso che non lo noti.

Bene: per chi non ci è mai riuscito o per chi se l'era dimenticato il pattern di default che il comando date si aspetta come argomento è

MMDDhhmmAAAA
(mese giorno ore minuti anno)


Per impostare quindi la data alle 18:48 del 25 luglio 2010 basterà un
date 072518482010

;)

lunedì 12 luglio 2010

Abilitare SNMPD su OSX

Forse non tutti sanno che OSX ha già a disposizione SNMPD ma di default è disabilitato... vediamo come abilitarlo (ad esempio per monitorare con cacti anche il nostro mac).

Vanno editati alcuni file, meglio farlo con un editor da terminale (tipo vi, vim, nano) e da root (sudo):

/etc/hostconfig:
SNMPSERVER=-YES-

/System/Library/LaunchDaemons/org.net-snmp.snmpd.plist:
<dict>
<key>Disabled</key>
<false/>

Fatto :)
Se avete bisogno che il mac sia raggiungibile in snmp dalla vostra lan bisognerà editare anche snmpd.conf ed aggiungere l'accesso a mynetwork indicando la rete.

/etc/snmp/snmpd.conf:
com2sec mynetwork 10.0.0.0/24 public
com2sec local localhost public


A questo punto possiamo riavviare, o lanciare snmpd con
sudo launchctl load /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist