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
changefeed: | /usr/local/lib/gup # alias que invoca un programa
complaints: /var/log/complaints # alias que escribe el
# correo recibido a un archivo
daemon: root
games: root

#
postmaster: root    # línea indispensable
MAILER-DAEMON: postmaster    # línea indispensable
#

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