==Caracteristicas de la implementación== Servidor SMTP Servidor POP3 Servidor IMAP Servidor SIEVE ==Preparación de entorno para dominios y correos virtuales== Los buzones virtuales serán almacenados en el directorio /var/vmail, Postfix y Dovecot leeran y escribirán en dicho directorio usando los privilegios de un usuario y grupo dedicado, dicho usuario lo llamaremos vmail. Creamos el grupo vmail con GID 5000: # groupadd -g 5000 vmail Y creamos el usuario vmail con UID y GUID 500: # useradd -u 5000 -g 5000 -c "Virtual Mail" -m -d /var/vmail vmail Le damos un shell valido al usuario vmail: # usermod -s /bin/bash vmail - Crear directorio donde estarán almacenados los correos de los dominios: # su vmail -c "mkdir /var/vmail/dominios" ==Instalacion básica de Apache, PHP y MySQL para PostfixAdmin== Instalamos los paquetes de dependencias para PostfixAdmin: # apt-get install apache2 libapache2-mod-php5 php5 php5-mysql php5-imap mysql-server - Descargamos e Instalamos PostfixAdmin: # mkdir -p ~/paquetes/postfixadmin # cd ~/paquetes/postfixadmin # wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin_2.3.tar.gz # tar zxvf postfixadmin_2.3.tar.gz -C /var/www/ # mv /var/www/postfixadmin-2.3 /var/www/mailadmin Las instrucciones de instalación se encuentran en el archivo INSTALL.TXT. # less INSTALL.TXT - Crear base de datos para PostfixAdmin # mysql -u root -p mysql> CREATE DATABASE postfix; mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixpass'; mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost'; mysql> FLUSH PRIVILEGES; mysql> quit - Configurar PostfixAdmin Respaldamos Editamos el archivo de configuración de PostfixAdmin: # vim /var/www/mailadmin/config.inc.php $CONF['configured'] = true; - Definir URL para postfixadmin: $CONF['postfix_admin_url'] = 'http://mail.example.com/mailadmin/'; - Definir lenguaje predeterminado: $CONF['default_language'] = 'en'; - Cambiar parametros de base de datos $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'postfixpass'; $CONF['database_name'] = 'postfix'; - Definir el correo del administrador de correos: $CONF['admin_email'] = 'postmaster@example.com'; - Definir cifrado para las contraseñas: $CONF['encrypt'] = 'md5crypt'; - Definir longitud minima de la contraseña: $CONF['min_password_length'] = 8; - Definir direcciones de corre del postmaster, abuse, hostmaster y webmaster: $CONF['default_aliases'] = array ( 'abuse' => 'abuse@example.com', 'hostmaster' => 'hostmaster@example.com', 'postmaster' => 'postmaster@example.com', 'webmaster' => 'webmaster@example.com' ); - Cambiar rutas para los dominios: $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; - Definir limites de aliases, buzones y quota: $CONF['aliases'] = '10'; $CONF['mailboxes'] = '10'; $CONF['maxquota'] = '10'; - Desactivar temporalmente el soporte de cuotas de buzón: $CONF['quota'] = 'NO' - Desactivar soporte de vacation: $CONF['vacation'] = 'NO'; - Desactivar soporte de MX secundario: $CONF['backup'] = 'NO'; - Desactivar soporte fetchmail: $CONF['fetchmail'] = 'NO' - Definir URL para pagina principal de PostfixAdmin usuarios: $CONF['user_footer_link'] = "http://mail.example.com.com/mailadmin/users/main.php"; - Desactivar footer: $CONF['show_footer_text'] = 'NO'; - Definir mensaje de bienvenida para la creación automática del buzón: $CONF['welcome_text'] = << # vim /var/www/mail.example.com/mailadmin/templates/users_menu.php
  • Agregamos un parametro de configuración adicional a la configuración de PostfixAdmin para desactivar la edicion de alias por los usuarios. # vim config.inc.php // User Edit Alias $CONF['user_edit_alias'] = 'NO'; - Entrar a la pagina postfixadmin http://mail.example.com/mailadmin/setup.php - Generar HASH, use un pass diferente ya que solo lo usa postfixadmin Copiar el hash en $CONF['setup_password'] y recargue la pagina para crear el usuario super admin. - Crear usuario Super Admin NOTA: No tiene porque ser una cuenta de correo real, solo es un login para PostfixAdmin - Eliminamos archivo del setup: # rm /var/www/mailadmin/setup.php Entre como super admin a PostfixAdmin usando la cuenta recien creada. - Crear dominio example.com en Domain List=>Add domain NOTA: Habilitar el checkbox que dice "Add default mail aliases" - Agregar admin de dominio para example.com en Admin List=>New Admin - Agregar una cuenta de buzón virtual en Virtual List=>Add Mailbox NOTA: Desactivar la casilla de "Send Welcome mail" ==Instalar Postfix con soporte MySQL para dominios virtuales== - Instalamos los paquetes requeridos y extras: # apt-get install mailx mutt postfix postfix-mysql postfix-pcre pfqueue multitail Cuando el asistente de configuración de Postfix aparezca seleccione: - General type of mail configuration: Internet Site - System mail name: mail.example.com Detenemos Postfix para iniciar con una configuración nueva: # /etc/init.d/postfix stop Respaldar el archivo de configruación /etc/postfix/main.cf: # mv /etc/postfix/main.cf{,.orig} Crear archivo principal de configuración de Postfix usando la plantilla: http://verde.e-compugraf.com/jm-confs/postfix/main.cf-virtualdomains-mysql # wget http://verde.e-compugraf.com/jm-confs/postfix/main.cf-virtualdomains-mysql -O /etc/postfix/main.cf # vim /etc/postfix/main.cf - Definir parametros generales: - Definir tamaño máximo de los mensajes entrantes: message_size_limit = 10240000 - Definir caracter delimitador para extensiones de direcciones: recipient_delimiter = + - Generar mensajes de alerta de tipo ""delayed mail" # Si el mensaje no puede ser enviado es encolado y despues de X horas # generar un mensaje de alerta para el remitente (local) de que # su mensaje no ha podido ser entregado y todavía esta encolado. delay_warning_time = 3h bounce_queue_lifetime = 5h # tiempo máximo que puede estar un correo en una cola # 8 horas antes de que sea regresado como undeliverable maximal_queue_lifetime = 3d - Definir parametros de host y dominio: myhostname = mail.example.com myorigin = mail.example.com - Definir dominios locales: mydestination = $myhostname, localhost.localdomain, localhost IMPORTANTE: NO listar dominios virtuales aquí. - Creamos archivo para mapeo de dominios virtuales: # vim /etc/postfix/mysql_virtual_domains_maps.cf user = postfix password = postfixpass hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' - Creamos archivo para mapeo de cuentas y alias virtuales: # vim /etc/postfix/mysql_virtual_alias_maps.cf user = postfix password = postfixpass hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1' - Creamos archivo para mapeo de buzones virtuales: # vim /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix password = postfixpass hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' - Cambiar permisos a archivos de mapas: # chown root:postfix /etc/postfix/mysql_virtual* # chmod 640 /etc/postfix/mysql_virtual* - Verificar dominio que se agrego en postfixadmin # postmap -q example.com mysql:/etc/postfix/mysql_virtual_domains_maps.cf example.com - Verificar la cuenta que se agrego en postfixadmin # postmap -q jmedina@example.com mysql:/etc/postfix/mysql_virtual_alias_maps.cf jmedina@example.com - Verificar buzón virtual: # postmap -q jmedina@example.com mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf example.com/jmedina/Maildir/ Configurando las reglas de acceso: # vim /etc/postfix/recipient_checks.pcre ############################################################## ########### RECIPIENT CHECKS ################################# ############################################################## # El "Recipiente" se refiere a la dirección de coreo en las # cabeceras del correo (SMTP RCPT TO), no el "To:", "Cc:" # u otros campos. # Los Recipientes son revisados por smtpd recipient restrictions # NOTA: Debes tener soporte PCRE compilado/modulo en Postfix # En Debian/Ubuntu install postfix-pcre # Este archivo no requiere ser compilado con postmap. # Rechazar direcciones de recipiente invalidas /^\@/ 550 Invalid address format. /[!%\@].*\@/ 550 This server disallows weird address syntax. # IMPORTANTE: Nunca debemos rechazar o descartar correos para las # cuentas de postmaster hostmaster y abuse. # Ver el RFC 2142 MAILBOX NAMES FOR COMMON SERVICES, ROLES AND FUNCTIONS. # De otra forma podrías ser lista en listas negras como rfc-ignorant.org. /^postmaster\@/ OK /^hostmaster\@/ OK /^abuse\@/ OK # vim /etc/postfix/helo_checks ############################################################## ########### HELO CHECKS ###################################### ############################################################## # HELO se refiere al campo HELO/EHLO cabeceras del correo, # En especifico es el nombre con el que se nos anuncian # los servidores remotos (Clientes MTA). # Son facilmente falcificados (spoofed) por Spammers. # # Este archivo debe ser "compilado" con "postmap", ejem: # postmap hash:/etc/postfix/helo_checks # ############################################################## # Rechazar a cualquiera que se anuncie con nuestro propio # nombre de dominio(s). # Las maquinas en nuestras redes ($mynetworks) se saltarán # estos filtros (permit_my_networks) example.com REJECT You are not in example.com # Rechazar a cualquiera que se nos anuncie con nuestra # propia dirección IP. xxx.xxx.xxx.xxx REJECT You are not xxx.xxx.xxx.xxx # Rechazar a cualquiera que se nos anuncie con el: # localhost, imposible, yo soy "localhost" localhost REJECT You are not me # postmap /etc/postfix/helo_checks # vim /etc/postfix/sender_checks ############################################################## ########### SENDER CHECKS #################################### ############################################################## # Los sender checks revisan la dirección de correo ó dominio # (SMTP "MAIL FROM") en las cabeceras del correo, NO la direc- # ción IP o el nombre de host, o el campo "From:", (aunque puede # coincidir). # Las reglas solo aplican a direcciones de: # Correos: algunusuario@example.com # Dominio: otro-example.com # # Este archivo debe ser "compilado" con "postmap", ejem: # postmap hash:/etc/postfix/sender_checks # ############################################################## ################ Anti Domain Spoofing ###################### ############################################################## # Con estas reglas prevenimos la falsificacion de nuestro dominio, # en especifico correo "de mi para mi" example.com REJECT you cannot send on behalf of example.com .example.com REJECT you cannot send on behalf of example.com ############################################################## ########### LISTAS NEGRAS / BLACKLISTS ####################### ############################################################## # fulano@spammer.net REJECT # dominiospammero.com REJECT #dominiospammer.com REJECT # Agregar aquí correos o dominios deseamos bloquear y regresar # un mensaje de que fue rechazado por ser considerado # correo basura (SPAM) #sender@spammydomein.com 550 SPAM ############################################################## ########### LISTAS BLANCAS / WHITELISTS ###################### ############################################################## # Exclusiones de los RBL checks #clienteimportante.com OK # postmap /etc/postfix/sender_checks # vim /etc/postfix/client_checks ############################################################## ########### CLIENT CHECKS #################################### ############################################################## # CLIENT se refiere a al dirección IP del servidor (MTA), o # el nombre de resolución inversa del servidor. # # Este archivo debe ser "compilado" con "postmap", ejem: # postmap hash:/etc/postfix/client_checks # ############################################################## ############################################################## ########### LISTAS BLANCAS / WHITELISTS ###################### ############################################################## # Maybe example2.tld is on a DNSbl, but we want to let their # email in anyway. #example2.tld OK ############################################################## ########### LISTAS NEGRAS / BLACKLISTS ####################### ############################################################## # Using a domain name #example.tld 554 Spam not tolerated here # Checking by IP address # 10.0.0.0/8 #10 554 Go away! # 172.16/16 #172.16 554 Bugger off! # 192.168.4/24 is bad, but 192.168.4.128 is okay #192.168.4.128 OK #192.168.4 554 Take a hike! # postmap /etc/postfix/client_checks - Revisar la configuracion de postfix # postfix check Iniciar Postfix: # /etc/init.d/postfix restart ==Instalación y Configuración de Dovecot== - Instalar paquetes de Dovect IMAP y POP3 # aptitude install dovecot-imapd dovecot-pop3d Respaldamos el archivo de configuración de dovecot: # mv /etc/dovecot/dovecot.conf{,.orig} Editamos el archivo de configuración de dovecot para definir los parametros generales: # vim /etc/dovecot/dovecot.conf - Configurar parametros de los protocolos soportados: protocols = imap pop3 Para empezar configuraremos Dovecot sin seguridad, es decir, usando contraseñas en plano y sin seguridad SSL/TLS: disable_plaintext_auth = no ssl_disable = yes Definimos la ruta base para los buzones virtuales: mail_location = maildir:/var/vmail/dominios/%d/%n/Maildir Definimos el UID y GID del usuario que puede acceder a los buzones virtuales: mail_uid = 5000 mail_gid = 5000 Defnimos grupo con privilegios temporales para los buzones: mail_privileged_group = vmail Habilitamos el debug para Dovecot mientras se hace la configuración inicial: mail_debug = yes TOCHECK: first_valid_uid = 5000 last_valid_uid = 5000 first_valid_gid = 5000 last_valid_gid = 5000 Definimos parametros para el protocolo IMAP: protocol imap { login_executable = /usr/lib/dovecot/imap-login mail_executable = /usr/lib/dovecot/imap mail_max_userip_connections = 40 mail_plugin_dir = /usr/lib/dovecot/modules/imap imap_client_workarounds = outlook-idle delay-newmail } Definimos parametros para el protocolo POP3: protocol pop3 { login_executable = /usr/lib/dovecot/pop3-login mail_executable = /usr/lib/dovecot/pop pop3_uidl_format = %08Xu%08Xv mail_max_userip_connections = 30 mail_plugin_dir = /usr/lib/dovecot/modules/pop3 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } TODO: protocol managesieve { sieve = /var/vmail/dominios/%d/%n/.dovecot.sieve sieve_storage = /var/vmail/dominios/%d/%n/sieve Desactivamos el plugin de autenticación PAM y passwd y Habilitamos el soporte de busqueda de logins y buzones en MySQL: auth default { mechanisms = plain login #passdb pam { #} passdb sql { # Path for SQL configuration file args = /etc/dovecot/dovecot-sql.conf } #userdb passwd { #} userdb sql { # Path for SQL configuration file args = /etc/dovecot/dovecot-sql.conf } Respaldamos el archivo original: # mv /etc/dovecot/dovecot-sql.conf{,.orig} Creamos el archivo de logins y buzones SQL: # vim /etc/dovecot/dovecot-sql.conf driver = mysql default_pass_scheme = MD5-CRYPT connect = host=localhost dbname=postfix user=postfix password=postfixpass password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active='1' Reiniciamos dovecot: # /etc/init.d/dovecot restart En el log /var/log/mail.log debe ver algo como: Mar 20 20:36:37 mail dovecot: dovecot v1.1.11 starting up (core dumps disabled) Mar 20 20:36:37 mail dovecot: auth-worker(default): mysql: Connected to localhost (postfix) Puede probar un login vía telnet: # telnet localhost 143 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK Dovecot ready. . login jmedina@example.com jmedinapass . OK Logged in. . logout * BYE Logging out . OK Logout completed. Connection closed by foreign host. ==Configurando Dovecot Deliver como Agente de entrega de correo en Postfix== - Configurando el plugin para LDA Dovecot Deliver: # vim /etc/dovecot/dovecot.conf - Definir protocolo lda: protocol lda { postmaster_address = postmaster@example.com mail_plugin_dir = /usr/lib/dovecot/modules/lda deliver_log_format = msgid=%m: %$ log_path = /var/log/dovecot-lda.log } El LDA requiere acceso a la base de datos de cuentas de correo para localizar la ruta del buzón del usuario y otra información. Configuramos el socket maestro para que el usuario y grupo vmail tengan acceso al socket. auth default { ... ... ... socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 user = vmail group = vmail } } ... ... ... } - Crear archivo de log para dovecot deliver: # touch /var/log/dovecot-lda.log # chown root:vmail /var/log/dovecot-lda.log # chmod 664 /var/log/dovecot-lda.log - Reiniciar Dovecot: # /etc/init.d/dovecot restart - Definir servicio LDA Dovecot Deliver en Postfix: Respaldar archivo /etc/postfix/master.cf: # cp /etc/postfix/master.cf{,.orig} # vim /etc/postfix/master.cf ... ... # Dovecot LDA dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -f ${sender} -d ${user}@${nexthop} -a ${recipient} - Definir parametros para el transporte deliver: # vim /etc/postfix/main.cf virtual_transport = dovecot dovecot_destination_recipient_limit = 1 Revise la configuración de postfix: # postfix check Reiniciar Postfix: # /etc/init.d/postfix restart ==Configuración de plugins de Dovecot== TODO: Intro a los plugins ===Configurando el modulo para la auto creación de buzones predefinidos=== This plugin allows administrator to specify mailboxes that must always exist for all users. They can optionally also be subscribed. The mailboxes are created and subscribed always after user logs in. Namespaces are fully supported, so namespace prefixes need to be used where necessary. TODO: Intro que hace Habilitando el plugin autocreate en el protocolo imap y lda: # vim /etc/dovecot/dovecot.conf protocol imap { ... ... mail_plugins = autocreate ... ... } protocol lda { ... ... mail_plugins = autocreate ... ... } En la sección de plugins definir archivo con directorios: plugin { ... ... autocreate = Sent autocreate2 = Trash autocreate3 = Drafts autocreate4 = Spam autosubscribe = Sent autosubscribe2 = Trash autosubscribe3 = Drafts autosubscribe4 = Spam ... ... } ===Referencias=== Dovecot- Plugin Autocreate: http://wiki.dovecot.org/Plugins/Autocreate ===Configurando el modulo de cuotas de buzón=== Quota backend specifies the method how Dovecot keeps track of the current quota usage. They don't (usually) specify users' quota limits, that's done by returning extra fields from userdb. ===Habilitando el plugin quota en los protocolos imap, pop3 y lda=== # vim /etc/dovecot/dovecot.conf En las especificaciones del protocolo IMA definir plugin trash: protocol imap { ... ... mail_plugins = autocreate quota imap_quota ... ... } protocol pop3 { ... ... mail_plugins = quota ... ... } protocol lda { ... ... mail_plugins = autocreate quota ... ... } Configurando error para cuotas: protocol lda { ... ... quota_full_tempfail = yes ... ... } ===Definimos diccionario para cuotas=== dict { quotadict = mysql:/etc/dovecot/dovecot-dict-quota.conf } ===Configurando parametros para el plugin quota=== En la sección de plugins definir archivo con directorios: plugin { ... ... quota = dict:::proxy::quotadict # Limite predeterminado a 500M quota_rule = *:storage=500M #quota_rule = *:storage=500M:messages=0 quota_rule2 = Trash:storage=100M quota_warning = storage=95%% /usr/lib/dovecot/quota-warning.py 95 quota_warning2 = storage=85%% /usr/lib/dovecot/quota-warning.py 85 quota_warning3 = storage=75%% /usr/lib/dovecot/quota-warning.py 75 ... ... } TODO: PROBAR o conseguir otros scripts de warning - Crear archivo de diccionario para el modulo quota: # vim /etc/dovecot/dovecot-dict-quota.conf driver = mysql connect = host=localhost dbname=postfix user=postfix password=postfixpass default_pass_scheme = MD5-CRYPT table = quota select_field = current where_field = path username_field = username ===Habilitar soporte de quotas en PostfixAdmin=== # vim /var/www/mailadmin/config.inc.php - Definir default max: $CONF['maxquota'] = '1000'; OK??? $CONF['quota'] = 'YES' - Multiplo para cuotas: $CONF['quota_multiplier'] = '1024000'; - Mostrar uso de cuota en PostfixAdmin? $CONF['used_quotas'] = 'NO'; TODO: Checar esta opcion. ===Referencias=== Dovecot - Plugin Cuota y diccionario Cuota http://wiki.dovecot.org/Quota http://wiki.dovecot.org/Quota/Dict ==Configurando modulo Trash== Normally if a message can't be saved/copied because it would bring user over quota, the save/copy fails with "Quota exceeded" error. The trash plugin can be used to avoid such situations by making Dovecot automatically expunge oldest messages from configured mailboxes until the message can be saved. If the new message is large enough that it wouldn't fit even if all messages from configured mailboxes were expunged, then none are and user gets the "Quota exceeded" error. ===Habilitando el plugin trash para el protocolo imap=== # vim /etc/dovecot/dovecot.conf En las especificaciones del protocolo IMA definir plugin trash: protocol imap { ... ... mail_plugins = autocreate quota imap_quota trash ... ... } En la sección de plugins definir archivo con directorios: plugin { ... ... trash = /etc/dovecot/dovecot-trash.conf ... ... } - Crear archivo de de buzones para el modulo trash: # echo "Trash" >> /etc/dovecot/dovecot-trash.conf ===Referencias=== Dovecot - Plugin Trash http://wiki.dovecot.org/Plugins/Trash ==Configurando el servicio y modulo sieve== - Habilitamos protocolo managesieve: # vim /etc/dovecot/dovecot.conf protocols = imap pop3 managesieve Definimos los parametros de configuración para el servicio managesieve: protocol managesieve { login_executable = /usr/lib/dovecot/managesieve-login mail_executable = /usr/lib/dovecot/managesieve sieve = /var/vmail/dominios/%d/%n/.dovecot.sieve sieve_storage = /var/vmail/dominios/%d/%n/sieve } En las especificaciones del protocolo LDAP definir plugin cmusieve: protocol lda { ... ... mail_plugins = autocreate quota cmusieve ... ... } En la sección de plugins definir parametros para el plugin sieve: plugin { ... ... sieve = /var/vmail/dominios/%d/%n/.dovecot.sieve sieve_dir = /var/vmail/dominios/%d/%n/sieve home = /var/vmail/dominios/%d/%n/sieve sieve_global_dir = /etc/sieve/ sieve_global_path = /etc/sieve/global ... ... } Reinicie Dovecot para que los cambios tomen efecto: # /etc/init.d/dovecot restart ==Crear configuración para rotación de logs de dovecot== # vim /etc/logrotate.d/dovecot # dovecot SIGUSR1: Re-opens the log files. /var/log/dovecot*.log { weekly rotate 5 create 0660 root vmail missingok notifempty delaycompress sharedscripts postrotate /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true endscript } ==Configurando la Autenticación SMTP (SMTP-AUTH) con Dovecot SASL== - Definir parametros para autenticación del servidor smtpd con dovecot sasl: # vim /etc/postfix/main.cf # Parametros SASL del Servidor SMTP: smtpd(8). smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/dovecot-auth smtpd_sasl_authenticated_header = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = no - Permitir relay a los usuarios autenticados: # Restricciones Recipientes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, .... .... .... - Cambiar la cabecera en correos autenticados usando header_checks: header_checks = pcre:/etc/postfix/header_checks - Crear archivo de header_checks: # vim /etc/postfix/header_checks /^Received: from (.* \([-._[:alnum:]]+ \[[.[:digit:]]{7,15}\]\)).*\(Authenticated sender: ([^)]+)\).*by (mail\.example\.com) \(([^)]+)\) with (E?SMTPS?A?) id ([A-F[:digit:]]+).*/ REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) by Authenticated User (mail.example.com) with $5 id $6 TODO: Checar si se requiere tambien en main.cf el header_checks. - Definir servicio SMTP Submissión para envio de correo saliente para usuarios internos: # vim /etc/postfix/master.cf ... ... ... submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject - Configurar servicio SASL en Dovecot: # vim /etc/dovecot/dovecot.conf - Habilitar temporalmente el envio de contraseñas en texto plano: disable_plaintext_auth = no NOTA: Esto es temporal hasta que se habilite el soporte SSL/TLS ssl_disable = yes - Habilitar modo verbose para la autenticación: auth_verbose = yes - Configurar modulo predeterminado de autenticación: auth default { mechanisms = plain login ... ... ... socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 user = vmail group = vmail } client { path = /var/spool/postfix/private/dovecot-auth mode = 0660 user = postfix group = postfix } } } - Reiniciar Dovecot: # /etc/init.d/dovecot restart - Verificar que el socket maestro y cliente se crearon: # ls -l /var/run/dovecot/auth-master srw------- 1 vmail vmail 0 2010-01-25 22:44 /var/run/dovecot/auth-master # ls -l /var/spool/postfix/private/dovecot-auth srw-rw---- 1 postfix postfix 0 2010-01-25 22:44 /var/spool/postfix/private/dovecot-auth - Reiniciar Postfix: # /etc/init.d/postfix restart ==Configurar parametros SSL/TLS para el cliente y servidor SMTP== Configurando el soporte SSL/TLS en el cliente y servidor SMTP de Postfix: # vim /etc/postfix/main.cf smtpd_use_tls=yes smtpd_tls_cert_file = /etc/ssl/certs/mail.example.com.crt smtpd_tls_key_file = /etc/ssl/private/mail.example.com.key smtpd_tls_CAfile = /etc/ssl/certs/ca.crt smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_session_cache_timeout = 3600s smtpd_tls_auth_only = yes # Parametros TLS del Cliente SMTP: smtp(8). smtp_use_tls = yes smtp_tls_cert_file = /etc/ssl/certs/mail.example.com.crt smtp_tls_key_file = /etc/ssl/private/mail.example.com.key smtp_tls_CAfile = /etc/ssl/certs/ca.crt smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache - Solo permitir autenticación por un canal SSL/TLS: smtpd_tls_auth_only = yes - Definir servicios de conexiones seguras usando SSL/TLS: # vim /etc/postfix/master.cf ... ... smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject - Reiniciar Postfix: # invoke-rc.d postfix restart ===Configurando el soporte SSL/TLS a los servicios IMAP y POP3 en Dovecot== # vim /etc/dovecot/dovecot.conf - Definir protocolos seguros: protocols = imap pop3 imaps pop3s - Activar sporte SSL: ssl_disable = no - Definir certificados y llaves SSL/TLS: ssl_cert_file = /etc/ssl/certs/mail.example.com.crt ssl_key_file = /etc/ssl/private/mail.example.com.key ssl_ca_file = /etc/ssl/certs/ca.crt - Definir cifrados permitidos: ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM - Desactivar autenticación en texto plano: disable_plaintext_auth = yes - Reiniciar Dovecot: # /etc/init.d/dovecot restart - Validando puertos: # netstat -plutn | grep -E '(465|993|995)' tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 31200/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 31200/dovecot tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 30925/master Desactive el soporte de mail_debug cuando el sistema este operacioinal y solo vuelvalo a activar cuando requiera realizar algún diagnostico. mail_debug = no También desactive el modo verbose para la autenticación: auth_verbose = no Reinicie Dovecot para aplicar los cambios. ==Creación de Autoridad Certificadora SSL/TLS== # aptitude install openvpn # cp -a /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/ExampleCA # cd ~/ExampleCA # vim vars Cambiar variables export KEY_COUNTRY="MX" export KEY_PROVINCE="Distrito Federal" export KEY_CITY="Ciudad de Mexico" export KEY_ORG="Example Inc" export KEY_EMAIL="caadmin@example.com" # source ./vars # ./clean-all # ls keys/ # ./pkitool --initca --pass # ./pkitool --server mail.example.com # ls -l keys/ # cp keys/ca.crt /etc/ssl/certs/ # openssl x509 -in keys/mail.example.com.crt > /etc/ssl/certs/mail.example.com.crt # cp keys/mail.example.com.key /etc/ssl/private/ Copiamos el certificado raíz al directorio raíz del servidor web para que los usuarios puedan descararlo e importarlo a sus aplicaciones. # cp /etc/ssl/certs/ca.crt /var/www/ Desinstalamos el paquete openvpn pues ya no es requerido: # aptitude remove openvpn ==Configurar sitio seguro para postfixadmin== Para forzar el acceso seguro a PostfixAdmin y otras aplicaciones como el webmail creamos un virtualhost con soporte SSL, además, para entrar a PostfixAdmin se debe de proporcionar un usuario y contraseña, esta es una medida de seguridad adicional para evitar ataques de fuerza bruta automaticos en la interfaz de PostfixAdmin. Creamos un directorio propio para el VHOST SSL: # mkdir /var/www/mail.example.com Movemos el directorio de PostfixAdmin: # mv /var/www/mailadmin /var/www/mail.example.com/ Configurando VHost para reportes por ssl== Crear archivo de configuración para VHOST: # vim /etc/apache2/sites-available/mail.example.com # Configuracion VHOST SSL NameVirtualHost *:443 ServerAdmin postmaster@example.com ServerName mail.example.com DocumentRoot /var/www/mail.example.com # Parametros para configuraciones SSL y certificados SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/ssl/certs/mail.example.com.crt SSLCertificateKeyFile /etc/ssl/private/mail.example.com.key #SSLCACertificateFile /etc/ssl/certs/ca.crt Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # Permitir solo autenticacion a usuarios autorizados AuthType Basic AuthName "Solo Usurios Autorizados" AuthUserFile /etc/apache2/.mailadmin require valid-user - Creamos archivo de usuarios y contraseñas para sitio web: # htpasswd -c /etc/apache2/.mailadmin mailadmin New password: Re-type new password: Adding password for user mailadmin - Activando modulo SSL en Apache2: # a2enmod ssl - Activando el VHOST: # a2ensite mail.example.com - Revisando configuración de apache: # apache2ctl -t # apache2ctl -t -D DUMP_VHOSTS - Reiniciar el servidor apache: # /etc/init.d/apache2 restart Para acceder al interfaz PostfixAdmin segura use el URL: https://mail.example.com/mailadmin El acceso a PostfixAdmin por HTTP esta desactivado. Cambie el URL en la configuración de PostfixAdmin # vim /var/www/mail.example.com/mailadmin/config.inc.php $CONF['postfix_admin_url'] = 'https://mail.example.com/mailadmin/'; $CONF['user_footer_link'] = "https://mail.example.com/mailadmin/users/main.php"; ==Instalar AutoMySQLBackups== # apt-get install cron # cd /etc/cron.daily/ # wget http://downloads.sourceforge.net/sourceforge/automysqlbackup/automysqlbackup.sh.2.5 # mv automysqlbackup.sh.2.5 automysqlbackup # chmod +x automysqlbackup # vim automysqlbackup # mysql -u root -p > GRANT select, show view, create view, insert, update, create, drop, reload, shutdown, alter, > super, lock tables, replication client on *.* to 'dbbackups'@'localhost' IDENTIFIED BY 'PASSWORD'; - Ahora si a configurar el script que descargamos con las siguientes opciones: USERNAME=dbbackups PASSWORD=PASSWORD DBNAMES="postfix" BACKUPDIR="/backups" MAILCONTENT="log" - Solo enviar el log MAILADDR="user@domain" ==Instalar Mailgraph== # apt-get install mailgraph ver graficas $ firefox http://mail.example.com/cgi-bin/mailgraph.cgi ==Referencias Adicionales== Paginas de manual: postconf(5) postconf(8) postmap(1) smtp(8) smtpd(8) master(8) virtual(8) mysql_table(5) header_checks(5) The Postfix Home Page: http://www.postfix.org/start.html Postfix Architecture Overview: http://www.postfix.org/OVERVIEW.html Postfix Configuration Parameters: http://www.postfix.org/postconf.5.html Postfix Basic Configuration: http://www.postfix.org/BASIC_CONFIGURATION_README.html Postfix Standard Configuration Examples: http://www.postfix.org/STANDARD_CONFIGURATION_README.html Postfix Address Classes: http://www.postfix.org/ADDRESS_CLASS_README.html Postfix MySQL Howto: http://www.postfix.org/MYSQL_README.html Postfix SMTP relay and access control : http://www.postfix.org/SMTPD_ACCESS_README.html Postfix SASL Howto: http://www.postfix.org/SASL_README.html Postfix Virtual Domain Hosting Howto: http://www.postfix.org/VIRTUAL_README.html Postfix TLS Support: http://www.postfix.org/TLS_README.html Postfix Bottleneck Analysis: http://www.postfix.org/QSHAPE_README.html Postfix Performance Tuning: http://www.postfix.org/TUNING_README.html Postfix Debugging Howto: http://www.postfix.org/DEBUG_README.html Postfix XFORWARD Howto: http://www.postfix.org/XFORWARD_README.html Apache HTTP Server Project: http://httpd.apache.org/ Howto Setup a Mail Server with Virtual Users and Domains: http://wiki.dovecot.org/HowTo/DovecotLDAPostfixAdminMySQL