martes, 4 de noviembre de 2014

Servidor Mail Seguro parte II

 Continuando con la guía comenzada en el post anterior para montar un servidor de correo sobre TLS con usuarios virtuales, seguridad anti-spam y anti-virus, hoy le toca a la configuración del MTA o Mail Transport Agent que traducido del inglés, se entiende como la capa de transporte del correo.
 El programa que utilizaremos como MTA será Postfix, y ejecutará las labores de dirigir tanto el correo entrante como el saliente a otros servicios que autentiquen el usuario y dirección y finalmente y si procede, a la carpeta que almacenará nuestro correo o a internet buscando el servidor de destino en caso de ser correo saliente. Postfix (http://www.postfix.org/) es un servidor de correo electrónico open source originalmente escrito por Wietse Venema en febrero de 2001 y que ya va por la versión 2.10. Es más rápido, seguro y fácil de administrar que su competidor en sistemas Linux, Sendmail.
 Para realizar la instalación y la de los módulos que permitirán su interacción con la base de datos MySQL que tratamos en el anterior post ejecutaremos es siguiente comando en el servidor Ubuntu.


sudo apt-get install postfix postfix-mysql

 El prompt cambiará y nos mostrará un dialogo en el que elegiremos "sitio de internet" como tipo de servidor y a continuación escogeremos el nombre del servidor (que no del dominio), normalmente el de nuestro host.
 Ahora empezamos a configurar postfix. Crearemos un archivo en /etc/mailname que contendrá el nombre del servidor de correo (en mi caso smpt.thedarknode.es).

sudo nano /etc/mailname

 Escribimos en la primera linea el nombre del servidor, salimos con CTRL+X y guardamos. Comenzaremos ahora con el archivo principal de configuración de Postfix ubicado en /etc/postfix/main.cf :

sudo nano /etc/postfix/main.cf

 En este archivo cambiaremos varias lineas y otras estarán configuradas de serie en nuevas versiones, por si a caso, mejor asegurarse:

# La siguiente linea se comenta ya que por defecto Postfix buscará en nombre
# del servidor en el archivo /etc/mailname
#myhostname = mail.example.com

En la opción "smtpd_banner" podemos editar el texto de bienvenida que dará el servidor a las conexiones. Por defecto Ubuntu muestra una cadena compuesta por el nombre del host y en nombre del servidor mail seguido de "(Ubuntu)" Conviene no especificar demasiada información en este campo a fin de dificultar la labor de recopilación de información por posibles hackers. Con esta línea es suficiente:

smtpd_banner = $myhostname ESMTP $mail_name

 La  siguiente linea corresponde al origen anexado en los correos. Este puede ser un nombre completo o un nombre de dominio:

#myorigin = /etc/mailname
myorigin = tudominio.com

 Para seguir primero necesitamos hacer una pequeña elección. Se trata de quén va a sacar los correos salientes, es decir, si usarás un servidor SMTP externo o será Postfix el encargado de hacerlo. Usar un servidor externo hace que tu correo no sea marcado como spam por listas negras ya que muchas no dejan que las IPs dinámicas actúen como servidores. Además el servidor tendrá menos trabajo. Por otra parte, enviaro nosotros mismos nuestro correo hace que nuestro servidor no dependa de terceras partes con lo que aumentamos el grado de privacidad. De todos modos, aquí solo reflejaré la linea para indicar a postfix que él se encargará del correo saliente. Para usar un ISP externo, basta con añadir la dirección de éste en la siguiente variable:

relayhost =


 Vamos con los detalles de la red. Estas líneas le dicen a Postfix que va a escuchar en cualquier interfaz de red, confiar solo en localhost y tratar exclusivamente con protocolo IPv4.

inet_interfaces = all
mynetworks_style = host
inet_protocols=ipv4

 En cuanto al correo saliente, la siguiente opción, permite enmascarar las direcciones de salida. Normalmente no queremos que la dirección de envio que sale de nuestro servidor sea el nombre completo de un host (mail.ejemplo.com o www.ejemplo.es) y las lineas siguientes permiten una lista de direcciones que serán enmascaradas con el nombre del dominio exclusivamente. La segunda trata las excepciones:

masquerade_domains = mail.ejemplo.es smtp.ejemplo.es www.ejemplo.es
masquerade_exceptions = root

 Como vamos a usar usuarios y dominios virtuales, las siguientes lineas han de estar como siguen:

mydestination =
local_recipient_maps =

 Ahora procedemos a cambiar una serie de parámetros:

# Cuánto tiempo si hay no entregados antes de enviar la actualización
# de advertencia al remitente
delay_warning_time = 4h
# Tipo de error, temporal o permanente
unknown_local_recipient_reject_code = 450
# Cuanto tiempo en la cola antes de entregar mensaje fallido.
maximal_queue_lifetime = 7d
# Tiempo max y min en seg entre reintentos si la conexión falla
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# Cuanto tiempo de espera de helo antes de recibir el resto de datos
smtp_helo_timeout = 60s
# Límite de direcciones que pueden ser usadas en un mensaje.
# efectivo parando spammers masivos y copias accidentales de listas
smtpd_recipient_limit = 16
# Cuantos errores antes de retroceder.
smtpd_soft_error_limit = 3
# Cuántos errores antes de bloquear.
smtpd_hard_error_limit = 12

 Alguna restricción más. Cuidado con las lineas enteras.

# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl
# Requirement for the recipient address
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_data_restrictions = reject_unauth_pipelining
# require proper helo at connections
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes

 Ahora la configuración para las consultas y los mapas de aliases y dominios virtuales:

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# Esto especifica donde están los directorios de los buzones virtuales
virtual_mailbox_base = /var/spool/mail/virtual
# Localización de los buzones para cada usuario
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# Alias virtuales
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# UID y GID para los archivos de correo creados
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

 Salimos de Nano y guardamos main.conf . Ahora vamos a copiar el archivo aliases desde /etc/ .

sudo cp /etc/aliases /etc/postfix /etc/postfix/aliases

sudo postalias /etc/postfix/aliases

  Vamos a crear las carpetas y gestionar los permisos de éstas para los buzones de correo, también añadiremos un usuario y un grupo al sistema que se encargará de copiar y manejar archivos, llamado virtual:

sudo mkdir /var/spool/mail/virtual
sudo groupadd --system virtual -g 5000
sudo useradd --system virtual -u 5000 -g 5000
sudo chown -R virtual:virtual /var/spool/mail/virtual

Configuración MySQL para Postfix.

 Tal como le indicamos a postfix para resolver los dominios y alias virtuales, ahora tenemos que crear unos archivos con datos de conexión a MySQL que le permitan acceder a nuestras bases de datos. Son tres ficheros, uno para los buzones (mysql_mailbox.cf) otro para alias (mysql_alias.cf) y el último para dominios (mysql_domains.cf).

sudo nano /etc/postfix/mysql_mailbox.cf

user=mail # Nombre del usuario mysql que creamos anteriormente
password=mailPASS #Su password
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1

sudo nano /etc/postfix/mysql_alias.cf

user=mail
password=mailPASS
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1

sudo nano /etc/postfix/mysql_domains.cf

user=mail
password=mailPASS
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
 Con esto concluye, de momento al menos, la configuración de Postfix. Para el siguiente post empezaremos con el servidor POP/IMAP.
 Un saludo y para cualquier cosita, a comentar se ha dicho.

No hay comentarios:

Publicar un comentario