garl14

 

Capítulo 14


Como configurar y poner en marcha smail

Este capítulo es una breve introducción a la forma de configurar smail y, además, dará una idea general de la funcionalidad que este programa provee. Aunque smail es muy similar en comportamiento a sendmail, sus archivos de configuración son totalmente diferentes.

El archivo de configuración principal es /usr/lib/smail/config. Este archivo es el que se debe editar para ajustar los valores específicos al sistema que se está configurando. Si únicamente es un ordenador terminal de UUCP, serán relativamente pocas las opciones a cambiar. Hay además otros archivos que configuran las opciones de encaminamiento y transporte que se pueden modificar; se hablará brevemente sobre la forma de hacerlo.

La forma de operación normal de smail hace que procese y entregue todo el correo de entrada inmediatamente. Si se tiene un tráfico relativamente alto, se puede preferir que smail guarde todos los mensajes en una cola, y los procese a intervalos regulares.

Cuando se trabaja con correo dentro de una red TCP/IP, es frecuente que smail funcione como demonio: en el momento de arrancar la máquina, se invoca desde el archivo rc.inet2, y se coloca en segundo plano, desde donde espera que haya una conexión TCP que entre por el puerto SMTP (el puerto 25 es lo normal). Este esquema es muy bueno cuando se espera una gran cantidad de tráfico, pues smail no se lanza por separado para cada conexión que ingresa. La alternativa es usar a inetd como el administrador del puerto SMTP, y lanzar una copia de smail cada vez que haya una conexión en este puerto.

El programa smail tiene muchas opciones que se usan para controlar su comportamiento; describirlas una por una en detalle no es de gran utilidad. Afortunadamente smail tiene varios modos estándar de operación que se habilitan cuando es invocado con un nombre especifico tal como rmail o smtpd. Es común que estos nombres específicos sean enlaces simbólicos al binario de smail. Se verán mas de éstos cuando se discutan algunas otras características de smail.

Hay dos enlaces a smail que deben existir siempre: /usr/bin/rmail y /usr/sbin/sendmail.1

Cuando se crea y se envía un mensaje de correo con un agente de usuario tal como elm, el mensaje se pasara a rmail para su entrega, con la lista de destinatarios dada en la línea de comandos. Lo mismo sucede con el correo que entra vía UUCP. Algunas versiones de rmail, sin embargo, invocan a /usr/sbin/sendmail en vez de a rmail, por lo que son necesarios ambos enlaces. Por ejemplo, si smail esta en /usr/local/bin, se debe escribir lo siguiente en la línea de comandos:

# ln -s /usr/local/bin/smail /usr/bin/rmail
# ln -s /usr/local/bin/smail /usr/sbin/sendmail

Si se quiere investigar mas sobre los detalles de configuración de smail, se debe buscar en las páginas del manual smail(1) y smail(5). Si no estuviesen incluidas en su distribución preferida del Linux, se pueden obtener junto con el código fuente de smail.

14.1 Configuración de UUCP
14.2 Configuración para una red local

14.2.1 Como escribir los archivos de configuración
14.2.2 Como ejecutar smail

14.3 Si no logra pasar

14.3.1 Como compilar smail

14.4 Modos de entrega de correo
14.5 Otras opciones del fichero config
14.6 Encaminamiento de mensajes y entrega
14.7 Mensajes de encaminamiento

14.7.1 La base de datos de trayectorias paths

14.8 Como entregar mensajes a las direcciones locales

14.8.1 Usuarios locales
14.8.2 Reenvío
14.8.3 Archivos de alias
14.8.4 Listas de correo

14.9 Transportes basados en UUCP
14.10 Transportes basados en SMTP
14.11 Calificación de nombre de anfitrión

14.1 Configuración de UUCP

Para usar smail en un entorno que solo tiene UUCP, la instalación básica es muy sencilla. Primero se debe asegurar de que estén los dos enlaces simbólicos a rmail y sendmail mencionados anteriormente. Si se espera recibir conexiones de SMTP de otros sitios, también se debe hacer un enlace de rsmtp a smail.

En la distribución de smail de Vince Skahan, se encuentra un archivo muestra de configuración. Su nombre es config.sample y esta en /usr/lib/smail. Se debe copiar a config y editarlo para ajustar los valores específicos de su sistema.

Suponiendo que su máquina se llama swim.twobirds.com, y esta registrado en los mapas UUCP como swim y su relevo UUCP es ulysses, entonces el archivo config podría ser como el siguiente:

#
# Los nombres de nuestros dominios
visible_domain=two.birds:uucp
#
# Nuestro nombre en los mensajes que viajan al exterior
visible_name=swim.twobirds.com
#
# También se usa este nombre uucp
uucp_name=swim.twobirds.com
#
# Nuestro relevo UUCP
smart_host=ulysses

_____________________________________________
1 Esta es la nueva ubicación estándar de sendmail de acuerdo con el Estándar del Sistema de Archivos de Linux. Otra ubicación común es /usr/lib.

 

La primera instrucción le indica a smail los dominios a los que su sistema pertenece. Se deben insertar sus nombres aquí, separados con signos de punto y coma. Si el nombre de su sistema esta registrado en los mapas de UUCP, será necesario agregar además la palabra uucp. Cuando se manipula un mensaje de correo, smail determina el nombre de su nodo usando una llamada de sistema hostname(2) y revisa la dirección del destinatario con respecto al nombre del nodo, revisando cada uno de los nombres de la lista. Si la dirección coincide con cualquiera de estos nombres, o el nombre del sistema no esta calificado, el receptor se considera local y smail intenta entregar el mensaje a un usuario o alias dentro del sistema local. En cualquier otro caso, el receptor se considera remoto y se intenta entregar al nodo adecuado.

La palabra clave visible_name debe contener un solo nombre de dominio totalmente calificado de la máquina que se desea utilizar para los mensajes que se envían hacia fuera. Este nombre se usa cuando se genera la dirección de quien envía el correo en todos los mensajes de salida. Es importante asegurarse de que el nombre que se use sea reconocido por smail como una referencia al sistema local (i.e. el nombre del ordenador con uno de los dominios listados en el atributo visible_domain). Si no se hiciese de esta forma, las respuestas a los mensajes enviados rebotaran hacia fuera del nodo local.

La última instrucción pone la ruta utilizada para el encaminamiento del relevo UUCP (descrito en la sección 13.4). Con este cambio mostrado, smail enviara cualquier correo dirigido hacia direcciones remotas al relevo. Como los mensajes serán entregados a través de UUCP, el atributo debe especificar un sistema conocido para los programas UUCP que corran en su sistema. Consulte el capítulo 12 sobre el tema de como hacer que su nodo sea conocido por UUCP.

Hay una opción que se utiliza en el archivo anterior que aun no ha sido explicada; ésta es uucp_name. La razón para utilizar esta opción es la siguiente: normalmente smail utiliza el valor que devuelve hostname(2) para cosas que hace el UUCP tales como poner en el encabezado From_ el camino de regreso del correo. Si el nombre del nodo no esta registrado en el mapa de UUCP, es necesario indicar a smail que en vez de éste utilice el nombre de dominio completamente calificado.2 Esto se puede hacer agregando la opción uucp_name al archivo de configuración config.

_____________________________________________
2 La razón de esto es: Suponga que el nombre de su sistema es monad y que no esta registrado en los mapas y además hay un lugar registrado en los mapas que se llama monad. Cada correo que se dirija a monad!root, aun cuando haya sido enviado desde un vecino directo UUCP, viajara hasta el otro monad. Esto es una molestia para todos.

 

Hay otro archivo en /usr/lib/smail, que se llama paths.sample. Este es un ejemplo de la forma que tiene un archivo de caminos, paths. Sin embargo, este archivo no es necesario a menos que se tengan enlaces de correo a mas de un lugar. Si fuese necesario hacerlo, se debe escribir uno nuevo o generar uno partiendo de los mapas de Usenet. El archivo paths se describirá mas adelante, en este mismo capítulo.

 

14.2 Configuración para una red local

Si esta funcionando una instalación con dos o más nodos conectados por medio de una red local, es necesario designar a uno de ellos para que maneje la conexión UUCP con el mundo exterior. Entre las máquinas de la red local, es muy probable que se quiera intercambiar correo con SMTP sobre TCP/IP. Suponga que se tiene nuevamente el ejemplo de la Cervecera Virtual, y vstout se configura como una pasarela UUCP.

En un entorno de red, es preferible mantener todos los archivos con el correo de los usuarios en un solo sistema de archivos, que puede ser montado con NFS desde todas las demás máquinas. Esto permite a los usuarios desplazarse de máquina en máquina sin tener que mover su correo por todos lados (o peor, revisar tres o cuatro ordenadores para ver su correo recién recibido cada mañana). Así mismo, es deseable hacer que las direcciones de los usuarios sean independientes del ordenador en la cual el correo se almacena. Es una práctica común utilizar el nombre del dominio como la dirección de quien envía el correo en vez de utilizar el nombre de la máquina servidora del correo. El usuario Janet, por ejemplo, podría especificar su dirección como janet@vbrew.com en vez de janet@vale.vbrew.com. A continuación se explicara como hacer que el servidor reconozca el nombre del dominio como un nombre válido para su instalación.

Otra forma de mantener todos los apartados postales en un anfitrión central es utilizar POP o IMAP. POP quiere decir, por sus siglas en ingles Post Office Protocol, es decir, Protocolo de Oficina Postal y permite a los usuarios tener acceso a sus archivos de correo a través de una conexión TCP/IP. IMAP, o Protocolo de Acceso Interactivo al Correo por sus siglas en ingles de Interactive Mail Access Protocol, es similar a POP, excepto que es mas general. Ambos clientes y servidores para IMAP y POP han sido portados a Linux, y están disponibles en sunsite.unc.edu bajo el directorio /pub/Linux/system/Network.

 

14.2.1 Como escribir los archivos de configuración

La configuración para la Cervecera funciona de la siguiente forma: todos los nodos, con excepción del servidor de correo vstout, encaminan todo el correo que va hacia el exterior hacia este servidor, utilizando la técnica de encaminamiento al relevo de correo. vstout encamina todo el correo que va hacia el exterior al verdadero nodo de relevo que, a su vez, envía todo el correo de la Cervecera; este último nodo se llama moria.

El archivo estándar config para todas las máquinas con la excepción de vstout es como sigue:

#
# Nuestro dominio:
visible_domain=vbrew.com
#
# El nombre que usamos:
visible_name=vbrew.com
#
# Encaminamiento al relevo: via SMTP hacia vstout
smart_path=vstout
smart_transport=smtp 

Esto es muy parecido a lo que se ha hecho para configurar un sistema que solo funciona con UUCP. La diferencia principal es que el medio de transporte utilizado para enviar el correo al nodo de relevo es SMTP. El atributo visible_domain hace que smail utilice el nombre del dominio en vez de utilizar el nombre del sistema local en todo el correo de salida.

En la pasarela de correo UUCP vstout el archivo config es ligeramente distinto:

#
# Los nombres de nuestros sistemas:
hostnames=vbrew.com:vstout.vbrew.com:vstout
#
# La forma en que nos llamamos a nosotros mismos:
visible_name=vbrew.com
#
# En el mundo uucp, somos conocidos como vbrew.com
uucp_name=vbrew.com
#
# Transporte inteligente: via uucp hacia moria
smart_path=moria
smart_transport=uux
#
# somos la autoridad para nuestro dominio
auth_domains=vbrew.com

Este archivo de configuración, config, utiliza un esquema diferente para indicar a smail como se llama el sistema local. En vez de dar una lista de dominios y permitir que busque el nombre del nodo con una llamada al sistema, se especifica una lista explícitamente. La lista de arriba contiene tanto el dominio completamente calificado como el del sistema no calificado, y el nombre del dominio completo en sí mismo. Esto hace que smail reconozca a janet@vbrew.com como una dirección local, y entregue el mensaje a janet.

La variable auth_domains indica el nombre de los dominios para los cuales vstout es considerado como autoridad. Esto es, si smail recibe cualquier correo con una dirección hacia host .vbrew.com en donde host no corresponde a ninguna máquina existente, se rechaza el mensaje y se devuelve al remitente del mismo. Si esta línea no esta, cualquier mensaje rechazado será enviado nuevamente al relevo de correo, quien lo mandara a vstout, y así sucesivamente hasta que se descarte por exceder la cuenta máxima de saltos.

 

14.2.2 Como ejecutar smail

La primera cosa que se debe hacer es decidir si se ejecutara smail como un demonio independiente, o si se permitirá que inetd administre el puerto SMTP e invoque a smail cuando un cliente solicite una conexión SMTP. Normalmente es preferible la operación como un demonio independiente en el servidor de correo, debido a que esto carga la computadora menos que lanzar una copia nueva de smail cada vez que se solicite una conexión individual. Cuando un servidor de correo entrega casi todo el correo que recibe directamente a los usuarios, es preferible optar por la operación con inetd.

Independientemente del modo de operación que se haya elegido para cada anfitrión individual, es importante asegurarse que se tiene la siguiente línea en el archivo /etc/services:

smtp 25/tcp # Simple Mail Transfer Protocol

Esto define el número del puerto TCP que smail utilizará para las conexiones SMTP. 25 es el puerto estándar definido por el RFC de Números de Puerto Asignados.

Cuando se ejecuta como demonio, smail se coloca a sí mismo en segundo plano, y esperará a que ocurra una conexión en el puerto SMTP. Cuando haya una conexión, lanza un proceso y conduce una conversación SMTP en dicho puerto. El demonio smail se lanza normalmente invocándolo desde el script rc.inet2 con la siguiente instrucción:

/usr/local/bin/smail -bd -q15m

El modificador -bd indica que se funcionara como demonio, y -q15m hace que se procesen los mensajes acumulados en la cola cada 15 minutos.

Si en cambio, se quiere utilizar inetd, el archivo /etc/inetd.conf deberá contener una línea como la siguiente:

smtp stream tcp nowait root /usr/sbin/smtpd smtpd

smtpd debe ser un enlace simbólico al binario de smail. Recuerde que tiene que forzar a que inetd relea inetd.conf enviándole una señal HUP después de hacer estos cambios.

El modo demonio y el modo inetd son mutuamente excluyentes. Si se ejecuta smail como demonio, asegúrese de que este comentada cualquier línea en inetd.conf para el servicio smtp. De manera similar, cuando se tenga a inetd como administrador de smail, asegúrese de que rc.inet2 no lanza al demonio smail.

 

14.3 Si no logra pasar. . .

Si algo va mal con la instalación, hay algunas herramientas que pueden ayudar a encontrar cual es la raíz del problema. El primer lugar que se debe revisar es el conjunto de archivos de registro de smail. Están en /var/spool/smail /log, y se llaman logfile y paniclog, respectivamente. El primero lista todas las transacciones, mientras que el último solo se usa cuando haya mensajes de error relacionados con errores en la configuración y similares.

Un ejemplo típico de una línea en el logfile es el siguiente:

04/24/94 07:12:04: [m0puwU8-00023UB] received
| from: root
| program: sendmail
| size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] delivered
| via: vstout.vbrew.com
| to: root@vstout.vbrew.com
| orig-to: root@vstout.vbrew.com
| router: smart_host
| transport: smtp

Esto muestra que un mensaje de root a root@vstout.vbrew.com ha sido correctamente entregado al sistema vstout a través de SMTP.

Los mensajes que smail no pudo entregar generan una línea similar en el archivo de registro, pero con el mensaje de error en vez de la parte que dice entregado (delivered):

04/24/94 07:12:04: [m0puwU8-00023UB] received
| from: root
| program: sendmail
| size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] root@vstout.vbrew.com ... deferred
(ERR_148) transport smtp: connect: Connection refused

El error de arriba es típico para una situación en la cual smail reconoce correctamente que el mensaje debería ser entregado a vstout pero que no fue posible establecer la conexión al servicio SMTP en vstout. Si esto sucede, es posible que tenga un problema de configuración o bien que el soporte TCP este ausente de los binarios del smail.

Este problema no es tan raro de encontrar. Hay varios binarios de smail que vienen con distribuciones de Linux y que no tienen soporte de red TCP/IP. Si este es su caso, debe recompilar el programa smail. Una vez instalado smail, se debe revisar si se tiene soporte de red TCP haciendo un telnet al puerto SMTP de su máquina. Una conexión exitosa al servidor SMTP se muestra a continuación (la entrada por teclado se marca con este tipo de letra):

$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 monad.swb.de Smail3.1.28.1 #6 ready at Sun, 23 Jan 94 19:26 MET
QUIT
221 monad.swb.de closing connection

Si esta prueba no produce el mensaje de SMTP (la línea que comienza con el código 220), debe asegurarse de que su configuración es verdaderamente correcta antes de recompilar smail, como se describirá a continuación.

Si hay algún problema con smail que no se pueda localizar con el mensaje de error que smail genera, se pueden activar los mensajes de depuración. Para hacer esto, se debe utilizar el modificador -d, seguido de un numero opcional que especifique el nivel de detalle de la información (no se debe dejar ningún espacio entre el modificador y el argumento numérico).

Entonces, smail mostrará un informe de su operación en la pantalla que dará mas pistas acerca de lo que puede estar mal.

 

14.3.1 Como compilar smail

Si esta seguro de que su smail carece de soporte de red TCP, es necesario obtener el código fuente. Es posible que ya este incluido en su distribución si la obtuvo en CD-ROM, si no fuese así, se puede conseguir en la red via FTP.3

La mejor forma de compilar smail, es comenzar con el conjunto de archivos de configuración de la distribución de Vince Skahan. Para incluir el controlador de TCP dentro de la compilación, se debe poner la macro DRIVER_CONFIGURATION en el archivo conf/EDITME con el parámetro bsd-network o arpa-network. El primero se utiliza para las instalaciones de red local, pero cuando se está en Internet es necesario usar arpa-network.

La diferencia entre estas dos es que la segunda tiene un manejador especial para el servicio BIND que permite reconocer registros MX, lo cual la primera no puede hacer.

 

14.4 Modos de entrega de correo

Como se menciono anteriormente, smail es capaz de entregar los mensajes inmediatamente o encolarlos para un proceso posterior. Si se decide encolar los mensajes, smail guardara todo el correo en el directorio messages debajo de /var/spool/smail. No se procesaran hasta que se le indique explícitamente que lo haga (a este proceso se le conoce como "ejecutar la cola").

Se puede seleccionar uno de tres modos de entrega definiendo el atributo delivery_mode en el archivo config para que este como foreground, background, o queued. Es decir, proceso normal, proceso en segundo plano, o proceso en cola. Estas opciones seleccionan la entrega normal (procesamiento inmediato de los mensajes de entrada), en segundo plano (los mensajes son entregados por medio de un hijo del proceso receptor: el proceso padre muere inmediatamente después de la creación del hijo), y el encolado. El correo de entrada siempre será encolado independientemente de esta opción si la variable booleana queue_only esta puesta en el archivo config.

Si se activa el modo de cola, se debe asegurar de que las colas se revisen regularmente; probablemente cada 10 o 15 minutos. Si se ejecuta smail como demonio, se debe agregar la opción -q10m en la línea de comandos para procesar la cola cada 10 minutos. De forma alternativa, se puede invocar runq desde el cron en esos intervalos de tiempo. runq deberá ser un enlace a smail.

Se puede revisar la cola del correo al invocar smail con la opción -bp. De manera equivalente, se puede hacer que mailq sea un enlace a smail, e invocar mailq:

$ mailq -v
m0pvB1r-00023UB From: root (in /var/spool/smail/input)
Date: Sun, 24 Apr 94 07:12 MET DST
Args: -oem -oMP sendmail root@vstout.vbrew.com
Log of transactions:
Xdefer: <root@vstout.vbrew.com> reason: (ERR_148) transport smtp:
connect: Connection refused

_____________________________________________
3 Si compro una distribución Linux a un proveedor comercial, se puede solicitar el código fuente con "un cargo de envío nominal" (que solo cubra los gastos), de acuerdo con las condiciones de copia de smail.

 

Esto muestra un solo mensaje que esta esperando en la cola de mensajes. El registro de transacciones (que solo se mostrará si se da a mailq la opción -v) puede dar una explicación adicional de por que el mensaje esta esperando para su entrega. Si aun no se ha intentado entregar el mensaje, no se mostrará la información del registro.

Aun cuando no se utilice el modo de cola, smail pondrá de forma ocasional los mensajes en la cola cuando falle la entrega inmediata por una razón transitoria. Para las conexiones SMTP, esto puede ser debido a que el nodo siguiente sea un inalcanzable; pero los mensajes pueden también ser pospuestos cuando el sistema de archivos del receptor este lleno. En cualquier caso, debe poner una cola que se revise, por ejemplo, cada hora (utilizando runq), porque si no, cualquier mensaje pospuesto se quedara encolado indefinidamente.

 

14.5 Otras opciones del fichero config

Hay otras muchas opciones en el archivo config, algunas poco usadas en sistemas sencillos. Sin embargo, mencionaremos algunas que sí que serán útiles con frecuencia:

error_copy_postmaster
Si esta variable booleana se pone, cualquier error generará un mensaje al administrador de correo. Normalmente esto solo se hace para los errores que se deben a una configuración incorrecta. La variable puede activarse poniéndola en el archivo config, precedida por un signo de suma (+).

max_hop_count
Si la cuenta de saltos para un mensaje (i.e. el número de nodos que se han atravesado) es igual o excede a este numero, los intentos de entrega producirán un mensaje de error que será enviado a quien genero el mensaje. Esto se utiliza para prevenir que los mensajes entren en un ciclo infinito. La cuenta de saltos se calcula generalmente a partir del numero de campos
Received: que se encuentran en el encabezado del correo. Además, esta cuenta también puede ser ajustada de forma manual utilizando la opción -h en la línea de comandos. Esta variable tiene como valor por defecto 20.

postmaster
La dirección del administrador de correo. Si la dirección Postmaster no puede ser resuelta como dirección local valida, entonces ésta se utiliza como último recurso. El valor por defecto es root.

 

14.6 Encaminamiento de mensajes y entrega

smail divide la entrega del correo en tres partes, la ruta, el módulo de entrega local y el módulo de transporte.

El módulo de encaminamiento resuelve todas las direcciones remotas, determinando el nodo al que el mensaje será enviado y el transporte que será utilizado. Dependiendo de la naturaleza del enlace, se utilizarán transportes diferentes tales como UUCP o SMTP.

Las direcciones locales se dan al módulo de entrega local que resuelve cualquier reenvío o alias. Por ejemplo, la dirección podría ser un alias o una lista de correo, o el usuario podría querer reenviar su correo a otra dirección. Si la dirección resultante es remota, se maneja de nuevo en el módulo de encaminamiento, de otra forma se asigna a un transporte para su entrega local. Normalmente, la acción a realizar será entregar a un archivo de correo, pero los mensajes también pueden ser pasados a la entrada de un comando (por ejemplo, un filtro de correo que el usuario quiera establecer) o agregados a un archivo arbitrario cualquiera.

El módulo de transporte, finalmente, es el responsable de la entrega, independientemente del método que se haya escogido. Intenta entregar el mensaje y en caso de problemas, puede devolver un mensaje al remitente o posponer la entrega para intentarlo de nuevo más tarde.

Con smail se tiene mucha flexibilidad para configurar estas tareas. Para cada una de ellas, hay varios controladores4 disponibles, de los cuales se puede elegir el más adecuado.

Se debe indicar a smail la elección a través de los siguientes archivos: routers, directors y transports, que se encuentran en /usr/lib/smail. Si estos archivos no existiesen, se toman valores por defecto razonables que funcionan en la mayor parte de los sistemas que utilizan SMTP o UUCP como transporte. Si se quiere cambiar la política de encaminamiento de smail, o modificar un transporte, es conveniente obtener los archivos ejemplo que vienen con la distribución de los programas fuente de smail 5, copiar los archivos ejemplo a /usr/lib/smail, y modificarlos de acuerdo con sus necesidades. Los archivos de ejemplos de configuración están también en el Apéndice B.

_____________________________________________
4 Aquí, conocemos por controladores a los distintos módulos internos de smail capaces de utilizar un método de entrega de mensajes u otro. Así, tenemos controladores para UUCP o para SMTP 5 Los archivos de configuración por defecto se encuentran en samples/generic bajo el subdirectorio de los programas fuente.

 

14.7 Mensajes de encaminamiento

Cuando se le da un mensaje, smail revisa primero si el destino está en el sistema local o en un nodo remoto. Si la dirección del ordenador destino corresponde a uno de los nodos locales configurados en el archivo config, el mensaje es tratado por el módulo de entrega local. Si no fuese así, smail transmite la dirección del destino a varios controladores de encaminado para encontrar a que máquina se