Instalando exim: (0.13) (slink)(potato) Configurar exim como servidor de correo (SMTP) en una intranet con conexión intermitente a internet utilizando el SMTP del proveedor CAMBIOS: 0.12 30/9/00 Añado sección "MAS SEGURIDAD" 0.13 3/10/00 Más detalles de porque el servidor SMTP necesita privilegios root ATENCION: cambios slink/potato ------------------------------ Configuración: /etc/exim.conf * El formato ha cambiado un poco * INSTALAR PAQUETES: exim # El servidor de correo en si exim-doc ó exim-doc-html # Documentación eximon # Monitor X para administración de exim CONFIGURACION DE EXIM EN DEBIAN: - Ejecutar como root: eximconfig - Y elegir las siguientes opciones: (2) Internet site using smarthost servidor.localdomain visible mail name of your system >>Nombre del servidor que aparecerá en *TODAS* las cabeceras de los mensajes enviados intranet id-empresa.local other names >>Nombres a utilizar en los correos internos (p.e.: manel@intranet) y no tienen por que ser un dominio real registrado, hay que separarlos con un espacio >>Netscape 4.5 Win exige que la identidad mail el dominio tenga un "." none domains to relay 192.168.0.0/24 machines that use us as smarhost >>Admitiremos el reenvio de mensajes recibidos desde esta red que son nuestros clientes... n filter unsolicited commertial email smtp.wanadoo.es smarhost for outgoing mail >>Servidor SMTP de nuestro proveedor que vamos a utilizar para enviar los mensajes manel mail for postmaster and root y /etc/aliases to be replaced >>Decir "n" si ya tenemos unos aliases de mail customizados... - Leer y verificar el resumen de configuración y aceptar con 'y' REESCRIBIR CABECERAS DE MENSAJES DE SALIDA: 1) Descomentar la linea de rewrite de /etc/exim.conf (Debian Slink 2.1), (en Potato 2.2 ya esta descomentada pero solo enmascara las cabeceras bcfrF) Vamos a reescribir solamente las direcciones del dominio "id-empresa.local", y dejamos la ultima palabra como "fFrs", quedando así: *@id-empresa.local ${lookup{$1}lsearch{/etc/email-addresses}\ {$value}fail} fFrs La ultima palabra son las cabeceras a reescribir: - fFrs From, Reply-To y Sender - bcfrFs Bcc, Cc, From, Reply-To y Sender (pero *NO* el To:) - h *TODAS* ( = tTbcfFrs, incluye el To) 2) Crear (slink) o editar (potato) /etc/email-addresses conteniendo el usuario y la dirección a usar, con el mismo formato que el archivo de "aliases": ----8<---- manel: manel3@apdo.com manel3: manel3@apdo.com ---->8---- MOTIVO: cuando a exim no "le cuadra" la dirección que el cliente declara en el From: añade un campo Sender con la dirección que el piensa que es la real, p.ej. Sender: manel@debian.localdomain Esto provoca devolución de correo (o perdida silenciosa) con ciertos servidores SMTP que están configurados para verificar que el dominio de la dirección de mail del remitente (Sender y From) existen TEST: Con este comando se ve como quedarán todos los campos de la cabecera de los mensajes enviados a la direccion especificada: /usr/sbin/exim -brw persona@dominio.a.probar.la.reescritura ALIASES DE USUARIOS: (Quien recibe el correo de quien) 1) Editar /etc/aliases Añadir una linea por usuario con la cuenta a redirigir y la cuenta de login real: #cuenta_de_correo_a_redirigir: login_local_de_usuario_que_recibirá_el_mensaje root: manel FORMATO: se admiten lineas vacias y comentarios empezando en #, toda linea que comienza en espacio o caracter de control es continuación de la anterior LLAMAR A TRAVES DE TCPWRAPPERS: 1) Mirar que en inetd.conf exista la linea: smtp stream tcp nowait mail /usr/sbin/exim exim -bs 2) Cambiando la linea de inetd.conf por esta otra se restringe el acceso al servidor SMTP con el tcp-wrapper (archivos hosts.allow y hosts.deny) y se registran en el daemon.log los accesos e intentos fallidos de acceso smtp stream tcp nowait mail /usr/sbin/tcpd /usr/sbin/exim -bs 3) Reiniciar cambios en inetd.conf con: Reiniciar inetd con: /etc/init.d/netbase reload MAS SEGURIDAD: 1) Para que exim solo escuche en los interfaces locales y NO en el de internet sustituir inetd por xinetd (mira mi chuleta I-xinetd) Si lanzamos exim como demonio hay que emplear la opción "local_interfaces" en el archivo de configuración *ESTO NO LO HE PROBADO, lo pone en la doc* 2) exim corre como usuario mail, y no como root, eso es bueno 3) exim es suid root, esto es un RIESGO DE SEGURIDAD NO SE LE PUEDE QUITAR EL SUID ROOT: al enviar mail da ERROR He realizado varios intentos de quitar el suid root *SIN EXITO* a) Quitarlo sin mas b) Quitarlo y lanzar desde inetd/xinetd como usuario "root" en vez de "mail" ERROR: 2000-09-30 15:54:31 13fN5z-0000Gx-00 Failed to create spool file /var/spool/exim/input//13fN5z-0000Gx-00-D: Permission denied --- Y el usuario "mail" tiene permisos para ese directorio... :-( --- POSIBLE MOTIVO: Ahora que me estoy empapando de Postfix veo que el servidor SMTP necesita de los privilegios de root para varias cosas importantes: - Aceptar correo de entrada local de un cliente a través de un pipe y dejarlo en el dir de spool (parece la forma estandar de entregar correo local) - Cambiar a los privilegios del usuario de destino al entregar el correo con el ~/.forward Que si no han diseñado el exim para usarlo sin suid root DIFICIL lo tenemos vaya :-( En Postfix solucionan esto teniendo muchos procesos pequeños que son lanzados por un "manager" que es el único que corre como root, y no interacciona con los usuarios, y no hay ningún programa suid root Si la seguridad es importante mejor usar Postfix o Qmail como SMTP CLIENTES: A los clientes de la intranet les ponemos como dirección de e-mail (From:) la dirección de correo local (p.e. manel@id-empresa.local) En el archivo "de firma" que su cliente de correo añade a los mensajes, les ponemos la dirección de correo válida en internet En el libro de direcciones para todas las direcciones locales de los usuarios, para el correo interno, ponemos las direcciones locales como "usuario@id-empresa.local" ya que no serán reescritas (solo reescribimos From y Sender, y no To,Cc,ni Bcc) VENTAJAS DE ESTE SISTEMA: 1) Es facil de instalar INCONVENIENTES DE ESTE SISTEMA: 1) No podemos hacer "reply" entre usuarios locales sin que los mensajes pasen por internet 2) Los fallos de entrega del correo local se envian a nuestro proveedor en internet para luego volver (ya que en el From: de nuestro mensajes pone una dirección no local del proveedor) 3) Si varios usuarios comparten una cuenta de correo (procmail) los fallos de entrega solo llegan al que reciba todos los mensajes de esa cuenta, ya que esos mensajes traen en el To: solo la cuenta y no el nombre del usuario 4) Si enviamos un mensaje a internet y a un usuario local usuario@intranet, a la vez, en el mensaje a internet consta una dirección de correo no válida en internet que dará errores si el destinatario hace un "REPLY ALL" SOLUCION DE ESTOS PROBLEMAS: Utilizar direcciones de correo locales en los clientes y reescribir direcciones en todas las cabeceras pero *SOLO* en los mensajes que se envian a internet: http://www.exim.org/FAQ.html#SEC201 (SECCION REWRITING ADRESSES-Q1003) En breve: Tener dos servidores SMTP a la vez, uno local (sin reescritura) que entrega al segundo solo el correo externo (con reescritura de direcciones) ¡¡¡Felicidades!!! Tienes un servidor SMTP funcionando ;-) --------------------------------------------------------------------------------- MAS INFO: /usr/doc/exim/* (paquete exim-doc) http://www.exim.org