Email Server · 22 min read · Sep 25, 2025

Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (Ubuntu 13.10)

Este tutorial é Copyright (c) 2014 por Falko Timme & Srijan Kishore. É derivado de um tutorial de Christoph Haas que você pode encontrar em http://workaround.org. Você é livre para usar este tutorial sob a licença Creative Commons 2.5 ou qualquer versão posterior.

Este documento descreve como instalar um servidor de e-mail Postfix que é baseado em usuários e domínios virtuais, ou seja, usuários e domínios que estão em um banco de dados MySQL. Também demonstrarei a instalação e configuração do Courier (Courier-POP3, Courier-IMAP), para que o Courier possa autenticar contra o mesmo banco de dados MySQL que o Postfix usa.

O servidor Postfix resultante é capaz de SMTP-AUTH e TLS e quota (quota não está embutida no Postfix por padrão, eu mostrarei como corrigir seu Postfix adequadamente). As senhas são armazenadas em forma criptografada no banco de dados (a maioria dos documentos que encontrei lidava com senhas em texto simples, o que é um risco de segurança). Além disso, este tutorial cobre a instalação do Amavisd, SpamAssassin e ClamAV para que os e-mails sejam verificados quanto a spam e vírus. Também mostrarei como instalar o SquirrelMail como uma interface de webmail para que os usuários possam ler e enviar e-mails e alterar suas senhas.

A vantagem de tal configuração “virtual” (usuários e domínios virtuais em um banco de dados MySQL) é que ela é muito mais eficiente do que uma configuração baseada em usuários de sistema “reais”. Com essa configuração virtual, seu servidor de e-mail pode lidar com milhares de domínios e usuários. Além disso, é mais fácil de administrar porque você só precisa lidar com o banco de dados MySQL ao adicionar novos usuários/domínios ou editar os existentes. Não há mais comandos postmap para criar arquivos db, não há mais recarregamento do Postfix, etc. Para a administração do banco de dados MySQL, você pode usar ferramentas baseadas na web como o phpMyAdmin, que também será instalado neste tutorial. A terceira vantagem é que os usuários têm um endereço de e-mail como nome de usuário (em vez de um nome de usuário + um endereço de e-mail), o que é mais fácil de entender e lembrar.

Este tutorial é destinado a ser um guia prático; não cobre os fundamentos teóricos. Eles são tratados em muitos outros documentos na web.

Este documento vem sem garantia de qualquer tipo! Quero dizer que esta não é a única maneira de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Este tutorial é baseado no Ubuntu 13.10 Server (Saucy Salamander), portanto, você deve configurar uma instalação básica do servidor Ubuntu 13.10 antes de continuar com este tutorial. O sistema deve ter um endereço IP estático. Eu uso 192.168.0.100 como meu endereço IP neste tutorial e server1.example.com como o nome do host.

Certifique-se de que você está logado como root (digite

sudo su

para se tornar root), porque devemos executar todas as etapas deste tutorial como usuário root.

É muito importante que você faça /bin/sh um symlink para /bin/bash…

dpkg-reconfigure dash

Usar dash como o shell padrão do sistema (/bin/sh)? <– Não

… e que você desative o AppArmor:

/etc/init.d/apparmor stop   
update-rc.d -f apparmor remove   
apt-get remove apparmor apparmor-utils

2 Instalar Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Para instalar Postfix, Courier, Saslauthd, MySQL e phpMyAdmin, simplesmente execute

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Você será solicitado a responder algumas perguntas:

Nova senha para o usuário MySQL “root”: <– sua senha root sql
Repita a senha para o usuário MySQL “root”: <– sua senha root sql
Criar diretórios para administração baseada na web? <– Não
Tipo geral de configuração de e-mail: <– Internet Site
Nome do sistema de e-mail: <– server1.example.com
Certificado SSL necessário <– Ok
Servidor web para reconfigurar automaticamente: <– apache2
Configurar banco de dados para phpmyadmin com dbconfig-common? <– Não

3 Aplicar O Patch De Quota Ao Postfix

Precisamos obter as fontes do Postfix, aplicar o patch de quota, construir novos pacotes .deb do Postfix e instalar esses pacotes .deb:

apt-get build-dep postfix
cd /usr/src  
apt-get source postfix

(Certifique-se de usar a versão correta do Postfix nos seguintes comandos. Eu tenho o Postfix 2.10.2 instalado. Você pode descobrir sua versão do Postfix executando

postconf -d | grep mail_version

A saída deve ser parecida com isto:

root@server1:/usr/src# postconf -d | grep mail_version  
mail_version = 2.10.2  
milter_macro_v = $mail_name $mail_version  
root@server1:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch  
cd postfix-2.10.2  
patch -p1 < ../postfix-vda-v13-2.10.0.patch

Em seguida, abra debian/rules e mude DEB_BUILD_HARDENING de 1 para 0:

vi debian/rules

| [...] export DEB_BUILD_HARDENING=0 [...] |

Se você não fizer isso, sua construção falhará com as seguintes mensagens de erro:

maildir.c: In function âdeliver_maildirâ:  
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]  
maildir.c: In function âsql2fileâ:  
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]  
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]  
cc1: some warnings being treated as errors  
make: * [maildir.o] Error 1  
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'  
make[1]: * [update] Error 1  
make[1]: Leaving directory `/usr/src/postfix-2.10.2'  
make: *** [build] Error 2  
dpkg-buildpackage: error: debian/rules build gave error exit status 2  
root@server1:/usr/src/postfix-2.10.2#

Agora podemos construir os novos pacotes .deb do Postfix:

dpkg-buildpackage

Agora vamos um diretório acima, é onde os novos pacotes .deb foram criados:

cd ..

O comando

ls -l

mostra os pacotes disponíveis:

root@server1:/usr/src# ls -l  
total 7124  
drwxr-xr-x 18 root root    4096 Abr 16 04:29 postfix-2.10.2  
-rw-r--r--  1 root root   48594 Abr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root  161974 Abr 16 04:29 postfix-dev_2.10.2-1_all.deb  
-rw-r--r--  1 root root 1094344 Abr 16 04:29 postfix-doc_2.10.2-1_all.deb  
-rw-r--r--  1 root root   57342 Abr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50554 Abr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50804 Abr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   50756 Abr 16 04:29 postfix-pgsql_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch  
-rw-r--r--  1 root root  282175 Abr 16 04:28 postfix_2.10.2-1.diff.gz  
-rw-r--r--  1 root root    1522 Abr 16 04:28 postfix_2.10.2-1.dsc  
-rw-r--r--  1 root root    3899 Abr 16 04:29 postfix_2.10.2-1_amd64.changes  
-rw-r--r--  1 root root 1542368 Abr 16 04:29 postfix_2.10.2-1_amd64.deb  
-rw-r--r--  1 root root 3828326 Set 12  2013 postfix_2.10.2.orig.tar.gz

Escolha os pacotes postfix e postfix-mysql e instale-os assim:

dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb

4 Criar O Banco De Dados MySQL Para Postfix/Courier

Agora criamos um banco de dados chamado mail:

mysqladmin -u root -p create mail

Você será solicitado a esta pergunta:

Digite a Senha: <– sua senha root sql

Em seguida, vamos para o shell do MySQL:

mysql -u root -p

No shell do MySQL, criamos o usuário mail_admin com a senha mail_admin_password (substitua pela sua própria senha) que tem privilégios SELECT, INSERT, UPDATE, DELETE no banco de dados mail. Este usuário será usado pelo Postfix e Courier para se conectar ao banco de dados de e-mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';  
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';  
FLUSH PRIVILEGES;

Ainda no shell do MySQL, criamos as tabelas necessárias pelo Postfix e Courier:

USE mail;
CREATE TABLE domains (  
domain varchar(50) NOT NULL,  
PRIMARY KEY (domain) )  
ENGINE=MyISAM;
CREATE TABLE forwardings (  
source varchar(80) NOT NULL,  
destination TEXT NOT NULL,  
PRIMARY KEY (source) )  
ENGINE=MyISAM;
CREATE TABLE users (  
email varchar(80) NOT NULL,  
password varchar(20) NOT NULL,  
quota INT(10) DEFAULT '10485760',  
PRIMARY KEY (email)  
) ENGINE=MyISAM;
CREATE TABLE transport (  
domain varchar(128) NOT NULL default '',  
transport varchar(128) NOT NULL default '',  
UNIQUE KEY domain (domain)  
) ENGINE=MyISAM;
quit;

Como você pode ter notado, com o comando quit; deixamos o shell do MySQL e estamos de volta ao shell do Linux.

A tabela domains armazenará cada domínio virtual que o Postfix deve receber e-mails (por exemplo, example.com).

domain
example.com

A tabela forwardings é para alias de um endereço de e-mail para outro, por exemplo, encaminhar e-mails para [email protected] para [email protected].

sourcedestination
[email protected][email protected]

A tabela users armazena todos os usuários virtuais (ou seja, endereços de e-mail, porque o endereço de e-mail e o nome de usuário são os mesmos) e senhas (em forma criptografada!) e um valor de quota para cada caixa de correio (neste exemplo, o valor padrão é 10485760 bytes, o que significa 10MB).

emailpasswordquota
[email protected]No9.E4skNvGa. (“segredo” em forma criptografada)10485760

A tabela transport é opcional, é para usuários avançados. Ela permite encaminhar e-mails para usuários individuais, domínios inteiros ou todos os e-mails para outro servidor. Por exemplo,

domaintransport
example.comsmtp:[1.2.3.4]

encaminharia todos os e-mails para example.com via o protocolo smtp para o servidor com o endereço IP 1.2.3.4 (os colchetes [] significam “não faça uma busca do registro MX DNS” (o que faz sentido para endereços IP…). Se você usar um nome de domínio totalmente qualificado (FQDN) em vez disso, você não usaria os colchetes.).

A propósito, (estou assumindo que o endereço IP do seu sistema de servidor de e-mail é 192.168.0.100) você pode acessar o phpMyAdmin em http://192.168.0.100/phpmyadmin/ em um navegador e fazer login como mail_admin. Depois você pode dar uma olhada no banco de dados. Mais tarde, você pode usar o phpMyAdmin para administrar seu servidor de e-mail.

5 Configurar Postfix

Agora precisamos dizer ao Postfix onde ele pode encontrar todas as informações no banco de dados. Portanto, precisamos criar seis arquivos de texto. Você notará que 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 MySQL que 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 MySQL para a jaula chroot, o que causaria 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 é ouvir 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 restart

Execute

netstat -tap | grep mysql

para ter certeza de que o MySQL está ouvindo em 127.0.0.1 (localhost.localdomain):

root@server1:~# netstat -tap | grep mysql  
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      24970/mysqld    
root@server1:~#

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. Este é onde 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 da quota."'  
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]: <– Digite o Nome do Seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) [Some-State]: <– Digite o Nome do Seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) []: <– Digite sua Cidade.
Nome da Organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: <– Digite o Nome da Sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (por exemplo, seção) []: <– Digite o Nome da Sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (por exemplo, SEU nome) []: <– Digite o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de E-mail []: <– Digite seu Endereço de E-mail.

Em seguida, 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 -- use a função da biblioteca getpwent() # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use um servidor IMAP remoto # shadow -- use o arquivo de senha local shadow # sasldb -- use o arquivo de banco de dados local sasldb # 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 ficar seguro. # # 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-chroot: "-c -m /var/run/saslauthd" # # Para saber se seu Postfix está em execução 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 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: 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 sasl

Então reinicie o Postfix e o Saslauthd:

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

7 Configurar Courier

Agora precisamos dizer 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 esvazie 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.)

root@server1:/etc/courier# telnet localhost pop3
Trying ::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

newaliases

depois e reiniciar o Postfix:

/etc/init.d/postfix restart

9 Instalar amavisd-new, SpamAssassin E ClamAV

Para instalar amavisd-new, spamassassin e clamav, execute o seguinte comando:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

Depois, devemos configurar o amavisd-new. A configuração é dividida em vários arquivos que residem no diretório /etc/amavis/conf.d. Dê uma olhada em cada um deles para se familiarizar com a configuração. A maioria das configurações está boa, no entanto, devemos modificar três arquivos:

Primeiro, devemos habilitar o ClamAV e o SpamAssassin em /etc/amavis/conf.d/15-content_filter_mode descomentando as linhas @bypass_virus_checks_maps e @bypass_spam_checks_maps:

vi /etc/amavis/conf.d/15-content_filter_mode

O arquivo deve ficar assim:

| use strict; # Você pode modificar este arquivo para reabilitar a verificação de SPAM através do spamassassin # e para reabilitar a verificação de antivírus. # # Modo padrão de verificação de antivírus # Por favor, note que a verificação de antivírus está DESABILITADA por # padrão. # Se você deseja habilitá-la, por favor, descomente as seguintes linhas: @bypass_virus_checks_maps = ( \\%bypass_virus_checks, \\@bypass_virus_checks_acl, \\$bypass_virus_checks_re); # # Modo padrão de verificação de SPAM # Por favor, note que a verificação de anti-spam está DESABILITADA por # padrão. # Se você deseja habilitá-la, por favor, descomente as seguintes linhas: @bypass_spam_checks_maps = ( \\%bypass_spam_checks, \\@bypass_spam_checks_acl, \\$bypass_spam_checks_re); 1; # garantir um retorno definido |

E então você deve dar uma olhada nas configurações de spam e nas ações para e-mails de spam/vírus em /etc/amavis/conf.d/20-debian_defaults. Não há necessidade de mudar nada se as configurações padrão estiverem boas para você. O arquivo contém muitas explicações, então não há necessidade de explicar as configurações aqui:

vi /etc/amavis/conf.d/20-debian_defaults

| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # habilitar hashing do diretório de quarentena $log_recip_templ = undef; # desabilitar entradas de log de nível-0 por destinatário $DO_SYSLOG = 1; # log via syslogd (preferido) $syslog_ident = 'amavis'; # tag de identificação do syslog, prependida a todas as mensagens $syslog_facility = 'mail'; $syslog_priority = 'debug'; # mude para info para descartar a saída de depuração, etc $enable_db = 1; # habilitar uso de BerkeleyDB/libdb (SNMP e nanny) $enable_global_cache = 1; # habilitar uso de cache baseado em libdb se $enable_db=1 $inet_socket_port = 10024; # socket de escuta padrão $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # adicionar cabeçalhos de informação de spam se em, ou acima desse nível $sa_tag2_level_deflt = 6.31; # adicionar cabeçalhos 'spam detectado' nesse nível $sa_kill_level_deflt = 6.31; # aciona ações evasivas de spam $sa_dsn_cutoff_level = 10; # nível de spam além do qual um DSN não é enviado [...] $final_virus_destiny = D_DISCARD; # (dados não perdidos, veja quarentena de vírus) $final_banned_destiny = D_BOUNCE; # D_REJECT quando MTA frontal $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Propenso a falsos positivos (para spam) [...] |

Finalmente, edite /etc/amavis/conf.d/50-user e adicione a linha $pax=’pax’; no meio:

vi /etc/amavis/conf.d/50-user

| use strict; # # Coloque suas diretivas de configuração aqui. Elas substituirão aquelas em # arquivos anteriores. # Veja /usr/share/doc/amavisd-new/ para documentação e exemplos das # diretivas que você pode usar neste arquivo # $pax='pax'; #------------ Não modifique nada abaixo desta linha ------------- 1; # garantir um retorno definido |

Depois, execute esses comandos para adicionar o usuário clamav ao grupo amavis e reiniciar o amavisd-new e o ClamAV:

adduser clamav amavis  
/etc/init.d/amavis restart  
/etc/init.d/clamav-freshclam restart  
/etc/init.d/clamav-daemon restart

Agora precisamos configurar o Postfix para canalizar e-mails recebidos através do amavisd-new:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'  
postconf -e 'receive_override_options = no_address_mappings'

Depois, acrescente as seguintes linhas a /etc/postfix/master.cf:

vi /etc/postfix/master.cf

| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |

Então reinicie o Postfix:

/etc/init.d/postfix restart

Agora execute

netstat -tap

e você deve ver o Postfix (master) ouvindo na porta 25 (smtp) e 10025, e o amavisd-new na porta 10024:

root@server1:/etc/courier# netstat -tap  
Conexões ativas da Internet (servidores e estabelecidas)  
Proto Recv-Q Send-Q Endereço Local           Endereço Estrangeiro         Estado       PID/Nome do Programa  
tcp        0      0 *:http                  *:*                     LISTEN      6134/apache2  
tcp        0      0 *:ssh                   *:*                     LISTEN      610/sshd  
tcp        0      0 *:smtp                  *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      21937/amavisd-new (  
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      23128/master  
tcp        0      0 localhost.localdo:mysql   *:*                     LISTEN      4308/mysqld  
tcp        0      52 server1.example.com:ssh 192.168.0.206:57597     ESTABLISHED 976/0  
tcp6       0      0 [::]:ssh                [::]:*                     LISTEN      610/sshd  
tcp6       0      0 [::]:smtp               [::]:*                     LISTEN      23128/master  
tcp6       0      0 [::]:imaps              [::]:*                     LISTEN      18191/couriertcpd  
tcp6       0      0 [::]:pop3s              [::]:*                     LISTEN      18259/couriertcpd  
tcp6       0      0 [::]:pop3               [::]:*                     LISTEN      18222/couriertcpd  
tcp6       0      0 [::]:imap2               [::]:*                     LISTEN      18154/couriertcpd  
root@server1:/etc/courier#
 

10 Instalar Razor, Pyzor E DCC E Configurar SpamAssassin

Razor, Pyzor e DCC são filtros de spam que usam uma rede de filtragem colaborativa. Para instalar Razor e Pyzor, execute

apt-get install razor pyzor

DCC não está disponível nos repositórios do Ubuntu 13.10, então o instalamos da seguinte forma:

cd /tmp  
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z   
tar xzvf dcc-dccproc.tar.Z  
cd dcc-dccproc-1.3.1.154  
./configure --with-uid=amavis  
make  
make install  
chown -R amavis:amavis /var/dcc  
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

Agora precisamos dizer ao SpamAssassin para usar esses três programas. Edite /etc/spamassassin/local.cf e adicione as seguintes linhas a ele:

vi /etc/spamassassin/local.cf

| [...] #dcc use_dcc 1 dcc_path /usr/local/bin/dccproc #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |

Em seguida, devemos habilitar o plugin DCC no SpamAssassin. Abra /etc/spamassassin/v310.pre e descomente a linha loadplugin Mail::SpamAssassin::Plugin::DCC:

vi /etc/spamassassin/v310.pre

| [...] # DCC - realizar verificações de mensagem DCC. # # DCC está desabilitado aqui porque não é open source. Veja a licença do DCC para mais detalhes. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |

Você pode verificar sua configuração do SpamAssassin executando:

spamassassin --lint

Não deve mostrar nenhum erro.

Reinicie o amavisd-new depois:

/etc/init.d/amavis restart

Agora atualizamos nossos conjuntos de regras do SpamAssassin da seguinte forma:

sa-update --no-gpg

Criamos um trabalho cron para que os conjuntos de regras sejam atualizados regularmente. Execute

crontab -e

para abrir o editor de trabalhos cron. Crie o seguinte trabalho cron:

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

Isso atualizará os conjuntos de regras a cada dois dias às 4:23h.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.