El servicio SMTP (Simple Mail Transfer Protocol, puerto 25 TCP) se utiliza para
transferir correo electrónico entre equipos remotos; estas máquinas pueden
ubicarse físicamente en la misma sala, en la misma universidad, o en la
otra parte del mundo, a miles de kilómetros de distancia. Este servicio suele
ser atendido por un demonio denominado sendmail, que ha sido uno de los
que más problemas de seguridad ha tenido a lo largo de la historia de Unix;
y no es para menos: se trata de un software muy complejo y potente -
incluso demasiado para las necesidades de la mayoría de servidores -, por
lo es inevitable que en su código existan bugs; para hacernos una idea
del grado de complejidad de sendmail simplemente tenemos que echarle un
vistazo a su fichero de configuracion principal, /etc/sendmail.cf. Existen
incluso libros casi dedicados exclusivamente a este archivo ([CA97a],
[CA97b]...).
Una medida de protección básica para nuestro servicio SMTP, y que
muchos administradores desconocen, es la posibilidad de servir sendmail
desde inetd en lugar de hacerlo como un demonio independiente, y por tanto
poder restringir el acceso al mismo mediante TCP Wrappers. En la
mayoría de organizaciones
existe un servidor de correo principal que es el encargado de recoger el mail para todas las direcciones `*@*.upv.es'; el resto de equipos sólo
recibirán correo desde este equipo - o desde otro que sirve sólo a un
subdominio, y que a su vez recibe sólo desde el principal -. Entonces,
parece claro que si nuestro sendmail sólo recibe correo válido desde
una máquina, lo lógico es configurarlo para que sólo acepte peticiones
desde ella: en lugar de lanzar el demonio al arrancar el sistema, en uno de
los scripts de /etc/rc.d/ o similar, lo serviremos desde inetd. Para esto necesitamos en primer lugar modificar el script
correspondiente para que sendmail no se lance como demonio en el
arranque: en lugar de
invocarlo como `sendmail -bd -q15m' lo haremos como `sendmail
-q15m'. Ademas, es necesario identificar el servicio en /etc/services,
con una línea como la siguiente:
luisa:~# grep smtp /etc/services
smtp 25/tcp mail
luisa:~#
Tras reconocer el servicio, hemos de añadir una línea en /etc/inetd.conf indicando cómo se ha de ejecutar sendmail cuando inetd reciba una petición en el puerto 25; dicha línea es similar a la
siguiente:
luisa:~# grep smtp /etc/inetd.conf
smtp stream tcp nowait root /usr/sbin/tcpd sendmail -bs
luisa:~#
Una vez realizados estos cambios podemos controlar el acceso a nuestro servicio
SMTP mediante TCP Wrappers; por ejemplo, en el caso de la
Universidad Politécnica, el servidor de correo principal se denomina vega.cc.upv.es. Para que sólo esta máquina nos pueda enviar correo,
incluiremos una línea como la siguiente en /etc/hosts.allow:
luisa:~# grep sendmail /etc/hosts.allow
sendmail: vega.cc.upv.es
luisa:~#
El resto de sistemas no han de estar autorizados a conectar al puerto; esto
incluye también a la máquina local: para un correcto funcionamiento de
nuestro sistema de correo, ni siquiera hace falta que localhost tenga
permiso para acceder a su puerto 25. En [Gon97] se explica cómo
combinar estas restricciones ofrecidas por TCP Wrappers con un
cortafuegos como TIS Firewall Toolkit; en esta obra también se habla
con más detalle de los problemas que puede implicar el correo electrónico,
y por supuesto de cómo solucionarlos.
Evidentemente, esto es aplicable a sistemas que reciban correo de un único
mailer; si debemos configurar el propio mailer de la organización,
que por lo general recibirá correo de un número indeterminado de máquinas,
no podemos bloquear el acceso a su sendmail de esta forma. No obstante,
en este caso podemos aplicar unas medidas de seguridad simples, como realizar
una consulta inversa a DNS para asegurarnos de que sólo máquinas registradas
envían correo o no permitir que nuestro sistema reenvíe correo que
no provenga de direcciones registradas bajo su dominio. Estas medidas, básicas
para evitar problemas de spam y mail bombing, son necesarias en
la configuración de los sistemas de cualquier entidad.
© 2002 Antonio Villalón Huerta