1 - Propósito de este documento =============================== Este documento describe como construir, instalar y configurar un sistema Postfix de forma que pueda una de las siguientes tareas: - Enviar correo solamente, sin cambiar una instalación de sendmail existente. - Enviar y recibir correo a través de un interfaz host virtual, aunque sin cambiar la instalación sendmail existente. - Sustituir un sistema sendmail completo. 2 - Convenciones Tipográficas ============================= En las instrucciones a continuación, un comando escrito como # comando debería ser ejecutado como superusuario. Un comando escrito: % comando debería ser ejecutado como usuario normal (sin privilegios). 3 - Documentación ================= La documentación está disponible en páginas web de HTML (apunte su browser a html/index.html) y en páginas man, estilo UNIX (define el variable de entorno MANPATH al directorio 'man'; asegúrese a utilizar un path absoluto). Los archivos de configuración de ejemplo en el directorio `conf' tienen extensivos comentarios, pero puede que no expliquen cada detalle de cada funcionalidad. Muchos archivos tienen su propia página man embedida. Las herramientas para extraer estás páginas man embedidas están disponibles en el directorio mantools. 4 - Compilando en un sistema soportado ====================================== Si se dar soporte para su sistema será uno de AIX 3.2.5 AIX 4.1.x AIX 4.2.0 BSD/OS 2.x BSD/OS 3.x BSD/OS 4.x Darwin 1.x FreeBSD 2.x FreeBSD 3.x FreeBSD 4.x FreeBSD 5.x HP-UX 9.x HP-UX 10.x HP-UX 11.x IRIX 5.x IRIX 6.x Linux Debian 1.3.1 Linux Debian 2.x Linux RedHat 4.x Linux RedHat 5.x Linux RedHat 6.x Linux RedHat 7.x Linux Slackware 3.x Linux Slackware 4.x Linux Slackware 7.x Linux SuSE 5.x Linux SuSE 6.x Linux SuSE 7.x Mac OS X NEXTSTEP 3.x NetBSD 1.x OPENSTEP 4.x OSF1.V3 (Digital UNIX) OSF1.V4 aka Digital UNIX V4 OSF1.V5 aka Digital UNIX V5 OpenBSD 2.x Reliant UNIX 5.x Rhapsody 5.x SunOS 4.1.x (con Postfix 1.1.0) SunOS 5.4..5.8 (Solaris 2.4..8) Ultrix 4.x (bueno, erase una vez) o algo muy parecido. Con Solaris, el comando "make" y otras utilidades para el desarrollo de software están en /usr/ccs/bin, así que DEBE tener /usr/ccs/bin en tu camino de búsqueda de comandos. Si necesita compilar Postfix para múltiples arquitecturas, use el comando lndir para construir un árbol sombra con enlaces simbólicos a los archivos fuente. lndir es parte de X11R6. Si durante cualquier momento del proceso de compilación recibe un mensaje como: "make: no sé como ..." debe poder recuperar ejecutando el siguiente comando desde el directorio inicial de Postfix: % make -f Makefile.init makefiles Si ha copiado los archivos fuente después de compilarlo en otra máquina, es buena idea hacer un cd al directorio inicial y primero % make tidy Esto quitará cualquier dependencias de sistema de haberlo compilado el software en otro sitio. Para compilar con GCC, o con el compilado nativo si la gente me ha dicho que es mejor para su sistema, solo tiene que hacer un cd al directorio inicial de Postfix y teclea: % make Para compilar con un compilado no predeterminado, necesite especificar el nombre del compilador: % make makefiles CC=/opt/SUNWspro/bin/cc (Solaris) % make % make makefiles CC="/opt/ansic/bin/cc -Ae" (HP-UX) % make % make makefiles CC="purify cc" % make etc. En algunos casos, se deshabilita las optimizaciones de manera automática. Para compilar con valores no predeterminados, por ejemplo, con un directorio de configuración distinta a /etc/postfix, use: % make makefiles CCARGS=-DDEF_CONFIG_DIR=\\\\\\\"/some/where\\\\\\\" % make Son siete backslashes :-) Pero al menos funciona con sh y csh. Para compilar Postfix para aplicaciones muy grandes, donde espere ejecutar más que 1000 procesos de entrega, necesita modificar la definición del macro FD_SETSIZE para hacer que select() funciona correctamente: % make makefiles CCARGS=-DFD_SETSIZE=2048 De todas formas, si el comando % make produce mensajes de error del compilador, puede ser necesario examinar el documento FAQ (ver html/faq.html). 5 - Compilando para un sistema no soportado =========================================== - Se identifica cada tipo de sistema con un nombre único. Ejemplos: SUNOS5, FREEBSD4, etcétera. Elige un nombre SYSTEMTYPE para el nuevo sistema. Debe usar un nombre que incluye al menos la versión principal del sistema operativo (como SUNOS4 o LINUX2), para que se pueda soportar diferentes versiones del sistema operativo sin confusión. - Añade una línea case al script "makedefs" en el directorio de alto-nivel que reconoce el nuevo sistema operativo de manera fiable, y que extrae la correcta información especifica del sistema operativo. Asegúrese de que el código sea robusto contra valores del usuario de PATH; si el sistema ofrece múltiples "sabores" de UNIX (e.g. BSD y SYSV) asegurarse de compilar para el sabor nativo no el emulado. - Añade una sección #ifdef SYSTEMTYPE al archivo include central util/sys_defs.h. Puede que tenga que inventar macros con funcionalidades nuevas. Por favor elija nombres de funcionalidades de macros razonables como HAS_DBM o FIONREAD_IN_SYS_FILIO_H. Recomiendo con mucha fuerza que no se usa dependencias del tipo #ifdef SYSTEMTYPE en archivos de fuente individuales. Puede parecer la solución más rápida a corto plazo, pero aumenta de manera considerable el caos y se complica con el tiempo el esfuerzo de mantenimiento. Además, con el soporte para el siguiente sistema operativo hay que añadir de nuevo más #ifdefs en muchas partes del código fuente. 6 - Instalando el software después de su compilación exitosa ============================================================ Este texto describe como instalar Postfix desde su código fuente. Ver el archivo PACKAGE_README si está compilando un paquete para su distribución a otros sistemas. IMPORTANTE: si está SUSTITUYENDO una instalación de sendmail con Postfix, puede que necesite mantener ejecutándose el antiguo programa sendmail durante algún tiempo para vaciar la cola de mensajes. Como superusuario, ejecute los siguientes comandos (sus programas sendmail, newaliases y mailq pueden estar en otro sitio): # mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF # mv /usr/bin/newaliases /usr/bin/newaliases.OFF # mv /usr/bin/mailq /usr/bin/mailq.OFF # chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF \ /usr/bin/mailq.OFF Para instalar o actualizar Postfix: - Crear una cuenta de usuario "postfix" con un id de usuario y id de grupo que no está usado por otro usuario. Preferiblemente, es una cuenta en que nadie más puede hacer un login. La cuenta no necesita un shell de login ejecutable, ni necesita de un directorio HOME. Mi entrada en el archivo password parece así: postfix:*:12345:12345:postfix:/no/where:/no/shell - Asegúrese que haya un alias correspondiente en /etc/aliases: postfix: root - Crear un grupo "postdrop" con un id de grupo que no está usado por otra cuenta de usuario. Ni la cuenta de usuario de postfix. Mi entrada de grupo parece así: postdrop:*:54321: Nota: este grupo era opcional en versiones anteriores de Postfix; ahora está requerido. - Opcional: Si quiere instalar una versión de Postfix cuyos programas y demonios están libre de símbolos (sin información de depuración) haga: % strip bin/* libexec/* - Ejecuta uno de los siguientes comandos como el superusuario: # make install (versión interactiva, primera instalación) # make upgrade (versión no-interactiva, para las actualizaciones) La versión no-interactiva requiere del archivo /etc/postfix/main.cf de una instalación anterior. Si el archivo no existe, use la instalación interactiva. La versión interactiva ofrece sugerencias para los nombres de PATH que puede modificar de manera interactiva, y guarda sus preferencias en /etc/postfix/main.cf para facilitar las actualizaciones futuras. - Procede a la sección según la manera de que quiere utilizar Postfix en su máquina: - solamente enviar correo, sin modificar la instalación de la instalación de sendmail existente (sección 7). - Enviar y recibir correo vía un interfaz de host virtual, mientras siga sin modificar la instalación existente de sendmail (sección 8). - Reemplazar sendmail de todo (sección 9). 7 - Configurar Postfix para solo enviar correo ============================================== Si va a usar Postfix solamente para enviar correo, no hay necesidad de modificar su instalación actual de sendmail. Por lo contrario, modifique su agente de usuario de correo (MUA) para que use el programa sendmail de Postfix directamente. Sigue las instrucciones en la sección 10 "Modificaciones obligatorias del archivo de configuración" y mire el texto "Chroot o no chroot" en la sección 11. DEBE editar y quitar la entrada `smtp inet' en /etc/postfix/master.cf, para evitar conflictos con el sendmail real. Arrancar el sistema de Postfix: # postfix start o, si se sienta nostálgico, use el comando sendmail de Postfix: # sendmail -bd -qwhatever y mira tu archivo syslog para cualquier mensaje de error. % egrep '(reject|warning|error|fatal|panic):' /some/log/file Los nombres típicos de archivo log son: /var/log/maillog o /var/log/syslog. Ver /etc/syslog.conf para los nombres reales. Para ver los mensajes en la cola de correo, use % sendmail -bp Ver también la sección "Cuidado y Alimentación " sección 12 abajo. 8 - Configurar Postfix para enviar y recibir correo (IP virtual) ================================================================ Alternativamente, puede usar Postfix sistema para enviar y recibir correo dejando su configuración de sendmail intacta, ejecutando Postfix sobre una dirección IP virtual. Simplemente configure su agente de correo de usuario (MUA: mail user agent) para que invoque directamente al programa sendmail de Postfix. El directorio examples/virtual-setup proporciona instrucciones para configurar IP's virtuales en una gran variedad de versiones de UNIX. En el fichero /etc/postfix/main.cf, yo especificaría: myhostname = virtual.host.name inet_interfaces = $myhostname mydestination = $myhostname Siga las instrucciones de la sección 10 de este documento "Ediciones de los archivos de configuración obligatorias", y revise la sección 11 "chroot o no chroot". Inicie el sistema de correo: # postfix start o, si se siente nostálgico, use el programa sendmail de Postfix: # sendmail -bd -qwhatever y mire su fichero de registro syslog por si hubiera algún error: % egrep '(reject|warning|error|fatal|panic):' /fichero/de/log Los ficheros de registro típicos son: /var/log/maillog o /var/log/syslog. Busque en /etc/syslog.conf los nombres de los ficheros de registro que tiene usted configurados. Para inspeccionar la cola de correo use: % sendmail -bp Lea también la sección 12 "Cuidados y alimentación" mas abajo. 9 - Quitando sendmail para siempre ================================== Antes de instalar Postfix debe guardar los programas existentes de sendmail como se describe en la sección 6. Asegúrese de mantener funcionando el antiguo sendmail durante al menos un par de días para vaciar cualquier correo no enviado. Para hacerlo, para el demonio sendmail y rearrancarlo con: # /usr/sbin/sendmail.OFF -q Después de haber visitado la sección "ediciones de archivos de configuración obligatorias" abajo, puede arrancar el sistema de Postfix con # postfix start Pero la vieja manera de sendmail sigue funcionando igual de bien: # sendmail -bd -qwhatever y mira el archivo syslog para cualquier queja del sistema de correo. % egrep '(reject|warning|error|fatal|panic):' /some/log/file Los nombres de logfile típicos son: /var/log/maillog o /var/log/syslog. Ver /etc/syslog.conf para los nombres de logfile realmente usados. Ver también la sección 12 "Cuidado y Alimentación del sistema Postfix" abajo. 10 - Ediciones de archivos de configuración obligatorias ======================================================== Por defecto, las archivos de configuración de Postfix están en /etc/postfix, y deben tener como dueño root. Dándole a otro usuario permisos de escritura a main.cf o master.cf es equivalente a darle a este usuario los permisos de root. Cuando realice un cambio al archivo de configuración, ejecute el siguiente comando para refrescar el sistema que está en marcha: # postfix reload En /etc/postfix/main.cf tendrá que configurar un número mínimo de parámetros de configuración. Los parámetros de configuración de Postfix parecen mucho a los variables de entorno. Se especifica un variable como parámetro = valor y lo usa prefijando un $ ante su nombre: otro_parametro = $parámetro Puede usar el $parametro antes de que se le ha dado un valor. El lenguaje de configuración de Postfix usa la evaluación perezosa, y no usa su valor hasta que se le necesita al estar ejecutandose. Primero, debe especificar que dominio se añadirá a las direcciones que no llevan dominio (por ejemplo una dirección sin @nombre.dominio). El parámetro "myorigin" usa como valor predeterminado el nombre local de host, pero esto probablemente solo vale para sitios muy pequeños. Algunos ejemplos: myorigin = $myhostname myorigin = $mydomain En el primer caso, el correo local sale como user@$myhostname, en el segundo caso el remitente es user@$mydomain. Siguiente debe especificar las direcciones de correo que Postfix debe entregar localmente. Algunos ejemplos: mydestination = $myhostname, localhost.$mydomain mydestination = $myhostname, localhost.$mydomain, $mydomain mydestination = $myhostname El primer ejemplo es apropiado para un workstation, el segundo es apropiado para el servidor de correo de un dominio entero. El tercero se debe usar cuando se está usando el interfaz de host virtual. Si su maquina está en una red abierta entonces debe especificar que direcciones IP de clientes están autorizados para reenviar su correo a través de su maquina. El valor predeterminado incluye todas las redes de clase A, B o C a que la maquina está conectada. Muchas veces esto da permisos de reenviar (relay permissions) denegados en demasiados clientes. Los valores que uso en mi propia maquina son: mynetworks = 168.100.189.0/28, 127.0.0.0/8 Si está detrás de un firewall, debe configurar un relayhost (host de reenvio). Si puede, especifica un nombre de dominio de la organización para que Postfix puede cambiar a usar el host MX secundario cuando el primario no funciona. De lo contrario especifica el nombre de host sin más. Algunos ejemplos: relayhost = $mydomain relayhost = mail.$mydomain relayhost = [mail.$mydomain] La forma encerrada con [] elimina las búsquedas DNS MX. Por defecto, el cliente SMTP realizará búsquedas DNS para las direcciones del remitente y de los destinatarios, incluso cuando especifique un host de reenvió. Si su máquina no tiene acceso a un servidor DNS, deshabilita las búsquedas DNS del cliente SMTP así: disable_dns_lookups = yes El FAQ (html/faq.html) tiene más pistas y ayudas para sistemas en redes detrás de un firewall y/o redes sin conexión permanente al Internet. Finalmente, si no ha usado Sendmail, antes de usar Postfix, podría tener que habilitar el database alias (con: sendmail -bi o: newaliases). Asegúrese de haber configurado los aliases de root y postmaster para que su correo vaya a una persona real. Postfix tiene un archivo de ejemplo conf/aliases que puede adaptar a las condiciones locales. 11 - chroot o no chroot ======================== Postfix puede ejecutar la mayoría de los procesos demonios en una cárcel chroot (chroot jail), eso es, que los procesos se ejecutan con unos privilegios bajos fijos y solamente con acceso al directorio de la cola (/var/spool/postfix). Esto añade una barrera significativo contra la intrusión. La barrera no es impenetrable, pero cada cosa ayuda. Con la excepción de los demonios de Postfix local y pipe, cada demonio de Postfix puede ejecutarse de manera 'chroot'. Sitios con requisitos de seguridad muy altas deben considerar chroot todos los demonios que hablan con la red: los procesos smtp y smtpd, y quizá también el cliente lmtp. El archivo predeterminado /etc/postfix/master.cf especifica que no se ejecuta los demonios de Postfix con chroot. Para habilitar el uso de chroot editar el archivo /etc/postfix/master.cf. Las instrucciones están dentro del archivo. Nota que un demonio ejecutándose en un entorno chroot resuelve todos los nombres de archivo relativo al directorio de cola (/var/spool/postfix). Para usar un cárcel chroot con éxito, la mayoría de los sistemas requieren que se traiga algunos archivos o nodos de dispositivo. Para ver ejemplos, mire el directorio examples/chroot-setup que contiene una colección de scripts que puede ayudar con la construcción del entorno chroot para un sistema Postfix. 12 - Cuidados y alimentación del sistema Postfix ================================================ Los programas de Postfix registran todos al demonio syslog. Los nombres de los ficheros de registro se especifican en /etc/syslog.conf. Nota: syslogd no crea ficheros. Deberías crear los archivos antes de (re)arrancar syslogd. Como mínimo necesitara algo así como: mail.err /dev/console mail.debug /var/log/maillog Como norma general, no deben aparecer problemas, pero en cualquier caso, resulta conveniente ejecutar cada noche (antes de que se produzca la rotación de los ficheros de registro del sistema) lo siguiente: # postfix check # egrep '(reject|warning|error|fatal|panic):' /fichero/de/log Los ficheros de registro típicos son: /var/log/maillog o /var/log/syslog. Mire su fichero /etc/syslog.conf para ver los ficheros de registro que ha configurado. La primera linea (postfix check) hace que Postfix genere un informe con posibles discrepancias en los permisos y propietarios de los ficheros. La segunda linea busca informes de problemas producidos por el software de correo, e informa cuan efectivos están siendo los bloques anti-relay y anti-UCE.