viernes, 9 de mayo de 2008

Configurar sendmail para enviar correos usando un servidor exchange en CentOS

La situación es la siguiente, imaginemos que tenemos una red interna del estilo host.domain.age y queremos enviar correos, logwach correos de root o de crontab a nuestro correo corporativo que es del estilo user@subdomain.domainII.es y OH CASUALIDAD este correo es virtual, no se puede hacer ping internamente (ni externamente a subdomain.domainII.es) porque no lo conoce ni el tato.
Pues este HOWTO o guia ;) explica como conseguir que estos correos funcionen usando sendmail, y claro está que salgan para un servidor exchange (windows 2003) que ya se encargará de mirar a que corresponde lo de subdomain.domainII.es
Lo primero es hacer un pequeño truco, y hacer un forzado para que todos los correos que tengan que ir a subdomain.domainII.es pasen a narices por el servidor exchange, que mira tu por donde esta en el domain.age de nuestra red corporativa.
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
10.1.140.x host host.domain.age
10.1.140.y exchange.domain.age subdomain.domainII.es
Podemos ver el “apaño” para que la ip 10.1.140.y sea la que corresponde a subdmain.domainII.es
Ahora nuestro sendmail.mc
#cat /etc/mail/sendmail.mc
divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4′)dnl
VERSIONID(`setup for linux’)dnl
OSTYPE(`linux’)dnl
define(`SMART_HOST’, `10.1.140.y‘)dnl
define(`confDEF_USER_ID’, “8:12”)dnl
define(`confTO_CONNECT’, `1m’)dnl
define(`confTRY_NULL_MX_LIST’, `True’)dnl
define(`confDONT_PROBE_INTERFACES’, `True’)dnl
define(`PROCMAIL_MAILER_PATH’, `/usr/bin/procmail’)dnl
define(`ALIAS_FILE’, `/etc/aliases’)dnl
define(`STATUS_FILE’, `/var/log/mail/statistics’)dnl
define(`UUCP_MAILER_MAX’, `2000000′)dnl
define(`confUSERDB_SPEC’, `/etc/mail/userdb.db’)dnl
define(`confPRIVACY_FLAGS’, `authwarnings,novrfy,noexpn,restrictqrun’)dnl
define(`confAUTH_OPTIONS’, `A’)dnl
define(`confTO_IDENT’, `0′)dnl
FEATURE(`no_default_msa’, `dnl’)dnl
FEATURE(`smrsh’, `/usr/sbin/smrsh’)dnl
FEATURE(`mailertable’, `hash -o /etc/mail/mailertable.db’)dnl
FEATURE(`virtusertable’, `hash -o /etc/mail/virtusertable.db’)dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail, `’, `procmail -t -Y -a $h -d $u’)dnl
FEATURE(`access_db’, `hash -T -o /etc/mail/access.db’)dnl
FEATURE(`blacklist_recipients’)dnl
EXPOSED_USER(`root’)dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA’)dnl
FEATURE(`accept_unresolvable_domains’)dnl
LOCAL_DOMAIN(`host.domain.age‘)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
FEATURE(`mailertable’,`hash -o /etc/mail/mailertable.db’)dnl
MAILER(smtp)dnl
dnl MAILER(procmail)dnl
Cw10.1.140.y
En este apartado entre las muchas opciones que tenemos ( man sendmail.mc ) lo principal es definir un smart que será a donde enviemos nuestras cosillas y un Cw que es más de lo mismo :) También le indicamos como es el nombre del dominio para que nos llegue al correo con ese nombre.
Aqui también podemos hacer un MASQUERADE para simular que los correos llegan de algún dominio en concreto.
Configuramos nuestra tabla de correos, esto es, a donde se mandará si se desconoce la dirección, esto por supuesto se hace para ejercer más presión a la hora de llegada de correos.
#cat /etc/mail/mailertable
subdomain.domainII.es smtp:[10.1.140.y]
Añadimos en nuestro fichero de acceso que hacer en caso de un correo para ese sitio.
#echo “10.1.140.y RELAY” >>/etc/mail/access
#echo “subdomain.domainII.es RELAY”>>/etc/mail/access
#echo “exchange.domain.age RELAY”>>/etc/mail/access
Por ultimo solo tenemos que reiniciar el servicio de sendmail para poder mandar correos ;-)
#service sendmail restart
Con estos escasos cambios tendriamos configurado nuestro servidor de correo para enviar a nuestra cuenta corporativa a traves del servidor exchange (que es el que conoce a que corresponde el dominio virtual)
Como los DNS de nuestra máquina desconocen que es subdomain.domainII.es tardará del orden de 4 minutos en llegar un correo, esto es muuuuucho tiempo, asi que mejor que configurar para que no use los DNS.
#cat /etc/mail/service.switch
hosts files
aliases files
#echo “O ServiceSwitchFile=/etc/mail/service.switch” >>/etc/mail/sendmail.cf
LISTO :-)
Es importante tener en cuenta que los echo añaden al final de los ficheros, mucho cuidado de sobreescribir algún dato o borrar algo. Es muy recomendable tener una copia de seguridad.
Esta guia fue redactada usando CentOS y RedHat Enterprise 5, en distribuciones como Debian o Suse puede variar la configuración asi como los comandos a usar.

No hay comentarios: