Sistema de fax con herramientas libres

Para una empresa y para cualquiera tener un servidor de fax que permita enviar los documentos directamente desde el ordenador, sin pasar por papel, es un ahorro de tiempo y de dinero. Existen soluciones comerciales que nos permiten tener nuestro propio servidor de fax, pero las alternativas libres, teniendo la misma potencia nos dan una versatibilidad a la que dificilmente llegarán las aplicaciones propietarias.

En el siguiente documento explico cómo he instalado el servidor de fax de la empresa en la que trabajo, usando basicamente Hylafax y Samba. Aunque tengo que omitir algunos desarrollos extra que he realizado creo que la idea seguida quedará suficientemente clara.

Índice

Software utilizado
¿Qué vamos a hacer?
Instalando Hylafax
Samba y la impresora virtual
Final
Enlaces

Software utilizado

Todo el sistema se ha montado sobre una Debian Woody, aunque seguramente funcionaría igual de bien en cualquier versión de Linux. Aunque hay mucha gente que piensa lo contrario puedo decir que instalar una Woody es un juego de niños (o de abuelitas).

Con respecto al fax, todo esta basado principalmente en el software Hylafax, para enviar y recibir faxes, y en el gran conocido Samba. El por qué de Samba se explica un poco más tarde.

¿Qué vamos a hacer?

En primer lugar debemos de tener claro en qué escenario nos vamos a mover. En mi caso me encuentro con una red dividida en dos zonas, servidores (principalmente Linux) y clientes/usuarios con una amplia variedad de Windows. Nuestra idea es montar un nuevo servidor Linux con el Hylafax instalado, pero tenemos el problema de la conexión de los usuarios al servidor de fax.

Existen clientes de Hylafax para Windows de apariencia y funcionalidad parecidas al Outlook, pero son propietarios y queremos usar software libre dentro de lo posible. Además, lo que realmente interesa es poder acceder al fax como si se tratara de una impresora para poder enviar faxes desde el Office, Outlook, etc.

Gracias a Samba esto es posible. La idea es crear una impresora virtual que estará accesible desde todos los clientes pero que en realidad será un acceso al Hylafax para enviar el documento por fax en vez de imprimirlo.

Anem per feina!

Instalando Hylafax

El software Hylafax es la pieza central de todo este puzzle. Podemos instalarlo mediante sus versiones empaquetadas o directamente compilando el código fuente. Aunque instalar las cosas mediante paquetes es muy cómodo, es una sana costumbre compilar de vez en cuando, así que nos descargamos el correspondiente fichero .tar.gz y lo descomprimimos mediante tar zxf hylafax.tar.gz. Estas cosas las suelo hacer en el directorio /usr/local/src/, aunque cada uno puede hacerlo donde más le guste.

Dentro del directorio creado tenemos todo lo necesario para instalar Hylafax. En el fichero INSTALL nos explica cómo hacerlo, que basicamente es el típico ./configure, make y make install, esto último como root. Despues sólo nos queda ejecutar el comando faxsetup para configurar el modem. No voy a extenderme en estos detalles, ya que todo esta bien explicado en los ficheros de texto que acompañan al código fuente y en la web de Hylafax.

Hylafax se comunica con el modem mediante el demonio faxgetty, pero curiosamente Hylafax no arranca este demonio por defecto, así que tenemos que hacerlo manualmente, añadiendo /usr/local/sbin/faxgetty -D /dev/ttyS0 en /etc/init.d/hylafax o en /etc/inittab, dependiendo de si queremos que el demonio arranque al arrancar Hylafax o por el proceso init. Por supuesto, suponemos que el modem esta en el COM1.

Y ya tenemos nuestro servidor de fax instalado. Tampoco era tan difícil, ¿no? Ahora ya podemos enviar faxes desde el servidor mediante sendfax -d número fichero1 fichero2 ..., pero aún vamos a hacer más.

Samba y la impresora virtual

Al igual que con Hylafax no voy a entrar en los detalles de la instalación de Samba ya que hay documentación de sobra en la correspondiente web. Solamente comentaré algunos detalles interesantes.

Resulta que en mi caso tengo la red dividida en dos zonas (en realidad son mas, pero tampoco importa mucho). En un lado tendremos el servidor de fax con Samba y en el otro lado estan todos los equipos de usuarios. Un cortafuegos comunica las dos zonas.

Samba, al igual que los sistemas Windows, usa el protocolo SMB que permite, entre otras cosas, compartir dispositivos, recursos, etc. Cuando un equipo entra en una red SMB envia un mensaje broadcast presentandose al resto de equipos presentes en la red. El problema reside en que los cortafuegos por defecto no dejan pasar paquetes cuya dirección destino sea del tipo x.x.x.255 (suponiendo una máscara 255.255.255.0). En pocas palabras, con una configuración básica de Samba nuestro servidor no es visible para los equipos Windows al otro lado del cortafuegos.

Debido a esta limitación del protocolo SMB, las redes que lo usan estan obligadas a tener un maestro local de dominio en cada una de las zonas en las que se divide la red. Uno de esos maestros locales será además el maestro de dominio y sincronizará a todos los demás maestros locales.

Si no conoces nada del protocolo SMB y su forma de trabajar probablemente no te estes enterando de nada, así que iré al grano. Convertiremos a nuestro servidor Samba en maestro local y, suponiendo que el maestro global se encuentra al otro lado de la red, pondremos las siguientes lineas en el fichero /etc/samba/smb.conf:

local master = yes
preferred master = yes
os level = 33
remote announce = x.x.x.x/NOMBRE_DOMINIO

Con la última linea le indicamos al maestro de dominio con IP x.x.x.x nuestra existencia, de forma que los clientes ya podrán vernos desde su Entorno de Red.

Ahora ya podemos crear nuestra impresora virtual para enviar faxes. Para ello vamos a añadir más lineas en la configuración de Samba, en concreto:

[lpfax]
comment = Impresora Fax
printable = yes
postscript = no
print command = (echo -e '1in%!n.nwnq' |ed %s; /usr/bin/printfax.pl %I %s %U %m) &
path = /var/spool/lpfax

De esta forma, cuando mandamos imprimir algún documento por esta impresora en realidad estamos guardando el fichero en el directorio /var/spool/lpfax y ejecutamos el script de Perl printfax.pl, pasándole la dirección IP del cliente.

La idea es la siguiente: el script de Perl se conecta a la IP especificada, en un puerto en concreto, y le pide al usuario los datos propios de la cabecera del fax, como número de fax destino, nombre, etc, y después usa el comando sendfax para enviar el documento con los datos indicados. Aunque no puedo publicar el código del script y de la aplicación que se encuentra escuchando en el cliente, existe algo muy parecido en Horst F's Titelseite con código fuente en Delphi y todo.

Para configurar la impresora en los clientes podemos usar el driver de la HP Laserjet 4/4M Postscript. A mi al menos me funciona sin ningún problema.

Final

Finalmente nuestros usuarios tienen una impresora fax en su lista de impresoras. Al enviar un documento un formulario pide el número de fax y al introducirlo el fax se envía. Podemos añadir una agenda de direcciones, elegir portada del fax, etc. Hylafax permite enviar notificaciones por mail y muchas cosas más. Todo esto ya es cosa de ponerse para dejarlo todo bonito.

No estoy seguro de que haya quedado muy clara la explicación de cómo he montado el servidor de fax. He intentado que el artículo no quedara a un nivel excesivamente alto aunque no se si lo he conseguido.

De todas formas, si alguien necesita aclarar algunos puntos estoy accesible desde mi cuenta de correo supersanko en terra.es y también en la lista de correo de Bulma.

Enlaces