Squirrelmail para multiples dominios

Usar un Squirrelmail, para servir múltiples dominios, es un problema que ya había resuelto hace varios años atras, pero con la movida de mi servidor, uno de los directorios que me olvide respaldar fue justamente el del webmail. Así que tuve nuevamente que reinventar la rueda. Pero para que  no me vuelva ha pasar voy a poner en éste blog los cambios, así además de quedar en un lugar del que siempre voy ha tener un back up, también compartiré el pequeño cambio que hice para que le sirva a todo aquel que lo necesite.

El problema es sencillo, que pasa si se tiene en un servidor varios dominios, hacer varias instalaciones de squirrelmail, una para cada uno de ellos no parece ser la solución más inteligente, pues cualquier actualización requeriría ser replicada en tantos directorios como dominios se tenga en ese server. Así que la solución más obvia es tener una sóla intalación y aprovechar la directiva "ServerAlias" del Apache. Para ello creamos un servidor virtual con un alias para todo dominio que comience con la palabra webmail, la configuración del Apache es ésta:

<VirtualHost 1.2.3.4>
    ServerAdmin  webmaster@undominio.com
    DocumentRoot /usr/share/squirrelmail
    ServerName   webmail
    ServerAlias  webmail.*
    DirectoryIndex index.html index.htm index.php index.cgi index.html.var
    ErrorLog  /var/squirrelmail/logs/error_log
    CustomLog /var/squirrelmail/logs/access_log common
</VirtualHost>

Con la configuración anterior no importa cuál sea el nombre de dominio, mientras éste comience con webmail será redireccinado por el apache al directorio /usr/share/squirrelmail (directorio por defecto donde se instala el Squirrelmail en debian). Ojo debe reemplazar 1.2.3.4 por el IP que tiene en su servidor.

Pero eso deja sin resolver otro problema, que cada vez que un usuario quiere leer su correo web debe de tipear la direccion de correo completa es decir: "usuario@dominio.com"

Ésto puede ser incómodo y hasta frustrante para muchos usuarios, así que lo mejor es hacerlo automático, para ello aprovecho una de las variables que nos ofrece PHP y que es $_SERVER[‘HTTP_HOST’], en ella siempre podemos encontrar el nombre de dominio completo del servidor web en el que estamos corriendo el script.

Todo el truco esta en agregar unas cuantas líneas al script redirect.php del squirrelmail que suele estar en /usr/share/squirrelmail/src/redirect.php, busque esta líneas:

/* get globals we me need */
sqGetGlobalVar(‘login_username’, $login_username);
sqGetGlobalVar(‘secretkey’, $secretkey);

Inmediatamente después de ellas copie y pegue estos cambios:

/* Modificado por mi para permitir multiples dominios */
$hostname = $_SERVER["HTTP_HOST"];
$str_len = strlen($hostname);
$diff = $str_len – 8;
$domain_name = substr($hostname, 8, $diff);
$email_completo = $login_username . "@" . $domain_name;
$login_username = $email_completo;
/* Fin de los cambios */

Las lineas que se añaden hacen toda la magia, extraen el nombre de dominio de la variable $_SERVER[‘HTTP_HOST’], le remueve la pablabra webmail y finalmente le pega el login y el "@" y lo reemplaza en la variable $login_username que usa squirrelmail para validar al usuario. Ésta es una solución simple y limpia, claro que descubrir donde hacer los cambios me tomo buen tiempo la primera vez, al menos esta vez ya sabía que era en redirect.php donde debía hacer los cambios. Sólo tuve que hacer un poco de memoria y creo que esta segunda vez hice un addendum de código mucho más limpio que la vez anterior, así que no estuvo del todo mal que perdiera los cambios anteriores.

Espero que esta información les haya sido de utilidad, y espero sus comentarios.

Los hackers encuentran una nueva forma de ocultar los virus

En un artículo aparecido el día viernes pasado (9 de mayo), en la revista PCWorld, se da cuenta de una nueva clase de amenaza informática llamada SMM ( System Management Mode), cuyo programa de prueba de concepto sera presentado al público en general en el próximo congreso de hackers llamado Black Hat, ha realizarce en el mes de agosto en Las Vegas. Los desarrolladores de éste programa que trata de demostrar cómo es una posibilidad real no teórica son Shawn Embleton y Sherri Sparks, quienes tienen una compañía de seguridad informática en la Florida llamada "Clear Hat Consulting".

La forma como opera ésta nueva clase de malware (virus, troyano, rootkit, etc.) es usando las características de virtualización de los nuevos procesadores para esconder en porciones de memoria protegida y dejar al malware en una posición practicamente indetectable para los actuales sistemas antivirus, dado que ésta nueva forma de esconder malware esta relacionada al hardware, éste tipo de amenaza son posibles de infectar y esconderse exitosamente en todos los sistemas operativos que se basen sobre la arquitectura PC, es decir tanto Windows como Unix (Linux, OS X, FreeBSD, etc.). Aunque ésta técnica no es nueva ya que en el 2006 la investigadora Joanna Rutkowska, introdujo un rootkit llamado Blue Pill (estaba inspirada en Matrix), que hacía uso de las capacidades de virtualización de los procesadores AMD para ocultar dicho malware y hacerlo 100% indetectable a cualquier contra medida conocida. Lo novedoso del programa de Embleton y Sparks es que éste incluye un keylogging (registro de todas las téclas que se pulsan) y un programa de comunicaciones que transmite la información robada al diseñador del malware.

En realidad para que la técnica trabaje se debe de escribir drivers especiales en función al sistema operativo específico al que se desea atacar, porque básicamente consiste en poner al malware en una máquina virtual ad-hoc, que sólo ejecuta dicho código y por tanto esta completamente aislada del sistema operativo principal, es por ello que quedaría fuera del rango de inspección de los programas antivirus que existen actualmente.

Definitivamente éste nuevo tipo de amenza, podría poner en serios aprietos a muchos data centers, pues por décadas las herramientas de seguridad se han basado en que el superusuario del sistema operativo tiene acceso a todas las partes del mismo y por tanto con tales privilegios uno puede explorar todo el sistema por algun malware (virus, trojano, rootkit, etc). Pues ahora ese concepto ha cambiado para detectar éste nuevo tipo de amenazas debemos ir a nivel del hardware saltarnos el OS y buscar por máquinas virtuales no autorizadas que esten corriendo en nuestro sistema.

Espero que Intel y AMD tomen nota de éste asunto e implementen alguna medida de seguridad en hardware que impida éste tipo de ataques, si lo hacen, ellos mismos se verían beneficiados, pues todos los data centers que actualmente estan apostando furtemente a la virtualización, como una manera de reducir los costos operativos, pues tendrían que actualizar su hardware sí o sí, para evitar ser víctimas de éste nuevo tipo de amenazas.

gBook laptop regular por menos de $400

Everex ha introducido una laptop de muy bajo costo equipada con la distribución Linux gOS, llamada gBook que con una pantalla de 15.4" WXGA (de resolución de 1440×900), disco duro de 60GB y un DVD-ROM/CD-RW (lector de DVD, y lector/quemador de CD), es una laptop a toda regla por $398 en las tiendas Walmart.

Al parecer las laptops de bajo costo como ésta estan acercandose peligrosamente en precio a las UMPC (Ultra Movil PC), categoría en la que se encuadra el OLPC XO-1, Asus eeePC, Everex CloudBook, y todas las demás de las que hemos hablado en este blog, que tienen precios que oscilan entre los $200 a $400.

Al parecer las nuevas tecnologías en procesadores de bajo consumo de energía y pantallas LCD estan abaratando el precio de las laptops a un nivel impensable hace apenas un par de años, cuando Negroponte propuso la iniciativa OLPC y se pensó que ésta sería una iniciativa más retórica que práctica.

gBook

Procesador:  1.5GHz VIA C7®-M Processor (128KB L2 Cache, 1.5GHz, 400MHz)
Memoria:  512MB DDR2 533 SDRAM
Disco Duro:  60 GB
Pantalla:  15.4" WXGA+ Widescreen Display (1440 x 900)
DVD:  DVD-ROM/CD-RW
Redes:  802.11b/g wireless
 un puerto 10/100 Ethernet
Puertos:  1 Puerto VGA
 3 Puertos USB
 1 Puerto para micrófono
 1 Puerto para audífon
Software
Pre-Instalado:
 Mozilla Firefox, gMail, Meebo, Skype, Wikipedia,
 GIMP, Blogger, YouTube, Xing Movie Player,
 RythemBox, Faqly, Facebook and OpenOffice.org 2.3
 (incluye WRITER, IMPRESS, DRAW, CALC, BASE)

Problema solucionado con el CAPTCHA

Desde que me ví forzado a mover mi blog a un nuevo server por cuestiones de mantenimiento me había percatado de que no recibía comentarios, pense que era debido al tiempo que el blog estuvo caído y que se había reducido el número de visitas, pero ayer que revisé las estadísticas vi que eso no era cierto, las visitas han continuado normalmente, además el número de suscritos RSS al blog ha aumentado, entonces me puse a investigar que podía ser, revise que mi e-mail estuviera bien, revise cuidadosamente todo, pero lo que no hice fue tratar de enviar un comentario yo mismo.

Hoy en la mañana lo intente y me dí con la sorpresa de que el CAPTCHA que uso para filtrar los comentarios spam (simple captcha), no generaba la imagen. Revise que todas las librerías gráficas estuvieran instaladas, instale fuentes TrueType hasta por gusto y el CAPTCHA aún seguía sin funcionar. Finalmente caí en la cuenta de que el directorio donde debían almacenarse las sesiones no tenía privilegio de escritura para el Apache, luego de ese pequeño cambio el CAPTCHA volvío a funcionar como antes.

Ahora que ya esta listo espero recibir sus comentario y mil disculpas por el inconveniente.

Usando el SDK de Google Apps Engine

El lunes pasado comentaba que me había llegado mi invitación para crear mi cuenta en Google Apps Engine (GAE), y tenía la duda sobre que aplicación desarrollar. He decidido en éste post hablar brevemente sobre como desarrollar una aplicación básica para GAE haciendo uso del SDK que ofrece Google de manera gratuita.

Si alguien planea usar GAE como plataforma para desarrollar una aplicación de producción, pues es bueno hacer ciertas aclaraciones para que nadie luego se sienta sorprendido, en lo personal creo que GAE es una gran iniciativa, pero ciertamente tiene sus inconveniente, aquí los más importantes:

  •  El único lenguaje de programación soportado actualmente es Python, se espera en un futuro ofrecer algunos otros.
  • No existe un motor de base de datos relacional, la única forma de almacenar información es en grande tablas que reciben el nombre de "datastore" (almacenes de datos), aunque Google ofrece la posibilidad de hacer queries en una sintaxis parecida a un SELECT de SQL, en realidad sólo ofrece eso, todas las escrituras o ediciones de datos deben ser hechas usando las funciones que provee Google para el datastore.
  • Las aplicaciones una vez que son levantadas a la red de Google no pueden ser borradas, así que cuidado con que es lo que subimos a GAE.
  •  Nuestra aplicación una vez desarrollada es automáticamente escalable, ya que GAE es el que se encarga de proveer la redundancia y distribución de la data a través de toda la red de Google, lo cuál es bueno poque reduce al mínimo la inversión en hardware, pero hay un inconveniente. Las aplicaciones desarrolladas para GAE, sólo correran en GAE. No hay forma de hacer un back up de la data y copiar los archivos de la aplicación para luego moverla un servidor web fuera de la red de Google, estamos ante una arquitectura cerrada.
  • Los datos que almacenemos en el datastore, estan en poseción de Google y por lo tanto Google puede indexarlos para que estén su motor de búsqueda. Así que cuidado con la información que se pone en el datastore, poque cualquiera podría tener acceso a ella.

Teniendo claro los puntos anteriores ya sabemos que podemos y que no podemos hacer con GAE, por lo tanto ya queda a nuestro criterio la naturaleza de la aplicación que desarrollemos. Comencemos ahora con éste breve tutorial que trata de explicar como instalar y correr una aplicación GAE mínima usando el SDK que puede ser descargado libremente desde la red de Google.

Lo primero que debemos hacer es descargar el SDK de GAE desde esta pagina web (en mi caso particular lo hare usando la versión Linux):

http://code.google.com/appengine/downloads.html

Los que tengan Linux or Mac pueden comenzar el proceso de instalación del SDK inmediatamente porque usualmente Python 2.5 ya está instalado, pero los usuarios de Windows deben de descargar e instalar Python desde aquí:

http://www.python.org/download/

Cuando se ha descargado el ZIP file de la versión Linux debemos tipear los siguientes comandos para instalarlo (asumiendo que usan Ubuntu):

$ unzip google_appengine_1.0.1.zip
$ sudo mv google_appengine /usr/local/appengine

Ya estamos listos para desarrollar nuestro primer ejemplo entonces. Para ello basta con que creemos un directorio llamado "holamundo", y luego entraremos a dicho directorio, para hacerlo usaremos los siguientes comandos:

$ cd ~
$ mkdir holamundo
$ cd holamundo

Ahora debemos de crear dos archivos uno llamado "holamundo.py" y otro llamado "app.yaml". El contenido de dichos archivos debe ser el siguiente:

holamundo.py:

print ‘Content-Type: text/html’
print »
print ‘hola mundo!!!’

app.yaml:

application: holamundo
version: 1
runtime: python
api_version: 1

handlers:
– url: /.*
  script: holamundo.py

Como es obvio el primer archivo holamundo.py es el programa que contiene nuestra aplicación y app.yaml le informa a GAE como procesar nuestra aplicación. holamundo.py no requiere mayor comentario pues es obvio por su sintaxis que lo único que hara la aplicación sera mostrar las palabras "hola mundo!!!" en el navegador, todo el trabajo de configuración se realiza en app.yaml, aquí una explicación detallada línea por línea:

application: holamundo
Como su nombre lo indica esta cláusula le da
nombre a nuestra aplicación
version: 1 Es la versión de nuestra aplicación, para nuestro
ejemplo esta es la primera versión que hacemos
de nuestro programa
runtime: python El lenguaje de programación que se usará para
ejecutar nuestra aplicación por el momento sólo
python esta disponible, pero se espera que otros
pronto.
api_version: 1 La versión del API que estamos usando, puesto
que esta es la primera verisón disponible, lo
indicamos en ésta claúsula pues depende de la
versión del API las funciones a las que tenemos
acceso, muchas funciones pueden añadirse o
eliminarse, con esta cláusula GAE sabe que
versión de API utilizar para ejecutar nuestra
aplicación.
handlers: Con ésta cláusula indicamos como debe GAE
de procesar los requerimientos POST/GET de
los clientes.
 – url: /.* Con ésta cláusula le decimos a GAE que debe hacer
con toda solicitud a nuestra aplicación ".*" es una
expresión regular que significa toda cadena de texto
de un caracter o más
 script: holamundo.py Cumplida la condición anterior, GAE ejecutará el
script "holamundo.py", que es nuestra aplicación.

Ahora que ya tenemos creados los dos archivos básicos que componen nuestra aplicación debemos de inciar el servidor web que viene en el SDK para poder probarla y ver que tal nos quedo, para ello debemos de ejecutar el siguiente comando (en Linux):

$ /usr/local/appengine/dev_appserver.py ~/holamundo

Es muy importante que tomemos en cuenta de que debemos dar la base del directorio y no el archivo de nuestra aplicación, luego de que demos el comando anterior el servidor de prueba local nos preguntará si deseamos de que busque los últimos updates, a lo que debemos responder que sí. Luego de eso debemos ver una serie de mensajes como éstos:

INFO     2008-05-08 17:18:27,431 appcfg.py] Checking for updates to the SDK.
INFO     2008-05-08 17:18:27,563 appcfg.py] The SDK is up to date.
WARNING  2008-05-08 17:18:27,563 datastore_file_stub.py] Could not read datastore data from /tmp/dev_appserver.datastore
WARNING  2008-05-08 17:18:27,563 datastore_file_stub.py] Could not read datastore data from /tmp/dev_appserver.datastore.history
INFO     2008-05-08 17:18:27,565 dev_appserver_main.py] Running application holamundo on port 8080: http://localhost:8080

Eso nos indicará que ya tenemos corriendo el webserver en el puerto 8080 que nos permitirá ver como luciría nuestra aplicación en GAE, para ver nuestra aplicación sólo debemos de abrir nuestro navegador y apuntar a: http://localhost:8080

Si todo esta bien debemos de ver una página como ésta:

Hola Mundo

Ahora que ya tenemos un SDK instalado, y sabemos lo básico sobre él, podemos comenzar a experimentar con las funciones incluídas en él.

Espero que éste mini-tutorial les haya sido de utilidad y espero sus comentarios.