sábado, 9 de janeiro de 2010

Configurando um servidor de e-mail para pequenas redes

Índice

   1. Entendendo
   2. Como funciona o processo
   3. Instalando os pacotes necessários
   4. Configurando o sendmail
   5. Configurando o fetchmail
   6. Configurando o procmail
   7. Conclusão

 

Entendendo

 
Nos dias atuais o e-mail é uma das ferramentas mais utilizadas para nossa comunicação. A maioria das empresas vem gradualmente adotando esta ferramenta para troca de informações e estreitamento de contato com seus clientes. Desta forma, muitas empresas estão amarradas a acessos discados e dispendiosos para a comunicação, ou até já possuem uma linha de acesso dedicada, mas não trabalham com alguma solução de servidores de e-mail. É neste sentido que este artigo procura trabalhar, facilitar a configuração de um servidor de e-mail, principalmente para quem trabalha com o acesso discado, e onde é verificado que vários usuários se conectam diariamente por seus modens para baixar e transmitir seus e-mails, mesmo que isso seja feito através de um servidor de discagem por demanda, o custo é altíssimo, pois a maioria dos usuários não fazem a checagem e envio de email no mesmo horário. 

Imaginemos um ambiente, onde temos um servidor de discagem por demanda que disponibiliza o acesso discado a internet para todos os usuários. Nele temos um servidor de email, que a cada tempo determinado, por exemplo intervalos de 1h ou 2h, conecta-se automaticamente a internet e pega todos os mails dos usuários e despacha algum que esteja em sua fila de envio. Em seguida algum usuário da rede resolve checar seus e-mails e recebe tudo do spool local de seu servidor. Vê e responde algumas mensagens, que vão para a fila de envio do servidor local, que aguardará a próxima conexão para enviá-los definitivamente para a internet. 

Bom, agora que temos o cenário montado, vamos partir para verificar como este processo funciona e quais programas envolvidos em nosso servidor Linux. 
 
 

Como funciona o processo

Nesse documento consideramos que a rede interna, o DNS e o acesso por demanda do servidor estão funcionando corretamente, caso não tenha o acesso por demanda configurado, veja um pequeno tutorial em http://linux.trix.net. A documentação para configurar sua rede e seu DNS veja em http://www.conectiva.com.br/suporte/pr. 

Voltemos ao nosso assunto, imagine este servidor Linux, com várias estações Linux e Windows. Cada usuário pode mandar e receber mails para a internet usando sua própria conta interna. No papel de servidor de email da intranet vamos utilizar o Sendmail, que gerenciará estas mensagens. Quando a conexão com internet estiver ativa, ele descarregará a fila de mails para internet. 

Agora, queremos pegar os mails da internet e distribuir para cada usuário de nossa rede interna, quem fará este trabalho será o programa fetchmail. 

Até agora tudo tranqüilo, mas temos um e-mail na empresa chamadovendas@empresa.com.br e que temos três vendedores que atendem esse mail. Após um contato preliminar com o cliente, será pedido para o cliente enviar os e-mails colocando no subject algo como: a/c vendedor1. Como filtrar estes mails? 

Uma saída simples, podemos conjugar o fetchmail com o procmail, que é um filtro e desta forma ele procurará os subjects que tratam para o vendedor1 para enviar para sua conta, separando das demais. 

No final, teremos uma conta que receberá todos os emails de vendas@empresa.com.br que não foram filtrados, e desta forma alguém terá que recebê-los para verificar qual destino devem seguir. 

Certo, agora vamos configurar estes serviços para que realizem o que falamos acima. 
 

Instalando os pacotes necessários

Programas necessários:
  • sendmail (servidor de email)
  • fetchmail (para pegar e-mails da internet)
  • procmail (para fazer filtros de mensagens)
A maioria das distribuições de seu Linux favorito traz estas ferramentas, caso sua distribuição não traga, procures os programas nos seguintes sites:

Neste artigo, utilizei para os testes enquanto escrevia, a distribuição Conectiva Linux Servidor, versão 5.1, mas dadas as características dos programas, eles serão padrão na maioria das distribuições. 

 

 

Configurando o sendmail

 
Primeiro vamos configurar o Sendmail, o mesmo pode ser configurado de várias formas, com a ferramenta m4, com linuxconf, etc. Neste artigo, iremos configurá-lo utilizando o linuxconf: 

Abra o linuxconf: 

# linuxconf 

Entre na parte: 

---->Ambiente de Rede
------> Sendmail - sistema de envio de e-mails 

Entre na opção de Informações Básicas: 

--------> Informações básicas 

E deixe configurado da seguinte forma: 

--------------------------------------------------
Apresentar seu sistema como  : 
                       [X]Aceitar email para 
Servidor de email            :
Roteador de email            :
Protocolo roteador de email  : smtp
------------------- funcionalidades----------------
                      [ ] confirmar nomes completos
                          de usuários
                      [X] Ativar controle de envio
                          (spammers)
Tamanho máximo das mensagens:( )no limite _______
                      [*] Não tentar enviar
                          imediatamente
Processar consulta a cada(min):(*) manual 1
                      ( ) Usar a shell especial smrsh
Maximum recipients per msg   (o) Defaults _______
-------------------------------------------------

Esta é uma configuração simples e rápida do sendmail, que servirá para o nosso propósito. 

Confirme, e entre agora no menu: 

Opção --->Regras de mascaramento
      -------> Adicionar 

-------------------------------------------------
                     [*] esta regra está ativa
De: Original              :
De: Novo                  :
Comentário                :
-------------------------------------------------

Desta forma, será garantido que os e-mails sairão com um endereço para reply válido, que será sua conta no provedor. 

Crie uma regra para cada usuário que envie mails para a internet, confirme e peça para gerar o arquivo de sendmail.cf. 

Saia do linuxconf, agora vamos configurar quais máquinas poderão enviar e-mail pelo servidor local, e evitar que outros utilizem seu servidor durante a conexão: 

Edite o arquivo /etc/sendmail.cw para que o sendmail funcione com a rede interna: 

# vi /etc/sendmail.cw 

# sendmail.cw - include all aliases for your machine here.
nome_do_servidor        RELAY ---> Seu Domain Name aqui.
192.168.0               RELAY ---> O IP da sua rede interna aqui
localhost.localhost     RELAY

Se o sendmail.cw não for configurado, os usuários receberão a mensagem de RELAY DENIED. Configurado o sendmail.cw o segundo passo seria criar o arquivo relay-domains. Coloque o domain name da sua empresa e o IP da sua rede interna: 

# mcedit /etc/relay-domains 

192.168.0       RELAY --> seu ip interno de rede
domain          RELAY --> nome de seu servidor

OBS: Os espaços entre o ip e nomes e a palavra Relay são TABs, caso contrário, seu arquivo não funcionará. 

Salve, e edite o inetd.conf para habilitar as funções de POP3 do correio: 

# vi /etc/inetd.conf 

Descomente a linha: 

pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd ipop3d 

Salve o arquivo e saia, reinicie o inetd: 

# cd /etc/rc.d/init.d/
# ./inet restart
 

E inicie o sendmail: 

# ./sendmail start 

Pronto, nosso servidor de e-mail já está rodando. 

Agora, caso sua rede não tenha os usuários cadastrados, crie os usuários internos que terão conta de email, uma maneira simples é com o comandoadduser, proceda da seguinte forma: 

# adduser 

e grave uma senha para o usuário: 

# passwd 

Verifique se seu servidor está operacional, configurando o leitor de email da estação, colocando as informações do usuário e a parte de servidores pop3 e smtp da seguinte forma: 

servidor pop3 = 
servidor smtp = 
usuário: 

Mande uma mensagem para seu próprio usuário local, para verificar se você está recebendo os e-mails corretamente. 

Configurando o fetchmail

 
Agora, vamos pegar os e-mails da internet que está no provedor de acesso, para isso utilizamos o fetchmail. O primeiro passo é criar um arquivo .fetchmailrc no home do usuário que fará este serviço. A estrutura do arquivo é algo parecido com o exemplo abaixo: 

set logfile "/var/log/fetchmaillog"
set postmaster ""
set daemon 123
set bouncemail
poll <provedor_internet> proto POP3 
   user "<usuário>" with pass "<senha>" is "<usuário_local>" here

A opção set logfile é para criar um arquivo de log que será muito útil. A opção set daemon é a que será utilizada para os intervalos de checagem dos emails, o valor é em segundos. A linha que inicia com o pool é para baixar os emails de seu provedor, troque as expressões marcadas com <> com as seguintes definições:
  • <provedor_internet>: coloque o endereço do servidor pop3 de seu provedor.
  • <usuário> e <senha>: coloque o nome do usuário com a senha da conta na internet.
  • <usuário_local>: coloque o nome do usuário local que vai receber as mensagens.
Crie quantas regras de recepção de e-mail forem necessárias. 

Agora é preciso rodar o fetchmail para que ele baixe as mensagens do provedor de internet e envie para seu servidor local para que seus usuários possam pegar as mensagens. 

Rode o fetchmail e com a opção de daemon setada para ele fazer a checagem dos e-mails no intervalo que achar suficiente. 

# fetchmail -mda "/usr/bin/procmail -d %T" 

A segunda parte do comando chama o procmail, que é o filtro, para o caso de duas pessoas internas utilizarem o mesmo mail externo, como no caso de três vendedores utilizarem o mail externo vendas@empresa.com.br, assim é pedido para quem quiser enviar um mail para um dos vendedores coloque no subject por exemplo: Para o vendedor1. 

Assim precisamos criar um arquivo .procmailrc no home do usuário que chama o fetchmail. 

 

Configurando o procmail

O arquivo de configuração é algo parecido com: 

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin
INBOX=/home//mail/INBOX
MAILDIR=/home//mail
DEFAULT=$MAILDIR/INBOX
LOGFILE=var/log/procmaillog


:0
        * ^Subject:.*vendedor1*
        ! vendedor1@servidor.intranet

:0      * ^Subject:.*vendedor2*
        ! vendedor2@servidor.intranet

# Este exemplo copia que contenham no Subject a palavra 
# vendedor1 ou 2 , e fará um bounce (repassará) para o 
# mail interno de cada vendedor.

:0

        * ^To:.vendas@empresa.com.br
        ! geral@servidor.intranet

# Esta última regra é no caso de alguma mensagem não ser
# pega pelos filtros acima seja mandada para uma conta denominada geral@.
# É necessário que alguém verifique esta conta, para dar destino a estas
# mensagens.

#no final do arquivo coloque estas linhas:

:0
$INBOX

Pronto, agora temos uma solução de servidor de email interno funcionando, bastará acrescentar no script por discagem por demanda, ou configurar um intervalo de tempo para o comando do sendmail despachar sua fila de envio de email. O comando utilizado é: 

sendmail -q 

Agora basta que os usuários baixem as contas recebidas que estão no spool do servidor local. E para mandarem, bastará digitar a mensagem, e mandá-las para o servidor local, que este ao receber o comando sendmail -q irá despachar os mesmos para a internet. E no caso de compartilhar uma mesma conta na internet para dois ou mais usuários, o procmail separará as mensagens de acordo com a regra estabelecida. 

Para efeito de testes e monitoria, utiliza-se a verificação dos logs para sabermos o que está ocorrendo em nosso servidor, para isso os logs destes. 

Para verificar o log do sendmail, veja o arquivo:
  • /var/log/maillog
Do fetchmail o log é gravado em:
  • /var/log/fetchmailog
e do procmail em:
  • /var/log/procmaillog
Verifique estes arquivos para ter certeza que tudo funciona de acordo, ou no caso de problemas, para verificar o que está errado. Pode-se verificar o andamento do servidor, com um terminal rodando o tail, por exemplo: 

# tail -f /usr/log/maillog 

 

Conclusão

Este é o mínimo necessário que precisamos para colocar esta solução funcionando. Existem muitas opções de configuração deste serviço, em que um administrador de sistema poderá utilizar para melhorar sua configuração. Para isso, basta consultar a documentação disponível, desde as páginas man, quanto a documentação no site de cada desenvolvedor. 

0 comentários :

Enviar um comentário