Instalacao qmail

21
qmail - Instalação nível intermediário Fábio Bombonato [email protected] Resumo Neste arquivo, será tratado da configuração de um servidor de email's utilizado em plataformas compatíveis com o UNIX como, por exemplo: o Linux, FreeBDD, etc. Utilizaremos o servidor qmail, um software que leva a segurança e flexibilidade em primeiro lugar para o tratamento de mensagens. Este documento possuí um caráter didático, tentarei passar de forma clara e detalhada a instalação do servidor de e-mail's qmail bem como, alguns conceitos básicos para o endentimento de um servidor de menssagens. Palavras-chave qmail, MTA, ucspi-tcp, checkpassword, Maildir, Mailbox, mbox, sendmail, pop3, smtp, email, domínio virtual, redirecionamento 1. Introdução 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 versão publica foi disponibilizada em 1996 (versão 0.7) contudo, a versão 1.0 só foi liberada em 1997 e, após, Dan Bernstein (DJB) - seu autor - ofereceu 500 dólares para os que conseguissem encontrar uma falha no programa. Para nossa surpresa, nenhuma falha de segurança foi encontrada no programa. Lembrando que as falhas eram no qmail e, isso, não incluía os programas externos a ele, como: problemas com o NFS, problemas de segurança no TCP/IP, DNS, bugs em scripts que eram executados em arquivos .forward e bugs gerais em sistemas operacionais. Em 1998 foi lançada a versão 1.03 e, por incrível que pareça, é a versão disponibilizada até hoje. Um grupo de usuários do qmail chegaram a oferecer 1.000 dólares a quem conseguisse descobrir uma falha no programa seguindo as mesmas regras anteriores no período de um ano. Bem, ninguém nunca solicitou o prêmio e, o dinheiro foi doado à Free Software Foundation. Esta pequena história foi contada para ilustrar o quão seguro é o qmail. O sendmail é um programa que é executado como root e, como ele é um único programa (monolítico) que faz todas as tarefas, quem descobrir uma falha no sendmail terá os privilégios de root. No qmail, as tarefas são modularizadas, ou seja, existe um conjunto de programas que gerenciam as mensagens, somente, dois programas utilizam a permissão de superusuário - qmail-start e qmail-lspawn - logo, se o invasor conseguir desvendar alguma falha nestes programas, não conseguirá fazer muita coisa no sistema. Para o sendmail, os programas e arquivos são tratados como endereços, logo, uma pessoa qualquer pode, arbitrariamente, executar um programa ou escrever em um arquivo, no qmail, os programas e arquivos não são tratados como endereços. Além de outros detalhes, também utiliza uma biblioteca própria, a qual, facilita a não ocorrência de buffer overruns, vazamento de memória, estouro no escopo de variáveis, normalmente, causados pela utilização de bibliotecas que costumam a encorajar o surgimento destes bugs em seu desenvolvimento, como a stdio, etc. http://www.geleira.org 1

description

Esse documento descreve como fazer a instalação do qmail que estava disponível no site Geleira.

Transcript of Instalacao qmail

Page 1: Instalacao qmail

qmail - Instalação

nível intermediário

Fábio Bombonato [email protected]

Resumo

Neste arquivo, será tratado da configuração de um servidor de email's utilizado em plataformas compatíveis com o UNIX como, por exemplo: o Linux, FreeBDD, etc. Utilizaremos o servidor qmail, um software que leva a segurança e flexibilidade em primeiro lugar para o tratamento de mensagens. Este documento possuí um caráter didático, tentarei passar de forma clara e detalhada a instalação do servidor de e-mail's qmail bem como, alguns conceitos básicos para o endentimento de um servidor de menssagens.

Palavras-chave

qmail, MTA, ucspi-tcp, checkpassword, Maildir, Mailbox, mbox, sendmail, pop3, smtp, email, domínio virtual, redirecionamento

1. Introdução

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 versão publica foi disponibilizada em 1996 (versão 0.7) contudo, a versão 1.0 só foi liberada em 1997 e, após, Dan Bernstein (DJB) - seu autor - ofereceu 500 dólares para os que conseguissem encontrar uma falha no programa. Para nossa surpresa, nenhuma falha de segurança foi encontrada no programa. Lembrando que as falhas eram no qmail e, isso, não incluía os programas externos a ele, como: problemas com o NFS, problemas de segurança no TCP/IP, DNS, bugs em scripts que eram executados em arquivos .forward e bugs gerais em sistemas operacionais. Em 1998 foi lançada a versão 1.03 e, por incrível que pareça, é a versão disponibilizada até hoje. Um grupo de usuários do qmail chegaram a oferecer 1.000 dólares a quem conseguisse descobrir uma falha no programa seguindo as mesmas regras anteriores no período de um ano. Bem, ninguém nunca solicitou o prêmio e, o dinheiro foi doado à Free Software Foundation. Esta pequena história foi contada para ilustrar o quão seguro é o qmail. O sendmail é um programa que é executado como root e, como ele é um único programa (monolítico) que faz todas as tarefas, quem descobrir uma falha no sendmail terá os privilégios de root. No qmail, as tarefas são modularizadas, ou seja, existe um conjunto de programas que gerenciam as mensagens, somente, dois programas utilizam a permissão de superusuário - qmail-start e qmail-lspawn - logo, se o invasor conseguir desvendar alguma falha nestes programas, não conseguirá fazer muita coisa no sistema. Para o sendmail, os programas e arquivos são tratados como endereços, logo, uma pessoa qualquer pode, arbitrariamente, executar um programa ou escrever em um arquivo, no qmail, os programas e arquivos não são tratados como endereços. Além de outros detalhes, também utiliza uma biblioteca própria, a qual, facilita a não ocorrência de buffer overruns, vazamento de memória, estouro no escopo de variáveis, normalmente, causados pela utilização de bibliotecas que costumam a encorajar o surgimento destes bugs em seu desenvolvimento, como a stdio, etc.

http://www.geleira.org 1

Page 2: Instalacao qmail

Notas:

- O nome correto do software é "qmail" e, não "Qmail". - A pronuncia correta do software é "kyoo mail".

2. Requisitos

Para o nosso estudo, precisaremos dos seguintes programas, que podem ser obtidos nos endereços abaixo:

- qmail: http://www.qmail.org - ucspi-tcp: http://cr.yp.to/ucspi-tcp.html - checkpassword: http://cr.yp.to/checkpwd.html

3. Instalação

Devemos criar um diretório qualquer, a qual, utilizaremos para a compilação e instalação 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 - Preparação

Antes de compilar e instalar o qmail, precisamos seguir alguns passos necessários para a preparação do sistema. Logo, siga-os abaixo:

1. Criar o diretório do qmail, onde todos os programas e configurações do mesmo serão armazenados: # mkdir /var/qmail

obs.: é possível escolher outro diretório, para isso, edite o arquivo chamado "conf-qmail" que encontra-se no diretório dos arquivos de instalação do qmail e, altere para o diretório desejado. Contudo, não aconselho a alteração deste diretório, pois é interessante manter o padrão de configuração, entretanto, deixo isso a sua escolha.

2. Criação dos usuários 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

Page 3: Instalacao qmail

# useradd -g qmail -d /var/qmail qmailr # useradd -g qmail -d /var/qmail qmails

obs.: Para a criação de usuários e grupos para outros sistemas como FreeBSD, BSDI e AIX, favor ler o arquivo "INSTALL.ids"

3.3 - Compilação

No diretório dos arquivos de instalação do qmail execute:

# cd /usr/src/svremail/qmail-x.xx/

# make setup check

Com a execução deste arquivos, será compilado o programa e criado dos arquivos/diretórios para execução 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 instalação de algumas configurações. Execute:

# ./config

Este comando é responsável por descobrir o nome do host (no caso, o nome do nosso servidor de e-mail´s) no servidor DNS. Além de procurar pelo endereço IP local que decide quais hosts vão aceitar mensagens.

Entretanto, caso queira, você mesmo pode especificar o nome de sua máquina, execute o comando:

# ./config-fast host.dominio.com.br

ex.: ./config-fast email.servidorqmail.com.br

Alterando "host.dominio.com.br" pelo nome dá máquina escolhido para o servidor de e-mail's. Lembrando que, esse nome deve ser válido, ou seja, um FQDN do sistema. Isso coloca o nome "host.dominio.com.br" no arquivo "/var/qmail/control/me"

O resultado na execução 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 conteúdos:

http://www.geleira.org 3

Page 4: Instalacao qmail

/var/qmail/control/me conteúdo: email.servidorqmail.com.br descrição: o nome de seu host, ou seja, sua máquina. /var/qmail/control/defaultdomain conteúdo: servidorqmail.com.br descrição: o domínio de seu host. /var/qmail/control/plusdomain conteúdo: org descrição: extensão do domínio. /var/qmail/control/locals conteúdo: email.servidorqmail.com.br descrição: domínios em que as mensagens são enviadas localmente.

/var/qmail/control/rcpthosts conteúdo: email.servidorqmail.com.br descrição: domínios que serão permitidos (relay) o recebimento de e-mail's.

3.5 - Básico para aliases

Alguns aliases são necessários para o funcionamento do qmail. Para tal, o mínimo 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 usuário não exista, ou seja, não é um endereço de e-mail válido. As mensagens, podem ser recebidas em um diretório de mensagens, como o ~alias/Maildir (visto mais a frente)

- MAILER-DAEMON: Não é obrigatório, mas os usuários, algumas vezes, respondem com mensagens que retornam, sendo recebidas pelo mailer daemon.

- root: No qmail, o usuário root NUNCA recebe e-mail. Seu sistema pode gerar mensagens de e-mail para o root toda noite e, caso você não tenha um alias para o usuário root, estas mensagens retornarão (além de serem duas vezes retornadas, pois o Postmaster irá receber estas mensagens). Normalmente, utiliza-se um usuário de administrador para que receba as mensagens direcionadas ao root. Mas, não coloque o root para receber estas mensagens, utilize um outro usuário, pois assim, estará comprometendo o sistema.

3.6 - Caixas de Mensagem

O qmail, pode trabalhar com três tipos de formas de armazenamento das mensagens (disse armazenamento, não redirecionamento, lembre-se!):

- mbox (Tradicional): padrão utilizado pelo Sendmail, onde o nome do usuário corresponde a caixa de mensagens, é um único arquivo, a qual possuí em seu conteúdo

http://www.geleira.org 4

Page 5: Instalacao qmail

todas as mensagens direcionadas para um usuário. Normalmente, localizado no diretório "/var/spool/mail". Ver INSTALL.vsm - mbox (Mailbox): mais comum, funciona com a maioria dos MTA's. A localização das mensagens difere um pouco do mbox tradicional, as mensagens ficam armazenadas no diretório HOME dos usuários. Ver INSTALL.mbox

- maildir: pouco suporte pelos MTA's existentes, contudo, funciona com o Outlook e o Netscape Menssager, kmail, etc. Além disso, é muito flexível, possuí uma ótima segurança e organização das mensagens, além 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 inicialização

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 configuração para que o Maildir seja utilizado. Para isso, vá ao diretório:

# cd /var/qmail/boot

Este diretório contém 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 modificação posteriormente, logo, faça:

# 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 padrão do sistema, acho interessante ensinar como

http://www.geleira.org 5

Page 6: Instalacao qmail

desabilitar o sendmail e criar uma compatibilidade com o mesmo. Para tal, prossiga da seguinte forma:

1. Desabilitar o script de inicialização:

Em seus sistema, normalmente, existe um arquivo de inicialização 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 comentário na mesma.

Existem outras formas de desabilitar o sendmail na inicilização, 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 máquina, é necessário matar seu daemon e seus filhos, caso exista deve-se proceder:

# kill -9 número_do_processos_do_sendmail

ou

# killall -TERM sendmail

Ou, caso seja um sistema do tipo Redhat, faça:

# /etc/rc.d/init.d/sendmail stop

3. Limpando o mqueue

Ao parar o sendmail, ainda pode existir algumas mensagens que não foram enviadas na fila de mensagens (mqueue), logo, podemos forçar 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 não seja possível que nenhum usuário ainda utilize o sendmail, iremos retirar o bit setuid do arquivo binário do sendmail, prevenindo que os usuários locais não consigam privilégios extras através do sendmail.

# chmod 0 /usr/lib/sendmail # chmod 0 /usr/sbin/sendmail # chmod 0 /usr/lib/sendmail.mx

http://www.geleira.org 6

Page 7: Instalacao qmail

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 execução 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 estão 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 simbólicos:

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

7. Caso não tenha o Sendmail (Opcional)

Este passo deve ser feito para os que não possuíam o Sendmail instalado em seus sistema. Se você já procedeu com os passos acima, não 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á é possível efetuar alguns testes para comprovar o funcionamento do qmail. Primeiramente, faça-o iniciar:

sh -cf '/var/qmail/rc &'

Isso irá colocar aquele script de inicialização 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. Também é possível verificar se o splogger está sendo executado como qmaill.

Além 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

Page 8: Instalacao qmail

# 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 não estiver rodando:

# grep "cannot start" /var/log/maillog

Antes dos testes, para um usuário 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 usuário "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: usuário | /var/qmail/bin/qmail-inject

obs.: substitua "usuário" por um usuário válido 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 <[email protected]> qp 1934 uid 0 May 5 20:10:28 email qmail: 989107828.728849 starting delivery 8: msg 83958 to local [email protected] 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 número de inode, 217 é o número do processo (PID). Em seu teste, certamente, os números serão diferentes.

2. Enviando uma menssagem para um usuário 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 <[email protected]> qp 1643 uid 0 May 6 09:29:05 email qmail: 989155745.490428 starting delivery 1: msg 84075 to local [email protected] 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

Page 9: Instalacao qmail

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 [email protected] 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 "Conteúdo 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 <[email protected]> qp 1780 uid 0 May 6 09:44:38 email qmail: 989156678.957417 starting delivery 6: msg 84077 to local [email protected] 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 usuário válido no sistema.

3.9 - SMTP e POP3 do qmail

Para que nosso sistema utilize o smtp e pop3 do próprio qmail - qmail-smtpd e qmail-pop3d - respectivamente, precisamos habilitá-los para serem inicializados. Temos duas possibilidades, podemos inicializar pelo inetd ou, através de comandos para inicialização 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

Page 10: Instalacao qmail

Obs_2.: Para utilizar o pop3 é necessário instalar o "checkpassword", que será mostrado no próximo tópico. Obs_3.: A utilização 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 tópico 3.9.2 .

3.9.2 - SMTP e POP3 pelo ucsip-tcp

Para serviços 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 três módulos:

- qmail-popup: obtém o nome do usuário e senha; - checkpasswor: autentica o nome do usuário e senha; - qmail-pop3d: é o daemon do POP3 do qmail;

Normalmente, o qmail-popup é executado via inetd ou tcp-server, escutando a porta 110 (padrão do POP3). Quando a conexão é feita, é solicitado o nome do usuário (username) e senha. Logo após, é chamado programa "checkpassword" e, quando verificado é ativado o qmail-pop3d, isso, quando os dados foram verificados e aceitos.

Então, 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 instalação 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 serviços SMTP e POP3

Feita a instalação destes módulos adicionais, basta iniciar os serviços:

SMTP:

# /usr/local/bin/tcpserver -u $(id -u qmaild) -g $(id -g qmaild) 0 25 /var/qmail/bin/qmail-smtpd 2>/dev/null&

POP3:

http://www.geleira.org 10

Page 11: Instalacao qmail

# /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 domínio "email.servidorqmail.com.br" para o host+domínio de sua máquina 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: [email protected] <- você escreve (destinatário da menssagem) 250 ok <- retorno data <- você escreve (diz que o conteúdo virá logo após) 354 go ahead <- retorno Subject: Assunto_Qualquer <- você escreve (assunto da menssagem) Aqui é o conteúdo 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 [email protected] 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 diretório:

# ls -la /home/fabio/Maildir/new/

http://www.geleira.org 11

Page 12: Instalacao qmail

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 domínio que não seja o seu é necessário adicioná-lo no arquivo "/var/control/rcpthosts". Em nosso exemplo, o nosso domínio é email.servidorqmail.com.br, caso queiramos enviar um e-mail para, por exemplo, [email protected], devemos, então, adicioná-lo no arquivo rcpthosts dá seguinte forma:

# vi /var/control/rcpthosts"

e, colocar o seguinte conteúdo:

email.servidorqmail.com.br <- já tinha meuprovedor.com.br <- foi inserido

Existem outras formas de controlar o relay, como por meio de regras para domínios ou IP's. Contudo, isso é assunto para o documento de administração do qmail.

POP3:

# telnet 0 110

Trying 0.0.0.0... Connected to 0. Escape character is '^]'. +OK <[email protected]> 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: <[email protected]> Delivered-To: [email protected] Received: (qmail 1804 invoked by uid 0); 6 May 2001 13:49:22 -0000 Date: 6 May 2001 13:49:22 -0000 Message-ID: <[email protected]> From: [email protected]

http://www.geleira.org 12

Page 13: Instalacao qmail

To: [email protected] Subject: Qualquer Assunto

Conteúdo 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: <[email protected]> Delivered-To: [email protected] Received: (qmail 1814 invoked by uid 0); 6 May 2001 13:50:09 -0000 Date: 6 May 2001 13:50:09 -0000 Message-ID: <[email protected]> From: [email protected] To: [email protected] 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

Page 14: Instalacao qmail

+OK Connection closed by foreign host.

Feito isso, além de testar o funcionamento do recebimento dos e-mail's, aprendemos alguns comando que facilitam a administração das mensagens para as horas que precisar e não tiver um leitor de e-mail's gráficos. 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 ações na tabela abaixo:

Comandos Descrição user usuário nome do usuário. pass senha senha do usuário. stat lista o número de mensagens e tamanho totais da conta pop. list lista todas as mensagens e tamanho da cada uma. top x y mostra a menssagem número x com y linhas após o cabeçalho. dele n apaga a menssagem de número n. quit sair da porta 110, ou seja, finalizar.

Finalmente, após efetivado os testes no SMTP e no POP3 e, verificado o funcionamento correto dos mesmos. Podemos, então, criar um script de inicialização, que possa inicializar o qmail (rc), o SMTP (qmail-smtpd) e o POP3 (qmail-pop3d), seguimos, então, para o próximo item.

3.9.3 - Script de inicialização

# vi /usr/local/bin/qmail-start

--- conteúdo 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

-- conteúdo 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

Page 15: Instalacao qmail

# vi /etc/rc.d/init.d/qmail

--- conteúdo qmail --- #!/bin/sh

# Biblioteca de funções # 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 inicialização 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 domínio email.servidorqmail.com.br, logo, para criar os e-mail's basta criar um usuário com ID próprio e criar o arquivo ".qmail", que irá direcionar os e-mail's para o diretório Maildir, para tal, faça algo como:

# adduser fabio # chmod g-w ~fabio # chmod o-w ~fabio

http://www.geleira.org 15

Page 16: Instalacao qmail

# cd ~fabio # /var/qmail/bin/maildirmake Maildir # chown -R fabio.users Maildir

Após, crie um arquivo chamado ".qmail", como segue:

# cd ~fabio # vi .qmail

e, insira o seguinte conteúdo:

--- início .qmail --- ./Maildir/ --- fim .qmail ---

Feito estes passos, ao enviar um e-mail para [email protected] ele será armazenado no "~fabio/Maildir" e, com isso, basta puxar os e-mail's via POP3 com o nome de seu usuário e senha do mesmo.

Assim, pode-se criar qualquer usuário e seguir os procedimentos acima para receber os e-mail's do domínio email.servidorqmail.com.br, pois este é o domínio do host e, onde o qmail é diretamente responsável e reconhecido.

Contudo, caso queira que este servidor de e-mail seja responsável por outros domínios, então, deve-se alterar o MX do servidor DNS responsável pelo domínio para a máquina onde encontra-se nosso servidor qmail e, fazer as configurações para estes domínios virtuais, como será explicado posteriormente.

5. Domínio Virtual

Para configurar os e-mail's deve-se entender o que é um domínio virtual. Ou seja, o servidor onde está instalado o qmail possuí um domínio próprio ou, mais especificamente, quando foi instalado o servidor ele pegou o domínio da máquina via DNS ou inserid pelo usuário ao configurá-lo e, colocou em suas configurações (/var/qmail/control/*). Com isso, é possível entender que o qmail responde, especificamente, por este domínio e, caso queira que ele responda por outro domínio que não é de sua autoridade, entende-se que o mesmo é um domínio virtual e, para tal, deve-se incluí-lo no arquivo "/var/qmail/control/virtualdomains", que será mostrado logo abaixo.

Antes de configurar os domínios no Qmail, é interessante que seja apontado o MX do domínio em questão no servidor DNS responsável pelo mesmo para o servidor onde está configurado o Qmail. Se está configuração não for feita, ao enviar um e-mail para o domínio 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 informações a respeito da configuração de um servidor DNS, visite nosso artigo: Servidor DNS.

Com as configurações do MX feitas, seguimos as explicações:

http://www.geleira.org 16

Page 17: Instalacao qmail

Ao criar um domínio 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 colocação da palavra "alias" depois dos dois pontos(:), irá indicar que todas as configurações para esse servidor virtual deverão ser realizadas no diretório "/var/qmail/alias".

Deve-se adicionar este domínio no arquivo: /var/qmail/control/rcpthosts, com isso, será habilitado o envio de e-mail's para este domínio.

/var/qmail/alias/.qmail-geleira-xxx -> xxx indica o nome antes do @ referente ao seu domínio. Ex.:

/var/qmail/alias/.qmail-geleira-fabio -> significa: [email protected], e tem como conteúdo, como exemplo:

--- início .qmail-geleira-fabio --- &fabio --- fim .qmail-geleira-fabio ---

Neste caso, quando for enviar um e-mail para [email protected], é verificado pelo arquivo ".qmail-geleira-fabio" cujo o recipiente será um usuário do sistema, a qual, seu diretório home é "/home/geleira" definido pelo "/etc/passwd". Logo, será acessado /home/fabio/.qmail que possuí o conteúdo:

--- início .qmail --- /home/fabio/Maildir/ --- fim .qmail ---

ou, com o mesmo sentido

--- início .qmail --- ./Maildir/ --- fim .qmail ---

Dizendo que as mensagens para esse usuário de sistema devem ser guardados em seu Maildir.

Recebido o e-mail, basta o usuário do sistema "fabio" receber seus e-mail's, normalmente, por um programa de correio eletrônico qualquer.

6. Arquivos .qmail

Terminada as explicações referentes ao funcionamento dos e-mail's para o domínio do host e para os domínios virtuais, segue algumas informações referentes ao formatos aceitos pelo arquivo ".qmail_qualquer_coisa".

Os arquivos ".qmail-xxx" possuem o seguinte padrão em seu conteúdo:

http://www.geleira.org 17

Page 18: Instalacao qmail

&[email protected] [email protected] &user

Lembrando que, a forma logo abaixo não é aceita:

&<[email protected]> & [email protected] &Usuário Fábio <[email protected]>

Caso queira que todos os e-mails para um determinado domínio seja enviado para um e-mail ou conta de sistema específica, deve-se criar o arquivo ".qmail-default". Possuindo o conteúdo, como por exemplo:

Uma conta do sistema: --- início .qmail-default --- &fabio --- fim .qmail-default ---

ou

Um redirecionamento de e-mail: --- início .qmail-default --- &[email protected] --- fim .qmail-default ---

ou

Usuário + redirecionamento: --- início .qmail-default --- &[email protected] &fabio --- fim .qmail-default ---

Mesmo com este procedimentos, você deve estar se perguntando: Como faço para criar um e-mail com ponto? Como, por exemplo, [email protected], então, 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 instruções de envio, a qual, é definida por alguns caracteres colocados no começo da linha que determina a ação a ser tomada. Segue abaixo a tabela dos caracteres:

http://www.geleira.org 18

Caracter Tipo de Envio Ação # nada (comentário) ignorado | programa o programa é executado por um shell

/ ou . mbox (se o último diretório do mbox caracter não é uma " / " ) diretório do mbox (incluindo o / ou .)

/ ou . maildir (se o último diretório do mbox caracter não é uma " / " )

diretório do maildir (incluindo o / ou .)

endereço para onde será redirecionado a

Page 19: Instalacao qmail

http://www.geleira.org 19

menssagem, podendo ser uma conta do sistema ou um endereço eletrônico.

número ou letra redirecionamento (forward) endereço para onde será redirecionado a

menssagem (incluindo o primeiro caracter)

7. Email que executa um programa

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 então, editar o arquivo ".qmail-xxx" correspondente ao e-mail em questão e, em seu conteúdo, deve-se utilizar o formato:

|preline programa

ou seja, deve começar 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. Diretório das mensagens

Peço atenção para aqueles que irão 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 partição onde será armazenada as mensagens separada e, com um tamanho suficiente para conter o fluxo de sua organização. Em nossos exemplos, as caixas de mensagens de nossos usuários ficavam no diretório /home/usuário, logo, aconselho que a partição para o ponto de montagem "/home" seja implementada com cuidado e, consiga atender a demanda de espaço para as mensagens, a qual, serão armazenadas.

9. Conclusão

Visto que o Sendmail é utilizado, aproximadamente, em 70 % dos servidores de correio eletrônico no mundo. O qmail é um dos grandes programas que têm 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 implementação. O qmail pode ser utilizado para substituí-lo com grandes ganhos, pois em seu projeto, a segurança e flexibilidade estão em primeiro lugar. Lembro que, ele não é um software com propósito de substituir o Sendmail, mas, é uma ótima opção caso queira montar um servidor de e-mail's.

Assuntos relacionados

Referência

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

Alterações

Page 20: Instalacao qmail

http://www.geleira.org 20

06 de maio de 2001 - Termino do documento. 27 de junho de 2001 - Revisão do documento.

Apêndice

Segue abaixo uma tabela, contendo os valores default e os significados dos arquivos de configuração que podem ser utilizados pelo "qmail-control", localizados no diretório "/var/qmail/control", apresentado pelo documento Life with qmail:

Control Padrão Utilizado por

Significado

badmailfrom vazio qmail-smtpd lista negra de endereços (From)

bouncefrom MAILER-DAEMON

qmail-send username de retorno de envios

bouncehost me qmail-send hostname de retorno de envios

concurrencylocal 10 qmail-send máximo de envios locais, simultaneamente

concurrencyremote 20 qmail-send máximo de envios remotos, simultaneamente

defaultdomain me qmail-inject nome padrão do domínio

defaulthost me qmail-inject nome padrão do host

databytes 0 qmail-smtpd núm. máximo de bytes para 1 mens. (0=sem limite)

doublebouncehost me qmail-send nome do host com duplo retorno no envio

doublebounceto postmaster qmail-send usuário que recebe mens. de retorno duplicadas

envnoathost me qmail-send domínio padrão para usuários sem o "@"

helohost me qmail-remote

nome do host utilizado no comando SMTP HELO

idhost me qmail-inject nome do host para os ID's das menssagens.

localiphost me qmail-smtpd nome substitudo para um endereço IP local

locals me qmail-send domínios que nós enviamos localmente.

me FQDN of system

various padrão para muitos arquivos de controle

morercpthosts vazio qmail-smtpd base de dados secundária para o rcpthosts

percenthack vazio qmail-send domínios que utilizam o estilo de relay "%"

plusdomain me qmail-inject domínios substituídos pelo sinal "+"

qmqpservers vazio qmail-qmqpc endereço IP para servidores QMQP. segundos que as mens podem

Page 21: Instalacao qmail

http://www.geleira.org 21

queuelifetime 604800 qmail-send segundos que as mens. podem aguardar no queue

rcpthosts vazio qmail-smtpd domínios que aceitamos menssagens.

smtpgreeting me qmail-smtpd recepção menssagem SMTP

smtproutes vazio qmail-remote rotas artificias de SMTP

timeoutconnect 60 qmail-remote

qto tempo, em seg., esperado na conexão SMTP

timeoutremote 1200 qmail-remote

qto tempo, em seg., esperado por um serv. remoto

timeoutsmtpd 1200 qmail-smtpd qto tempo, em seg., esperado pelo cliente SMTP

virtualdomains vazio qmail-send domínios e usuários virtuais