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.