Configuração de Email · 8 min read · Sep 28, 2025

Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (Debian Lenny) - Página 2

5 Configurar Postfix

Agora precisamos informar ao Postfix onde ele pode encontrar todas as informações no banco de dados. Portanto, precisamos criar seis arquivos de texto. Você notará que eu digo ao Postfix para se conectar ao MySQL no endereço IP 127.0.0.1 em vez de localhost. Isso ocorre porque o Postfix está sendo executado em uma jaula chroot e não tem acesso ao socket do MySQL, que ele tentaria conectar se eu dissesse ao Postfix para usar localhost. Se eu usar 127.0.0.1, o Postfix usa a rede TCP para se conectar ao MySQL, o que não é um problema mesmo em uma jaula chroot (a alternativa seria mover o socket do MySQL para a jaula chroot, o que causa alguns outros problemas).

Por favor, certifique-se de que /etc/mysql/my.cnf contém a seguinte linha:

vi /etc/mysql/my.cnf

| [...] bind-address = 127.0.0.1 [...] |

Se você teve que modificar /etc/mysql/my.cnf, por favor reinicie o MySQL agora:

/etc/init.d/mysql restart

Execute

netstat -tap | grep mysql

para ter certeza de que o MySQL está ouvindo em 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#

Agora vamos criar nossos seis arquivos 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 |

Então, altere as permissões e o grupo desses arquivos:

chmod o= /etc/postfix/mysql-virtual_*.cf  
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Agora criamos um usuário e grupo chamado vmail com o diretório home /home/vmail. É aqui que todas as caixas de correio serão armazenadas.

groupadd -g 5000 vmail  
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Em seguida, fazemos algumas configurações do Postfix. Certifique-se de substituir server1.example.com por um FQDN válido, caso contrário, seu Postfix pode não funcionar corretamente!

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 = "O usuário que você está tentando alcançar está acima do limite de cota."'  
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'

Depois, criamos o certificado SSL que é necessário para TLS:

cd /etc/postfix  
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

Nome do País (código de 2 letras) [AU]: <– Insira o Nome do seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) [Some-State]: <– Insira o Nome do seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) []: <– Insira sua Cidade.
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <– Insira o Nome da sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (por exemplo, seção) []: <– Insira o Nome da sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (por exemplo, SEU nome) []: <– Insira o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de E-mail []: <– Insira seu Endereço de E-mail.

Então, altere as permissões do smtpd.key:

chmod o= /etc/postfix/smtpd.key

6 Configurar Saslauthd

Primeiro execute

mkdir -p /var/spool/postfix/var/run/saslauthd

Em seguida, edite /etc/default/saslauthd. Defina START como yes e altere a linha OPTIONS=”-c -m /var/run/saslauthd” para OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:

vi /etc/default/saslauthd

| # # Configurações para o daemon saslauthd # Por favor, leia /usr/share/doc/sasl2-bin/README.Debian para detalhes. # # O saslauthd deve ser executado automaticamente na inicialização? (padrão: não) START=yes # Descrição desta instância do saslauthd. Recomendado. # (sugestão: Daemon de Autenticação SASL) DESC="Daemon de Autenticação SASL" # Nome curto desta instância do saslauthd. Fortemente recomendado. # (sugestão: saslauthd) NAME="saslauthd" # Quais mecanismos de autenticação o saslauthd deve usar? (padrão: pam) # # Opções disponíveis neste pacote Debian: # getpwent -- usar a função de biblioteca getpwent() # kerberos5 -- usar Kerberos 5 # pam -- usar PAM # rimap -- usar um servidor IMAP remoto # shadow -- usar o arquivo de senha local shadow # sasldb -- usar o arquivo de banco de dados local sasldb # ldap -- usar LDAP (a configuração está em /etc/saslauthd.conf) # # Apenas uma opção pode ser usada por vez. Veja a página de manual do saslauthd # para mais informações. # # Exemplo: MECHANISMS="pam" MECHANISMS="pam" # Opções adicionais para este mecanismo. (padrão: nenhuma) # Veja a página de manual do saslauthd para informações sobre opções específicas do mecanismo. MECH_OPTIONS="" # Quantos processos saslauthd devemos executar? (padrão: 5) # Um valor de 0 irá criar um novo processo para cada conexão. THREADS=5 # Outras opções (padrão: -c -m /var/run/saslauthd) # Nota: Você DEVE especificar a opção -m ou o saslauthd não será executado! # # AVISO: NÃO ESPECIFIQUE A OPÇÃO -d. # A opção -d fará com que o saslauthd seja executado em primeiro plano em vez de como # um daemon. Isso PREVENIRÁ QUE SEU SISTEMA INICIE CORRETAMENTE. Se você deseja # executar o saslauthd em modo de depuração, execute-o manualmente para garantir. # # Veja /usr/share/doc/sasl2-bin/README.Debian para informações específicas do Debian. # Veja a página de manual do saslauthd e a saída de 'saslauthd -h' para informações gerais # sobre essas opções. # # Exemplo para usuários do 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" |

Em seguida, crie o arquivo /etc/pam.d/smtp. Ele deve conter apenas as seguintes duas linhas (certifique-se de preencher seus detalhes corretos do banco de dados):

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 |

Em seguida, crie o arquivo /etc/postfix/sasl/smtpd.conf. Ele deve ser assim:

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' |

Em seguida, adicione o usuário postfix ao grupo sasl (isso garante que o Postfix tenha permissão para acessar o saslauthd):

adduser postfix sasl

Então reinicie o Postfix e o Saslauthd:

/etc/init.d/postfix restart  
/etc/init.d/saslauthd restart

7 Configurar Courier

Agora precisamos informar ao Courier que ele deve autenticar contra nosso banco de dados MySQL. Primeiro, edite /etc/courier/authdaemonrc e altere o valor de authmodulelist para que fique:

vi /etc/courier/authdaemonrc

| [...] authmodulelist="authmysql" [...] |

Em seguida, faça um backup de /etc/courier/authmysqlrc e limpe o arquivo antigo:

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig  
cat /dev/null > /etc/courier/authmysqlrc

Em seguida, abra /etc/courier/authmysqlrc e coloque as seguintes linhas nele:

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 a instalação, os certificados SSL para IMAP-SSL e POP3-SSL são criados com o nome do host localhost. Para alterar isso para o nome do host correto (server1.example.com neste tutorial), exclua os certificados…

cd /etc/courier  
rm -f /etc/courier/imapd.pem  
rm -f /etc/courier/pop3d.pem

… e modifique os seguintes dois arquivos; substitua CN=localhost por CN=server1.example.com (você também pode modificar os outros valores, se necessário):

vi /etc/courier/imapd.cnf

| [...] CN=server1.example.com [...] |

vi /etc/courier/pop3d.cnf

| [...] CN=server1.example.com [...] |

Em seguida, recrie os certificados…

mkimapdcert  
mkpop3dcert

… e reinicie o 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 restart

Ao executar

telnet localhost pop3

você pode ver se seu servidor POP3 está funcionando corretamente. Ele deve retornar +OK Hello there. (Digite quit para voltar ao shell do 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

Agora devemos abrir /etc/aliases. Certifique-se de que o postmaster aponte para root e root para seu próprio nome de usuário ou seu endereço de e-mail, por exemplo, assim:

vi /etc/aliases

| [...] postmaster: root root: [email protected] [...] |

ou assim (se administrator for seu próprio nome de usuário):

| [...] postmaster: root root: administrator [...] |

Sempre que você modificar /etc/aliases, deve executar

newaliases

e reiniciar o Postfix:

/etc/init.d/postfix restart
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.