Email Setup · 11 min read · Jan 10, 2026

Usuários Virtuais E Domínios Com Postfix, Courier, MySQL E SquirrelMail (CentOS 4.8 i386) - Página 5

18 Instalando o SquirrelMail

O SquirrelMail é uma interface de webmail que permitirá que seus usuários enviem e recebam e-mails em um navegador. Este capítulo mostra como instalá-lo e ajustá-lo à nossa configuração para que os usuários possam até mesmo mudar a senha de sua conta de e-mail pela interface do SquirrelMail.

Para instalar o SquirrelMail, executamos:

yum install squirrelmail php-pear-DB

Depois, reiniciamos o Apache:

/etc/init.d/httpd restart

O SquirrelMail vem com alguns plugins pré-instalados, infelizmente nenhum deles é capaz de nos permitir mudar nossa senha de e-mail em nosso banco de dados MySQL. Mas existe o plugin Change SQL Password que podemos instalar manualmente:

cd /usr/share/squirrelmail/plugins  
wget http://www.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

Agora devemos editar o config.php e ajustá-lo à nossa configuração. Por favor, ajuste as variáveis $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static e $csp_delimiter da seguinte forma e comente a variável $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 = '@'; [...] |

O arquivo completo fica assim:

| * 2002-2005 Paul Lesneiwski <[email protected]> * Este programa é licenciado sob GPL. Veja COPYING para detalhes * * @package plugins * @subpackage Change SQL Password * */ // Variáveis Globais, não toque nelas a menos que você queira quebrar o 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 // // Teoricamente, qualquer banco de dados SQL suportado pelo Pear deve ser suportado // aqui. O DSN (nome da fonte de dados) deve conter as informações necessárias // para conectar ao seu backend de banco de dados. Um exemplo de MySQL está incluído abaixo. // Para mais detalhes sobre a sintaxe do DSN e lista de tipos de banco de dados suportados, // por favor veja: // 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 sempre verificará a senha antiga do usuário // em relação à sua senha de login, mas uma verificação extra também pode // ser feita contra o banco de dados para mais segurança, se você // desejar. Se você não precisar da verificação extra de senha, // certifique-se de que esta configuração esteja vazia. // // Esta é uma consulta que retorna um valor positivo se um usuário // e par de senhas forem encontrados no banco de dados. // // Esta consulta deve retornar um valor (uma linha, uma coluna), o // valor sendo idealmente um ou um zero, simplesmente indicando que // o par usuário/senha realmente existe no banco de dados. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // como "example.com" // %4 nesta consulta será substituído pela senha atual (antiga) // no formato de criptografia necessário por outras // configurações de plugin (Note que a sintaxe da // senha será fornecida dependendo de suas escolhas de criptografia, // então você NUNCA precisa fornecer aspas em torno deste // valor na consulta aqui.) // %5 nesta consulta será substituído pela senha atual (antiga) // em texto simples não criptografado. Se você não usar nenhuma // criptografia de senha, %4 e %5 serão os mesmos valores, // exceto que %4 terá aspas duplas ao redor e %5 não. // //$lookup_password_query = ''; // SEGURANÇA TERRÍVEL: $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 // // Um array de consultas SQL que serão todas executadas // sempre que uma tentativa de mudança de senha for feita. // // Qualquer número de consultas pode ser incluído aqui. // As consultas serão executadas na ordem dada aqui. // // %1 em todas as consultas será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 em todas as consultas será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 em todas as consultas será substituído pelo nome do domínio, // como "example.com" // %4 em todas as consultas será substituído pela nova senha // no formato de criptografia necessário por outras // configurações de plugin (Note que a sintaxe da // senha será fornecida dependendo de suas // escolhas de criptografia, então você NUNCA precisa fornecer aspas // em torno deste valor nas consultas aqui.) // %5 em todas as consultas será substituído pela nova senha // em texto simples não criptografado - CUIDADO! Se você não usar // nenhuma criptografia de senha, %4 e %5 serão os mesmos // valores, exceto que %4 terá aspas duplas ao redor // e %5 não. // // $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 // // Uma consulta que verifica um flag que indica se um usuário // deve ser forçado a mudar sua senha. Esta consulta // deve retornar um valor (uma linha, uma coluna) que é // zero se o usuário NÃO precisa mudar sua senha, // ou um se o usuário deve ser forçado a mudá-la agora. // // Esta configuração deve ser uma string vazia se você não deseja // habilitar essa funcionalidade. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // 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 // // Que método de criptografia você usa para armazenar senhas // em seu banco de dados? Por favor, use um dos seguintes, // exatamente como você vê: // // NONE Senhas são armazenadas apenas como texto simples // MYSQLPWD Senhas são armazenadas usando a função password() do MySQL // MYSQLENCRYPT Senhas são armazenadas usando a função encrypt() do MySQL // PHPCRYPT Senhas são armazenadas usando a função crypt() do PHP // MD5CRYPT Senhas são armazenadas usando o algoritmo MD5 criptografado // MD5 Senhas são armazenadas como hash MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Tipos de criptografia que precisam de um sal precisam saber onde obter // esse sal. Se você tiver um valor de sal constante e conhecido, // deve defini-lo em $csp_salt_static. Caso contrário, deixe esse // valor vazio e defina um valor para o $csp_salt_query. // // Deixe ambos os valores vazios se você não precisar (ou usar) sais // para criptografar suas senhas. // // A consulta deve retornar um valor (uma linha, uma coluna) que // é o valor do sal para a senha do usuário atual. Esta // consulta é ignorada se $csp_salt_static for qualquer coisa além de vazia. // // %1 nesta consulta será substituído pelo nome de usuário completo // (incluindo domínio), como "[email protected]" // %2 nesta consulta será substituído pelo nome de usuário (sem // qualquer parte do domínio), como "jose" // %3 nesta consulta será substituído pelo nome do domínio, // como "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // use este formato com MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // use este formato com 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 // // Você pode garantir que a criptografia SSL seja usada durante a senha // mudança definindo isso para a porta que seu HTTPS é servido // (443 é típico). Defina como zero se você não deseja forçar // uma conexão HTTPS quando os usuários estão mudando suas senhas. // // Você pode substituir este valor para certos domínios, usuários ou // níveis de serviço através do plugin Virtual Host Login (vlogin) // definindo um(s) valor(es) para $vlogin_csp_secure_port na configuração do vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Se você servir solicitações web HTTP padrão em uma porta não padrão // (qualquer coisa além da porta 80), deve especificar esse // número da porta aqui. Defina como zero caso contrário. // // Você pode substituir este valor para certos domínios, usuários ou // níveis de serviço através do plugin Virtual Host Login (vlogin) // definindo um(s) valor(es) para $vlogin_csp_non_standard_http_port // na configuração do 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 // // Você pode definir os comprimentos mínimo e máximo de senha que // você aceita ou deixar essas configurações como zero para indicar que // nenhum limite deve ser aplicado. // // Ative qualquer uma das outras configurações aqui para verificar se a // nova senha contém pelo menos um dígito, letra maiúscula, // letra minúscula e/ou um caractere não 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 // // se seu sistema tiver nomes de usuários com algo diferente de // um sinal "@" separando a parte do usuário e do domínio, // especifique esse caractere aqui // //$csp_delimiter = '|'; $csp_delimiter = '@'; // modo de depuração // $csp_debug = 0; ?> |

O plugin Change SQL Password também depende do plugin Compatibility que instalamos da seguinte forma:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz  
tar xvfz compatibility-2.0.14-1.0.tar.gz
cd /usr/share/squirrelmail/plugins/compatibility  
patch -p0 < patches/compatibility_patch-1.4.8.diff

Agora devemos entrar na configuração do SquirrelMail e dizer ao SquirrelMail que usamos o Courier como nosso servidor POP3 e IMAP e habilitar os plugins Change SQL Password e Compatibility:

/usr/share/squirrelmail/config/conf.pl

Você verá o seguinte menu. Navegue por ele conforme indicado:

SquirrelMail Configuração : Ler: config.php (1.4.0)

Menu Principal –
1.  Preferências da Organização
2.  Configurações do Servidor
3.  Padrões de Pasta
4.  Opções Gerais
5.  Temas
6.  Catálogos de Endereços
7.  Mensagem do Dia (MOTD)
8.  Plugins
9.  Banco de Dados
10. Idiomas

D.  Definir configurações pré-definidas para servidores IMAP específicos

C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <–D

SquirrelMail Configuração : Ler: config.php

Enquanto estivemos construindo o SquirrelMail, descobrimos algumas
preferências que funcionam melhor com alguns servidores que não
funcionam tão
bem com outros.  Se você selecionar seu servidor IMAP, esta
opção definirá algumas configurações pré-definidas para
esse servidor.

Por favor, note que você ainda precisará passar por e certificar-se
de que tudo está correto.  Isso não muda tudo.  Há
apenas algumas configurações que isso mudará.

Por favor, selecione seu 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 Mail do Mac OS X
mercury32   = Mercury/32
uw          = Servidor IMAP da Universidade de Washington

quit        = Não mudar nada
Comando >> <– courier

SquirrelMail Configuração : Ler: config.php

Enquanto estivemos construindo o SquirrelMail, descobrimos algumas
preferências que funcionam melhor com alguns servidores que não
funcionam tão
bem com outros.  Se você selecionar seu servidor IMAP, esta
opção definirá algumas configurações pré-definidas para
esse servidor.

Por favor, note que você ainda precisará passar por e certificar-se
de que tudo está correto.  Isso não muda tudo.  Há
apenas algumas configurações que isso mudará.

Por favor, selecione seu 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 Mail do Mac OS X
mercury32   = Mercury/32
uw          = Servidor IMAP da Universidade de Washington

quit        = Não mudar nada
Comando >> courier

imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Lixo
sent_folder = Enviados
draft_folder = Rascunhos
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true

Pressione qualquer tecla para continuar… <– pressione uma tecla

SquirrelMail Configuração : Ler: config.php (1.4.0)

Menu Principal –
1.  Preferências da Organização
2.  Configurações do Servidor
3.  Padrões de Pasta
4.  Opções Gerais
5.  Temas
6.  Catálogos de Endereços
7.  Mensagem do Dia (MOTD)
8.  Plugins
9.  Banco de Dados
10. Idiomas

D.  Definir configurações pré-definidas para servidores IMAP específicos

C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <– 8

SquirrelMail Configuração : Ler: config.php (1.4.0)

Plugins
Plugins Instalados
1. delete_move_next
2. squirrelspell
3. newmail

Plugins Disponíveis:
4. message_details
5. fortune
6. compatibility
7. filters
8. info
9. administrator
10. spamcop
11. change_sqlpass
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate

R   Retornar ao Menu Principal
C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <– 6 (ou qualquer número que o plugin de compatibilidade tenha)

SquirrelMail Configuração : Ler: config.php (1.4.0)

Plugins
Plugins Instalados
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility

Plugins Disponíveis:
5. message_details
6. fortune
7. filters
8. info
9. administrator
10. spamcop
11. change_sqlpass
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate

R   Retornar ao Menu Principal
C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <– 11 (ou qualquer número que o plugin change_sqlpass tenha)

SquirrelMail Configuração : Ler: config.php (1.4.0)

Plugins
Plugins Instalados
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass

Plugins Disponíveis:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate

R   Retornar ao Menu Principal
C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <–S

SquirrelMail Configuração : Ler: config.php (1.4.0)

Plugins
Plugins Instalados
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass

Plugins Disponíveis:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate

R   Retornar ao Menu Principal
C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> S

Dados salvos em config.php
Pressione enter para continuar… <– ENTER

SquirrelMail Configuração : Ler: config.php (1.4.0)

Plugins
Plugins Instalados
1. delete_move_next
2. squirrelspell
3. newmail
4. compatibility
5. change_sqlpass

Plugins Disponíveis:
6. message_details
7. fortune
8. filters
9. info
10. administrator
11. spamcop
12. bug_report
13. calendar
14. listcommands
15. abook_take
16. sent_subfolders
17. mail_fetch
18. translate

R   Retornar ao Menu Principal
C   Desativar cor
S   Salvar dados
Q   Sair

Comando >> <– Q

Uma última coisa que precisamos fazer é modificar o arquivo /etc/squirrelmail/config_local.php e comentar a variável $default_folder_prefix - se você não fizer isso, verá a seguinte mensagem de erro no SquirrelMail após fazer login: Query: CREATE “Sent” Reason Given: Nome de caixa de correio inválido.

vi /etc/squirrelmail/config_local.php

| |

Agora você pode digitar http://server1.example.com/webmail ou http://192.168.0.100/webmail em seu navegador para acessar o SquirrelMail.

Faça login com seu endereço de e-mail (por exemplo, [email protected]) e sua senha:

Você deve encontrar o e-mail de boas-vindas em sua caixa de entrada:

Para mudar sua senha, vá para Opções e depois selecione Mudar Senha:

Digite sua senha atual e depois sua nova senha duas vezes:

O SquirrelMail informará se a senha foi alterada com sucesso:

19 Referências

Tutorial: Serviço de E-mail estilo ISP com Debian-Sarge e Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

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

Senhas de E-mail Criptografadas usando saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

20 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.