Correo electrónico · 15 min read · Jan 12, 2026

Usuarios Virtuales Y Dominios Con Postfix, Courier, MySQL Y SquirrelMail (Mandriva 2010.0 x86_64) - Página 5

15 Instalando SquirrelMail

SquirrelMail es una interfaz de webmail que permitirá a tus usuarios enviar y recibir correos electrónicos en un navegador. Este capítulo muestra cómo instalarlo y ajustarlo a nuestra configuración para que los usuarios incluso puedan cambiar la contraseña de su cuenta de correo desde la interfaz de SquirrelMail.

Para instalar SquirrelMail, simplemente escribimos:

urpmi squirrelmail

SquirrelMail viene con algunos plugins preinstalados, desafortunadamente ninguno de ellos es capaz de permitirnos cambiar nuestra contraseña de correo en nuestra base de datos MySQL. Pero existe el plugin Change SQL Password que podemos instalar manualmente:

cd /var/www/squirrelmail/plugins/  
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz  
tar xvfz change_sqlpass-3.3-1.2.tar.gz  
cd change_sqlpass  
cp config.php.sample config.php

Ahora debemos editar config.php y ajustarlo a nuestra configuración. Por favor ajusta las variables $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static y $csp_delimiter de la siguiente manera y comenta $csp_salt_query:

vi config.php

| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] $csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] $csp_delimiter = '@'; [...] |

El archivo completo se ve de la siguiente manera:

| * 2002-2005 Paul Lesneiwski <[email protected]> * Este programa está licenciado bajo GPL. Ver COPYING para más detalles * * @package plugins * @subpackage Change SQL Password * */ // Variables Globales, no toques estas a menos que quieras romper el plugin // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Teóricamente, cualquier base de datos SQL soportada por Pear debería ser soportada // aquí. El DSN (nombre de fuente de datos) debe contener la información necesaria // para conectarse a tu backend de base de datos. Un ejemplo de MySQL se incluye a continuación. // Para más detalles sobre la sintaxis del DSN y la lista de tipos de bases de datos soportadas, // por favor consulta: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Este plugin siempre verificará la antigua contraseña del usuario // contra su contraseña de inicio de sesión, pero también se puede // hacer una verificación adicional contra la base de datos para más seguridad si lo // deseas. Si no necesitas la verificación de contraseña adicional, // asegúrate de que esta configuración esté vacía. // // Esta es una consulta que devuelve un valor positivo si un usuario // y un par de contraseña se encuentran en la base de datos. // // Esta consulta debería devolver un valor (una fila, una columna), el // valor siendo idealmente un uno o un cero, simplemente indicando que // el par usuario/contraseña existe en la base de datos. // // %1 en esta consulta será reemplazado con el nombre de usuario completo // (incluyendo dominio), como "[email protected]" // %2 en esta consulta será reemplazado con el nombre de usuario (sin // ninguna parte del dominio), como "jose" // %3 en esta consulta será reemplazado con el nombre de dominio, // como "example.com" // %4 en esta consulta será reemplazado con la contraseña actual (antigua) // en cualquier formato de encriptación que se necesite según otras // configuraciones del plugin (Nota que la sintaxis de // la contraseña será proporcionada dependiendo de tus elecciones de // encriptación, así que NUNCA necesitas proporcionar comillas alrededor de este // valor en la consulta aquí.) // %5 en esta consulta será reemplazado con la contraseña actual (antigua) // en texto plano sin encriptar. Si no usas ninguna // encriptación de contraseña, %4 y %5 serán los mismos valores, // excepto que %4 tendrá comillas dobles alrededor y %5 no. // //$lookup_password_query = ''; // SEGURIDAD TERRIBLE: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Un array de consultas SQL que se ejecutarán // cada vez que se intente cambiar una contraseña. // // Cualquier número de consultas puede ser incluido aquí. // Las consultas se ejecutarán en el orden dado aquí. // // %1 en todas las consultas será reemplazado con el nombre de usuario completo // (incluyendo dominio), como "[email protected]" // %2 en todas las consultas será reemplazado con el nombre de usuario (sin // ninguna parte del dominio), como "jose" // %3 en todas las consultas será reemplazado con el nombre de dominio, // como "example.com" // %4 en todas las consultas será reemplazado con la nueva contraseña // en cualquier formato de encriptación que se necesite según otras // configuraciones del plugin (Nota que la sintaxis de // la contraseña será proporcionada dependiendo de tus // elecciones de encriptación, así que NUNCA necesitas proporcionar comillas // alrededor de este valor en las consultas aquí.) // %5 en todas las consultas será reemplazado con la nueva contraseña // en texto plano sin encriptar - ¡CUIDADO! Si no usas // ninguna encriptación de contraseña, %4 y %5 serán los mismos // valores, excepto que %4 tendrá comillas dobles alrededor de él // y %5 no. // //$password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"', // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Una consulta que verifica un flag que indica si un usuario // debería ser forzado a cambiar su contraseña. Esta consulta // debería devolver un valor (una fila, una columna) que es // cero si el usuario NO necesita cambiar su contraseña, // o uno si el usuario debería ser forzado a cambiarla ahora. // // Esta configuración debería ser una cadena vacía si no deseas // habilitar esta funcionalidad. // // %1 en esta consulta será reemplazado con el nombre de usuario completo // (incluyendo dominio), como "[email protected]" // %2 en esta consulta será reemplazado con el nombre de usuario (sin // ninguna parte del dominio), como "jose" // %3 en esta consulta será reemplazado con el nombre de dominio, // como "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // ¿Qué método de encriptación usas para almacenar contraseñas // en tu base de datos? Por favor usa uno de los siguientes, // exactamente como lo ves: // // NONE Las contraseñas se almacenan como texto plano solamente // MYSQLPWD Las contraseñas se almacenan usando la función password() de MySQL // MYSQLENCRYPT Las contraseñas se almacenan usando la función encrypt() de MySQL // PHPCRYPT Las contraseñas se almacenan usando la función crypt() de PHP // MD5CRYPT Las contraseñas se almacenan usando el algoritmo MD5 encriptado // MD5 Las contraseñas se almacenan como hash MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Los tipos de encriptación que necesitan una sal necesitan saber dónde obtener // esa sal. Si tienes un valor de sal constante y conocido, // deberías definirlo en $csp_salt_static. De lo contrario, deja ese // valor vacío y define un valor para el $csp_salt_query. // // Deja ambos valores vacíos si no necesitas (o usas) sales // para encriptar tus contraseñas. // // La consulta debería devolver un valor (una fila, una columna) que // es el valor de sal para la contraseña del usuario actual. Esta // consulta es ignorada si $csp_salt_static es cualquier cosa menos vacía. // // %1 en esta consulta será reemplazado con el nombre de usuario completo // (incluyendo dominio), como "[email protected]" // %2 en esta consulta será reemplazado con el nombre de usuario (sin // ninguna parte del dominio), como "jose" // %3 en esta consulta será reemplazado con el nombre de dominio, // como "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // usa este formato con MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // usa este formato con PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Puedes asegurarte de que se use encriptación SSL durante el cambio de contraseña // configurando esto al puerto que tu HTTPS se sirve // (443 es típico). Configura a cero si no deseas forzar // una conexión HTTPS cuando los usuarios cambian sus contraseñas. // // Puedes anular este valor para ciertos dominios, usuarios o // niveles de servicio a través del plugin de Inicio de Sesión de Host Virtual (vlogin) // configurando un valor(s) para $vlogin_csp_secure_port en la configuración de vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Si sirves solicitudes web HTTP estándar en un puerto no estándar // (cualquier cosa que no sea el puerto 80), deberías especificar ese // número de puerto aquí. Configura a cero de lo contrario. // // Puedes anular este valor para ciertos dominios, usuarios o // niveles de servicio a través del plugin de Inicio de Sesión de Host Virtual (vlogin) // configurando un valor(s) para $vlogin_csp_non_standard_http_port // en la configuración de vlogin. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Puedes establecer las longitudes mínimas y máximas de contraseña que // aceptas o dejar esas configuraciones como cero para indicar que // no se debe aplicar ningún límite. // // Activa cualquiera de las otras configuraciones aquí para verificar que la // nueva contraseña contenga al menos un dígito, letra mayúscula, // letra minúscula y/o un carácter no alfanumérico. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // si tu sistema tiene nombres de usuario con algo diferente a // un signo "@" separando la parte del usuario y del dominio, // especifica ese carácter aquí // //$csp_delimiter = '|'; $csp_delimiter = '@'; // modo de depuración // $csp_debug = 0; ?> |

Ahora debemos ir a la configuración de SquirrelMail y decirle a SquirrelMail que usamos Courier como nuestro servidor POP3 e IMAP (si no haces esto, lo más probable es que veas errores como

ERROR: No se pudo completar la solicitud.  
Consulta: CREATE "Sent"  
Razón dada: Nombre de buzón inválido.

cuando inicies sesión en SquirrelMail) y habilitar el plugin Change SQL Password y deshabilitar los otros plugins de contraseña:

/var/www/squirrelmail/conf/conf.pl

Verás el siguiente menú. Escribe D para cambiar el servidor IMAP/POP3:

Configuración de SquirrelMail : Leer: config.php (1.4.0)  
---------------------------------------------------------  
Menú Principal --  
1. Preferencias de Organización  
2. Configuraciones del Servidor  
3. Valores Predeterminados de Carpeta  
4. Opciones Generales  
5. Temas  
6. Libros de Direcciones  
7. Mensaje del Día (MOTD)  
8. Plugins  
9. Base de Datos  
10. Idiomas
D. Establecer configuraciones predefinidas para servidores IMAP específicos
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– D

Configuración de SquirrelMail : Leer: config.php  
---------------------------------------------------------  
Mientras hemos estado construyendo SquirrelMail, hemos descubierto algunas  
preferencias que funcionan mejor con algunos servidores que no funcionan tan  
bien con otros. Si seleccionas tu servidor IMAP, esta opción establecerá  
alguna configuraciones predefinidas para ese servidor.
Por favor nota que aún necesitarás revisar y asegurarte  
de que todo esté correcto. Esto no cambia todo. Solo hay  
algunas configuraciones que esto cambiará.
Por favor selecciona tu servidor IMAP:  
bincimap = Servidor IMAP Binc  
courier = Servidor IMAP Courier  
cyrus = Servidor IMAP Cyrus  
dovecot = Servidor IMAP Seguro Dovecot  
exchange = Servidor IMAP Microsoft Exchange  
hmailserver = hMailServer  
macosx = Servidor de Correo de Mac OS X  
mercury32 = Mercury/32  
uw = Servidor IMAP de la Universidad de Washington

salir = No cambiar nada
Comando >> <– courier

imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true

Presiona cualquier tecla para continuar… <– presiona cualquier tecla

Configuración de SquirrelMail : Leer: config.php (1.4.0)  
---------------------------------------------------------  
Menú Principal --  
1. Preferencias de Organización  
2. Configuraciones del Servidor  
3. Valores Predeterminados de Carpeta  
4. Opciones Generales  
5. Temas  
6. Libros de Direcciones  
7. Mensaje del Día (MOTD)  
8. Plugins  
9. Base de Datos  
10. Idiomas
D. Establecer configuraciones predefinidas para servidores IMAP específicos
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– 8

Configuración de SquirrelMail : Leer: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Plugins Instalados  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. change_pass  
7. quota_usage  
8. change_ldappass  
9. avelsieve  
10. windows  
11. folder_sizes  
12. archive_mail  
13. empty_folders
Plugins Disponibles:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_sqlpass  
21. compatibility  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Regresar al Menú Principal  
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– 21 (o cualquier número que tenga el plugin de compatibilidad - es necesario para el plugin change_sqlpass)

Configuración de SquirrelMail : Leer: config.php (1.4.0)

Plugins
Plugins Instalados

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. change_pass
  7. quota_usage
  8. change_ldappass
  9. avelsieve
  10. windows
  11. folder_sizes
  12. archive_mail
  13. empty_folders
  14. compatibility
    Plugins Disponibles:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_sqlpass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Regresar al Menú Principal
    C Apagar color
    S Guardar datos
    Q Salir
    
    Comando >> <-- 21 (el número del plugin change_sqlpass)  
    
    Configuración de SquirrelMail : Leer: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Plugins Instalados  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. change_ldappass  
    8. avelsieve  
    9. windows  
    10. folder_sizes  
    11. archive_mail  
    12. empty_folders  
    13. compatibility  
    14. change_sqlpass
Plugins Disponibles:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Regresar al Menú Principal  
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– 6 (el número del plugin change_pass)

Configuración de SquirrelMail : Leer: config.php (1.4.0)

Plugins
Plugins Instalados

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. quota_usage
  7. change_ldappass
  8. avelsieve
  9. windows
  10. folder_sizes
  11. archive_mail
  12. empty_folders
  13. compatibility
  14. change_sqlpass
    Plugins Disponibles:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_pass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Regresar al Menú Principal
    C Apagar color
    S Guardar datos
    Q Salir
    
    Comando >> <-- 7 (el número del plugin change_ldappass)  
    
    Configuración de SquirrelMail : Leer: config.php (1.4.0)  
    ---------------------------------------------------------  
    Plugins  
    Plugins Instalados  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. avelsieve  
    8. windows  
    9. folder_sizes  
    10. archive_mail  
    11. empty_folders  
    12. compatibility  
    13. change_sqlpass
Plugins Disponibles:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_ldappass  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Regresar al Menú Principal  
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– S

Datos guardados en config.php
Presiona enter para continuar… <– ENTER

Configuración de SquirrelMail : Leer: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
Plugins Instalados  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. quota_usage  
7. change_ldappass  
8. avelsieve  
9. windows  
10. folder_sizes  
11. archive_mail  
12. empty_folders  
13. compatibility  
14. change_sqlpass
Plugins Disponibles:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_ldappass  
22. change_pass  
23. demo  
24. fortune  
25. info  
26. junkfolder  
27. ldifimport  
28. listcommands  
29. login_image  
30. mail_fetch  
31. message_details  
32. rewrap  
33. secure_login  
34. select_range  
35. sent_subfolders  
36. spam_buttons  
37. spamassassin  
38. spamcop  
39. test  
40. translate  
41. username
R Regresar al Menú Principal  
C Apagar color  
S Guardar datos  
Q Salir

Comando >> <– Q

Ahora puedes escribir http://server1.example.com/squirrelmail o http://192.168.0.100/squirrelmail en tu navegador para acceder a SquirrelMail.

Inicia sesión con tu dirección de correo electrónico (por ejemplo, [email protected]) y tu contraseña:

Deberías encontrar el correo de bienvenida en tu bandeja de entrada:

Para cambiar tu contraseña, ve a Opciones y luego selecciona Cambiar Contraseña:

Escribe tu contraseña actual y luego tu nueva contraseña dos veces:

SquirrelMail te dirá si la contraseña ha sido cambiada exitosamente:

16 Referencias

Tutorial: Servicio de Correo Estilo ISP con Debian-Sarge y Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

Postfix + Cuota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17

Contraseñas de Correo Encriptadas usando saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

17 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.