Ir ao conteúdo
  • Cadastre-se

Ajuda urgente


andrealss

Posts recomendados

segue a tradução do howto do qmail

[]'s

1 - Introdução

2 - Requerimentos

3 - Instalação

4 - Utilização

5 - Scripts

Introdução

Qmail é um servidor de e-mail (muita - Mail Transfer Agent) muito conhecido pela sua segurança e velocidade em máquinas *UNIX, até a presente data nunca foi encontrado um BUG de segurança no Qmail. Para se ter uma ideia o seu autor (Dan Bernstein) oferece $500 para quem conseguir encontrar uma brecha de segurança no Qmail que possa comprometer o S.O. (quer tentar? ).

Essa segurança é possível porque ao contrário de outros muita's (Sendmail, Smail, Exim, etc..) o Qmail não roda os seus processos com privilégios de "root" (somente dois processos tem privilégios de "root" - qmail-start e qmail-rspawn) e sim utiliza usuários especiais (qmaill, qmaild, qmails, etc) que não tem direitos/permissões decomprometer o sistema caso ocorra alguma falha no sistema.

O Qmail também é extremamente rápido, pois pode gerenciar milhões de e-mail's em um sistema moderado.

Tem extrema facilidade para gerenciar domínios virtuais. Existe uma ferramenta que torna isso mais fácil ainda, é o Vpopmail.

O Qmail é um muita totalmente modular, o que facilita a sua utilização. O grande diferencial de se utilizar todos esses programas comentados nesse how-to, é que todos são de livre distribuição, ou seja, você não precisa pagar nenhum centavo para utilizá-los em seu servidor *UNIX.

Requerimentos

Para poder instalar o Qmail no seu servidor você precisa:

* Ter um S.O. *UNIX ou UNIX-like (Linux, FreeBSD, OpenBSD, etc), você encontra uma relação com todos os sistemas suportados no arquivo README do Qmail.

* Ter um compilador C (já está incluído na maioria das distribuições).

* Se você for utilizar SMTP (qmail-smtpd) e/ou POP3 (qmail-pop3d) vai precisar do ucspi-tcp e do checkpassword.

Instalação

Instalação de pré-requisitos.

* ucspi-tcp - depois de fazer o download do pacote:

[root@localhost] tar xzvf ucspi-tcp-0.88.tar.gz

[root@localhost] cd ucspi-tcp-0.88

[root@localhost] make setup check

* checkpassword - depois de fazer o download do pacote:

[root@localhost] tar xzvf checkpassword-0.90.tar.gz

[root@localhost] cd checkpassword-0.90

[root@localhost] make && make setup check

Instalação do Qmail.

Faça download do Qmail, depois:

[root@localhost] tar xzvf qmail-1.03.tar.gz

[root@localhost] cd qmail-1.03

Caso você queira trocar o diretório $HOME do Qmail deverá editar o arquivo "conf-qmail" e substituir a primeira linha (/var/qmail) pelo diretório que você deseja instalar.

Se quiser trocar os usuários e grupos faça o mesmo com os arquivos "conf-users" e "conf-groups".

OBS: Nesse how-to nós vamos utilizar os valores padrão para não confundir a cabeça de ninguém.

* Recomendo a leitura dos arquivos INSTALL*

Crie o diretório $HOME do Qmail:

[root@localhost] mkdir /var/qmail

Agora vamos criar os usuários e grupos para fazer a instalação do Qmail:

[root@localhost] groupadd nofiles

[root@localhost] useradd -g nofiles -d /var/qmail/alias -s /bin/false alias

[root@localhost] useradd -g nofiles -d /var/qmail -s /bin/false qmaild

[root@localhost] useradd -g nofiles -d /var/qmail -s /bin/false qmaill

[root@localhost] useradd -g nofiles -d /var/qmail -s /bin/false qmailp

[root@localhost] groupadd qmail

[root@localhost] useradd -g qmail -d /var/qmail -s /bin/false qmailq

[root@localhost] useradd -g qmail -d /var/qmail -s /bin/false qmailr

[root@localhost] useradd -g qmail -d /var/qmail -s /bin/false qmails

Com os usuários criados já podemos compilar o Qmail:

[root@localhost] make setup check

Terminada a compilação:

[root@localhost] ./config-fast host.domain.com

Your fully qualified host name is host.domain.com

Putting host.domain.com into control/me...

Putting domain.com into control/defaultdomain...

Putting com into control/plusdomain...

Putting host.domain.com into control/locals...

Putting host.domain.com into control/rcpthosts...

Now qmail will refuse to accept SMTP messages except to host.domain.com.

Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

* Substitua "host.domain.com" pelo nome completo da sua máquina.

OBS: Para facilitar, a partir de agora, "host.domain.com" é o nome completo da sua máquina e "domain.com" é o seu domínio padrão.

O último comando (./config-fast) criou a estrutura de controle do Qmail (/var/qmail/control) que contem os seguintes arquivos:

Arquivo  Conteúdo  Significado

defaultdomain  domain.com  Seu domínio padrão

locals  host.domain.com  Máquinas locais

me  host.domain.com  A própria máquina

plusdomain  com  Extensão do domínio (DPN)

rcpthosts  host.domain.com  Máquinas com relay permitido

Agora crie os aliases:

[root@localhost] cd ~alias

[root@localhost] echo "&[email protected]" > .qmail-postmaster

[root@localhost] echo "&[email protected]" > .qmail-root

[root@localhost] chmod 644 .qmail*

* Substitua "[email protected]" pelo seu e-mail e "[email protected]" pelo e-mail da pessoa que se refere ao "root" desta máquina. Isso é necessário pois o Qmail não entrega e-mail para o "root" por motivos de segurança.

Para mais informações sobre aliases consulte o arquivo INSTALL.alias.

Agora você precisa fazer uma escolha entre utilizar "Maildir" ou "Mailbox" (leia README.mbox e README.maildir), por motivos de maior compatilidade com as ferramentas para o Qmail nós vamos utilizar "Maildir", exemplo de ferramentas extremamente úteis para o Qmail que utilizam "Maildir":

* Vpopmail <--> Gerenciamento de domínios virtuais

* Qmailadmin <--> Gerenciamento de domínios virtuais via WEB

* Sqwebmail <--> Excelente Webmail

Criando o arquivo de inicialização do qmail com suporte a Maildir:

[root@localhost] cd /var/qmail

[root@localhost] sed 's/Mailbox/Maildir/g' boot/home > rc

[root@localhost] chmod 755 rc

Criando o arquivo de inicialização do qmail com suporte a Mailbox:

[root@localhost] cd /var/qmail

[root@localhost] cp -p boot/home rc

* Utilize apenas um dos dois.

Sendmail

Caso você tenha o sendmail instalado:

[root@localhost] killall -TERM sendmail

[root@localhost] mv /usr/lib/sendmail /usr/lib/sendmail.old

[root@localhost] mv /usr/sbin/sendmail /usr/sbin/sendmail.old

[root@localhost] mv /usr/sbin/newaliases /usr/sbin/newaliases.old

[root@localhost] ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

[root@localhost] ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

[root@localhost] ln -s /var/qmail/bin/newaliases /usr/sbin/newaliases

Caso você não tenha o sendmail instalado:

[root@localhost] ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

[root@localhost] ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

[root@localhost] ln -s /var/qmail/bin/newaliases /usr/sbin/newaliases

Já podemos startar o Qmail:

[root@localhost] sh -cf '/var/qmail/rc&'

* Veja sessão "Scripts"

Utilização

Existem várias formas de se utilizar o Qmail em uma máquina, eu vou listar e comentar aquí somente as mais utilizadas.

4.1 - Utilizando o Qmail ao modo sendmail:

Este modo permite enviar e-mail's para os usuários ao modo sendmail (utilizando mail, pine, etc) existem muitas formas de se enviar um e-mail de um *UNIX e principalmente com o Qmail.

4.2 - Utilizando o Qmail com um SMTP:

Permite o mesmo que a anterior mais envio de mensagens por SMTP e recebimento de e-mail's externos (internet/intranet).

4.3 - Utilizando o Qmail com POP3:

Permite o mesmo que a anterior mais checagem de e-mail's via POP3.

OBS: Não vamos configurar domínios virtuais, pois isso é assunto para outro how-to.

* Para os nossos testes vamos utilizar um usuário chamado "homer" com a senha "teste1234".

[root@localhost] adduser homer

[root@localhost] passwd homer

Changing password for user homer

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully

Craindo Maildir para "homer".

Para que o usuário "homer" possa receber e-mail's precisamos criar o seu "Maildir" que fica dentro de seu $HOME (/home/homer):

[root@localhost] cd /home/homer

[root@localhost] /var/qmail/bin/maildirmake Maildir

[root@localhost] echo "./Maildir/" > .qmail

[root@localhost] chown homer: * -R

Como você percebeu terá que executar esse procedimento a cada usuário criado.

Para resolver esse incômodo siga as intruções:

[root@localhost] cd /etc/skel/

[root@localhost] /var/qmail/bin/maildirmake Maildir

[root@localhost] echo "./Maildir/" > .qmail

Agora todo usuário que for criado já terá o seu Maildir com as devidas permissões.

Utilizando o Qmail ao modo sendmail

Mandando e-mail para o usuário "homer" com o comando "mail":

[root@localhost] echo "Isso é um teste."|mail -s "Testando 1" homer

Olha o que ocorreu no LOG:

[root@localhost] tail /var/log/maillog

Jan 6 00:42:55 host qmail: 978748975.664907 new mensagem 325891

Jan 6 00:42:55 host qmail: 978748975.665310 info mensagem 325891: bytes 270 from qp 1771 uid 0

Jan 6 00:42:55 host qmail: 978748975.678995 starting delivery 1: mensagem 325891 to local [email protected]

Jan 6 00:42:55 host qmail: 978748975.679283 status: local 1/10 remote 0/20Jan 6 00:42:55 host qmail: 978748975.850977 delivery 1: success: did_1+0+0/

Conforme o LOG (/var/log/maillog) informou, o usuário "homer" acabou de receber um e-mail do usuário "root", esse e-mail pode ser conferido em "/home/homer/Maildir/new"

[root@localhost] cd /home/homer/Maildir/new

[root@localhost] more 978798513.1066.host.domain.com

Return-Path:

Delivered-To: [email protected]

Received: (qmail 1063 invoked by uid 0); 6 Jan 2001 16:28:33 -0000

Date: 6 Jan 2001 16:28:33 -0000

Message-ID: <[email protected]>

From: [email protected]

To: [email protected]

Subject: Testando 1

Isso é um teste.

Você também pode utilizar o "qmail-inject" para enviar e-mail's:

[root@localhost] echo to:homer | /var/qmail/bin/qmail-inject

Isso provocará o mesmo efeito mas sem o campo "Subject", para mais informações consulte os arquivos TEST.receive e TEST.deliver.

Utilizando um SMTP

Você também pode utilizar um SMTP (qmail-smtpd) para enviar e-mail's. Vamos utilizar agora a ferramenta "tcpserver" que está incluída no pacote "ucspi-tcp" (que já instalamos) para levantar o "qmail-smtpd":

[root@localhost] /usr/local/bin/tcpserver -u $(id -u qmaild)

-g $(id -g qmaild) 0 25 /var/qmail/bin/qmail-smtpd 2>/dev/null&

* Veja sessão "Scripts".

* mais informações sobre o tcpserver.

Enviando e-mail por SMTP:

[root@localhost] telnet 0 25

Trying 0.0.0.0...

Connected to 0.

Escape character is '^]'.

220 host.domain.com ESMTP

helo

250 host.domain.com

mail from:

250 ok

rcpt to:

250 ok

data

354 go ahead

Subject: Testando 2

Isto é um teste de envio mensagem.

.

250 ok 978804630 qp 1185

quit

221 host.domain.com

Connection closed by foreign host.

E-mail enviado com sucesso, para verificar se o e-mail realmente chegou você pode dar uma olhada no LOG (/var/log/maillog) ou no diretório do usuário "homer" (/home/homer/Maildir/new). O LOG do Qmail fornece muitas informações.

interessantes.

Para enviar mensagens para outro domínio que não seja o seu você deverá adicioná-lo dentro do arquivo "/var/qmail/control/rcpthosts" ou então fazer controle por IP:

[root@localhost] cd /etc

[root@localhost] echo "127.0.0.1:allow,RELAYCLIENT=""" >> relay.smtp

Isso faz com que o IP 127.0.0.1 (local) possa enviar e-mail's para qualquer domínio.

[root@localhost] echo "192.168.1:allow,RELAYCLIENT=""" >> relay.smtp

Isso faz com que a rede 192.168.1.0 (interna) possa enviar e-mail's para qualquer domínio.

[root@localhost] echo ":allow" >> relay.smtp

Isso faz com que qualquer IP/Rede possa enviar email's para qualquer domínio (péssima ideia ).

Agora precisamos criar um banco de dados com a ferramenta "tcprules" que está inclusa no pacote "ucspi-tcp" para que o Qmail possa utilizar essas informações:

[root@localhost] /usr/local/bin/tcprules relay.smtp.cdb relay.smtp.tmp

< relay.smtp

Devemos agora parar o "qmail-smtpd" (se estiver rodando):

[root@localhost] kill -9 $(ps U qmaild|grep "tcpserver"|grep -v "grep"

|awk '{print $1}'

Levantar o "qmail-smtpd" com a nova configuração:

[root@localhost] /usr/local/bin/tcpserver -x /etc/relay.smtp.cdb

-u $(id -u qmaild) -g $(id -g qmaild) 0 25

/var/qmail/bin/qmail-smtpd 2>/dev/null&

Desta forma o Qmail simplesmente vai ignorar o conteúdo do arquivo "rcpthosts".

* Veja sessão "Scripts".

Com essa configuração você já pode enviar e-mail's para qualquer domínio.

Utilizando o Qmail com POP3

Para utilizar o Qmail com POP3 nós vamos precisar:

* checkpassword - (que nós já instalamos), como o nome já diz ele serve para checar o nome do usuário e sua senha no arquivo "/etc/passwd".

* ucspi-tcp - (já instalado) para levantar o serviço de POP3.

[root@localhost] /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup domain.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>/dev/null&

* Veja sessão "Scripts"

Já podemos verificar os nossos e-mail's por POP3:

[root@localhost] telnet 0 110

Trying 0.0.0.0...

Connected to 0.

Escape character is '^]'.

+OK <[email protected]>

user homer

+OK

pass teste1234

+OK

stat

+OK 3 948

list

+OK

1 349

2 311

3 288

.

top 1 1

+OK

Return-Path:

Delivered-To: [email protected]

Received: (qmail 1063 invoked by uid 0); 6 Jan 2001 16:28:33 -0000

Date: 6 Jan 2001 16:28:33 -0000

Message-ID: <[email protected]>

From: [email protected]

To: [email protected]

Subject: Testando 1

Isso é um teste.

.

dele 1

+OK

top 2 1

+OK

Return-Path:

Delivered-To: [email protected]

Received: (qmail 1076 invoked by uid 0); 6 Jan 2001 16:33:52 -0000

Date: 6 Jan 2001 16:33:52 -0000

Message-ID: <[email protected]>

From: [email protected]

to: [email protected]

.

dele 2

+OK

top 3 1

+OK

Return-Path:

Delivered-To: [email protected]

Received: (qmail 1185 invoked from network); 6 Jan 2001 18:10:07 -0000

Received: from unknown (HELO ) (127.0.0.1)

by 127.0.0.1 with SMTP; 6 Jan 2001 18:10:07 -0000

Subject: Testando 2

Isto é um teste d envio mensagem.

.

dele 3

+OK

quit

+OK

Connection closed by foreign host.

Aquí você acompanhou uma sessão POP3 na linha de comando aonde:

stat --> lista o número de mensagem + tamanho total

list --> lista as mensagem's + tamanho

top 1 1 --> mostra a mensagem 1 com 1 linha depois do cabeçalho

dele 1 --> deleta a mensagem número 1

quit --> finaliza a sessão

Enfim, mais um excelente servidor de e-mail funcionando.

Scripts

Esta sessão mostra alguns scripts shell com suporte a SYSV para controlar start/stop de:

qmail-start (qmail-send)

qmail-smtpd

qmail-pop3d

* mais informações sobre scripts SYSV.

qmail-send:

#!/bin/bash

#

# chkconfig: 2345 85 40

# description: qmail-send is a muita.

# description(pt_BR): qmail é um muita (Mail Agent Transfer).

# processname: qmail-send

# pidfile: /var/run/qmail-send.pid

# config: /var/qmail/rc

# info: Developed by Rodrigo Telles

# source function library

. /etc/rc.d/init.d/functions

PATH=/usr/bin:/bin:/usr/local/bin:/var/qmail/bin

name=qmail-send

chk=$(ps axf|grep "qmail-rspawn"|grep -v "grep"|awk '{print $1}'

alrm=$(ps axf|grep "${name}"|grep -v "grep"|awk '{print $1}'

qmail=/var/qmail/rc

pid=/var/run/$name.pid

case "$1" in

start)

  if [ -z "$chk" ] ; then

      if [ -f "$pid" ] ; then

          printf "$name dead, but pid file exists (pid `cat $pid`).n"

      fi

      if [ -f "$qmail" ]; then

      gprintf "Starting %s services: " "$name"

          sh -cf $qmail &

          sleep 1

          ps axf|grep "qmail-rspawn"|grep -v "grep"

          |awk '{print $1}' > $pid

          touch /var/lock/subsys/$name

          echo

      else

          printf "File $qmail not found.n"

          exit 1

      fi

  else

      gprintf "$name (pid "$chk") alread running...n"

  fi

  ;;

stop)

  if [ -z "$chk" ] ; then

      printf "$name not running.n"

      exit 1

  else

      gprintf "Stopping %s services: " "$name"

      kill -9 $chk

      rm -f /var/lock/subsys/$name

      rm -f $pid

      echo

  fi

  ;;

restart|reload)

  $0 stop

  $0 start

  ;;

status)

  status $name

  ;;

alarm)

  if [ "$chk" ] ; then

      gprintf "Sending ALARM signal for %s: " "$name"

      kill -ALRM $alrm

      echo

  else

      printf "$name not running.n"

      exit 1

  fi

  ;;

*)

  gprintf "Usage: %s {start|stop|status|restart|alarm}n" "$name"

  exit 1

esac

exit 0

qmail-smtpd:

#!/bin/bash

#

# chkconfig: 2345 86 41

# description: qmail-smtpd is a SMTP Daemon.

# description(pt_BR): qmail-smtpd é um SMTP Server.

# processname: qmail-smtpd

# pidfile: /var/run/qmail-smtpd.pid

# config: /var/qmail/controls/*

# info: Developed by Rodrigo Telles

# source function library

. /etc/rc.d/init.d/functions

PATH=/usr/bin:/bin:/usr/local/bin:/var/qmail/bin

name=qmail-smtpd

QUSER=$(id -u qmaild)

QGROUP=$(id -g qmaild)

pid=/var/run/$name.pid

chk=$(ps U $QUSER|grep "tcpserver"|grep -v "grep"|grep -v "_"|awk '{print $1}'

[ -f "/etc/relay.smtp.cdb" ] && RELAY="-x /etc/relay.smtp.cdb"

case "$1" in

start)

  if [ -z "$chk" ] ; then

      if [ -f "$pid" ] ; then

          printf "$name dead, but pid file exists (pid `cat $pid`).n"

      fi

      gprintf "Starting %s services: " "$name"

      tcpserver $RELAY -u $QUSER -g $QGROUP -c 500 0 smtp $name 2>/dev/null &

      sleep 1

      ps U $QUSER|grep "0 smtp"|grep -v "_"|awk '{print $1}' >$pid

      touch /var/lock/subsys/$name

      echo

  else

      printf "$name (pid "$chk") alread running...n"

      exit 1

  fi

  ;;

stop)

  if [ -z "$chk" ] ; then

      printf "$name not running.n"

      exit 1

  else

      gprintf "Stopping %s services: " "$name"

      kill -9 $chk

      rm -f /var/lock/subsys/$name

      rm -f $pid

      echo

  fi

  ;;

restart|reload)

  $0 stop

  $0 start

  ;;

status

  if [ -z "$chk" ] ; then

      if [ -f "$pid" ] ; then

          printf "$name dead, but pid file exists (pid `cat $pid`).n"

      else

          printf "$name not running.n"

          exit 1

      fi

  else

      printf "$name (pid $chk) is runnig...n"

      exit 1

  fi

  ;;

*)

  gprintf "Usage: %s {start|stop|status|restart}n" "$name"

  exit 1

esac

exit 0

qmail-pop3d:

#!/bin/bash

#

# chkconfig: 2345 87 42

# description: qmail-pop3d is a POP3 Daemon.

# description(pt_BR): qmail-pop3d é um POP3 Server.

# processname: qmail-pop3d

# pidfile: /var/run/qmail-pop3d.pid

# info: Developed by Rodrigo Telles

# source function library

. /etc/rc.d/init.d/functions

PATH=/usr/bin:/bin:/usr/local/bin:/var/qmail/bin

name=qmail-pop3d

chkpwd=checkpassword

pid=/var/run/$name.pid

chk=$(ps -Afw|grep "0 110"|grep -v "grep"|awk '{print $2}'

if [ -f "/etc/resolv.conf" ] ; then

  domain=$(grep "search" /etc/resolv.conf|awk '{print $2}'

else

  printf "File /etc/resolv.conf not found, aborting...n"

  exit 1

fi

case "$1" in

start)

  if [ -z "$chk" ] ; then

      if [ -f "$pid" ] ; then

          printf "$name dead, but pid file exists (pid `cat $pid`).n"

      fi

      if [ -z "$domain" ] ; then

          printf "Unresolved domain, aborting...n"

          exit 1

      fi

      gprintf "Starting %s services: " "$name"

      tcpserver -c 500 -H -R 0 110 qmail-popup $domain

      $chkpwd $name Maildir 2>/dev/null &

      sleep 1

      ps -Afw|grep "0 110"|grep -v "grep"|awk '{print $2}' >$pid

      touch /var/lock/subsys/$name

      echo

  else

      printf "$name (pid "$chk") alread running...n"

      exit 1

  fi

  ;;

stop)

  if [ -z "$chk" ] ; then

      printf "$name not running.n"

      exit 1

  else

      gprintf "Stopping %s services: " "$name"

      kill -9 $chk

      rm -f /var/lock/subsys/$name

      rm -f $pid

      echo

  fi

  ;;

restart|reload)

  $0 stop

  $0 start

  ;;

status)

  if [ -z "$chk" ] ; then

      if [ -f "$pid" ] ; then

          printf "$name dead, but pid file exists (pid `cat $pid`).n"

      else

          printf "$name not running.n"

          exit 1

      fi

  else

      printf "$name (pid $chk) is runnig...n"

      exit 1

  fi

  ;;

*)

  gprintf "Usage: %s {start|stop|status|restart}n" "$name"

  exit 1

esac

exit 0

Você também pode utilizar o Qmail no "inetd", para mais informações consulte o arquivo INSTALL.

--FIM--

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...