Neste artigo veremos como unir a praticidade da solução qmail+vpopmail com a segurança e confiabilidade do postfix.
1 – Softwares
Qmail - http://www.mail.org/ Postfix - http://www.postfix.org/ Clamav - http://www.clamav.net/ Amavisd-new - http://www.ijs.si/software/amavisd/ SpamAssassin - http://spamassassin.apache.org/ Vpopmail - http://www.inter7.com/ autorespond - http://www.inter7.com/ Qmailadmin - http://www.inter7.com/ Vqadmin - http://www.inter7.com/ cyrus-sasl - programa fonte do CD do slackware courier-authlib - http://www.courier-mta.org courier-imap - http://www.courier-mta.org
2 – Instalação
2.1 - Qmail A instalação do qmail descrita aqui neste artigo baseia-se na documentação do site http://www.lifewithqmail.org/. Não se assuste com as semelhanças, pois boa parte do meu conhecimento em qmail veio desta documentação. 2.1.1 - Fazendo o download O primeiro passo é fazer download do qmail e dos seus módulos, para isso utilize os links abaixo: * qmail, http://www.qmail.org/netqmail-1.06.tar.gz * ucspi-tcp, http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz * daemontools, http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
2.1.2 - Descompactando Como são programas fontes, vamos ter que descompactá-los, para depois compilarmos e instalarmos os pacotes. Para uma melhor organização, todos os programas que formos instalar baseado em código fonte, iremos descompactá-los no diretório /usr/local/src. A unica excessão será o pacote daemontools, que deve ser descompactado em um diretório específico. Siga os comandos abaixo. $ su - # cd /usr/local/src # tar zxf netqmail-1.06.tar.gz # tar zxf ucspi-tcp-0.88.tar.gz # mkdir /package # chmod 1755 /package # cd /package # tar zxf daemontools-0.76.tar.gz
2.1.3 - Criando os diretórios O programa de instalação do qmail cria todos os subdiretórios, mas precisamos criar para ele o diretório principal onde o qmail será instalado. # mkdir /var/qmail As configurações do qmail são gravadas por padrão em /var/qmail/control. Para mantermos todos os arquivos de configuração no /etc mantendo assim um padrão de trabalho vamos criar um diretório /etc/qmail e fazer no diretório /var/qmail apontando para ele. # mkdir /etc/qmail # ln -s /etc/qmail /var/qmail/control
2.1.4 - Criando usuários e grupos Devemos criar os usuários que vão ser utilizados pelo qmail para gerenciar sua execução, gravação de logs, etc. Os uids e gids utilizados podem ser alterados de acordo com as suas necessidades. # groupadd -g 400 nofiles # useradd -u 400 -g nofiles -d /var/qmail/alias alias # useradd -u 401 -g nofiles -d /var/qmail qmaild # useradd -u 402 -g nofiles -d /var/qmail qmaill # useradd -u 403 -g nofiles -d /var/qmail qmailp # groupadd -g 401 qmail # useradd -u 404 -g qmail -d /var/qmail qmailq # useradd -u 405 -g qmail -d /var/qmail qmailr # useradd -u 406 -g qmail -d /var/qmail qmails
2.1.5 - Compilando Agora nós podemos compilar o qmail. Acesse o diretório /usr/local/src/netqmail-1.06 e execute os procedimentos abaixo: # make setup check Agora o qmail já está compilado e instalado, precisamos configurar o nome do servidor, existem duas maneiras de realizar este procedimento. * Se o seu dns estiver devidamente configurado execute apenas: # ./config * Se por alguma razão o config não conseguir encontrar o seu nome de servidor no dns, execute então: # ./config-fast nome.dominio.com.br Pronto, agora o qmail já está instalado em seu sistema.
2.1.6 - Instalando o ucspi-tcp Acesse o diretório onde o ucspi-tcp foi descompactado: # cd /usr/local/src/ucspi-tcp-0.88 Então execute: # patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch # make # make setup check Pronto, o ucspi-tcp já está instaldo em seu sistema
2.1.7 - Instalando o daemontools Acesse o diretório onde o daemontools foi descompactado: # cd /package/admin/daemontools-0.76/src Então execute: # cd src # patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch # cd .. # package/install Pronto, o daemontools já está instalado em seu sistema. Se você olhar em seu inittab, foi adicionada uma linha para o comando svscan. Geralmente após a instalação este comando já é carregado na memória, para verificar execute: # ps aux | grep svscan Caso o programa não esteja na memória, reinicie seu computador. 2.1.8 - Iniciando o qmail O diretório /var/qmail/boot contém um exemplo de scripts de boot do qmail para diferentes configurações. Vamos usar o estilo Maildir. Crie um arquivo /var/qmail/control/defaultdelivery e adicione em seu conteúdo: ./Maildir/ Crie agora o arquivo /var/qmail/rc e adicione em seu conteúdo: #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`" Então execute: # chmod 755 /var/qmail/rc # mkdir /var/log/qmail
2.1.9 - Arquivos de inicialização 2.1.9.1 - O script qmailctl Este script é usado para iniciar automaticamente o qmail durante o boot e também para auxiliar o administrador em algumas tarefas do dia a dia, como consultar a fila de emails entre outras. Crie o arquivo /var/qmail/bin/qmailctl com o seguinte conteúdo: #!/bin/sh # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` case "$1" in start) echo "Starting qmail" if svok /service/qmail-send ; then svc -u /service/qmail-send /service/qmail-send/log else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/log qmail-qstat ;; doqueue|alrm|flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok svc -a /service/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /service/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /service/qmail-send echo "Pausing qmail-smtpd" svc -p /service/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- schedules queued messages for immediate delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue flush -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 Você pode fazer download deste arquivo em: http://lifewithqmail.org/qmailctl-script-dt70. Torne este aquivo executável e crie um link simbólico para ele em um diretório do seu path: # chmod 755 /var/qmail/bin/qmailctl # ln -s /var/qmail/bin/qmailctl /usr/bin
2.1.9.2 - O script supervise Agora crie os diretórios supervise para os serviços do qmail: # mkdir -p /var/qmail/supervise/qmail-send/log # mkdir -p /var/qmail/supervise/qmail-smtpd/log Crie o arquivo /var/qmail/supervise/qmail-send/run com o conteúdo: #!/bin/sh exec /var/qmail/rc Crie o arquivo /var/qmail/supervise/qmail-send/log/run com o conteúdo: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail Crie o arquivo /var/qmail/supervise/qmail-smtpd/run com o conteúdo: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` LOCAL=`head -1 /var/qmail/control/me` if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1 fi if [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1 fi exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 127.0.0.1 10026 /var/qmail/bin/qmail-smtpd 2>&1 Crie o arquivo concurrencyincoming # echo 20 > /var/qmail/control/concurrencyincoming # chmod 644 /var/qmail/control/concurrencyincoming Crie o arquivo /var/qmail/supervise/qmail-smtpd/log/run com o conteúdo: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd Torne os arquivos executáveis: # chmod 755 /var/qmail/supervise/qmail-send/run # chmod 755 /var/qmail/supervise/qmail-send/log/run # chmod 755 /var/qmail/supervise/qmail-smtpd/run # chmod 755 /var/qmail/supervise/qmail-smtpd/log/run Então, configure os diretórios de log: # mkdir -p /var/log/qmail/smtpd # chown qmaill /var/log/qmail /var/log/qmail/smtpd Crie o arquivo /etc/tcp.smtp e compile-o: # echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp # qmailctl cdb
2.1.10 - Aliases padrões do qmail Os aliases padrões do qmail são criados no diretório /var/qmail/alias. Estes arquivos devem começar com .qmail- seguido do nome do alias que desejamos criar, por exemplo: qmail-rodrigo. Vamos criar os aliases padrões de um sistema de email e direcionálos para contato@rodrigotomazini.com.br. # echo contato@rodrigotomazini.com.br > /var/qmail/alias/.qmail-root # echo contato@rodrigotomazini.com.br > /var/qmail/alias/.qmail-postmaster # ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon # ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse # chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
2.1.11 - Finalizando a parte do qmail Neste ponto, o qmail já está instalado em seu sistema e deve estar rodando. Segue uma lista de comandos úteis: # qmailctl stop - Para o qmail # qmailctl start - Inicia o qmail # qmailctl stat - Verifica se os processos estão rodando # qmailctl queue - Verifica a fila de correio. Você pode também testar a sua instalação executando o script inst_check, que pode ser baixado pelo link http://lifewithqmail.org/inst_check. # sh inst_check Se sua instalação estiver correta, você receberá a seguinte mensagem: Congratulations, your LWQ installation looks good! Caso contrário ele te mostrará o erro com uma sugestão para corrigí-lo: # sh inst_check ! /var/log/qmail has wrong owner, should be qmaill ...try: chown qmaill /var/log/qmail
2.1.12 - Corrigindo a injeção de emails no qmail Quando utilizado com postfix, o qmail apresente um problema no seu módulo qmail-injection. Este deve ser substituido pelo mes822 que deve ser baixado em http://pobox.com/~djb/mess822.html. Após baixar, execute os comandos para instalação: # cd /usr/local/src # tar zxf mess822-0.58.tar.gz # cd mess822-0.58 # make # make setup check Agora vamos alterar o qmail-inject padrão do qmail # cd /var/qmail/bin # mv qmail-inject qmail-inject.old # ln -s /usr/local/bin/new-inject qmail-inject Pronto, agora você está livre dos bugs do qmail-inject
2.2 - Postfix Para muitos, pode parecer redundante instalar dois servidores de email em uma mesma máquina, mas para mim foi a solução de muitos problemas. Já tive várias experiências negativas com qmail relacionado a bloqueios de spam, mas eu adorava a sua funcionalidade de virtualização oferecida pelo vpopmail. Como já tinha ótimas experiências de trabalho com o postfix, resolvi criar uma solução que unisse as duas aplicações. Descrevo como instalar o postifix no artigo Instalando o Postfix no Slackware 12.0, por este motivo não irei descreve-lo aqui novamente.
2.3 - Clamav, SpamAssassin, Amavis Considero o clamav o melhor antivirus opensource atualmente, se não for o melhor antivirus de todos incluindo os pagos. Sua base é atualizada com regularidade e correções para bugs no software também são sempre realizadas. Descrevo a instalação do clamav no artigo Instalando o Clamav+SpamAssassin+Amavis no Slackware 12.0.
2.4 - Vpopmail e módulos
O vpopmail e seus módulos são um conjunto de software que facilitam o gerenciamento das contas de email dos domínios hospedados no servidor. Utilizaremos aqui os seguintes programas: * autorespond-2.0.4 * qmailadmin-1.2.9 * vpopmail-5.4.17 * vqadmin-2.3.7 Todos estes programas devem ser baixados no site http://www.inter7.com/ 2.4.1 - Instalando o autorespond Execute: # cd /usr/local/src/ # tar zxf autorespond-2.0.4.tar.gz # cd autorespond-2.0.4 # make # make install
2.4.2 - Instalando o vopomail Execute: # groupadd -g 89 vchkpw # useradd -g vchkpw -u 89 -d /var/vpopmail -s /bin/bash vpopmail # cd /usr/local/src # tar zxf vpopmail-5.4.17.tar.gz # cd vpopmail-5.4.17 # ./configure --prefix=/var/vpopmail --enable-auth-module=mysql --disable-passwd --enable-valias --enable-sql-logging --enable-auth-logging --enable-logging=v --enable-mysql-limits # make # make install-strip Crie um banco de dados e usuário no mysql chamado vpopmail, e dê permissão neste banco para este usuário: # mysql -u root -p mysql > create database vpopmail; > grant all on vopopmail.* to vpopmail@localhost identified by 'vpopmail'; > flush privileges; Configure o acesso ao banco de dados no arquivo /var/vpopmail/etc/vpopmail.mysql, incluindo: localhost|0|vpopmail|vpopmail|vpopmail Inclua o domínio padrão do seu servidor no arquivo /var/vpopmail/etc/defaultdomain, por exemplo: rcbrasil.com.br Configure os limits padrões dos domínios no arquivo /var/vpopmail/etc/vlimits.default.
2.4.3 - Instalando o vqadmin O vqadmin é um software que permite a criação de domínios e manutenção nas contas de email do servidor para o administrador do servidor, este software é diferente do qmailadmin que pode ser passado para que o próprio usuário final gerencie sua conta. Para instalar o vqadmin, execute: # cd /usr/local/src # tar zxf vqadmin-2.3.7.tar.gz # cd vqadmin-2.3.7 # cd html # cp br en (truque para tradução para o português brasileiro) # cd .. # ./configure --enable-cgibindir=/var/www/cgi-bin # make # make install
Precisamos agora configurar o acesso ao vqadmin, abra o arquivo /var/www/cgi-bin/vqadmin/.htaccess e deixe ele como descrito abaixo: AuthType Basic AuthName vQadmin AuthBasicProvider file AuthUserFile /etc/httpd/vqadmin.passwd require valid-user Agora vamos criar o arquivo de senhas, execute: cd /etc/httpd htpasswd -c vqadmin.passwd admin
Informe a senha para o usuário admin e o arquivo estará criado. Pronto, o vqadmin está instalado, para acessa-lo utilize o navegador acessando o endereço: http://www.seudominio.com.br/cgi-bin/vqadmin/
2.4.4 - Instalando o qmailadmin Este é o grande truque desta solução. O qmailadmin permite que você passe a administração do domínio para a empresa que contratar os seus serviços de hospedagens, e o próprio usuário pode administrar a sua conta de email nesta interface, trocando a senha, definindo mensagens de férias, entre outras. Para instalar o qmailadmin execute: # cd /usr/local/src # tar zxf qmailadmin-1.2.9 # cd qmailadmin-1.2.9 # ./configure --enable-htmldir=/var/www/htdocs --enable-cgibindir=/var/www/cgi-bin --enable-ezmlmdir=n --enable-modify-quota --disable-ezmlm-mysql # make # make install-strip Pronto, o qmailadmin está instalado, para acessá-lo entre no endereço: http://www.seudominio.com.br/cgi-bin/qmailadmin
2.5 - Instalando o courier O courier-mta fornecerá para nós nesta solução dois programas: courier-authlib e courier-imap. O courier-authlib é a base de autenticação para os usuários que estiverem acessando seus emails atráves do imap ou pop3 que será provido pelo courier-imap. Para instalar o courier-authlib execute: # cd /usr/local/src # tar zxf courier-authlib-0.59.1 # cd courier-authlib-0.59.1 # ./configure --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --with-authvchkpw --without-authpgsql --with-authmysql --without-authcustom --without-authpipe # make # make install # make install-migrate # make install-configure execute o comando /usr/local/libexec/courier-authlib/authdaemond > /dev/null 2>&1 > /dev/null & para carregá-lo na memória, e depois inclua esta linha no arquivo rc.local do seu servidor. Como mencionado acima, o courier-imap irá prover acesso pop3 e imap aos emails. Para instalar o courier-imap execute: # cd /usr/local/src # tar zxf courier-imap-4.1.2 # cd courier-imap-4.1.2 # ./configure --prefix=/usr/lib/courier-imap --disable-root-check --disable-change-pass --without-authpam --without-authldap --without-authpwd --without-authmysql --without-authpgsql --without-authshadow --without-authuserdb --without-authcram --without-authdaemon --with-trashquota --with-authvchkpw # make # make install # make install-configure Os arquivos de configuração do courier-imap foram instalados em /usr/lib/courier-imap/etc. Entre neste diretório # cd /usr/lib/courier-imap/etc Execute os comandos para definir os novos arquivos de configuração baseados nos arquivos padrões: # cp imapd.dist imapd # cp imapd-ssl.dist imapd-ssl # cp pop3d.dist pop3d # cp pop3d-ssl.dist pop3d-ssl Abra o arquivo imapd e altere: IMAPDSTART=YES Abra o arquivo pop3d e altere: POP3DSTART=YES Incie agora os serviços de pop3 e imap executando: # /usr/lib/courier-imap/libexec/pop3d.rc start # /usr/lib/courier-imap/libexec/imapd.rc start Adicione estas linhas no rc.local do seu servidor.
2.6 - Recompilando o cyrus-sasl O cyrus-sasl já vem no slackware 12.0, mas para que o conjunto SMTP+AUTH funcione com a base de autenticação no vpopmail precisamos recompilá-lo para adicionar este suporte. Se você não precisa deste recurso pode parar por aqui, mas nos dias de hoje a mobilidade nos obriga a suportar esta funcionalidade em nossos servidores. Utilizarmos o mesmo software que é distribuido no CD do slackware, encontre em seus CDs, ou em algum mirror de slackware o pacote fonte deste programa. Execute os seguites comandos para instalar: # removepkg cyrus-sasl # cd /usr/local/src # tar zxf cyrus-sasl-2.1.22.tar.gz # cd cyrus-sasl-2.1.22/ # ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-static --enable-login --disable-anon --without-ldap --with-saslauthd --with-gdbm --with-dblib=gdbm --with-authdaemond # make # make install Para configurar o suporte no postfix entre no diretório /usr/lib/sasl2/ e crie um arquivo com nome smtpd.conf e o seguinte conteúdo: pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/usr/local/var/spool/authdaemon/socket 3 - Finalizando
3.1 - Conectando o postfix ao qmail Adicione as linhas a seguir no arquivo master.cf do postfix: vdelivermail unix - n n - - pipe flags=R user=qmailq argv=/var/qmail/bin/sendmail ${recipient} 3.2 - Reiniciando Reinicie o seu servidor para que ter certeza de que todos os programas estão sendo iniciados durante o processo de boot. Finalizamos, sua solução de emails virtuais está completa.