Servidor de Email · 7 min read · Nov 07, 2025
Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (CentOS 4.8 i386)
Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (CentOS 4.8 i386)
Versão 1.0
Autor: Falko Timme
Este tutorial é Copyright (c) 2009 por Falko Timme. É 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. 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 usado pelo Postfix.
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 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 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 é muito mais eficiente do que uma configuração baseada em usuários de sistema “reais”. Com essa 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 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 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 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 garantia de que isso funcionará para você!
1 Nota Preliminar
Este tutorial é baseado no CentOS 4.8 i386, então você deve configurar uma instalação básica do servidor CentOS 4.8 antes de continuar com este tutorial (por exemplo, como mostrado nos primeiros cinco capítulos do The Perfect Server - CentOS 4.8 Server i386 [ISPConfig 2]). 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!).
Eu testei essa configuração em um sistema i386. A configuração deve ser semelhante ou talvez até idêntica para um sistema x86_64, mas eu não testei.
2 Instalar Alguns Softwares
Primeiro, atualizamos nossos pacotes existentes no sistema:
yum updateAgora instalamos alguns softwares que precisamos mais tarde:
yum groupinstall 'Development Tools'yum groupinstall 'Development Libraries'3 Instalar Apache, MySQL, phpMyAdmin
Primeiro, habilitamos o repositório RPMforge em nosso sistema CentOS, pois muitos dos pacotes que vamos instalar ao longo deste tutorial não estão disponíveis nos repositórios oficiais do CentOS 4.8:
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtrpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpmDepois, podemos instalar os pacotes necessários com um único comando (incluindo os pacotes que precisamos para construir 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 openldap-servers libtool gdbm-devel pam-devel gamin-devel4 Instalar Courier-IMAP, Courier-Authlib, E Maildrop
Infelizmente, não existem pacotes rpm para Courier-IMAP, Courier-Authlib e Maildrop, portanto, temos que construí-los nós mesmos.
Os pacotes RPM não devem ser construídos como root; o courier-imap até se recusa a compilar se detectar que a compilação está sendo executada como usuário root. Portanto, criamos uma conta de usuário normal agora (compileuser neste exemplo) e damos a ele uma senha:
useradd -m -s /bin/bash compileuser
passwd compileuserPrecisaremos do comando sudo mais tarde para que o usuário compileuser possa compilar e instalar os pacotes rpm. Mas primeiro, devemos permitir que compileuser execute todos os comandos usando sudo:
Execute
visudoNo arquivo que se abre, há uma linha root ALL=(ALL) ALL. Adicione uma linha semelhante para falko logo abaixo dessa linha:
| [...] root ALL=(ALL) ALL compileuser ALL=(ALL) ALL [...] |
Agora estamos prontos para construir nosso pacote rpm. Primeiro, torne-se o usuário compileuser:
su compileuserEm 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/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosAgora baixamos os arquivos fonte de http://www.courier-mta.org/download.php:
cd /tmp
wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.4.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.6.0.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.2.0.tar.bz2Agora (ainda em /tmp) podemos construir o courier-authlib:
sudo rpmbuild -ta courier-authlib-0.62.4.tar.bz2Após o processo de construção, os pacotes rpm podem ser encontrados em $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se você estiver em um sistema x86_64):
cd $HOME/rpm/RPMS/i386O comando
ls -lmostra os pacotes rpm disponíveis:
[compileuser@server1 i386]$ ls -l
total 616
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
[compileuser@server1 i386]$Selecione os que você deseja instalar e instale-os assim:
sudo rpm -ivh courier-authlib-0.62.4-1.i386.rpm courier-authlib-mysql-0.62.4-1.i386.rpm courier-authlib-devel-0.62.4-1.i386.rpmAgora voltamos para o diretório /tmp:
cd /tmpe executamos rpmbuild novamente, desta vez sem sudo, caso contrário, a compilação falhará porque foi executada como root:
rpmbuild -ta courier-imap-4.6.0.tar.bz2Após o processo de construção, os pacotes rpm podem ser encontrados em $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se você estiver em um sistema x86_64):
cd $HOME/rpm/RPMS/i386O comando
ls -lmostra os pacotes rpm disponíveis:
[compileuser@server1 i386]$ ls -l
total 1812
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
[compileuser@server1 i386]$Você pode instalar o courier-imap assim:
sudo rpm -ivh courier-imap-4.6.0-1.i386.rpmAgora voltamos para o diretório /tmp:
cd /tmpe executamos rpmbuild novamente, desta vez para construir um pacote maildrop:
sudo rpmbuild -ta maildrop-2.2.0.tar.bz2Após o processo de construção, os pacotes rpm podem ser encontrados em $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se você estiver em um sistema x86_64):
cd $HOME/rpm/RPMS/i386O comando
ls -lmostra os pacotes rpm disponíveis:
[compileuser@server1 i386]$ ls -l
total 3012
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
-rw-r--r-- 1 root root 283291 Sep 24 16:13 maildrop-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 734265 Sep 24 16:13 maildrop-debuginfo-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 122406 Sep 24 16:13 maildrop-devel-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 63497 Sep 24 16:13 maildrop-man-2.2.0-1.i386.rpm
[compileuser@server1 i386]$Você pode agora instalar o maildrop assim:
sudo rpm -ivh maildrop-2.2.0-1.i386.rpmDepois de compilar e instalar todos os pacotes necessários, você pode se tornar root novamente digitando
exit5 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://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/4.8/os/SRPMS/postfix-2.2.10-1.2.1.el4_7.src.rpm
rpm -ivh postfix-2.2.10-1.2.1.el4_7.src.rpmO último comando mostrará alguns avisos que você pode ignorar:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using rootcd /usr/src/redhat/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.2.10-vda.patch.gz
gunzip postfix-2.2.10-vda.patch.gz
cd /usr/src/redhat/SPECS/Agora devemos editar o arquivo postfix.spec:
vi postfix.specAltere %define MYSQL 0 para %define MYSQL 1, adicione Patch0: postfix-2.2.10-vda.patch à estrofe # Patches, e finalmente adicione %patch0 -p1 -b .vda à estrofe %setup -q:
| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.2.10-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch4: postfix-hostname-fqdn.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch Patch10: postfix-2.2.10-CVE-2008-2936.patch [...] %setup -q # Apply obligatory patches %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch4 -p1 -b .postfix-hostname-fqdn %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |
Então, construímos nosso novo pacote rpm do Postfix com suporte a quota e MySQL:
rpmbuild -ba postfix.specNosso pacote rpm do Postfix é criado em /usr/src/redhat/RPMS/i386, ( /usr/src/redhat/RPMS/x86_64 em um sistema x86_64) então vamos lá:
cd /usr/src/redhat/RPMS/i386O comando
ls -lmostra os pacotes disponíveis:
[root@server1 i386]# ls -l
total 10052
-rw-r--r-- 1 root root 3237646 Sep 28 16:49 postfix-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 6984691 Sep 28 16:49 postfix-debuginfo-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 49047 Sep 28 16:49 postfix-pflogsumm-2.2.10-1.2.1.i386.rpm
[root@server1 i386]#Escolha o pacote Postfix e instale-o assim:
rpm -ivh postfix-2.2.10-1.2.1.i386.rpmReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.