Email Server · 9 min read · Oct 14, 2025

Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (CentOS 6.3 x86_64)

Este tutorial é Copyright (c) 2013 por Falko Timme. Ele é 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 email 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. Eu 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á embutido 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 emails sejam escaneados em busca de spam e vírus. Eu também mostrarei como instalar o SquirrelMail como uma interface de webmail para que os usuários possam ler e enviar emails 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 performática do que uma configuração baseada em usuários de sistema “reais”. Com esta configuração virtual, seu servidor de email 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 mais comandos postmap para criar arquivos db, não 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 email como nome de usuário (em vez de um nome de usuário + um endereço de email), o que é mais fácil de entender e lembrar.

Este tutorial é destinado como 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 este não é o único modo 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 CentOS 6.3 x86_64, então você deve configurar uma instalação básica do servidor CentOS 6.3 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.

Você deve se certificar de que o firewall está desligado (pelo menos por enquanto) e que SELinux está desativado (isso é importante!).

2 Habilitar Repositórios Adicionais E Instalar Alguns Softwares

Primeiro, importamos as chaves GPG para pacotes de software:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Então habilitamos os repositórios RPMforge e EPEL em nosso sistema CentOS, já que muitos dos pacotes que vamos instalar ao longo deste tutorial não estão disponíveis nos repositórios oficiais do CentOS 6.3:

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
cd /tmp  
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm  
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

(Se o link acima não funcionar mais, você pode encontrar a versão atual do rpmforge-release aqui: http://packages.sw.be/rpmforge-release/)

rpm --import https://fedoraproject.org/static/0608B895.txt  
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  
rpm -ivh epel-release-6-8.noarch.rpm
yum install yum-priorities

Edite /etc/yum.repos.d/epel.repo…

vi /etc/yum.repos.d/epel.repo

… e adicione a linha priority=10 à seção [epel]:

| [epel] name=Pacotes Extras para Linux Empresarial 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |

Então atualizamos nossos pacotes existentes no sistema:

yum update

Agora instalamos alguns softwares que precisamos mais tarde:

yum groupinstall 'Development Tools'

3 Instalar Apache, MySQL, phpMyAdmin

Isso pode ser instalado com um único comando (incluindo os pacotes que precisamos para compilar o Courier-IMAP):

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-devel db4-devel mod_ssl telnet sqlite-devel

4 Instalar Courier-IMAP, Courier-Authlib, E Maildrop

Infelizmente, não existem pacotes rpm para Courier-IMAP, Courier-Authlib e Maildrop, portanto, teremos que compilá-los nós mesmos.

Pacotes RPM não devem ser construídos como root; courier-imap até se recusa a compilar se detectar que a compilação está sendo executada como usuário root. Portanto, criamos agora uma conta de usuário normal (falko neste exemplo) e damos a ele uma senha:

useradd -m -s /bin/bash falko  
passwd falko

Precisaremos do comando sudo mais tarde para que o usuário falko possa compilar e instalar os pacotes rpm. Mas primeiro, devemos permitir que falko execute todos os comandos usando sudo:

Execute

visudo

No arquivo que se abre, há uma linha root ALL=(ALL) ALL. Adicione uma linha semelhante para falko logo abaixo dessa linha:

| [...] ## Permitir que root execute qualquer comando em qualquer lugar root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |

Agora estamos prontos para construir nosso pacote rpm. Primeiro, torne-se o usuário falko:

su falko

Em seguida, criamos nosso ambiente de construção:

mkdir $HOME/rpm  
mkdir $HOME/rpm/SOURCES  
mkdir $HOME/rpm/SPECS  
mkdir $HOME/rpm/BUILD  
mkdir $HOME/rpm/BUILDROOT  
mkdir $HOME/rpm/SRPMS  
mkdir $HOME/rpm/RPMS  
mkdir $HOME/rpm/RPMS/i386  
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

Agora criamos um diretório de downloads e baixamos os arquivos fonte de http://www.courier-mta.org/download.php:

mkdir $HOME/downloads  
cd $HOME/downloads
wget --no-check-certificate https://sourceforge.net/projects/courier/files/authlib/0.65.0/courier-authlib-0.65.0.tar.bz2/download  
wget --no-check-certificate https://sourceforge.net/projects/courier/files/imap/4.12.0/courier-imap-4.12.0.tar.bz2/download  
wget --no-check-certificate https://sourceforge.net/projects/courier/files/maildrop/2.6.0/maildrop-2.6.0.tar.bz2/download

Agora (ainda em $HOME/downloads) podemos construir o courier-authlib:

sudo rpmbuild -ta courier-authlib-0.65.0.tar.bz2

Após o processo de construção, os pacotes rpm podem ser encontrados em /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se você estiver em um sistema i386). O comando

sudo ls -l /root/rpmbuild/RPMS/x86_64

mostra os pacotes rpm disponíveis:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 544  
-rw-r--r-- 1 root root 126728 Mar  4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root 274772 Mar  4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  37824 Mar  4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  17256 Mar  4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  12000 Mar  4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  12984 Mar  4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   8244 Mar  4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  10620 Mar  4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  34644 Mar  4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm  
[falko@server1 downloads]$

Selecione os que você deseja instalar e instale-os assim:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.65.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.65.0-1.el6.x86_64.rpm

Agora voltamos ao nosso diretório de downloads:

cd $HOME/downloads

Execute os seguintes comandos para criar diretórios necessários/mudar permissões de diretório (porque caso contrário o processo de construção do Courier-Imap falhará):

sudo mkdir -p /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

Agora execute rpmbuild novamente, desta vez sem sudo, caso contrário a compilação falhará porque foi executada como root:

rpmbuild -ta courier-imap-4.12.0.tar.bz2

Após o processo de construção, os pacotes rpm podem ser encontrados em $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386 se você estiver em um sistema i386):

cd $HOME/rpm/RPMS/x86_64

O comando

ls -l

mostra os pacotes rpm disponíveis:

[falko@server1 x86_64]$ ls -l  
total 1116  
-rw-rw-r-- 1 falko falko 332112 Mar  4 12:53 courier-imap-4.12.0-1.x86_64.rpm  
-rw-rw-r-- 1 falko falko 805288 Mar  4 12:53 courier-imap-debuginfo-4.12.0-1.x86_64.rpm  
[falko@server1 x86_64]$

Você pode instalar o courier-imap assim:

sudo rpm -ivh courier-imap-4.12.0-1.x86_64.rpm

Agora voltamos ao nosso diretório de downloads:

cd $HOME/downloads

e execute rpmbuild novamente, desta vez para construir um pacote maildrop:

sudo rpmbuild -ta maildrop-2.6.0.tar.bz2

Após o processo de construção, os pacotes rpm podem ser encontrados em /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se você estiver em um sistema i386). O comando

sudo ls -l /root/rpmbuild/RPMS/x86_64

mostra os pacotes rpm disponíveis:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 1732  
-rw-r--r-- 1 root root 126728 Mar  4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root 274772 Mar  4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  37824 Mar  4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  17256 Mar  4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  12000 Mar  4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  12984 Mar  4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   8244 Mar  4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  10620 Mar  4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  34644 Mar  4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root 286752 Mar  4 13:03 maildrop-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root 751304 Mar  4 13:03 maildrop-debuginfo-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root 102052 Mar  4 13:03 maildrop-devel-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root  66184 Mar  4 13:03 maildrop-man-2.6.0-1.x86_64.rpm  
[falko@server1 downloads]$

Você pode agora instalar o maildrop assim:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.6.0-1.x86_64.rpm

Depois de compilar e instalar todos os pacotes necessários, você pode se tornar root novamente digitando

exit

5 Aplicar Patch de Quota ao Postfix

Precisamos obter o rpm fonte do Postfix, aplicar o patch de quota, construir um novo pacote rpm do Postfix e instalá-lo.

cd /usr/src  
wget http://vault.centos.org/6.3/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm  
rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpm

O último comando mostrará alguns avisos que você pode ignorar:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root
cd /root/rpmbuild/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz  
gunzip postfix-2.6.5-vda-ng.patch.gz  
cd /root/rpmbuild/SPECS/

Agora devemos editar o arquivo postfix.spec:

vi postfix.spec

Adicione Patch0: postfix-2.6.5-vda-ng.patch à estrofe # Patches, e %patch0 -p1 -b .vda-ng à estrofe %setup -q:

| [...] # Patches Patch0: postfix-2.6.5-vda-ng.patch Patch1: postfix-2.6.1-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.1-datecalc.patch Patch10: postfix-2.6.6-CVE-2011-0411.patch Patch11: postfix-2.6.6-CVE-2011-1720.patch [...] %prep %setup -q # Aplicar patches obrigatórios %patch0 -p1 -b .vda-ng %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

Então construímos nosso novo pacote rpm do Postfix com suporte a quota e MySQL:

rpmbuild -ba postfix.spec

Nosso pacote rpm do Postfix é criado em /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se você estiver em um sistema i386), então vamos lá:

cd /root/rpmbuild/RPMS/x86_64

O comando

ls -l

mostra os pacotes disponíveis:

[root@server1 x86_64]# ls -l  
total 10748  
-rw-r--r-- 1 root root  126728 Mar  4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  274772 Mar  4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   37824 Mar  4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   17256 Mar  4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   12000 Mar  4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   12984 Mar  4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root    8244 Mar  4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   10620 Mar  4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root   34644 Mar  4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm  
-rw-r--r-- 1 root root  286752 Mar  4 13:03 maildrop-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root  751304 Mar  4 13:03 maildrop-debuginfo-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root  102052 Mar  4 13:03 maildrop-devel-2.6.0-1.x86_64.rpm  
-rw-r--r-- 1 root root   66184 Mar  4 13:03 maildrop-man-2.6.0-1.x86_64.rpm  
[root@server1 x86_64]#

Para ter certeza de que nenhuma versão do postfix estava instalada anteriormente em seu sistema, use:

yum remove postfix

Escolha o pacote Postfix e instale-o assim:

rpm -ivh postfix-2.6.6-2.2.el6.x86_64.rpm
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.