Postfix Configuration · 8 min read · Sep 28, 2025
Usuarios y Dominios Virtuales Con Postfix, Courier, MySQL Y SquirrelMail (Debian Lenny) - Página 2
5 Configurar Postfix
Ahora tenemos que decirle a Postfix dónde puede encontrar toda la información en la base de datos. Por lo tanto, tenemos que crear seis archivos de texto. Notarás que le digo a Postfix que se conecte a MySQL en la dirección IP 127.0.0.1 en lugar de localhost. Esto se debe a que Postfix se está ejecutando en una cárcel chroot y no tiene acceso al socket de MySQL al que intentaría conectarse si le dijera a Postfix que use localhost. Si uso 127.0.0.1, Postfix utiliza la red TCP para conectarse a MySQL, lo cual no es un problema incluso en una cárcel chroot (la alternativa sería mover el socket de MySQL a la cárcel chroot, lo que causa otros problemas).
Por favor, asegúrate de que /etc/mysql/my.cnf contenga la siguiente línea:
vi /etc/mysql/my.cnf| [...] bind-address = 127.0.0.1 [...] |
Si tuviste que modificar /etc/mysql/my.cnf, por favor reinicia MySQL ahora:
/etc/init.d/mysql restartEjecuta
netstat -tap | grep mysqlpara asegurarte de que MySQL esté escuchando en 127.0.0.1 (localhost.localdomain):
server1:/usr/src# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 4559/mysqld
server1:/usr/src#Ahora vamos a crear nuestros seis archivos de texto.
vi /etc/postfix/mysql-virtual_domains.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_forwardings.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailboxes.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_email2email.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_transports.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |
Luego cambia los permisos y el grupo de estos archivos:
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cfAhora creamos un usuario y grupo llamado vmail con el directorio home /home/vmail. Aquí es donde se almacenarán todas las bandejas de entrada.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -mA continuación, hacemos alguna configuración de Postfix. Asegúrate de reemplazar server1.example.com con un FQDN válido, ¡de lo contrario, tu Postfix podría no funcionar correctamente!
postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'message_size_limit = 30720000'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "El usuario que intentas alcanzar está sobre su cuota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'Después, creamos el certificado SSL que se necesita para TLS:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509Nombre del país (código de 2 letras) [AU]: <– Ingresa el nombre de tu país (por ejemplo, “DE”).
Nombre del estado o provincia (nombre completo) [Some-State]: <– Ingresa el nombre de tu estado o provincia.
Nombre de la localidad (por ejemplo, ciudad) []: <– Ingresa tu ciudad.
Nombre de la organización (por ejemplo, empresa) [Internet Widgits Pty Ltd]: <– Ingresa el nombre de tu organización (por ejemplo, el nombre de tu empresa).
Nombre de la unidad organizativa (por ejemplo, sección) []: <– Ingresa el nombre de tu unidad organizativa (por ejemplo, “Departamento de TI”).
Nombre común (por ejemplo, TU nombre) []: <– Ingresa el nombre de dominio completamente calificado del sistema (por ejemplo, “server1.example.com”).
Dirección de correo electrónico []: <– Ingresa tu dirección de correo electrónico.
Luego cambia los permisos de smtpd.key:
chmod o= /etc/postfix/smtpd.key6 Configurar Saslauthd
Primero ejecuta
mkdir -p /var/spool/postfix/var/run/saslauthdLuego edita /etc/default/saslauthd. Establece START en yes y cambia la línea OPTIONS=”-c -m /var/run/saslauthd” a OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:
vi /etc/default/saslauthd| # # Configuraciones para el demonio saslauthd # Por favor, lee /usr/share/doc/sasl2-bin/README.Debian para más detalles. # # ¿Debería saslauthd ejecutarse automáticamente al inicio? (predeterminado: no) START=yes # Descripción de esta instancia de saslauthd. Recomendado. # (sugerencia: Demonio de Autenticación SASL) DESC="Demonio de Autenticación SASL" # Nombre corto de esta instancia de saslauthd. Muy recomendado. # (sugerencia: saslauthd) NAME="saslauthd" # ¿Qué mecanismos de autenticación debería usar saslauthd? (predeterminado: pam) # # Opciones disponibles en este paquete de Debian: # getpwent -- usar la función de biblioteca getpwent() # kerberos5 -- usar Kerberos 5 # pam -- usar PAM # rimap -- usar un servidor IMAP remoto # shadow -- usar el archivo de contraseña local shadow # sasldb -- usar el archivo de base de datos sasldb local # ldap -- usar LDAP (la configuración está en /etc/saslauthd.conf) # # Solo se puede usar una opción a la vez. Consulta la página del manual de saslauthd # para más información. # # Ejemplo: MECHANISMS="pam" MECHANISMS="pam" # Opciones adicionales para este mecanismo. (predeterminado: ninguna) # Consulta la página del manual de saslauthd para información sobre opciones específicas del mecanismo. MECH_OPTIONS="" # ¿Cuántos procesos de saslauthd deberíamos ejecutar? (predeterminado: 5) # Un valor de 0 generará un nuevo proceso para cada conexión. THREADS=5 # Otras opciones (predeterminado: -c -m /var/run/saslauthd) # Nota: ¡DEBES especificar la opción -m o saslauthd no se ejecutará! # # ADVERTENCIA: NO ESPECIFIQUES LA OPCIÓN -d. # La opción -d hará que saslauthd se ejecute en primer plano en lugar de como # un demonio. Esto PREVENIRÁ QUE TU SISTEMA ARRANQUE CORRECTAMENTE. Si deseas # ejecutar saslauthd en modo de depuración, por favor ejecútalo manualmente para estar seguro. # # Consulta /usr/share/doc/sasl2-bin/README.Debian para información específica de Debian. # Consulta la página del manual de saslauthd y la salida de 'saslauthd -h' para información general # sobre estas opciones. # # Ejemplo para usuarios de postfix: "-c -m /var/spool/postfix/var/run/saslauthd" #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |
Luego crea el archivo /etc/pam.d/smtp. Debe contener solo las siguientes dos líneas (asegúrate de llenar tus detalles de base de datos correctos):
vi /etc/pam.d/smtp| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |
A continuación, crea el archivo /etc/postfix/sasl/smtpd.conf. Debe verse así:
vi /etc/postfix/sasl/smtpd.conf| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u' |
A continuación, agrega el usuario postfix al grupo sasl (esto asegura que Postfix tenga permiso para acceder a saslauthd):
adduser postfix saslLuego reinicia Postfix y Saslauthd:
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart7 Configurar Courier
Ahora tenemos que decirle a Courier que debe autenticarse contra nuestra base de datos MySQL. Primero, edita /etc/courier/authdaemonrc y cambia el valor de authmodulelist para que diga:
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" [...] |
Luego haz una copia de seguridad de /etc/courier/authmysqlrc y vacía el archivo antiguo:
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrcLuego abre /etc/courier/authmysqlrc y pon las siguientes líneas en él:
vi /etc/courier/authmysqlrc| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |
Durante la instalación, los certificados SSL para IMAP-SSL y POP3-SSL se crean con el nombre de host localhost. Para cambiar esto al nombre de host correcto (server1.example.com en este tutorial), elimina los certificados…
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem… y modifica los siguientes dos archivos; reemplaza CN=localhost con CN=server1.example.com (también puedes modificar los otros valores, si es necesario):
vi /etc/courier/imapd.cnf| [...] CN=server1.example.com [...] |
vi /etc/courier/pop3d.cnf| [...] CN=server1.example.com [...] |
Luego recrea los certificados…
mkimapdcert
mkpop3dcert… y reinicia Courier:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restartAl ejecutar
telnet localhost pop3puedes ver si tu servidor POP3 está funcionando correctamente. Debería devolver +OK Hello there. (Escribe quit para volver a la shell de Linux.)
server1:/etc/courier# telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
server1:/etc/courier#8 Modificar /etc/aliases
Ahora deberíamos abrir /etc/aliases. Asegúrate de que el postmaster apunte a root y root a tu propio nombre de usuario o tu dirección de correo electrónico, por ejemplo, así:
vi /etc/aliases| [...] postmaster: root root: [email protected] [...] |
o así (si administrador es tu propio nombre de usuario):
| [...] postmaster: root root: administrator [...] |
Cada vez que modifiques /etc/aliases, debes ejecutar
newaliasesdespues y reiniciar Postfix:
/etc/init.d/postfix restartRecibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.