Configuração de Email · 8 min read · Jan 17, 2026
Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (Ubuntu 12.04 LTS) - 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 ao qual tentaria se 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| [...] # Em vez de skip-networking, o padrão agora é escutar apenas em # localhost, que é mais compatível e não é menos seguro. 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 restartExecute
netstat -tap | grep mysqlpara ter certeza de que o MySQL está escutando em 127.0.0.1 (localhost.localdomain):
root@server1:/usr/src# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql : LISTEN 3895/mysqld
root@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 |
Em seguida, 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 ‘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_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
Country Name (2 letter code) [AU]: <– Digite o nome do seu país (por exemplo, “DE”).
State or Province Name (full name) [Some-State]: <– Digite o nome do seu estado ou província.
Locality Name (eg, city) []: <– Digite sua cidade.
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Digite o nome da sua organização (por exemplo, o nome da sua empresa).
Organizational Unit Name (eg, section) []: <– Digite o nome da sua unidade organizacional (por exemplo, “Departamento de TI”).
Common Name (eg, YOUR name) []: <– Digite o Nome de Domínio Qualificado do sistema (por exemplo, “server1.example.com”).
Email Address []: <– Digite seu endereço de e-mail.
Em seguida, altere as permissões do smtpd.key:
chmod o= /etc/postfix/smtpd.key6 Configurar Saslauthd
Primeiro execute
mkdir -p /var/spool/postfix/var/run/saslauthdEm 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 -- use a função de biblioteca getpwent() # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use um servidor IMAP remoto # shadow -- use o arquivo de senha shadow local # sasldb -- use o arquivo de banco de dados sasldb local # ldap -- use 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 segurança. # # 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 em chroot: "-c -m /var/spool/postfix/var/run/saslauthd" # Exemplo para usuários do Postfix não em chroot: "-c -m /var/run/saslauthd" # # Para saber se seu Postfix está em execução em chroot, verifique /etc/postfix/master.cf. # Se tiver a linha "smtp inet n - y - - smtpd" ou "smtp inet n - - - - smtpd" # então seu Postfix está em execução em uma jaula chroot. # Se tiver a linha "smtp inet n - n - - smtpd" então seu Postfix NÃO # está em execução em uma jaula chroot. #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 dados 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: sql sql_engine: 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@%r' |
Em seguida, adicione o usuário postfix ao grupo sasl (isso garante que o Postfix tenha permissão para acessar o saslauthd):
adduser postfix saslEntã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
Então 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 mudar 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 pop3você pode ver se seu servidor POP3 está funcionando corretamente. Ele deve retornar +OK Hello there. (Digite quit para voltar ao shell do Linux.)
root@server1:/etc/courier# telnet localhost pop3
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
<– quit
+OK Better luck next time.
Connection closed by foreign host.
root@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
newaliasese reiniciar o Postfix:
/etc/init.d/postfix restartReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.