CONFIGURANDO SENDMAIL PRACTICO Y SEGURO
Sendmail es uno de los mas veteranos servidores de correo, con prestaciones profesionales estable y seguro (desde hace unos años). Cierto es que tiempo atrás fueron famosas algunas vulnerabilidades que podían ser aprovechadas por usuarios maliciosos para ganar privilegios en el sistema, pero para ser justos digamos que otros programas famosos cuando no se parchean o actualizan debidamente (labor exclusiva del administrador del sistema) también son vulnerables (el mismo Apache lo fue).
Podríamos concluir que todo sistema pobremente administrado se vuelve peligroso. Volviendo a Sendmail, tiene un archivo de configuración algo incomprensible llamado sendmail.cf que no es necesario "tocar directamente", afortunadamente gracias a unos archivitos de texto simples y un par de comandos que se encargan de realizar los cambios en sendmail.cf.
Estos archivos se instalan (en Slackware y otras distros también) en:
# /etc/mail
| sendmail.mc | archivo principal de configuración |
| sendmail.cf | archivo generado a partir de sendmail.mc |
| relay-domain | fichero de configuración seguridad |
| access | fichero de configuración seguridad |
| access.db | archivo generado a partir de access |
| local-host-names | otro fichero de seguridad |
| virtusertable | archivo de configuración de usuarios virtuales |
| virtusertable.db | archivo generado a partir de virtusertable |
| aliases | define los alias para usuarios del sistema y virtuales |
Como verán los archivos con extensión .db se generan o compilan desde otros que son sus fuentes por así decirlo (mas abajo enseñamos como hacerlo, tranquilo). El archivo sendmail.mc podría tener muchísimas líneas con ordenes, pero para configurar nuestro servidor no necesitaremos tantas, sí comentarios siempre tan útiles. Para comentar una línea que será obviada por el programa se agrega dnl al principio.
Ejemplo de nuestro sendmail.mc:
| divert(-1) # # Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # By using this file, you agree to the terms and conditions set # forth in the LICENSE file which can be found at the top level of # the sendmail distribution. # dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA') VERSIONID(`@(#)sendmail.mc 8.13.37 (Linux) 29/6/2005') OSTYPE(`linux')dnl DOMAIN(`generic')dnl # FEATURES(`nouucp',`nespecial') FEATURES(`nocanonify') # dnl MASQUERADE_AS(`mi_dininio.com.ar')dnl dnl FEATURE(`masquerade_entire_domain') dnl FEATURE(`masquerade_envelope') dnl FEATURE(`allmasquerade') dnl MASQUERADE_DOMAIN(`mi_dominio.com.ar') # MAILER(`local') MAILER(`smtp') Cwmi_dominio.com.ar # This is a Berkeley-specific configuration file for HP-UX 9.x. # It applies only to the Computer Science Division at Berkeley, # and should not be used elsewhere. It is provided on the sendmail # distribution as a sample only. To create your own configuration # file, create an appropriate domain file in ../domain, change the # `DOMAIN' macro below to reference that file, and copy the result # to a name of your own choosing. # divert(0) |
Aunque esta sintético, funcionara. La sección de MASQUERADE esta comentada con dnl ya que usaremos usuarios virtuales.
Ejemplo del archivo access se colocan los dominios que pueden hacer relay desde nuestro servidor (pueden enviar correo desde nuestro sendmail) y los que no dejamos hacerlo.
| mi_dominio.com.ar
RELAY localhost RELAY el_dominio_molesto.com.ar REJEC |
El archivo relay-domain cumple la misma función y en mi caso tiene prioridad sobre el archivo access.db
| 200.51.44.9 localhost tal_pc_de_la_red |
En el archivo virtusertable se guardan los usuarios virtuales, de manera que relaciona una dirección de correo con un usuario "verdadero" del sistema, el ejemplo aclara las cosas:
| jose@tal_dminio.com
usuario_jose lito@utro_dominio.com usuario_lito webmaster@este_dominio.com root |
Fichero aliases. Utilidad. 1- Permiten que una abreviatura o termino fácil de recordar actúe como una dirección de correo, que remite lo recibido a una o varias personas. 2- Invocan a un programa que tomará como entrada el mensaje. 3- Envían correo a un archivo.
| usuario_jose: jose@tal_dminio.com usuario_lito: lito@utro_dominio.com root: daniel_admin bin: root # lee los receptores de un archivo # |
Ahora veamos como generar los archivos .db desde sus fuentes, el aliases y sendmail.cf. Para los .db se utiliza el comando makemap hash de la siguiente forma:
# makemap hash access.db < access
Como se ve, makemap "lee" la entrada dirigida desde acces y crea access.db. Lo mismo para virtusertable.db.
El aliases se genera mediante:
# newaliases
Luego debemos generar el archivo sendmail.cf a partir de sendmail.mc; para eso se utiliza el analizador de macros llamado m4. Su uso es parecido a makemap:
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Si m4 está en el path de ejecución de archivos funcionará, sino hay que darle el path completo a m4, en nuestro caso queda así:
# /usr/share/sendmail/cf/m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Una ves realizado los pasos anteriores, solo resta relanzar sendmail. En slackware sería así:
# /etc/rc.d/rc.sendmail restart
Deberíamos tener nuestro servidor de correo funcionando; no olvidarse de des-comentar en inetd.conf las siguientes lineas (y de relanzar el demonio inetd) si vamos a dar sevicio a usuarios remotos:
# Post Office Protocol version 3 (POP3) server:
pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popa3d
# Internet Message Access Protocol (IMAP) server:
imap2 stream tcp nowait root /usr/sbin/tcpd imapd
Lte.Daniel Minacori
www.berkanet.com.ar
daniel@berkanet.com.ar