Anterior Siguiente Inicio

6. Servidor de Fax


    El servidor de Fax es interesante para poder enviar y recibir faxes desde cualquier equipo de la red, teniendo el modem-fax en un solo equipo. Hay un interesante software para montar el servidor de fax en linux. Se llama Hylafax. Es muy flexible, y en combinación con el servidor de correo nos puede dar mucho juego.
    Tras la instalación, hay que ejecutar /usr/sbin/faxsetup, que comprobará que todo se encuentra en orden para poder usar el servidor de fax. En mi caso me dio un poco la lata, porque no encontraba el ejecutable de ghostscript. Lo intentaba buscar en /usr/local/bin/gs, cuando en debian se instala en /usr/bin/gs. Nada mas tonto que hacer un enlace simbólico para "engañar" a faxsetup.
   
    ln -s /usr/bin/gs /usr/local/bin/gs

Ahora hay que añadir un modem para usarlo como fax, y se hace con faxaddmodem. Prácticamente hay que aceptar todo lo que dice. Es conveniente echar una ojeada por si hay algo que se quiera cambiar.  Son interesantes las preguntas referentes al número consecutivo de líneas malas aceptadas, y al porcentaje de líneas malas aceptadas para dar por bueno un fax recibido.
Si posteriormente deseamos eliminar un fax, debemos borrar su fichero de configuración, /var/spool/hylfax/etc/config.XXX, (donde XXX es el modem que usemos), y eliminar el fichero correspondiente a dicho modem en /var/spool/hylafax/status/XXX

Si queremos que el servidor de fax se ejecute automáticamente al iniciar el equipo, tenemos que añadir un "getty" en /etc/inittab. Viene siendo añadir una línea como esta al final de dicho fichero:

    t2:23:respawn:/usr/sbin/faxgetty ttyS1

Ésto indica que ejecutará faxgetty en el modem conectado al puerto serie 2, en los niveles de ejecución 2 y 3, y se reiniciará automáticamente en caso de que termine el proceso.

Lo siguiente es añadir usuarios para que puedan enviar faxes, y especificar desde qué equipos pueden acceder.

    faxxadduser -p password usuario

En el fichero /etc/hylafax/hosts.hfaxd se especifican los usuarios, sus contraseñas, y los hosts a los que se permite o deniega acceder. La estructura del fichero es sencilla:

        # Equipos y usuarios permitidos para acceder. Se pueden usar comodines.
        # adminpwd es para que gane privilegios de admin, es opcional
        # user@host:uid:encripted_pass:adminpwd
        # Se permite acceder a sam desde cualquier máquina que cumpla @oxford.*Berkeley.*
        # ^sam@oxford.*Berkeley.*
        # como por ejemplo sam@oxford.berkeley.cl.cam.ac.uk
        # Tom Davis tiene el acceso denegado
        # !^tom@
        # Permitimos acceder a jperez desde cualquier lugar, con la clave encriptada que se indica
        # (este usuario se creó con faxadduser)
               jperez::Y6Rw6pQ47IQ96
        # permitimos el acceso a nuestro propio equipo, y a nuestra red local
            localhost
            192.168.0.*

Importante: El propietario de hosts.hfaxd debe ser uucp, de lo contrario no nos dejará autentificarnos.

        chown uucp:root /etc/hylafax/hosts.hfaxd

    Por defecto, Hylafax envía un email a faxmaster (definido en /etc/aliases)  cada vez que un fax que ha sido enviado, falla (tras 12 intentos).
Para ver las colas de faxes, se utiliza el comando faxstat, con los parámetros -s para ver la cola de salida, y -r para ver la de entrada:

    faxstat -s
    faxstat -r

    Para eliminar un fax de la cola de salida, tenemos que borrarlo con el uid del usuario que lo envió (no podemos eliminar un mail que mandó jperez, si somos root, aunque si que podemos con el comando:
   
    su -c "faxrm id_fax" jperez   // id_fax lo averiguamos mirando la cola de salida
 
Al eliminar un fax, se manda un mail al faxmaster para avisarle.

    Por defecto cuando se recibe un fax, se manda un mail a faxmaster avisándole de que llegó un nuevo fax, y en dicho mail se incluye una dirección ftp de donde bajar un documento tif (imagen) que contiene el fax. Podremos ver este documento tif, si tenemos cuenta de usuario y acceso al servidor hylafax.
Para que el fax recibido se adjunte al mail enviado a faxmaster, debemos crear un fichero /var/spool/hylafax/etc/FaxDispatch con el siguiente contenido:

        FILETYPE=ps;    # podemos especificar también pdf o tif (Sólo en versiones nuevas de hylafax)
        SENDTO=FaxMaster;
        MIMENCODE=bin/uuencode_it;  #Sólo en caso de no usar ps

Para poder enviar el mail como pdf o tif, necesitamos el programa uuencode, y hacer lo siguiente:
Debemos crear un fichero /var/spool/hylafax/bin/uuencode_it, que contendrá lo siguiente:

        #!/bin/sh
        uuencode -m $1 $1 | grep -E -v "^begin|^====$" 2>/dev/null


    Para visualizar postscript en windows, GSview es libre. Se baja de http://www.cs.wisc.edu/~ghost/gsview/index.html
Si usamos pdf o tif, nos sirven el Acrobat Reader o un visor de imágenes respectivamente

    Algunos faxes que nos envíen no van a poder ser recibidos correctamente, ya que por defecto hylaxax descarta aquellos que no lleguen al 95 % de lineas bien recibidas. Hylaxax mandará un email a faxmaster avisándole de una recepción fallida. El emisor será avisado también, pero cabe la posibilidad de que su fax ignore la señal de recepción fallida, con lo cual no se percatará de que debe reenviarlo.
    Para cambiar el porcentaje de líneas malas admitidas, y de líneas malas consecutivas, debemos añadir un par de líneas en el fichero de configuración del modem (config.ttySX):

        PercentGoodLines:   80
        MaxConsecutiveBadLines: 10


Métodos para enviar faxes desde los clientes:

Faxmail: Con éste programa podemos convertir un mensaje de e-mail a fax, y enviarlo posteriormente. Faxmail coge un email de stdin y lo transforma a postscript. El documento resultante es impreso por stdout, o bien redirigido a hylafax si se activa la opción de envío directo ( -d nombre@num_tel )

    Podemos hacer aliases de correo, para que nuestro exim envíe por fax ciertos emails. Para ello modificamos en exim.conf uno de los directores (reglas relacionadas con las direcciones de email locales). Buscamos el director system_aliases y cambiamos/añadimos las opciones user y group, de modo que nos quede algo parecido a esto:

    system_aliases:
          driver = aliasfile
          file_transport = address_file
          pipe_transport = address_pipe
          file = /etc/aliases
          search_type = lsearch
          user = nobody        # ya que vamos a usar tuberías hacia el programa faxmail, hay que especificarle
          group = nogroup    # el usuario y grupo con que se ejecutarán dichas tuberías

    en /etc/aliases tendremos que añadir un alias para cada persona que queramos mandar un fax

        pedro: "|/usr/bin/faxmail -n -d pedro@986123456"

    Podemos meter todos estos aliases en un fichero, aliases.fax, creando un director nuevo fax_aliases, poniendole file = /etc/aliases.fax. Como usuario y grupo podemos poner nobody / dip , así podemos hacer, por ejemplo, que nos de una llamada perdida al móvil (paranoia mía) cuando llegue un fax (grupo dip para usar el modem). En cualquier caso lo normal sería poner nobody/nogroup. El programa que ejecutemos con el pipe tiene que ser binario, o bien si es un script tenemos que especificarle el intérprete a usar, p.e: #!/bin/bash

        pedro: "|/usr/bin/faxmail -n -d pedro@986123456"   # Cuando mandemos un mail a pedro@nuestroservidor, ese mail se enviará por fax al número especificado.
        pedro: "|/usr/bin/faxmail -n -d pedro@986123456","pon prueba" # Así ejecutamos dos comandos, el del fax y el de la llamada perdida (prueba es una conexión que llama a mi                                                                                                                        # móvil con un timeout de 15 segundos, necesarios para que suene una vez y cuelgue)

    Cabe decir que para ello tenemos que configurar nuestro programa de e-mail para que use a nuestro servidor como servidor de correo saliente.
La opción "-n" es para que no envíe una portada junto con el fax.

    Normalmente. exim nos enviará el mail de vuelta diciendo que no se pudo enviar correctamente (aunque se haya enviado bien), ya que para poder usar tuberías y que no de problemas, el resultado de la tubería debe tener como valor de retorno 0, y no debe generar ninguna salida en stdout. Podemos cambiar esto para que sólo se nos mande un mail cuando haya algo en stderr, pero no en stdout. Buscamos en exim.conf la zona donde se especifica el path para los ejecutables que usaremos en las tuberías, y modificamos para que quede algo como...:

        address_pipe:
        driver = pipe
        path = /usr/bin:/bin:/usr/local/bin
        #return_output            #Esta linea es la que provoca que considere fallidos los mails que retornen algo en stdout, la comentamos para evitarlo.
        return_fail_output    #Con esta otra, solo nos manda un aviso cuando se genera algo en stderr
        #ignore_status        #Esta serviría para que ignorase un valor de exit !=0 para el comando de la tubería.


    PROBLEMA: En caso de usar codificación ISO8859, faxmail no convertirá correctamente el mensaje, en especial a mi me pasó con el campo From, por usar acentos. Como remedio rápido, opté por eliminar dicho campo con el comando formail, que pertenece al paquete de procmail. Como no fui capaz de encadenar varios comandos (en la misma orden) en el fichero aliases.fax, opté por hacer un script . De este modo, mi script hace lo siguiente:

        #!/bin/bash
        # Con esto eliminamos todos los encabezados, y añadimos la fecha.
        formail -A "X-FAX-Headers: clear date" |faxmail -n -d $1@$2


Y en aliases.fax puse:

       pedro: "|/usr/bin/remove_headers pedro 986123456"


Método más sencillo para hacer lo mismo:

Con este otro método, podremos enviar faxes a telefono@fax

Buscamos la sección routers en exim.conf, y añadimos lo siguiente al principio de la sección:

       # FAX: use fax transport for every mail send to domain fax
        fax:
          driver = domainlist
          transport = fax
          route_list = "fax"

En la sección transports añadimos:

        # FAX: this transport gives mail using a pipe to faxmail program
       fax:
          driver = pipe
          user = nobody
          command ="/usr/bin/remove_headers ${local_part}"

Pyla
:  Pyla es un programa escrito en python, que se puede usar tanto en windows como en linux, y permite ver y administrar las colas de faxes, enviar y ver los faxes recibidos. En windows hay que instalar python, y un driver (redmon) para redireccionar un puerto a un programa (de este modo imprimimos sobre pyla). También permite enviar un fichero tiff o ps al servidor de fax, y enviarlo como fax. En linux hace falta python e idle (para poder usar librerías Tkinter).
 
    Para configurar el driver Redmon debemos instalarlo, y después agregamos una nueva impresora. Apple Laserwriter 12/640. Especificamos que el puerto de la impresora es "Redmon redirected port". Al terminar, vamos a las propiedades de la impresora y en la configuración del puerto le especificamos como programa el ejecutable de python, y como argumentos el ejecutable de pyla (pyla.py) con el argumento -i

    c:\python\pythonw.exe
 
    c:\pyla\pyla.pyw-i

El parámetro -i indica que pyla recogerá el fax desde la entrada estándar.

Aquí tenemos unos cuantos ficheros que pueden resultarnos útiles, así como las traducciones al castellano que hice de pyla e hylafax.

Nota:
Para que podamos ver los faxes haciendo doble click dentro de  pyla, debemos tener clave de admin en el servidor de fax.

Otras soluciones:  Hay varias posibilidades más, pero me remito a la página principal de Hylafax ya que en la sección How-to hay enlaces a varios programas adicionales para enviar faxes.


Anterior Siguiente Inicio