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 [email protected] usuario@xxx [email protected] 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.