La configuracion de Postfix se encuentra en el archivo de configuacion /etc/postfix/mail.cf
Si esta instalado ssmtp este bloqueara a Postfix, entonces hay que desinstalarlo:
# emerge --pretend postfix [blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.5)
# emerge unmerge ssmtp
# emerge --pretend postfix These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] sys-libs/db-4.2.52_p2-r1 [ebuild N ] dev-libs/libpcre-6.3 [ebuild N ] mail-mta/postfix-2.2.5
Ahora si instalar postfix y solo agregar soporte para SASL.
# USE="sasl -postgres -mysql -ipv6" emerge postfix
Configurar parámetros básicos de Postfix, por ahora sin soporte para LDAP:
# vim /etc/postfix/main.cf # Configurar el hostname myhostname = mail.calcom.com.mx # Configurar el nombre del dominio principal: mydomain = mail.calcom.com.mx # Configurar el nombre de el dominio con el que salen los correos myorigin = $mydomain # Configurar las interfaces de red en la que escuchara peticiones inet_interfaces = all # Desactivar el uso de el comando SMTP Vrfy disable_vrfy_command = yes # Dominios en los cuales recibe correo: mydestination = localhost, $myhostname, localhost.$mydomain, $mydomain # donde están almacenados los nombres de los usuarios: local_recipient_maps = unix:passwd.byname $alias_maps # A que redes se les permite hacer relay por este servidor: mynetworks = 10.0.0.0/24, 127.0.0.0/8 # A que dominios se les permite hacer relay relay_domains = $mydestination < DUDA!!!!!!!!! # lugar donde están almacenados los alias de los correos alias_maps = hash:/etc/postfix/aliases # alias_database = hash:/etc/postfix/aliases # Opcional poner un banner para las conexiones SMTP smtpd_banner = $myhostname ESMTP $mail_name (Gentoo GNU/Linux) # Localización de los buzones home_mailbox = Maildir/ # Comentario ??? delay_warning_time = 3h # limite en tamaño de un mensaje aprox 15MB message_size_limit = 15000000 # tiempo máximo que puede estar un correo en una cola 8 horas. maximal_queue_lifetime = 8h $ Tiempo limite en el que este un correo y mandar un rebote. bounce_queue_lifetime = 4h :wq
Instalaremos y configuraremos Courier maildrop, este sera usado como MDA (Mail Delivery Agent) el cual es el encargado de llevar el correo a su localización final, puede hacer filtrado antes de entregar el correo y además maneja quotas de los buzones de correo (Maildir).
# emerge =mail-filter/maildrop-1.8.0-r3
# vim /etc/maildrop/maildropldap.cf hostname localhost basedn o=hosting,dc=calcom,dc=com,dc=mx filter (&(&(objectclass=VirtualMailAccount)(mail=%s))(accountActive=TRUE)(delete=FALSE)) binddn cn=phamm,o=hosting,dc=calcom,dc=com,dc=mx bindpw PASSWORD_PHAMM timeout 5 search_method mail default_uidnumber 5000 default_gidnumber 5000 mail_attr mail maildir_attr mailbox homedirectory_attr vdHome quota_attr quota :wq
Editar mensaje de alerta de sobre quota.
# vim /etc/quotawarnmsg X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes X-Comment: See deliverquota man page for more information From: Mail Delivery System <Mailer-Daemon@calcom.com.mx> Reply-To: postmaster@calcom.com.mx To: Valued Customer:; Subject: Mail quota warning Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit Your mailbox on the server is now more than 90% full. So that you can continue to receive mail you need to remove some messages from your mailbox. :wq
Configurar el uso de maildrop en postfix, primero en el archivo
/etc/postfix/master.cf
master es el proceso principal (maestro) de postfix.
# vim /etc/postfix/master.cf
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -w 90 -d ${recipient}
:wqConfigurar parámetros en /etc/postfix/main.cf
maildrop_destination_concurrency_limit = 1 maildrop_destination_recipient_limit = 1 virtual_destination_concurrency_limit = 1 unknown_maildrop_mailbox_reject_code = 450
Se pueden definir fácilmente múltiples fuentes LDAP. Los parámetros de las fuentes LDAP están documentados en el archivo README_FILES/LDAP_README[15]. Los nombres de los parámetros siguen el patrón de "ldapsource_parameter". El nombre de la fuente LDAP es definido la primer vez que es usado. En el archivo , necesitaras una definición de una fuente LDAP para cada búsqueda./etc/postfix/main.cf
En nuestro directorio se creo el usuario phamm el cual se usara para hacer los búsquedas (lookups) en el directorio LDAP y no usar la cuenta manager, la cual tiene privilegios mas elevados.
ldap_bind_dn = cn=phamm,o=hosting,dc=calcom,dc=com,dc=mx
ldap_bind_pw = PASSWORD_PHAMM
ldap_search_base = o=hosting,dc=calcom,dc=com,dc=mx
ldap_domain = dc=calcom,dc=com,dc=mx
ldap_server_host = localhost
ldap_server_port = 389Los parámetros que usamos son: ldap_bind_dn: El usuario que hace el la búsqueda de la información en el directorio LDAP. ldap_bind_pw: La contraseña de el usuario phamm. ldap_search_base: Esta es la rama en la cual iniciaremos la búsqueda en el directorio LDAP, esto es usado para agilizar la búsqueda y no iniciar desde la raíz, ldap_domain: el sufijo de el dominio en el que buscaremos. ldap_server_host: La dirección IP o nombre DNS de el servidor al cual consultaremos. ldap_server_port: El puerto en el que recibe peticiones el servidor LDAP.
La primer definición de la fuente LDAP que usaremos es la de transport, la cual define el transporte para los dominios. Postfix usa el transporte para determinar que sigue hacer con los correos una vez recibidos. Para nuestro proposito siempre utilizaremos el MDA maildrop por las razones que se especificaron anteriormente. Sin embargo también podría ser usado el transporte "virtual".
# Transports transport_server_host = $ldap_server_host transport_search_base = $ldap_search_base transport_query_filter = (&(&(vd=%s)(objectClass=VirtualDomain))(accountActive=TRUE)(delete=FALSE)) transport_result_attribute = postfixTransport transport_cache = no transport_bind = yes transport_scope = one transport_bind_dn = $ldap_bind_dn transport_bind_pw = $ldap_bind_pw
En este caso se usa el filtro para buscar el nombre de el dominio, ver que este activo y que no tenga el valor de delete a FALSE. El resultado que buscaremos es postfixTransport, que sera configurado para que siempre tenga el valor de maildrop.
# Aliases aliases_server_host = $ldap_server_host aliases_search_base = $ldap_search_base aliases_query_filter = (&(&(objectClass=VirtualMailAlias)(mail=%s))(accountActive=TRUE)) aliases_result_attribute = maildrop aliases_bind = yes aliases_cache = no aliases_bind_dn = $ldap_bind_dn aliases_bind_pw = $ldap_bind_pw
En este caso se usa el filtro para buscar el nombre de el correo, ver que este activo, el resultado que buscaremos es maildrop, el cual se usa como un directorio alternativo en el cual también una cuenta puede recibir correos.
# VirtualForward virtualforward_server_host = $ldap_server_host virtualforward_search_base = $ldap_search_base virtualforward_query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=TRUE)(accountActive=TRUE)(delete=FALSE)) virtualforward_result_attribute = maildrop virtualforward_bind = yes virtualforward_cache = no virtualforward_bind_dn = $ldap_bind_dn virtualforward_bind_pw = $ldap_bind_pw
En este caso se usa el filtro para buscar el nombre de el correo, que tenga el valor de el atributo forwardAvtive a TRUE y que delete sea FALSE. El resultado que buscaremos es maildrop, el cual se usa para re dirección el correo que llegue a una cuenta por ejemplo a el correo en otro dominio o usar el de otra persona, útil cuando si el usuario sale de vacaciones, así se desea que alguien mas pueda recibir el correo.
# The mail_spool_directory parameter specifies the directory whereccounts accounts_server_host = $ldap_server_host accounts_search_base = $ldap_search_base accounts_query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE)) accounts_result_attribute = mailbox accounts_cache = no accounts_bind = yes accounts_bind_dn = $ldap_bind_dn accounts_bind_pw = $ldap_bind_pw
En este caso se usa el filtro para buscar el nombre de el correo, que tenga el valor de el atributo forwardActive a FALSE y que delete sea FALSE. El resultado que buscaremos es mailbox, el cual es la ruta en el sistema de archivos de el buzón de correo. Estas este es la fuente LDAP mas usada porque es aquí donde residen las cuentas de correo.
Uno de los "side effects" de la naturaleza modular de Postfix es que una segunda fuente LDAP para las cuentas es necesitada para ayudar a Postfix a determinar si una dirección de correo es valida antes de que Postfix intente recibir el correo. Entonces se usa la fuente LDAP accountsmap la cual el atributo que se busca es la dirección de el correo electrónico.
accountsmap_server_host = $ldap_server_host accountsmap_search_base = $ldap_search_base accountsmap_query_filter = (&(&(objectClass=VirtualMailAccount)(mail=%s))(forwardActive=FALSE)(accountActive=TRUE)(delete=FALSE)) accountsmap_result_attribute = mail accountsmap_cache = no accountsmap_bind = yes accountsmap_bind_dn = $ldap_bind_dn accountsmap_bind_pw = $ldap_bind_pw
Ahora que la fuente LDAP "transport" esta definida, necesitamos hacer que postfix este al tanto de ella. Esto usando los parámetros "transport_maps" y "mydestination" en . En la configuración previa ya se había configurado "mydestination" así que solo hay que modificarla para que use la fuente LDAP "transport"./etc/postfix/main.cf
mydestination = $transport_maps, localhost, $myhostname, localhost.$mydomain, $mydomain
transport_maps = ldap:transport
Ahora que la fuente LDAP "aliases, "virtualforward" y "accountsmap" se han definido, necesitamos hacer que postfix sepa de ellos. Esto se hace usando el parámetro "virtual_maps" en ./etc/postfix/main.cf
virtual_maps = ldap:virtualforward, ldap:aliases, ldap:accountsmap
Decirle a Postfix acerca de las cuentas virtuales se hace de una manera diferente a como se hizo con los alias y los transportes. Para esto se definirán un poco mas de parámetros, unos específicos para el almacenamiento de el correo virtual. Para este ejemplo asumimos que se creo el usuario y grupo Unix vmail con el UID de 5000 y GID de 5000, y su directorio HOME es . Usaremos el directorio home de el usuario vmail como el lugar donde almacenaremos nuestro repositorio de correo virtual./home/vmail
virtual_mailbox_base = /home/vmail/domains virtual_mailbox_maps = ldap:accounts virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_limit = 0
Los dos primeros parámetros se usan para decirle donde esta la base de el repositorio de los correos virtuales. y la otra para decirle cual es la fuente LDAP donde buscaremos la ruta de el buzón de el correo, recordemos que en la fuente LDAP "accounts" se obtiene como parámetro "mailbox". Las siguientes configuraciones se usan para definir el UID y GID de el usuario vmail, y el parámetro "virtual_minimum_uid" significa que uid mínimos a el 5000 serán rechazados y el mensaje sera "deferred". Todos estos parámetros están completamente documentados en los archivos README_FILES/VIRTUAL_README[16] que vienen con las fuentes de Postfix.
También necesitamos editar el parámetro "local_recipient_maps" para que también busque en "virtual_mailbox_maps" de manera que Postfix sepa quien es un usuario en el servidor de correo y quien no. La razón por la que hacemos esto es para que Postfix rechace correo para usuarios desconocidos. Anteriormente se configuro así:
local_recipient_maps = unix:passwd.byname $alias_maps
ahora se cambiara a:
local_recipient_maps = proxy:unix:passwd.byname, $alias_maps, $virtual_mailbox_maps
También usaremos el parámetro:
show_user_unknown_table_name = no
Con esto hacemos que postfix no muestre en el mensaje de rechazo en que tabla no encontró la cuenta de correo. Por ultimo hay que iniciar el servicio Postfix así:
# /etc/init.d/postfix start
Para que el servicio de postfix sea iniciado al arranque del sistema ejecutar el siguiente comando:
# rc-update add postfix default * postfix added to runlevel default * rc-update complete.
Si requieres que los usuarios puedan enviar correo (RELAY) desde fuera de tu red local, por ejemplo de alguna sucursal, o agentes de ventas que están constantemente viajando, y no sabes que dirección IP están usando o cambia constantemente y además quieres tener mas control sobre quien envía correo por tu servidor, entonces la solución es usar SMTP Autenticado (SMTP-AUTH). Con SMTP-AUTH se configura el MTA (Postfix) para que cuando se establezca una conexión con el servidor el usuario primero se autentique con su usuario (email) y contraseña antes de que pueda enviar correos, si el usuario se autentica satisfactoriamente, es decir, el usuario y la contraseña se son validas entonces el usuario podrá enviar correo por medio de el servidor. Básicamente esa es la función de SMTP-AUTH.
Para configurar SMTP-AUTH en Postfix se usara la autenticación buscando la información de el login (usuario/contraseña) en el directorio LDAP, para esto usaremos las librerías SASL de cyrus-sasl y usaremos el demonio de autenticación saslauthd.
Instalar y configurar cyrus-sasl con soporte de authdaemond (se instalar al mismo tiempo courier-imap-authlib y courier-imapd:
# USE="-postgress authdaemond" emerge cyrus-sasl
Configurar saslauthd:
# vim /etc/conf.d/saslauthd
SASLAUTHD_OPTS=""
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a ldap -O /etc/saslauthd.conf -n 5"
:wqCon esto le decimos que use como mecanismo de autentificaron a LDAP y usando el archivo de configuración /etc/saslauthd.conf y que solo pueda ejecutar 5 threads. Configurar /etc/saslauthd.conf
# vim /etc/saslauthd.conf ldap-servers: ldap://localhost/ ldap_auth_method: bind ldap_bind_dn: cn=phamm,o=hosting,dc=calcom,dc=com,dc=mx ldap_bind_pw: PASSWORD_PHAMM ldap_filter: (&(mail=%U@%d)(smtpAuth=TRUE)) ldap_search_base: o=hosting,dc=calcom,dc=com,dc=mx :wq
Esta configuración define lo siguiente:
Conectarse con el servidor LDAP en el localhost.
Usar como base de búsqueda la organización o=hosting,dc=calcom,dc=com,dc=mx
Usar el filtro para usuario que se traduciría a: usuario@dominio.tld y que tengan smtpAuth = TRUE
Usar el métodos de autenticación bind. Iniciar el servicio saslauthd así:
Iniciar el servicio saslauthd así:
# /etc/init.d/saslauthd start
Para que el servicio de saslauthd sea iniciado al arranque del sistema ejecutar el siguiente comando:
# rc-update add saslauthd default
Configurar soporte de SMTP autenticado para postfix:
# vim /etc/sasl2/smtpd.conf pwcheck_method:saslauthd mech_list: plain login :wq
Aquí se usara a saslauthd el cual ya fue configurado para usar la información de el directorio LDAP. Configurar postfix:
# vim /etc/postfix/main.cf # SMTP-AUTH smtpd_sasl_auth_enable = yes smtpd_sasl_application_name = smtpd smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination :wq
Re iniciar postfix para que tome los cambios y soporte SMTP-AUTH:
# /etc/init.d/postfix restart