Sendmail II

Anuncio
Universidad Simón Bolı́var
Diseño y Administración de Redes
Septiembre - Diciembre 1.998
Sendmail II
Fernando Covecino
El archivo sendmail.cf
Este archivo contiene toda la información
necesaria para que sendmail pueda correr.
Lista las ubicaciones de archivos importantes,
y especifica los permisos por defecto de dichos
archivos. Contiene opciones para modificar el
comportamiento de sendmail y, lo más
importante, contiene las reglas para reescribir
direcciones.
Como sendmail debe leer este archivo cada
vez que corre, es decir, cuando es ejecutado como
servidor y cada vez que se envia un mensaje, su
formato ha sido pensado para que sea fácil de
analizar por los programas, no por una persona.
Una entrada tı́pica del archivo serı́a:
R$+@$=W
$@$1@$H
user@thishost -> user@hub
Formato
Cada comando está compuesto por una letra. Una
lı́nea debe comenzar por un comando, por # para
indicar comentario, o por un espacio o tab, que indica
que la linea es la continuación de la lı́nea superior.
Los comentarios tambien pueden ir en una lı́nea de
comando, luego del comando.
Lista de comandos
V:
Define la version del archivo de configuracion.
(de V8 en adelante)
M:
Define el agente de entrega de mail.
D:
Define un macro.
R:
Define una regla de reescritura.
S:
Define el comienzo de un conjunto de reglas de
reescritura.
C:
Define un macro de clase.
F:
Define un macro de clase desde un archivo o pipe.
O:
Define una opcion.
H:
Define los campos que deben incluirse en el header.
P:
Define las prioridades de envio.
T:
Declara usuarios confiables.
K:
Declara bases de datos con claves.
Agentes de entrega de mail
sendmail no entrega mensajes por si solo, sino
que depende de otros programas para hacerlo. A
estos programas se les llama Agentes de entrega
de mensajes (Mail delivery agents).
Mlocal, P=/bin/mail, F=lsDFMmnP, S=7, R=7, A=mail -d $u
Macros
Se usan para definir un valor en un solo lugar
para luego usarlo varias veces en el archivo. Los
macros deben ser de una letra.
DR mailhost.usb.ve
Para referenciar: $R
Reglas
Son el corazon de sendmail.cf, y su finalidad es
transformar direcciones de mail desde un formato
a otro:
R$-
$@$1@$H
user -> user@hub
Las direcciones son comparadas con la regla a la
izquierda ($-). Si concuerdan, son transformadas
basadas en la regla del medio ($@$1@$H). El
texto a la derecha es un comentario. Las
comparaciones se hacen separando en partes la
dirección, los separadores son definidos por el
macro ”o” como sigue:
Do.:%@!^=/[]
Los operadores usados luego son:
$*:
cero o mas tokens.
$+:
Uno o mas tokens.
$-:
Exactamente un token.
$@:
Exactamente cero tokens.
$=:
Igual a algun componente de la clase.
$:
Cualquiera que no este en la clase.
Operadores para reescribir las direcciones:
$[digito]
Copiar por posicion.
$:
Reescribir una vez. (Al comienzo)
$@
Reescribir y volver. (Al comienzo)
$ [conjunto]
Reescribir a traves de otro conjunto de
reglas.
$
Especificar un agente de entrega.
$[ $]
Reemplazar por el nombre canónico del
host según DNS.
$( $)
Igual que $[ $] pero usando la base de
datos local.
${ $}
Igual que $[ $] pero usando NIS.
Macro de clases
Son conjuntos de valores en definidos en un solo
macro.
Macro de clases desde un archivo o pipe
Para definir Macros de Clases desde un archivo
FW/etc/local/ournames
o desde un pipe.
FW|/usr/local/bin/shownames
Opciones
Las opciones indican a sendmail la ubicación de
archivos importantes, como actuar en caso de
errores y los timeouts. También permite adaptar
sendmail a necesidades particulares.
OQ/var/spool/mqueue
Algunas opciones son:
7:
Forzar entrada de 7 bists.
d:
Especificar el modo de envı́o.
e:
Especificar el manejo de errores.
E:
Especificar el encabezado de los mensajes de
error.
j:
Devolver errores de formato MIME.
L:
Especificar nivel de registro de operaciones.
(log level)
m:
Enviar tambien a...
o:
Permitir listas de destinos separadas por
espacio. (Estilo viejo)
p:
Ajustar la privacidad del demonio SMTP.
r:
Especificar timeouts.
s:
Encolar todo ”por si acaso”
v:
Correr en modo ”verbose”
Encabezados
Indica que campos incluir en el encabezado. Está
compuesto por dos partes, una etiqueta seguida
del cuerpo, que indica el formato.
HReceived: by $j id $i; $b ($v/$V)
$j = nombre del host.
$i = id del mensaje.
$b = Hora y fecha.
Prioridades
Se maneja segun los valores del encabezado
”Precedence”. Según el valor, al mensaje se le da
una prioridad desde -100 (menos prioritario) a
100.
Pjunk=-100
Bases de datos con claves
Sendmail, desde la versión 8, ofrece bases de
datos con claves externas para guardar valores
como, por ejemplo, la lista de anfitriones UUCP.
Kuucp hash /etc/mail/uucphosts
Probando el archivo de configuraciones
La idea, es probar que las reglas del archivo de
configuración están bien.
Archivo de prueba:
3,0
3,0
3,0
3,0
3,0
usuario@usb
usuario@usb.ve
usuario@xxx
usuario@yahoo.com
usuario
Prueba:
skynet.usb.ve:/home/fernando> /usr/lib/sendmail -bt <prueba \
| grep "0 returns" | sed -e "s/^.*returns://"
$#
$#
$#
$#
$#
esmtp
local
esmtp
esmtp
local
$@
$:
$@
$@
$:
usb $: usuario < @ usb >
usuario
xxx $: usuario < @ xxx >
yahoo . com . $: usuario < @ yahoo . com . >
usuario
El campo MX de DNS
Permite definir por prioridades a qué
maquinas van dirigidos los mensajes de un
dominio.
Si el primer servidor no contesta, el mensaje
se envia al segundo, y ası́ sucesivamente hasta que
alguien conteste.
Cuando a un servidor SMTP le llega un
mensaje para otro, trata de enviarlo, si no puede,
lo encola.
Una vez que el servidor principal del dominio
vuelve a estar disponible, los servidores
”secundarios” le enviarán los mensajes encolados.
Formas de correr sendmail
sendmail es corrido siempre de la misma forma
cuando se envian mensajes, y es desde la lı́nea de
comando.
Para recibir mensajes, sendmail puede ser corrido
como demonio:
/usr/lib/sendmail -bd -q1h
o desde el archivo inetd.conf al momento de
recibir una petición, en este caso, se debe
configurar el cron para que sendmail procese la
cola de mensajes periódicamente.
Estadisticas en sendmail
Hay dos formas de ver las estadı́sticas de
sendmail...
sendmail.sf :
La primera es a través del archivo sendmail.st.
Para leer este archivo se usa el programa
”mailstats”
Ej: Skynet
bash-2.02# mailstats
Statistics from Thu Apr 2 14:17:20 1998
M msgsfr bytes_from msgsto
bytes_to
0
0
0K 12223
2214516K
1
0
0K
6226
140714K
3 1090019
10398394K 1099856 10279618K
5 322890
7996074K 386950
5715856K
M son, tal como es el comando, los mail
agents, en el caso particular de skynet, 0 es
Mlocal (mail), 1 es Mprog (programas), 3 es smtp
y 4 esmtp.
Los mail agents son listados en el mismo
orden con el que fueron definidos en el archivo de
configuración.
Los datos que se pueden observar en la tabla,
de derecha a izquierda, son: Número de mensajes
llegados desde el agente, número de bytes llegados
desde el agente, cantidad de mensajes enviados al
agente y número bytes enviados al agente.
En la primera lı́nea de la salida se indica la
fecha desde la cual se está tomando la estadı́stica.
Syslog
El syslog es la parte del sistema operativo UNIX
que determina a dónde enviar los mensajes de log.
Para diferenciar entre diferentes tipos de mensajes
se utiliza ”log-type” (sendmail usa mail ) y level.
Los log-types son:
user:
Mensajes generados por procesos de usuario.
kern:
Mensajes generados por el kernel.
mail:
Mensajes del sistema de correo.
daemon:
Mensajes de demonios del sistema.
auth:
Mensajes del sistema de autentificación (login).
lpr:
Mensajes del sistema de impresión.
news:
Mensajes de usenet.
uucp:
Mensajes de uucp.
cron:
Mensajes de las utilidades cron y at.
local0-7:
Reservados para usos del administrador.
:
todas
Los niveles son, de más grave a menos: emerg,
alert, crit, err, warning, notice, info, debug y
none.
Los destinos posibles son @host, /archivo,
usuario,usuario,*.
Ejemplo:
kern.debug
user.debug
mail.debug
daemon.debug
auth.debug
syslog.debug
lpr.debug
/var/adm/syslog.dated/kern.log
/var/adm/syslog.dated/user.log
/var/adm/syslog.dated/mail.log
/var/adm/syslog.dated/daemon.log
/var/adm/syslog.dated/auth.log
/var/adm/syslog.dated/syslog.log
/var/adm/syslog.dated/lpr.log
msgbuf.err
/var/adm/crash/msgbuf.savecore
kern.debug
kern.debug
*.emerg
/var/adm/messages
/dev/console
*
Cómo lo usan los programas:
Para activar el log:
openlog("sendmail", LOG_PID, LOG_MAIL)
Para enviar un mensaje:
syslog(prioridad, mensaje)
Caso sendmail :
Los archivos de los generados por syslog luego de
discriminar los mensajes son archivos de texto
que pueden ser analizados por diversos programas
para producir estadı́sticas.
Descargar