# servidor-correo.txt by loop # Ultima actualizacion: 17/01/03 Explicacion de los pasos a seguir para instalar un servidor de correo (sendmail) con los siguientes servicios/caracteristicas: cyrus/SASL, genericstable, virtusertable, smrsh, auto-responder, etc... Informacion adicional/detallada en: - Uso de m4: http://www.sendmail.org/m4 - Cyrus SASL: http://www.sendmail.org/~ca/email/cyrus/sysadmin.html - SMTP Auth: http://www.sendmail.org/~ca/email/auth - Virtual hosts: http://www.sendmail.org/virtual-hosting.html - Otros links de http://www.sendmail.org/~ca/email/ - SSL: - http://www.sendmail.org/~ca/email/starttls.html - http://www.ofb.net/~jheiss/sendmail/tlsandrelay.shtml * CYRUS-SASL: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ ATENCION: usa la rama 1.x!! - Compilacion e instalacion del Cyrus-SASL # cd cyrus-sasl-version # configure --prefix=/usr --disable-krb4 --enable-login --enable-plain # make # make install # ldconfig # cd /usr/lib/sasl # pico Sendmail.conf -> pwcheck_method: shadow # chown root.smmsp Sendmail.conf # chmod 640 Sendmail.conf # mkdir -p /etc/mail/auth # touch /etc/mail/auth/auth-info # chown -R root.smmsp /etc/mail/auth # chmod 750 /etc/mail/auth # chmod 640 /etc/mail/auth/auth-info * SENDMAIL: ftp://ftp.sendmail.org/pub/sendmail/ - Compilacion del ejecutable 'sendmail' # cd sendmail-version # cd devtools/Site # pico site.config.m4: -> APPENDDEF(`confENVDEF', `-DSASL') -> APPENDDEF(`conf_sendmail_LIBS', `-lsasl') # cd ../../sendmail # sh Build Antes de proceder a la instalacion, es recomendable hacer copia de seguridad de los binarios 'sendmail', 'newaliases', 'mailq', 'hoststat', 'purgestat' y sus respectivas paginas man (no todos tienen). # sh Build install - Compilacion de los archivos de configuracion # cd ../cf/cf Creamos un archivo sendmail.mc, con el cual generamos el sendmail.cf. Dicho archivo debera contener la mayoria de las siguientes opciones (para ver que hace cada una, lee la documentacion del sendmail :P) # pico sendmail.mc -- corta -- divert(-1) divert(0)dnl VERSIONID(`@(#)mailserver.mc v1.0 (dominio.es) 21/05/02') OSTYPE(linux)dnl DOMAIN(dominio.es)dnl FEATURE(`virtusertable', `hash /etc/mail/virtusertable')dnl FEATURE(`genericstable', `hash /etc/mail/genericstable')dnl GENERICS_DOMAIN_FILE(`/etc/mail/generics-domains')dnl FEATURE(`access_db')dnl FEATURE(`smrsh')dnl TRUST_AUTH_MECH(`LOGIN CRAM-MD5 PLAIN DIGEST-MD5')dnl define(`confAUTH_MECHANISMS', `LOGIN CRAM-MD5 PLAIN DIGEST-MD5')dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl MAILER(local)dnl MAILER(smtp)dnl -- corta -- Leete el apartado "Securizando el sendmail" mas abajo por si quisieras incluir algun parametro en el sendmail.mc. Ahora debemos crear un archivo m4 dentro del directorio sendmail-version/cf/domain llamado como el dominio que hemos especificado en el sendmail.cf, y con la extension .m4. Siguiendo el ejemplo anterior, el archivo se llamaria dominio.es.m4, estando en sendmail-version/cf/domain. # cd ../domain # pico dominio.es.m4 -- corta -- divert(-1) divert(0) VERSIONID(`@(#)dominio.es.m4 1.0 dominio.es) 21/05/02') define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward')dnl define(`confMAX_HEADERS_LENGTH', `32768')dnl FEATURE(`redirect')dnl FEATURE(`use_cw_file')dnl EXPOSED_USER(`root') -- corta -- Generamos el cf # cd ../cf # sh Build sendmail.cf Hacemos copia de seguridad del sendmail.cf actual, si lo hubiese, y copiamos el sendmail.cf generado al /etc/mail, asi como el submit.cf. # cp sendmail.cf submit.cf /etc/mail # chown root.smmsp /etc/mail/*.cf # chmod 640 /etc/mail/sendmail.cf # chmod 644 /etc/mail/submit.cf O podemos usar 'sh Build install-cf' para instalar los ficheros de configuracion. Luego asegurate de que los permisos de dichos ficheros sean seguros. # sh Build install-cf - Compilamos aquellas utilidades que necesitemos, por ejemplo: MAKEMAP: # cd ../.. # cd makemap # sh Build # sh Build install SMRSH: # cd .. # cd smrsh # sh Build # sh Build install # mkdir /var/log/sm.bin # chown root.root /var/log/sm.bin # chmod 755 /var/log/sm.bin Haremos un link simbolico desde ese directorio a donde esten aquellos programas (ejecutables) que tenga que usar el sendmail, como pueden ser los wrappers del majordomo o del mailman (listas de correo), el procmail, el vacation, etc... MAILSTATS: # cd .. # cd mailstats # sh Build # sh Build install VACATION: # cd .. # cd vacation # sh Build # sh Build install Para asignar el auto-responder a un usuario, se procede de la siguiente forma: # pico /home/usuario/.forward => \usuario, "| /usr/bin/vacation usuario" # pico /home/usuario/.vacation.msg => introducimos el mensaje del auto-responder # vacation -i Para eliminar un auto-responder, eliminaremos ambos archivos o, en el caso de usar el .forward para otras cosas, la linea dedicada a el. -- FIN DE INSTALACION -- De esta forma los usuarios se tendran que autentificar para mandar correos a traves de nuestro SMTP. Dicha autentificacion la hace del shadow, osea de la misma manera (mismo usuario y password) que lo hacen para el POP/IMAP. * TABLA DE USUARIOS VIRTUALES Respecto a la tabla de usuarios virtuales, se puede usar el webmin para manejar de una forma comoda dicha tabla, aunque no es complicado. Un ejemplo de virtusertable: Queremos tener: * webmaster@dominio1.es * webmaster@dominio2.es * todo mail que llegue a un usuario inexistente de ambos dominios, debe de ser redirigido al postmaster de cada dominio La tabla de usuarios virtuales se genera a partir de archivos de texto, como el siguiente (ojo, separacion con tabulaciones) -- cut -- webmaster@dominio1.es webmaster_dominio1_es webmaster@dominio2.es webmaster_dominio2_es @dominio1.es postmaster_dominio1_es @dominio2.es postmaster_dominio2_es -- cut -- Para generar la tabla, siendo "archivo_origen" uno similar al del ejemplo anterior: # makemap hash /etc/mail/virtusertable < archivo_origen Cuentas que deben de existir en el sistema para el ejemplo anterior: - webmaster_dominio1_es - webmaster_dominio2_es - postmaster_dominio1_es - postmaster_dominio2_es Acuerdate tambien de aņadir cada dominio que maneje el servidor de correo al archivo /etc/mail/local-host-names asi como al /etc/mail/generics-domains. Cada vez que cambiemos el sendmail.cf o un archivo de clases como el local-host-names, tendremos que mandar un SIGHUP al proceso del sendmail. * SECURIZANDO EL SENDMAIL Para securizar el sendmail, podemos poner ciertas opciones en el sendmail.mc para que se genere el sendmail.cf securizado directamente, o bien podemos editar posteriormente el sendmail.cf. Se comentan ambas posibilidades para cada apartado a securizar: - Evita que salga la version del sendmail en las cabeceras sendmail.cf: Cambia las cabeceras, buscando "Format of headers" original -> $.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version} modificado -> $.by $j with id $i$?{tls_version} - Deshabilita la ayuda sendmail.cf: Borra el contenido detras del signo igual ("=") de la linea Helpfile y borra el archivo /etc/mail/helpfile. - No generar el demonio MSA por defecto sendmail.mc: FEATURE(`no_default_msa')dnl o sendmail.cf: Comenta las 2 lineas de DaemonPortOptions (puerto 587) - Define las opciones de privacidad sendmail.mc: define(`confPRIVACY_FLAGS', `goaway, noetrn, restrictmailq, restrictqrun')dnl o sendmail.cf: Cambia la linea de PrivacyOptions por la siguiente: PrivacyOptions=goaway,noetrn,restrictmailq,restrictqrun - Define el SMTP Greeting Message sendmail.mc: define(`confSMTP_LOGIN_MSG', `Servidor de EMPRESA')dnl o sendmail.cf: Cambia la linea de SmtpGreetingMessage por algo menos informativo - Limita el tamaņo de los mensajes sendmail.mc: define(`confMAX_MESSAGE_SIZE',`10000000')dnl o sendmail.cf: Cambia la linea MaxMessageSize - Maximo numero de receptores permitidos en un mismo mensaje sendmail.mc: define(`confMAX_RCPTS_PER_MESSAGE',`1000')dnl o sendmail.cf: Cambia la linea MaxRecipientsPerMessage Los dos siguientes puede que eviten algun Denial Of Service, pero ojo, en cada sistema deberas de ajustar los numeritos, no vaya a ser que dejes sin servicio en caso de que el trafico de correo sea grande. En caso de duda, olvida los parametros estos. - Limita el numero de procesos 'sendmail' sendmail.mc: define(`confMAX_DAEMON_CHILDREN',`30')dnl o sendmail.cf: Cambia la linea MaxDaemonChildren - Limita el numero de conexiones por segundo permitidas sendmail.mc: define(`confCONNECTION_RATE_THROTTLE',`10')dnl o sendmail.cf: Cambia la linea ConnectionRateThrottle Saludos! :) # EOF - loop