|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux WikiQmail How-to
[editar] IntroduçãoQmail é um servidor de e-mail (MTA - 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 idéia 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 MTA'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 MTA totalmente modular, o que facilita a sua utilização. O grande diferencial de se utilizar todos esses softwares 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.
[editar] Pré-requisitosPara poder instalar o Qmail no seu servidor você precisa:
[editar] Instalação[editar] 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 [editar] Instalação do QmailFaç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. Obs.: 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 "&seuemail@domain.com" > .qmail-postmaster [root@localhost] echo "&emaildoroot@domain.com" > .qmail-root [root@localhost] chmod 644 .qmail* Substitua "seuemail@domain.com" pelo seu e-mail e "emaildoroot@domain.com" 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 maiores 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 Obs.: 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&'
[editar] UtilizaçãoExistem várias formas de se utilizar o Qmail em uma máquina, eu vou listar e comentar aquí somente as mais utilizadas. 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. 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). 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 Criando 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. :)
[editar] Utilizando o Qmail ao modo sendmailMandando 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 msg 325891 Jan 6 00:42:55 host qmail: 978748975.665310 info msg 325891: bytes 270 from qp 1771 uid 0 Jan 6 00:42:55 host qmail: 978748975.678995 starting delivery 1: msg 325891 to local homer@host.domain.com 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: homer@host.domain.com Received: (qmail 1063 invoked by uid 0); 6 Jan 2001 16:28:33 -0000 Date: 6 Jan 2001 16:28:33 -0000 Message-ID: <20010106162833.1062.qmail@host.domain.com> From: root@host.domain.com To: homer@host.domain.com 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 maiores informações consulte os arquivos TEST.receive e TEST.deliver.
[editar] Utilizando um SMTPVocê 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&
- Maiores 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 msg. . 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 idéia :( ). 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".
Com essa configuração você já pode enviar e-mail's para qualquer domínio.
[editar] Utilizando o Qmail com POP3Para 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&
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 <1201.978805768@domain.com> 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: homer@host.domain.com Received: (qmail 1063 invoked by uid 0); 6 Jan 2001 16:28:33 -0000 Date: 6 Jan 2001 16:28:33 -0000 Message-ID: <20010106162833.1062.qmail@host.domain.com> From: root@host.domain.com To: homer@host.domain.com Subject: Testando 1 Isso é um teste. . dele 1 +OK top 2 1 +OK Return-Path: Delivered-To: homer@host.domain.com Received: (qmail 1076 invoked by uid 0); 6 Jan 2001 16:33:52 -0000 Date: 6 Jan 2001 16:33:52 -0000 Message-ID: <20010106163352.1075.qmail@host.domain.com> From: root@host.domain.com to: homer@host.domain.com . dele 2 +OK top 3 1 +OK Return-Path: Delivered-To: homer@host.domain.com 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 msg. . 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 msg + tamanho total - list : lista as msg's + tamanho - top 1 1 : mostra a msg 1 com 1 linha depois do cabeçalho - dele 1 : deleta a msg número 1 - quit : finaliza a sessão Enfim, mais um excelente servidor de e-mail funcionando. [editar] ScriptsEsta sessão mostra alguns scripts shell com suporte a SYSV para controlar start/stop de:
- Maiores informações sobre scripts SYSV.
[editar] qmail-send
#!/bin/bash
#
# chkconfig: 2345 85 40
# description: qmail-send is a MTA.
# description(pt_BR): qmail é um MTA (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
[editar] 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
[editar] 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
[editar] EpílogoVocê também pode utilizar o Qmail no "inetd", para maiores informações consulte o arquivo INSTALL. Esse não seria um how-to se eu não coloca-se esse link para consulta: Life with qmail com certeza vale uma visita. Espero que esse how-to seja de grande utilidade para todos. O how-to acaba aquí, espero que você tenha tido sucesso na sua instalação também, caso você tenha tido problemas seguindo esse how-to fique a vontade para entrar em contato comigo - Rodrigo Telles. [editar] CréditosTutorial no underlinux: http://www.underlinux.com.br/content/view/4552/70/ Este tutorial foi desenvolvido por Rodrigo Telles e editado no wiki por Duca.
|