Servidor de E-mail · 9 min read · Oct 13, 2025
Usuários e Domínios Virtuais Com Postfix, Courier, MySQL E SquirrelMail (Fedora 18 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 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 utiliza.
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 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 Fedora 18 x86_64, então você deve configurar uma instalação básica do servidor Fedora 18 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).
Também certifique-se de que o SELinux está desativado:
Edite /etc/selinux/config e defina SELINUX=disabled:
vi /etc/selinux/config| # Este arquivo controla o estado do SELinux no sistema. # SELINUX= pode assumir um destes três valores: # enforcing - A política de segurança do SELinux é aplicada. # permissive - O SELinux imprime avisos em vez de aplicar. # disabled - Nenhuma política do SELinux é carregada. SELINUX=disabled # SELINUXTYPE= pode assumir um destes dois valores: # targeted - Processos direcionados são protegidos, # minimum - Modificação da política direcionada. Apenas processos selecionados são protegidos. # mls - Proteção de Segurança de Múltiplos Níveis. SELINUXTYPE=targeted |
Depois disso, devemos reiniciar o sistema:
reboot2 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
Isso pode ser instalado com um único comando (incluindo os pacotes que precisamos para compilar o Courier-IMAP):
yum install ntp httpd mod_ssl 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 sqlite-devel4 Instalar Courier-IMAP, Courier-Authlib, E Maildrop
Infelizmente, não existem pacotes rpm para Courier-IMAP, Courier-Authlib e Maildrop, portanto, precisamos compilá-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 (falko neste exemplo) e damos a ele uma senha:
useradd -m -s /bin/bash falko
passwd falkoPrecisaremos 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
visudoNo 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 falkoEm 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_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosAgora criamos um diretório de downloads e baixamos os arquivos fonte de http://www.courier-mta.org/download.php:
mkdir $HOME/downloads
cd $HOME/downloadswget https://sourceforge.net/projects/courier/files/authlib/0.65.0/courier-authlib-0.65.0.tar.bz2
wget https://sourceforge.net/projects/courier/files/imap/4.12.0/courier-imap-4.12.0.tar.bz2
wget https://sourceforge.net/projects/courier/files/maildrop/2.6.0/maildrop-2.6.0.tar.bz2Agora (ainda em $HOME/downloads) podemos construir o courier-authlib:
sudo rpmbuild -ta courier-authlib-0.65.0.tar.bz2Apó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_64mostra os pacotes rpm disponíveis:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 616
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.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.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.65.0-1.fc18.x86_64.rpmAgora voltamos para nosso diretório de downloads:
cd $HOME/downloadsExecute 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 /var/cache/ccache/tmp
sudo chmod o+rwx /var/cache/ccache/
sudo chmod 777 /var/cache/ccache/tmpAgora execute o 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.bz2Apó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_64O comando
ls -lmostra os pacotes rpm disponíveis:
[falko@server1 x86_64]$ ls -l
total 1256
-rw-rw-r-- 1 falko falko 344996 Jan 31 17:19 courier-imap-4.12.0-1.18.x86_64.rpm
-rw-rw-r-- 1 falko falko 934056 Jan 31 17:19 courier-imap-debuginfo-4.12.0-1.18.x86_64.rpm
[falko@server1 x86_64]$Você pode instalar o courier-imap assim:
sudo rpm -ivh courier-imap-4.12.0-1.18.x86_64.rpmAgora voltamos para nosso diretório de downloads:
cd $HOME/downloadsE executamos o rpmbuild novamente, desta vez para construir um pacote maildrop:
sudo rpmbuild -ta maildrop-2.6.0.tar.bz2Apó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_64mostra os pacotes rpm disponíveis:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 1880
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.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.18.x86_64.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/fedora/linux/releases/18/Everything/source/SRPMS/p/postfix-2.9.4-3.fc18.src.rpm
rpm -ivh postfix-2.9.4-3.fc18.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 /root/rpmbuild/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.4.patch
cd /root/rpmbuild/SPECS/Agora devemos editar o arquivo postfix.spec:
vi postfix.specAdicione Patch0: postfix-vda-v11-2.9.4.patch à estrofe # Patches, e %patch0 -p1 -b .vda-v11 à estrofe %setup -q:
| [...] # Patches Patch0: postfix-vda-v11-2.9.4.patch Patch1: postfix-2.7.0-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.3-datecalc.patch [...] %prep %setup -q # Aplicar patches obrigatórios %patch0 -p1 -b .vda-v11 %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |
Antes de construirmos o novo pacote Postfix, precisamos instalar sua dependência libdb-devel - e como libdb-devel conflita com db4-devel, devemos remover esse pacote primeiro:
yum remove db4-develyum install libdb-develEm seguida, construímos nosso novo pacote rpm do Postfix com suporte a quota e MySQL:
rpmbuild -ba postfix.specNosso 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_64O comando
ls -lmostra os pacotes disponíveis:
[root@server1 x86_64]# ls -l
total 10504
-rw-r--r-- 1 root root 140580 Jan 31 17:14 courier-authlib-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 324148 Jan 31 17:14 courier-authlib-debuginfo-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 38928 Jan 31 17:14 courier-authlib-devel-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 18756 Jan 31 17:14 courier-authlib-ldap-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 13044 Jan 31 17:14 courier-authlib-mysql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 14208 Jan 31 17:14 courier-authlib-pgsql-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 9356 Jan 31 17:14 courier-authlib-pipe-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 11696 Jan 31 17:14 courier-authlib-sqlite-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 37580 Jan 31 17:14 courier-authlib-userdb-0.65.0-1.fc18.x86_64.rpm
-rw-r--r-- 1 root root 309340 Jan 31 17:23 maildrop-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 805928 Jan 31 17:23 maildrop-debuginfo-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 105756 Jan 31 17:23 maildrop-devel-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 66416 Jan 31 17:23 maildrop-man-2.6.0-1.18.x86_64.rpm
-rw-r--r-- 1 root root 2553200 Jan 31 17:30 postfix-2.9.4-3.fc18.x86_64.rpm
-rw-r--r-- 1 root root 6203284 Jan 31 17:30 postfix-debuginfo-2.9.4-3.fc18.x86_64.rpm
-rw-r--r-- 1 root root 66108 Jan 31 17:30 postfix-perl-scripts-2.9.4-3.fc18.x86_64.rpm
[root@server1 x86_64]#Escolha o pacote Postfix e instale-o assim:
rpm -ivh postfix-2.9.4-3.fc18.x86_64.rpmReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.