Você está na página 1de 21

qmail - Instalao

nvel intermedirio Fbio Bombonato bombonato@geleira.org

Resumo
Neste arquivo, ser tratado da configurao de um servidor de email's utilizado em plataformas compatveis com o UNIX como, por exemplo: o Linux, FreeBDD, etc. Utilizaremos o servidor qmail, um software que leva a segurana e flexibilidade em primeiro lugar para o tratamento de mensagens. Este documento possu um carter didtico, tentarei passar de forma clara e detalhada a instalao do servidor de e-mail's qmail bem como, alguns conceitos bsicos para o endentimento de um servidor de menssagens.

Palavras-chave
qmail, MTA, ucspi-tcp, checkpassword, Maildir, Mailbox, mbox, sendmail, pop3, smtp, email, domnio virtual, redirecionamento

1. Introduo
O qmail um servidor de E-Mail's, ou seja, um MTA - Mail Transfer Agent, utilizado nas plataformas do tipo UNIX - incluindo o Linux - sendo que o melhor de tudo ele ser um software gratuito. Sua primeira verso publica foi disponibilizada em 1996 (verso 0.7) contudo, a verso 1.0 s foi liberada em 1997 e, aps, Dan Bernstein (DJB) - seu autor ofereceu 500 dlares para os que conseguissem encontrar uma falha no programa. Para nossa surpresa, nenhuma falha de segurana foi encontrada no programa. Lembrando que as falhas eram no qmail e, isso, no inclua os programas externos a ele, como: problemas com o NFS, problemas de segurana no TCP/IP, DNS, bugs em scripts que eram executados em arquivos .forward e bugs gerais em sistemas operacionais. Em 1998 foi lanada a verso 1.03 e, por incrvel que parea, a verso disponibilizada at hoje. Um grupo de usurios do qmail chegaram a oferecer 1.000 dlares a quem conseguisse descobrir uma falha no programa seguindo as mesmas regras anteriores no perodo de um ano. Bem, ningum nunca solicitou o prmio e, o dinheiro foi doado Free Software Foundation. Esta pequena histria foi contada para ilustrar o quo seguro o qmail. O sendmail um programa que executado como root e, como ele um nico programa (monoltico) que faz todas as tarefas, quem descobrir uma falha no sendmail ter os privilgios de root. No qmail, as tarefas so modularizadas, ou seja, existe um conjunto de programas que gerenciam as mensagens, somente, dois programas utilizam a permisso de superusurio - qmail-start e qmail-lspawn - logo, se o invasor conseguir desvendar alguma falha nestes programas, no conseguir fazer muita coisa no sistema. Para o sendmail, os programas e arquivos so tratados como endereos, logo, uma pessoa qualquer pode, arbitrariamente, executar um programa ou escrever em um arquivo, no qmail, os programas e arquivos no so tratados como endereos. Alm de outros detalhes, tambm utiliza uma biblioteca prpria, a qual, facilita a no ocorrncia de buffer overruns, vazamento de memria, estouro no escopo de variveis, normalmente, causados pela utilizao de bibliotecas que costumam a encorajar o surgimento destes bugs em seu desenvolvimento, como a stdio, etc.
http://www.geleira.org 1

Notas: - O nome correto do software "qmail" e, no "Qmail". - A pronuncia correta do software "kyoo mail".

2. Requisitos
Para o nosso estudo, precisaremos dos seguintes programas, que podem ser obtidos nos endereos abaixo: - qmail: http://www.qmail.org - ucspi-tcp: http://cr.yp.to/ucspi-tcp.html - checkpassword: http://cr.yp.to/checkpwd.html

3. Instalao
Devemos criar um diretrio qualquer, a qual, utilizaremos para a compilao e instalao do qmail e programas auxiliares, para tal:

3.1 - Arquivos
# mkdir /usr/src/svremail # cd /usr/src/svremail # tar zxvf /caminho_do_arquivo/ucspi-tcp-x.xx.tar.gz # tar zxvf /caminho_do_arquivo/checkpassword-x.xx.tar.gz # tar zxvf /caminho_do_arquivo/qmail-x.xx.tar.gz

3.2 - Preparao
Antes de compilar e instalar o qmail, precisamos seguir alguns passos necessrios para a preparao do sistema. Logo, siga-os abaixo: 1. Criar o diretrio do qmail, onde todos os programas e configuraes do mesmo sero armazenados: # mkdir /var/qmail obs.: possvel escolher outro diretrio, para isso, edite o arquivo chamado "conf-qmail" que encontra-se no diretrio dos arquivos de instalao do qmail e, altere para o diretrio desejado. Contudo, no aconselho a alterao deste diretrio, pois interessante manter o padro de configurao, entretanto, deixo isso a sua escolha. 2. Criao dos usurios e grupos utilizados pelo qmail # groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias # useradd -g nofiles -d /var/qmail qmaild # useradd -g nofiles -d /var/qmail qmaill # useradd -g nofiles -d /var/qmail qmailp # groupadd qmail # useradd -g qmail -d /var/qmail qmailq
http://www.geleira.org 2

# useradd -g qmail -d /var/qmail qmailr # useradd -g qmail -d /var/qmail qmails obs.: Para a criao de usurios e grupos para outros sistemas como FreeBSD, BSDI e AIX, favor ler o arquivo "INSTALL.ids"

3.3 - Compilao
No diretrio dos arquivos de instalao do qmail execute: # cd /usr/src/svremail/qmail-x.xx/ # make setup check Com a execuo deste arquivos, ser compilado o programa e criado dos arquivos/diretrios para execuo do qmail, dentro de /var/qmail. Esta parte pode demorar um pouco, v tomar um cafezinho, d tempo! :)

3.4 - Instalando
Nesta fase, ser feita a instalao de algumas configuraes. Execute: # ./config Este comando responsvel por descobrir o nome do host (no caso, o nome do nosso servidor de e-mails) no servidor DNS. Alm de procurar pelo endereo IP local que decide quais hosts vo aceitar mensagens. Entretanto, caso queira, voc mesmo pode especificar o nome de sua mquina, execute o comando: # ./config-fast host.dominio.com.br ex.: ./config-fast email.servidorqmail.com.br Alterando "host.dominio.com.br" pelo nome d mquina escolhido para o servidor de e-mail's. Lembrando que, esse nome deve ser vlido, ou seja, um FQDN do sistema. Isso coloca o nome "host.dominio.com.br" no arquivo "/var/qmail/control/me" O resultado na execuo destes comandos algo como: Your fully qualified host name is email.servidorqmail.com.br. Putting email.servidorqmail.com.br into control/me... Putting servidorqmail.com.br into control/defaultdomain... Putting servidorqmail.com.br into control/plusdomain... Putting email.servidorqmail.com.br into control/locals... Putting email.servidorqmail.com.br into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to email.servidorqmail.com.br. Make sure to change rcpthosts if you add hosts to locals or virtualdomains! Feito isto, temos os seguintes arquivos com seus respectivos contedos:

http://www.geleira.org

/var/qmail/control/me contedo: email.servidorqmail.com.br descrio: o nome de seu host, ou seja, sua mquina. /var/qmail/control/defaultdomain contedo: servidorqmail.com.br descrio: o domnio de seu host. /var/qmail/control/plusdomain contedo: org descrio: extenso do domnio. /var/qmail/control/locals contedo: email.servidorqmail.com.br descrio: domnios em que as mensagens so enviadas localmente. /var/qmail/control/rcpthosts contedo: email.servidorqmail.com.br descrio: domnios que sero permitidos (relay) o recebimento de e-mail's.

3.5 - Bsico para aliases


Alguns aliases so necessrios para o funcionamento do qmail. Para tal, o mnimo que deve ser feito : # cd ~alias # touch .qmail-postmaster # touch .qmail-mailer-daemon # touch .qmail-root # chmod 644 ~alias/.qmail* - Postmaster: Mensagem recebida caso o usurio no exista, ou seja, no um endereo de e-mail vlido. As mensagens, podem ser recebidas em um diretrio de mensagens, como o ~alias/Maildir (visto mais a frente) - MAILER-DAEMON: No obrigatrio, mas os usurios, algumas vezes, respondem com mensagens que retornam, sendo recebidas pelo mailer daemon. - root: No qmail, o usurio root NUNCA recebe e-mail. Seu sistema pode gerar mensagens de e-mail para o root toda noite e, caso voc no tenha um alias para o usurio root, estas mensagens retornaro (alm de serem duas vezes retornadas, pois o Postmaster ir receber estas mensagens). Normalmente, utiliza-se um usurio de administrador para que receba as mensagens direcionadas ao root. Mas, no coloque o root para receber estas mensagens, utilize um outro usurio, pois assim, estar comprometendo o sistema.

3.6 - Caixas de Mensagem


O qmail, pode trabalhar com trs tipos de formas de armazenamento das mensagens (disse armazenamento, no redirecionamento, lembre-se!): - mbox (Tradicional): padro utilizado pelo Sendmail, onde o nome do usurio corresponde a caixa de mensagens, um nico arquivo, a qual possu em seu contedo
http://www.geleira.org 4

todas as mensagens direcionadas para um usurio. Normalmente, localizado no diretrio "/var/spool/mail". Ver INSTALL.vsm - mbox (Mailbox): mais comum, funciona com a maioria dos MTA's. A localizao das mensagens difere um pouco do mbox tradicional, as mensagens ficam armazenadas no diretrio HOME dos usurios. Ver INSTALL.mbox - maildir: pouco suporte pelos MTA's existentes, contudo, funciona com o Outlook e o Netscape Menssager, kmail, etc. Alm disso, muito flexvel, possu uma tima segurana e organizao das mensagens, alm de funcionar perfeitamente sobre o NFS. Maior compatibilidade com o qmail e possu timas ferramentas para seu suporte. Ver INSTALL.maildir

3.6.1 - Arquivos de inicializao


Para utilizar toda a flexibilidade fornecida pelo qmail, iremos adotar o formato "Maildir". Sendo assim, com o formato da caixa de mensagens escolhido, deve-se criar um arquivo de configurao para que o Maildir seja utilizado. Para isso, v ao diretrio: # cd /var/qmail/boot Este diretrio contm os arquivos de exemplo que podem ser utilizados com o qmail, com o tipo de caixa de menssagem escolhida a ser utilizada. Como foi escolhido o tipo "Maildir" podemos utilizar o arquivo "home" e efetuar uma modificao posteriormente, logo, faa: # cp -p /var/qmail/boot/home /var/qmail/rc Edite o arquivo rc, e modifique-o da seguinte forma: DE: #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Mailbox splogger qmail PARA: #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir splogger qmail Ou seja, foi modificado do formato Mailbox, para Maildir.

3.7 - Retirando o Sendmail


Como a maioria dos sistemas operacionais Linux, quando instalados, j possuem por default o sendmail como o MTU padro do sistema, acho interessante ensinar como
http://www.geleira.org 5

desabilitar o sendmail e criar uma compatibilidade com o mesmo. Para tal, prossiga da seguinte forma: 1. Desabilitar o script de inicializao: Em seus sistema, normalmente, existe um arquivo de inicializao do sendmail. Para alguns sistemas Linux, edite o arquivo "sendmail", como segue: # vi /etc/rc.d/init.d/sendmail Procure pela linha, cujo formato seja parecido com: "sendmail -bd -q15m" e, coloque um comentrio na mesma. Existem outras formas de desabilitar o sendmail na inicilizao, como, por exemplo, o programa "ntsysv", encontrado na maioria dos sistemas procedentes do Redhat. 2. Mate os processos do sendmail: Caso o Sendmail esteja sendo executado em sua mquina, necessrio matar seu daemon e seus filhos, caso exista deve-se proceder: # kill -9 nmero_do_processos_do_sendmail ou # killall -TERM sendmail Ou, caso seja um sistema do tipo Redhat, faa: # /etc/rc.d/init.d/sendmail stop 3. Limpando o mqueue Ao parar o sendmail, ainda pode existir algumas mensagens que no foram enviadas na fila de mensagens (mqueue), logo, podemos forar um flush nas messagens que ainda restaram: # sendmail -q Repita isso, at que a fila esteja vazia. 4. Protegendo o sistema do Sendmail Para que no seja possvel que nenhum usurio ainda utilize o sendmail, iremos retirar o bit setuid do arquivo binrio do sendmail, prevenindo que os usurios locais no consigam privilgios extras atravs do sendmail. # chmod 0 /usr/lib/sendmail # chmod 0 /usr/sbin/sendmail # chmod 0 /usr/lib/sendmail.mx
http://www.geleira.org 6

5. Fazendo o backup do sendmail Uma atitude de qualquer bom administrador fazer o backup dos arquivos que julgarem importantes. Assim, iremos proceder com o backup dos arquivos para execuo do sendmail. # mv /usr/lib/sendmail /usr/lib/sendmail.bak # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak 6. Compatibilidade com o Sendmail Muitos programas do sistema esto acostumas a utilizar o sendmail para enviarem suas mensagens. Pensando nisso, o qmail possibilita a compatibilidade com estes programas. Sendo assim, basta criar alguns links simblicos: # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 7. Caso no tenha o Sendmail (Opcional) Este passo deve ser feito para os que no possuam o Sendmail instalado em seus sistema. Se voc j procedeu com os passos acima, no deve efetuar este procedimento. # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

3.8 - Pequenos teste


Nesta etapa j possvel efetuar alguns testes para comprovar o funcionamento do qmail. Primeiramente, faa-o iniciar: sh -cf '/var/qmail/rc &' Isso ir colocar aquele script de inicializao criado anteriormente para ser executado em segundo plano. Podemos verificar se est rodando, simplesmente, verificando os processos: # ps -aux Procure por algo como: qmails 1807 0.0 0.3 1376 420 pts/1 S 18:51 0:00 qmail-send qmaill 1808 0.0 0.3 1344 472 pts/1 S 18:51 0:00 splogger qmail root 1809 0.0 0.2 1332 360 pts/1 S 18:51 0:00 qmail-lspawn ./Maildir qmailr 1810 0.0 0.2 1332 356 pts/1 S 18:51 0:00 qmail-rspawn qmailq 1811 0.0 0.2 1324 368 pts/1 S 18:51 0:00 qmail-clean Verifique se o qmail-send est sendo executado como qmails, o qmail-lspawn como root, o qmail-rspawn como qmailr e, o qmail-clean como qmailq. Tambm possvel verificar se o splogger est sendo executado como qmaill. Alm de verificar os processos, quando o qmail iniciados, o qmail-send imprime nos log's as mensagens "cannot start" ou "status". Verifique executando:
http://www.geleira.org 7

# grep "status" /var/log/maillog May 5 18:58:29 email qmail: 989103509.011508 status: local 0/10 remote 0/20 o mesmo processo pode ser feito para verificar se no estiver rodando: # grep "cannot start" /var/log/maillog Antes dos testes, para um usurio qualquer do sistema, precisamos criar seu Maildir (que ser explicado detalhadamente no tem 4), para isso, em nosso exemplo, iremos criar o Maildir para o usurio "fabio", logo, basta executar: # su fabio # /var/qmail/bin/maildirmake Maildir # echo "./Maildir/" > .qmail Feito isso, partimos para os testes de envio de mensagens: 1. Enviando uma menssagem para voc mesmo: # echo to: usurio | /var/qmail/bin/qmail-inject obs.: substitua "usurio" por um usurio vlido cadastrado no sistema. Ex.: # echo to: geleira | /var/qmail/bin/qmail-inject Tendo como resultado, algo como: May 5 20:10:28 email qmail: 989107828.724226 new msg 83958 May 5 20:10:28 email qmail: 989107828.724402 info msg 83958: bytes 217 from <root@email.servidorqmail.com.br> qp 1934 uid 0 May 5 20:10:28 email qmail: 989107828.728849 starting delivery 8: msg 83958 to local fabio@email.servidorqmail.com.br May 5 20:10:28 email qmail: 989107828.728975 status: local 1/10 remote 0/20 May 5 20:10:28 email qmail: 989107828.804831 delivery 8: success: did_1+0+0/ May 5 20:10:28 email qmail: 989107828.804981 status: local 0/10 remote 0/20 May 5 20:10:28 email qmail: 989107828.805048 end msg 83958 obs.: 83958 um nmero de inode, 217 o nmero do processo (PID). Em seu teste, certamente, os nmeros sero diferentes. 2. Enviando uma menssagem para um usurio inexistente: # echo to: cerebro | /var/qmail/bin/qmail-inject Tendo como resultado, algo como: May 6 09:29:05 email qmail: 989155745.486967 new msg 84075 May 6 09:29:05 email qmail: 989155745.487131 info msg 84075: bytes 219 from <root@email.servidorqmail.com.br> qp 1643 uid 0 May 6 09:29:05 email qmail: 989155745.490428 starting delivery 1: msg 84075 to local cerebro@email.servidorqmail.com.br May 6 09:29:05 email qmail: 989155745.490532 status: local 1/10 remote 0/20 May 6 09:29:05 email qmail: 989155745.571794 delivery 1: failure:
http://www.geleira.org 8

Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/ May 6 09:29:05 email qmail: 989155745.575570 status: local 0/10 remote 0/20 May 6 09:29:05 email qmail: 989155745.581507 bounce msg 84075 qp 1646 May 6 09:29:05 email qmail: 989155745.581644 end msg 84075 May 6 09:29:05 email qmail: 989155745.623875 new msg 84593 May 6 09:29:05 email qmail: 989155745.624000 info msg 84593: bytes 779 from <> qp 1646 uid 406 May 6 09:29:05 email qmail: 989155745.626564 starting delivery 2: msg 84593 to local root@email.servidorqmail.com.br May 6 09:29:05 email qmail: 989155745.626661 status: local 1/10 remote 0/20 May 6 09:29:05 email qmail: 989155745.683693 delivery 2: success: did_1+0+0/ May 6 09:29:05 email qmail: 989155745.683834 status: local 0/10 remote 0/20 May 6 09:29:05 email qmail: 989155745.683901 end msg 84593 3. Usando o modo Sendmail Para verificar a compatibilidade entre o sendmail e o qmail, podemos enviar uma menssagem como se estivesse utilizando o sendmail. # echo "Contedo da menssagem." | mail -s "Qualquer Assunto" fabio Como resultado: May 6 09:44:38 email qmail: 989156678.953943 new msg 84077 May 6 09:44:38 email qmail: 989156678.954109 info msg 84077: bytes 267 from <root@email.servidorqmail.com.br> qp 1780 uid 0 May 6 09:44:38 email qmail: 989156678.957417 starting delivery 6: msg 84077 to local fabio@email.servidorqmail.com.br May 6 09:44:38 email qmail: 989156678.957520 status: local 1/10 remote 0/20 May 6 09:44:38 email qmail: 989156678.966617 delivery 6: success: did_1+0+0/ May 6 09:44:38 email qmail: 989156678.966755 status: local 0/10 remote 0/20 May 6 09:44:38 email qmail: 989156678.966823 end msg 84077 Lembrando que, neste caso, o nome "fabio" um usurio vlido no sistema.

3.9 - SMTP e POP3 do qmail


Para que nosso sistema utilize o smtp e pop3 do prprio qmail - qmail-smtpd e qmail-pop3d - respectivamente, precisamos habilit-los para serem inicializados. Temos duas possibilidades, podemos inicializar pelo inetd ou, atravs de comandos para inicializao a serem criados.

3.9.1 - SMTP e POP3 pelo inetd


Basta editar seu arquivos chamado "inetd.conf" e inserir as seguintes linhas: # vi /etc/inetd.conf smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup email.servidorqmail.com.br /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir Obs_1.: S existem duas linhas mostradas anteriormente, uma para o "smtp" e, outra para o "pop3".
http://www.geleira.org 9

Obs_2.: Para utilizar o pop3 necessrio instalar o "checkpassword", que ser mostrado no prximo tpico. Obs_3.: A utilizao do pop3 e smtp do qmail via inetd deve ser feita em servidores com baixo fluxo de mensagens, para uma maior carga, utilize o modo tcp-server apresentado no tpico 3.9.2 .

3.9.2 - SMTP e POP3 pelo ucsip-tcp


Para servios muito ocupados/carregados, devemos utilizar o tcp-server que acompanha o pacote ucspi-tcp. O ucspi-tcp uma programa que pode substituir o inetd. Para o qmail-pop3d consiste em trs mdulos: - qmail-popup: obtm o nome do usurio e senha; - checkpasswor: autentica o nome do usurio e senha; - qmail-pop3d: o daemon do POP3 do qmail; Normalmente, o qmail-popup executado via inetd ou tcp-server, escutando a porta 110 (padro do POP3). Quando a conexo feita, solicitado o nome do usurio (username) e senha. Logo aps, chamado programa "checkpassword" e, quando verificado ativado o qmail-pop3d, isso, quando os dados foram verificados e aceitos. Ento, para que isso ocorra, precisamos instalar o tcp-server e o checkpassword, visto abaixo:

3.9.2.1 - Instalando o tcp-server


O tcp-server, como dito anteriormente, faz parte do pacote do ucspi-tcp, logo, faremos a instalao do mesmo. # cd /usr/src/srvemail/ucspi-tcp-x.xx # make setup check

3.9.2.2 - Instalando o checkpassword


# cd /usr/src/srvemail/checkpasswrd-x.xx # make # make setup check

3.9.2.3 - Inicializando os servios SMTP e POP3


Feita a instalao destes mdulos adicionais, basta iniciar os servios: SMTP: # /usr/local/bin/tcpserver -u $(id -u qmaild) -g $(id -g qmaild) 0 25 /var/qmail/bin/qmailsmtpd 2>/dev/null& POP3:

http://www.geleira.org

10

# /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup email.servidorqmail.com.br /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>/dev/null& Obs_1: Cada comando acima executado em uma nica linha. Obs_2: Altere no comando de POP3 o domnio "email.servidorqmail.com.br" para o host+domnio de sua mquina servidora de emails. 3.9.2.4 - Testando o SMTP e POP3 SMTP: # telnet 0 25 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. 220 email.servidorqmail.com.br ESMTP helo <- voc escreve 250 email.servidorqmail.com.br <- retorno mail from: <- voc escreve (remetente da menssagem) 250 ok <- retorno rcpt to: fabio@email.servidorqmail.com.br <- voc escreve (destinatrio da menssagem) 250 ok <- retorno data <- voc escreve (diz que o contedo vir logo aps) 354 go ahead <- retorno Subject: Assunto_Qualquer <- voc escreve (assunto da menssagem) Aqui o contedo da menssagem, <- voc escreve (corpo da menssagem) voc pode escrever o que quiser e, ao terminar, basta colocar uma linha com um ponto representado o fim da menssagem, como feito na linha de baixo: . <- voc escreve (caracter de escape) 250 ok 989162824 qp 305 <- retorno quit <- voc escreve (sair da porta 25, SMTP) 221 email.servidorqmail.com.br <- retorno Connection closed by foreign host. <- retorno No log (/var/spool/maillog) temos um resultado parecido com: May 6 11:36:18 email qmail: 989163378.270885 new msg 84084 May 6 11:36:18 email qmail: 989163378.271057 info msg 84084: bytes 230 from <> qp 3076 uid 401 May 6 11:36:18 email qmail: 989163378.273961 starting delivery 14: msg 84084 to fabio@email.servidorqmail.com.br May 6 11:36:18 email qmail: 989163378.274062 status: local 1/10 remote 0/20 May 6 11:36:18 email qmail: 989163378.275383 delivery 14: success: May 6 11:36:18 email qmail: 989163378.275517 status: local 0/10 remote 0/20 May 6 11:36:18 email qmail: 989163378.275583 end msg 84084 Pode verificar se a menssagem foi recebida com sucesso olhando, em nosso exemplo, no diretrio: # ls -la /home/fabio/Maildir/new/

http://www.geleira.org

11

total 12 drwx------ 2 fabio fabio 4096 Mai 6 12:20 ./ drwx------ 5 fabio fabio 4096 Mai 5 18:55 ../ -rw------- 1 fabio fabio 254 Mai 6 12:20 989166033.3148.email.servidorqmail.com.br Vale ressaltar que, par enviar uma menssagem para um domnio que no seja o seu necessrio adicion-lo no arquivo "/var/control/rcpthosts". Em nosso exemplo, o nosso domnio email.servidorqmail.com.br, caso queiramos enviar um e-mail para, por exemplo, suporte@meuprovedor.com.br, devemos, ento, adicion-lo no arquivo rcpthosts d seguinte forma: # vi /var/control/rcpthosts" e, colocar o seguinte contedo: email.servidorqmail.com.br <- j tinha meuprovedor.com.br <- foi inserido

Existem outras formas de controlar o relay, como por meio de regras para domnios ou IP's. Contudo, isso assunto para o documento de administrao do qmail. POP3: # telnet 0 110 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. +OK <3090.989164321@email.servidorqmail.com.br> user fabio +OK pass fabio1234 +OK stat +OK 7 3059 list +OK 1 345 2 345 3 345 4 345 5 345 6 345 7 989 . top 1 1 +OK Return-Path: <root@email.servidorqmail.com.br> Delivered-To: fabio@email.servidorqmail.com.br Received: (qmail 1804 invoked by uid 0); 6 May 2001 13:49:22 -0000 Date: 6 May 2001 13:49:22 -0000 Message-ID: <20010506134922.1803.qmail@email.servidorqmail.com.br> From: root@email.servidorqmail.com.br

http://www.geleira.org

12

To: fabio@email.servidorqmail.com.br Subject: Qualquer Assunto Contedo da menssagem. . dele 1 +OK list +OK 2 345 3 345 4 345 5 345 6 345 7 989 . top 2 1 +OK Return-Path: <root@email.servidorqmail.com.br> Delivered-To: fabio@email.servidorqmail.com.br Received: (qmail 1814 invoked by uid 0); 6 May 2001 13:50:09 -0000 Date: 6 May 2001 13:50:09 -0000 Message-ID: <20010506135009.1813.qmail@email.servidorqmail.com.br> From: root@email.servidorqmail.com.br To: fabio@email.servidorqmail.com.br Subject: Teste de Envio Menssagem de teste utilizando o qmail como forma de envio. . dele 2 +OK list +OK 3 345 4 345 5 345 6 345 7 989 . dele 3 +OK dele 4 +OK dele 5 +OK dele 6 +OK dele 7 +OK list +OK . quit
http://www.geleira.org 13

+OK Connection closed by foreign host.

Feito isso, alm de testar o funcionamento do recebimento dos e-mail's, aprendemos alguns comando que facilitam a administrao das mensagens para as horas que precisar e no tiver um leitor de e-mail's grficos. Alerto as pessoas que utilizam o sendmail que os comando da pop3 para o qmail diferenciam um pouco. Logo, segue alguns comandos e suas respectivas aes na tabela abaixo:

Comandos user usurio pass senha stat list top x y dele n quit

Descrio nome do usurio. senha do usurio. lista o nmero de mensagens e tamanho totais da conta pop. lista todas as mensagens e tamanho da cada uma. mostra a menssagem nmero x com y linhas aps o cabealho. apaga a menssagem de nmero n. sair da porta 110, ou seja, finalizar.

Finalmente, aps efetivado os testes no SMTP e no POP3 e, verificado o funcionamento correto dos mesmos. Podemos, ento, criar um script de inicializao, que possa inicializar o qmail (rc), o SMTP (qmail-smtpd) e o POP3 (qmail-pop3d), seguimos, ento, para o prximo item.

3.9.3 - Script de inicializao


# vi /usr/local/bin/qmail-start --- contedo qmail-start --#!/bin/sh /var/qmail/rc & /usr/local/bin/tcpserver -u $(id -u qmaild) -g $(id -g qmaild) 0 25 /var/qmail/bin/qmail-smtpd 2>/dev/null& /usr/local/bin/tcpserver -u $(id -u qmaild) -g $(id -g qmaild) 0 110 /var/qmail/bin/qmail-popup email.servidorqmail.com.br /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>/dev/null& --- fim qmail-start --Ressalvo que o arquivo "qmail-start" s possu 3 linhas. # chmod 751 /usr/local/bin/qmail-start # vi /usr/local/bin/qmail-stop -- contedo qmail-stop --#!/bin/sh kill -9 $(ps U qmails | grep "qmail-send" | grep -v "grep" | awk '{print $1}') kill -9 $(ps U qmaild | grep "tcpserver" | grep -v "grep" | awk '{print $1}') -- fim qmail-stop # chmod 751 /usr/local/bin/qmail-stop

http://www.geleira.org

14

# vi /etc/rc.d/init.d/qmail --- contedo qmail --#!/bin/sh # Biblioteca de funes # Neste caso, ir apresentar OK, caso o comando # seja executado com sucesso. . /etc/rc.d/init.d/functions case "$1" in start) action "Iniciando o qmail: " /usr/local/bin/qmail-start ;; stop) action "Parando o qmail: " /usr/local/bin/qmail-stop ;; restart) action "Parando o qmail: " /usr/local/bin/qmail-stop action "Iniciando o qmail: " /usr/local/bin/qmail-start ;; *) echo "Utilizar: $0 {start|stop|restart}" exit 1 esac exit 0 ------ fim qmail ----# chmod 755 /etc/rc.d/init.d/qmail Feito o script, pode-se colocar e chamar em um script que seja executado na inicializao do sistema. Ex.: # cp qmail-start /etc/rc.d/init.d/ # vi /etc/rc.d/rc.local Colocar no final do arquivo rc.local: /etc/rc.d/init.d/qmail start Assim, sempre que for iniciado seu sistema, o qmail ser iniciado em conjunto.

4. Como funciona o E-mail no qmail


Supondo que ao instalar o qmail, teve como autoridade selecionada o domnio email.servidorqmail.com.br, logo, para criar os e-mail's basta criar um usurio com ID prprio e criar o arquivo ".qmail", que ir direcionar os e-mail's para o diretrio Maildir, para tal, faa algo como: # adduser fabio # chmod g-w ~fabio # chmod o-w ~fabio
http://www.geleira.org 15

# cd ~fabio # /var/qmail/bin/maildirmake Maildir # chown -R fabio.users Maildir Aps, crie um arquivo chamado ".qmail", como segue: # cd ~fabio # vi .qmail e, insira o seguinte contedo: --- incio .qmail --./Maildir/ --- fim .qmail --Feito estes passos, ao enviar um e-mail para fabio@email.servidorqmail.com.br ele ser armazenado no "~fabio/Maildir" e, com isso, basta puxar os e-mail's via POP3 com o nome de seu usurio e senha do mesmo. Assim, pode-se criar qualquer usurio e seguir os procedimentos acima para receber os e-mail's do domnio email.servidorqmail.com.br, pois este o domnio do host e, onde o qmail diretamente responsvel e reconhecido. Contudo, caso queira que este servidor de e-mail seja responsvel por outros domnios, ento, deve-se alterar o MX do servidor DNS responsvel pelo domnio para a mquina onde encontra-se nosso servidor qmail e, fazer as configuraes para estes domnios virtuais, como ser explicado posteriormente.

5. Domnio Virtual
Para configurar os e-mail's deve-se entender o que um domnio virtual. Ou seja, o servidor onde est instalado o qmail possu um domnio prprio ou, mais especificamente, quando foi instalado o servidor ele pegou o domnio da mquina via DNS ou inserid pelo usurio ao configur-lo e, colocou em suas configuraes (/var/qmail/control/*). Com isso, possvel entender que o qmail responde, especificamente, por este domnio e, caso queira que ele responda por outro domnio que no de sua autoridade, entende-se que o mesmo um domnio virtual e, para tal, deve-se inclu-lo no arquivo "/var/qmail/control/virtualdomains", que ser mostrado logo abaixo. Antes de configurar os domnios no Qmail, interessante que seja apontado o MX do domnio em questo no servidor DNS responsvel pelo mesmo para o servidor onde est configurado o Qmail. Se est configurao no for feita, ao enviar um e-mail para o domnio virtual, como mostrado mais abaixo, ser visualizado a seguinte menssagem de erro no maillog: Apr 3 10:29:51 p1 qmail: 986304591.013117 delivery 56: failure: Sorry._Although_I'm_listed_as_a_best-preference_MX_or_A_for_that_host, /it_isn't_in_my_control/locals_file,_so_I_don't_treat_it_as_local._(#5.4.6)/ Caso necesside de maiores informaes a respeito da configurao de um servidor DNS, visite nosso artigo: Servidor DNS. Com as configuraes do MX feitas, seguimos as explicaes:

http://www.geleira.org

16

Ao criar um domnio virtual, deve-se adicion-lo no arquivo "/var/qmail/control/virtualdomains", no seguinte formato: dominio_virtual:alias-identificador ex.: geleira.org:alias-geleira obs.: com a colocao da palavra "alias" depois dos dois pontos(:), ir indicar que todas as configuraes para esse servidor virtual devero ser realizadas no diretrio "/var/qmail/alias". Deve-se adicionar este domnio no arquivo: /var/qmail/control/rcpthosts, com isso, ser habilitado o envio de e-mail's para este domnio. /var/qmail/alias/.qmail-geleira-xxx -> xxx indica o nome antes do @ referente ao seu domnio. Ex.: /var/qmail/alias/.qmail-geleira-fabio -> significa: fabio@geleira.org, e tem como contedo, como exemplo: --- incio .qmail-geleira-fabio --&fabio --- fim .qmail-geleira-fabio --Neste caso, quando for enviar um e-mail para fabio@geleira.org, verificado pelo arquivo ".qmail-geleira-fabio" cujo o recipiente ser um usurio do sistema, a qual, seu diretrio home "/home/geleira" definido pelo "/etc/passwd". Logo, ser acessado /home/fabio/.qmail que possu o contedo: --- incio .qmail --/home/fabio/Maildir/ --- fim .qmail --ou, com o mesmo sentido --- incio .qmail --./Maildir/ --- fim .qmail --Dizendo que as mensagens para esse usurio de sistema devem ser guardados em seu Maildir. Recebido o e-mail, basta o usurio do sistema "fabio" receber seus e-mail's, normalmente, por um programa de correio eletrnico qualquer.

6. Arquivos .qmail
Terminada as explicaes referentes ao funcionamento dos e-mail's para o domnio do host e para os domnios virtuais, segue algumas informaes referentes ao formatos aceitos pelo arquivo ".qmail_qualquer_coisa". Os arquivos ".qmail-xxx" possuem o seguinte padro em seu contedo:

http://www.geleira.org

17

&user@example.com user@example.com &user Lembrando que, a forma logo abaixo no aceita: &<user@exemplo.com.br> & user@exemplo.com.br &Usurio Fbio <user@exemplo.com.br> Caso queira que todos os e-mails para um determinado domnio seja enviado para um e-mail ou conta de sistema especfica, deve-se criar o arquivo ".qmail-default". Possuindo o contedo, como por exemplo: Uma conta do sistema: --- incio .qmail-default --&fabio --- fim .qmail-default --ou Um redirecionamento de e-mail: --- incio .qmail-default --&fabio@meuprovedor.com.br --- fim .qmail-default --ou Usurio + redirecionamento: --- incio .qmail-default --&fabio@meuprovedor.com.br &fabio --- fim .qmail-default --Mesmo com este procedimentos, voc deve estar se perguntando: Como fao para criar um e-mail com ponto? Como, por exemplo, fabio.bombonato@geleira.org, ento, deve-se criar um arquivo em seu home chamado ".qmail-geleira_org-fabio:bombonato", para este caso. Ou seja, utiliza-se dois pontos (:) para criar um e-mail com ponto. Os arquivos ".qmail" possui uma lista de instrues de envio, a qual, definida por alguns caracteres colocados no comeo da linha que determina a ao a ser tomada. Segue abaixo a tabela dos caracteres:

Caracter # | / ou . / ou .

Tipo de Envio nada (comentrio) programa mbox (se o ltimo diretrio do mbox caracter no uma " / " ) maildir (se o ltimo diretrio do mbox caracter no uma " / ")

Ao ignorado o programa executado por um shell diretrio do mbox (incluindo o / ou .) diretrio do maildir (incluindo o / ou .) endereo para onde ser redirecionado a

http://www.geleira.org

18

nmero ou redirecionamento (forward) letra 7. Email que executa um programa

menssagem, podendo ser uma conta do sistema ou um endereo eletrnico. endereo para onde ser redirecionado a menssagem (incluindo o primeiro caracter)

Alguma vezes, voc pode desejar que quando uma menssagem antes de ser direcionada a uma conta ou para outro e-mail, execute um programa, deve-se ento, editar o arquivo ".qmail-xxx" correspondente ao e-mail em questo e, em seu contedo, deve-se utilizar o formato: |preline programa ou seja, deve comear com uma barra vertical e, depois, o comando do programa a ser executado. |preline /usr/sbin/autoresposta -s "Assunto da Menssagem" -f "/home/fabio/respotas.txt"

8. Diretrio das mensagens


Peo ateno para aqueles que iro criar um servidor de mensagens utilizando o qmail, pois, caso possuam um volume muito grande de mensagens, como por exemplo: um provedor de acesso, uma grande intranet e, qualquer ISP que tenha um grande fluxo. Deixem a partio onde ser armazenada as mensagens separada e, com um tamanho suficiente para conter o fluxo de sua organizao. Em nossos exemplos, as caixas de mensagens de nossos usurios ficavam no diretrio /home/usurio, logo, aconselho que a partio para o ponto de montagem "/home" seja implementada com cuidado e, consiga atender a demanda de espao para as mensagens, a qual, sero armazenadas.

9. Concluso
Visto que o Sendmail utilizado, aproximadamente, em 70 % dos servidores de correio eletrnico no mundo. O qmail um dos grandes programas que tm a possibilidade de concorrer de igual para igual, ou diferente, de igual para melhor. Visto que o Sendmail j conhecido por prover diversas falhas/bugs em sua implementao. O qmail pode ser utilizado para substitu-lo com grandes ganhos, pois em seu projeto, a segurana e flexibilidade esto em primeiro lugar. Lembro que, ele no um software com propsito de substituir o Sendmail, mas, uma tima opo caso queira montar um servidor de e-mail's.

Assuntos relacionados Referncia


[LQMAIL] - Life with qmail, In: http://web.infoave.net/~dsill/lwq.html [VIRTDOM] - Virtual Domains and qmail, In: http://noframes.linuxjournal.com/ljissues/issue50/2313.html [DOTQMAIL] - Dot-Qmail, In: man dot-qmail

Alteraes

http://www.geleira.org

19

06 de maio de 2001 - Termino do documento. 27 de junho de 2001 - Reviso do documento.

Apndice Segue abaixo uma tabela, contendo os valores default e os significados dos arquivos de configurao que podem ser utilizados pelo "qmail-control", localizados no diretrio "/var/qmail/control", apresentado pelo documento Life with qmail: Control badmailfrom bouncefrom bouncehost concurrencylocal Padro vazio MAILERDAEMON me 10 Utilizado Significado por qmail-smtpd lista negra de endereos (From) qmail-send qmail-send qmail-send username de retorno de envios hostname de retorno de envios

concurrencyremote 20 defaultdomain defaulthost databytes me me 0

mximo de envios locais, simultaneamente qmail-send mximo de envios remotos, simultaneamente qmail-inject nome padro do domnio qmail-inject nome padro do host qmail-smtpd nm. mximo de bytes para 1 mens. (0=sem limite) qmail-send nome do host com duplo retorno no envio qmail-send usurio que recebe mens. de retorno duplicadas qmail-send domnio padro para usurios sem o "@" qmailnome do host utilizado no remote comando SMTP HELO qmail-inject nome do host para os ID's das menssagens. qmail-smtpd nome substitudo para um endereo IP local qmail-send domnios que ns enviamos localmente. various padro para muitos arquivos de controle qmail-smtpd base de dados secundria para o rcpthosts qmail-send domnios que utilizam o estilo de relay "%" 20 qmail-inject domnios substitudos pelo sinal "+" qmail-qmqpc endereo IP para servidores QMQP.

doublebouncehost me doublebounceto envnoathost helohost idhost localiphost locals me morercpthosts percenthack postmaster me me me me me FQDN of system vazio vazio

http://www.geleira.org me plusdomain

qmqpservers

vazio

queuelifetime rcpthosts smtpgreeting smtproutes timeoutconnect timeoutremote timeoutsmtpd virtualdomains

604800 vazio me vazio 60 1200 1200 vazio

segundos que as mens. podem aguardar no queue domnios que aceitamos qmail-smtpd menssagens. qmail-smtpd recepo menssagem SMTP qmailrotas artificias de SMTP remote qmailqto tempo, em seg., esperado na remote conexo SMTP qmailqto tempo, em seg., esperado por remote um serv. remoto qto tempo, em seg., esperado pelo qmail-smtpd cliente SMTP qmail-send domnios e usurios virtuais qmail-send

http://www.geleira.org

21

Você também pode gostar