Servidor de e-mail interno - intranet.

Atualizado em: 19/05/2007



Sobre este documento

Consulte a versão deste documento em modo texto.
http://www.zago.eti.br/email/servidor-interno-cl10.txt
http://www.zago.eti.br/email/serv-intra-cl10upd1.txt
Documento em elaboração, quando pronto removo este aviso
Tutorial para instalar servidor de e-mail interno, baixar e-mail de provedor externo e fazer relay (autenticar) no servidor externo para envio de mensagens, não requer configuração de DNS, nem redirecionamento do MX, pode ser instalado em qualquer maquina da rede, qualquer tipo de conexão com a internet, ADSL, modem discado ou outra conexão qualquer.

Os comandos e dicas podem não atender as suas necessidades ou não ser compatível com sua instalação, tente adaptar ao seu ambiente.

Acesso a todos os FAQ deste diretório:
http://www.zago.eti.br/email/

Acesse a página principal em
http://www.zago.eti.br/A-menu.html


Explicando .

Tutorial dividido em tópicos pra facilitar o entendimento e solução de problemas, principais tópicos neste tutorial:

MTA - Postfix

Fetchmail pra baixar e-mail do servidor web

MAILM pra testar e-mail na linha de comando.

IMAP como servidor de pop3 pra entregar e-mail para as estações.

SASL pra fazer relay (autenticação) no provedor.

Uebmiau pra fazer um webmail no servidor interno

Ambiente desta instalação e finalidade.

Maquina - MOBO ECS 741 com Semprom 2200, 512MB de RAM, HD IDE 40GB

Destinação - Servidor de e-mail interno para 40 contas de e-mail.

Pouco trafego, cliente quer anti-virus, spamassassim, copia de e-mail de todas as contas, backup, bloqueio de alguns tipos de anexos como .exe. pif, scr e outros.

Manter as contas em provedor externo com algumas contas replicadas no servidor interno com senha diferente de maneira que alguns usuários não tenham acesso ao provedor via web na internet, permitindo acesso via webmail somente dentro da empresa.

Instalação - CL10 com CD updates1, perfil desktop corporativo para servir eventualmente como estação de trabalho ou acessar kmail remotamente via ssh ou Freenx.

OBS. no CL10 tem perfil proprio para servidores, em casos de instalação dedicada exclusivamente para servidor de e-mail deve ser utilizado o perfil apropriado, melhora a segurança da instalação.

Esta maquina não está de cara pra internet, mas tem acesso para nevegação, baixar e enviar e-mail, está atrás de um firewall, neste exemplo estou usando um estação da rede pra servir também como servidor de e-mail para a intranet...

Antes de iniciar a configuração do servidor de e-mail, certifique que a maquina tem acesso à internet, alguns comandos requer acesso à internet, portanto não vai funcionar em maquina sem acesso à internet.

Utilize ambente de testes, use uma estação qualquer com dual-boot, veja dicas sobre dual-boot para testes....
http://www.zago.eti.br/boot-dual-win-e-linux.txt
http://www.zago.eti.br/boot_div.txt

Postfix - instalar, configurar e testar

Instalar, configurar e testar o servidor de e-mail Postfix.

Instalar pacote Postfix e mailx para testar o funcionamento

apt-get install postfix mailx lynx sasl2*

Pegar o nome da maquina (dominio), cat /etc/hosts

  [root@aula root]# cat /etc/hosts
  127.0.0.1       localhost.localdomain localhost
  192.168.1.197   aula.intranet.net       aula
  

As configurações do postfix ficam no arquivo /etc/postfix/main.cf, existem diversas maneiras de fazer alterações neste arquivo, tem ferramentas em ambiente gráfico, pode editar diretamente com seu editor preferido, ou se preferir pode fazer a copia do modelo disponível no FAQ, copia desta configuração está disponivel em http://www.zago.eti.br/modelos/main.cf-cl10upd1, mesmo fazendo a copia deste, precisa fazer algumas alterações para adequar a sua rede, precisa alterar no mínimo as seguintes diretivas:

  myhostname = servmail.zago.eti.br
  mydomain = zago.eti.br
  relayhost = smtp.zago.eti.br
  mynetworks = 192.168.1.0/24, 127.0.0.0/8

Use seu editor preferido para alterar no main.cf as diretivas acima, ou use o "sed" para aplicar as alterações, exemplo de formato da linha de comando com sed:

sed -i "s/stringoriginal/stringtroca/g" arquivo

Com "sed" não precisa editar o main.cf, no exemplo abaixo, entre #inicio e #fim, use um editor qualquer para copiar e colar as linhas abaixo que iniciam com "sed", elas servem de modelo, faça as alterações conforme sua cofiguração para copiar e colar no console (linha de comando), mantenha a primeira opção que está em lugar de "stringoriginal" que corresponde ao que está no arquivo de copia (modelo do FAQ) e altere somente a segunda diretiva "stringtroca", nesta, coloque os dados da sua configuração, pegue os dados em (/etc/hosts) e prontinho, pode copiar e colar.

  #inicio  das alterações
  mv /etc/postfix/main.cf /etc/postfix/main.cf-original
  cd /etc/postfix/
  wget http://www.zago.eti.br/modelos/main.cf-cl10upd1
  cp main.cf-cl10upd1 main.cf
  sed -i "s/myhostname = servmail.zago.eti.br/myhostname = servmail.zago.eti.br/g" main.cf
  sed -i "s/mydomain = zago.eti.br/mydomain = zago.eti.br/g" main.cf
  sed -i "s/relayhost = smtp.zago.eti.br/relayhost = smtp.zago.eti.br/g" main.cf
  service postfix start
  chkconfig postfix on
  df | mail zago -s  'uso do disco - via mailx!'
  cat /var/spool/mail/zago 
  #fim das alterações.

Onde; no seu arquivo de configuração as diretivas;

myhostname = servmail.zago.eti.br, deve ser igual a /etc/hosts, neste exemplo ficaria com aula.intranet.net

mydomain = zago.eti.br, deve ser igual a /etc/hosts, neste exemplo ficaria com intranet.net

relayhost = smtp.zago.eti.br, deve ser o dominio onde vai autenticar as mensagens, provedor que hospeda seu dominio.

mynetworks = 192.168.1.0/24, 127.0.0.0/8, deve colocar sua rede, caso a classe seja diferente, altere 192.168.1. para a sua rede.

nas linhas que inciam com df e cat, zago é um usuário válido na maquina, use em lugar de zago um usuário da sua maquina .

Quando OK, o envio do primeiro e-mail cria automaticamente o arquivo com o nome do usuário e salva a mensagem dentro dele, o comando cat exibe o fonte do e-mail no terminal.

Quando falhar, deve revisar toda a configuração, fazer novos testes, procurar e interpretar a mensagem de erro, consultar os logs e outras verificações do sistema.

Passe para o próximo tópico somente depois que o comando cat /var/spool/mail/<usuario> exibir no terminal a mensagem enviada pelo root informando o espaço em disco.

Explicando;

Alterando manualmente, mesmo que tenha utilizado o recurso acima sempre é bom seguir os proximos passos pra conferir.....

Arquivo de configuração do Postfix, fica em:

/etc/postfix/main.cf

Precisa ajustar algums parametros, entre eles estão o dominio e outros detalhes descritos abaixo, utilize ferramentas, edite a seu modo ou substitua o arquivo de configuração por outro previamente configurado ou de outra instalação.

Faça copia do main.cf da instalação antes de qualquer alteração, pra substituir o original por uma copia do FAQ, execute:

mv /etc/postfix/main.cf /etc/postfix/main.cf-original vi /etc/postfix/main.cf dentro do "vi": :r !lynx -dump http://www.zago.eti.br/modelos/main.cf-cl10upd1

Utilizo o processo acima mas pode baixar via wget, navegador, copiar e colar, editar via "mc", webmin ou seu editor preferido.

De qualquer forma, usando o original ou fazendo a copia do FAQ, precisa fazer alterações no /etc/postfix/main.cf, entre as alterações minimas necessárias estão o nome do dominio, host e provedor que fará relay (autenticar) além de outros itens que são peculiares a tua rede.

A seguir as alterações que deve aplicar no modelo indicado acima:

linha 67 - Comente esta linha: default_privs = nobody Pra ficar assim: #default_privs = nobody

linha 76, retire o comentário e coloque o dominio encontrado em /etc/hosts, no original vem assim: #myhostname = host.domain.tld

retire o comentario (#) e altere para: myhostname = servmail.zago.eti.br

(onde: servmail é nome da maquina e zago.eti.br é o dominio)

o nome da maquina e dominio estão em /etc/hosts.

  linha 84 - retire o comentario e altere o dominio:
  #mydomain = domain.tld
  alterar para:
  mydomain = zago.eti.br
  
  
  linha 100, retire o comentario(#):
  #myorigin = $myhostname
  #myorigin = $mydomain
  alterar para:
  #myorigin = $myhostname
  myorigin = $mydomain
  
  
  linha 163 retire o comentario(#):
  #mydestination = $myhostname, localhost.$mydomain $mydomain
  Alterar para:
  mydestination = $myhostname, localhost.$mydomain $mydomain
  
  
  linha 314, informe o seu servidor de smtp.
  #relayhost = $mydomain
  alterar pra:
  relayhost = smtp.zago.eti.br

Onde zago.eti.br é o dominio, servidor externo onde vai fazer relay, (provedor que vai antenticar o envio de e-mail), este parametro tem formato especifico pra alguns provedores, em servidores internos requer também a configuração da autenticação pelo SASL, veja topico especifico sobre ele neste documento, veja alguns exemplos pra alguns provedores:

Fazer relay no yahoo, use este exemplo:

relayhost = smtp.mail.yahoo.com.br

Fazer relay no Terra com speedy business, use este exemplo:

relayhost = smtp.bra.terra.com.br

Fazer relay no UOL, BOL, IG e a maioria dos provedores, use este formato.

relayhost = smtp.uol.com.br

  linha 264, retire o comentario e coloque a clase de IP da tua rede
  #mynetworks = 168.100.189.0/28, 127.0.0.0/8
  alterar para:
  mynetworks = 192.168.1.0/24, 127.0.0.0/8
  
  
  linha 296, retire o comentario e altere:
  #relay_domains = $mydestination
  alterar para:
  relay_domains = $mydomain

Com esta configuração basica pode testar o funcionamento do Postfix:

Iniciar o serviço somente para esta sessão:

service postfix start

Iniciar o Postfix sempre junto com o boot execute:

chkconfig postfix on

Testar envio de e-mail para usuário zago, pode ser qualquer usuário comum cadastrado nesta maquina, exemplo para o usuário root enviar e-mail para zago informando o espaço em disco:

df | mail zago -s 'uso do disco - via mailx!'

Pra conferir se está tudo OK, se o e-mail chegou, execute:

cat /var/spool/mail/zago

Retorna o e-mail no console, no corpo da mensagem consegue ler o resultado do comando df que foi enviado por e-mail.

Outros comandos e dicas:

postconf -n

Lista um resumo da configuração

postconf

Lista toda a configuração

Após qualquer alteração nas configurações do postfix, para carregar as alterações execute:

service postfix reload

Evite o uso do restart pra reiniciar, prefira reload, caso precise parar, então use:

    service postfix stop
    service postfix start

Retornando OK é sinal que o postfix está rodando normalmente, quando exibir [FALHOU], deverá rever as configurações.

Ver se está rodando, execute:

service postfix status

LEMBRANDO que o dominio zago.eti.br e e-mail zago@zago.eti.br existe somente nesta maquina, eles não existem para o mundo, isto só funciona pra rede interna, mesmo desconectado da internet as estações enviam e-mail pro maquina que está rodando o servidor Postfix, serve unica e exclusivamente pra e-mail interno.

Nesta rede tenho uma maquina de cara pra internet trabalhando como firewall e compartilhando a conexão pra rede interna, o servidor de e-mail está em outra maquina rodando também outros serviços, nesta rede existem diversas configurações de estações, tem estação com CL9, CL10, WIN98, XP e algumas com boot remoto, tem estações usando Evolution, Kmail, Outlouco e outras usando somente webmail, tem estações que passam pelo firewall pra acessar contas de e-mail externa e outras que tem acesso somente ao servidor interno, como pode ver, voce pode fazer o que quiser, a diferenças estão nas configurações do firewall pra liberar ou bloquear acesso externo, nos clientes depende da configuração da conta de e-mail, pode configurar duas contas, uma que aponta pro IP do Postfix (e-mail interno), outra que aponta pro dominio do provedor, neste caso pode configurar pra passar pelo servidor interno ou não.

Acompanhar os logs em: /var/log/maillog

tail -f /var/log/maillog

Postfix ouve na porta 25, depois de iniciado no resultado de:

netstat -na

tem que aparecer esta linha:

tcp 0 0 0.0.0.0:25 0.0.0.0:* OUÇA

Quando a porta 25 não aparece no resultado pode ser problemas com firewall, processo do postfix não foi iniciado ou outro problema qualquer com a rede ou configuração.

Ainda não completa a conexão por telnet na porta 25, por exemplo:

    telnet 192.168.1.201 25
  Trying 192.168.1.201...
  Connected to 192.168.1.201.
  Escape character is '^]'.
  220 mail1.zago.eti ESMTP Postfix (2.0.7)
     --fica parado nisto---

Resultado do comando: cat /var/spool/mail/zago

     [root@servmail postfix]# cat /var/spool/mail/zago
  From root@zago.eti.br  Sat May  7 21:33:34 2005
  Return-Path: <root@zago.eti.br>
  X-Original-To: zago
  Delivered-To: zago@zago.eti.br
  Received: by servmail.zago.eti.br (Postfix, from userid 0)
          id C2302479D07; Sat,  7 May 2005 21:33:34 -0300 (BRT)
  To: zago@zago.eti.br
  Subject: uso do disco - vial maix!
  Message-Id: <20050508003334.C2302479D07@servmail.zago.eti.br>
  Date: Sat,  7 May 2005 21:33:34 -0300 (BRT)
  From: root@zago.eti.br (Administrador do Sistema)
  
  Sist. Arq.           1K-blocos      Usad Dispon.   Uso% Montado em
  /dev/hda2             37460660   1189416  34368348   4% /

A configuração ainda não terminou, vamos para a configuração do IMAP que fará a entrega das mensagens ao clientes de e-mail da rede interna.

POP3 - IMAP - servidor de pop3 para as maquinas internas.

Acrescentando mais um serviço ao servidor de e-mail, instalar e testar o funcionanmento do IMAP com Postfix.

O Postfix é um servidor SMTP. Ele não tem nada de POP, portanto precisa de um servidor POP, existem diversos, precisa instalar um deles para fazer a interface do servidor com as estações da rede, os clientes de e-mail instalados nas estações de trabalho vão se comunicar com servidor POP para baixar as mensagens para a estação local.

Optei pelo IMAP, no synaptc do CL10 tem esta descrição:

"IMAP é um servidor para os protocolos de mail POP (Post Office Protocol) e IMAP. O protocolo POP permite uma máquina de correio coletar mail para usuários e permite o download do mail para a máquina local do usuário para leitura. O protocolo IMAP oferece a funcionalidade de POP, e permite um usuário ler seu mail em uma máquina remota sem movê-lo para a sua caixa postal local."

Instalar:

apt-get install imap

Iniciar o serviço nesta seção:

service xinetd start

Iniciar o serviço junto com o boot da maquina

    chkconfig xinetd on
    chkconfig imaps on
    chkconfig imap on

Depois de reiniciar o servidor, veja os resultados de netstat -na

  Conexões Internet Ativas (servidores e estabelecidas)
  Proto Recv-Q Send-Q Endereço Local          Endereço Remoto         Estado
  tcp        0      0 0.0.0.0:110             0.0.0.0:*               OUÇA
  tcp        0      0 0.0.0.0:111             0.0.0.0:*               OUÇA
  tcp        0      0 0.0.0.0:6000            0.0.0.0:*               OUÇA
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               OUÇA
  tcp        0      0 0.0.0.0:25              0.0.0.0:*               OUÇA
  tcp        0      0 192.168.1.201:110       192.168.1.53:33765      ESTABELECIDA
  tcp        0      0 192.168.1.201:22        192.168.1.53:33616      ESTABELECIDA
  udp        0      0 192.168.1.201:32780     192.168.1.1:53          ESTABELECIDA
  udp        0      0 0.0.0.0:111             0.0.0.0:*

Testar o funcionamento do servidor pop.

Neste exemplo foi utilizado o kmail, pode usar qualquer cliente de e-mail.

Executar kmail na estação, configurações do kmail para receber as mensagens:

      Menu Configurações
         Configurar kmail
            identidades 
  	      novo  ## preencha os dados ....
  	      
  	    
  	   rede
  	       Recebendo
  	          Adicionar
  		  (selecione pop3)
  		  preencha neste formato:
  		  Nome: qualquer nome
  		  Login: o mesmo nome de login no servidor
  		  Senha: a mesma senha do usuário no servidor
  		  Máquina: 192.168.1.3  #IP do servidor de e-mail ou nome quando rodar
  		                         DNS para as maquinas internas.
  		  porta: 110
    
  Prontinho, basta Ok, aplicar e OK, pra receber as mensagens de teste que estão
  no servidor basta um clique em "Verificar Correio em" 
  
  
  configurações do kmail para enviar mensagens:
      Menu Configurações
         Configurar kmail
  	   rede
  	       Enviando
  	          Adicionar
  		  (selecione SMTP)
  		  preencha neste formato:
  		  Nome: qualquer nome
  		   Máquina: 192.168.1.3  #IP do servidor de e-mail ou nome quando rodar
  		                         DNS para as maquinas internas.
  		  porta: 25
  		  
  OK, aplicar e OK.

Este servidor ainda não recebe nem envia e-mail para o mundo, mas o cliente de e-mail tem que enviar e receber internamente, isto funciona até com maquinas fora da internet.

Para testar, envie uma mensagem para outro usuário cadastrado no servidor, não tente enviar para o mundo porque ainda não está configurado o sasl para fazer relay no provedor externo, por enquanto está funcionamento somente entre contras de usuários cadastrados na maquina local.

Passe para o proximo tópico somente depois que funcionar o envio e recebimento de e-mail internamente, os proximos tópicos são configurações pra troca de e-mail com o mundo (servidor de e-mail externo - provedor)

Fetchmail

Baixar mensagens do provedor externo para o servidor local.

Instale e cofigure o Fetchmail somente em servidores que não respondem pelo dominio, ele é indicado para que hospeda o dominio e contas de e-mail em provedores de internet ou servidores especializados e vai baixar as mensagens para um servidor local (intranet)

Também não utilize quando tem o MX redirecionado para seu IP, neste caso o Postfix responde pelo dominio e recebe as mensagens diretamente.

Utilize como um cliente de e-mail baixando as mensagens para a rede local.

Optei pelo Fetchmail, este tópico foi elaborando com as dicas de:
http://www.zago.eti.br/email/fetchmail.txt
http://www.conectiva.com.br/cpub/pt/incConectiva/suporte/pr/servidores.sendmail.fetchmail.procmail.html

Instalar o fetchmail;

apt-get install fetchmail

Configurando o Fetchmail

Pra pegar os e-mails da internet, além de instalar, precisa configurar o fetchmail, na instalação não cria um arquivo modelo de configuração, tem que criar e configurar manualmente, este arquivo tem que ficar no home do usuário que vai rodar o fetchmail, como vou utilizar varios usuários com contas em provedores diferentes, optei por colocar este arquivo no home do root e protejer o acesso deste arquivo, afinal.... tem senhas de e-mail, optei por esta condição para evitar que um usuário pegue a senha do outro.

Este arquivo tem que ter o nome: .fetchmailrc, veja copia do modelo que tem no site da Conectiva:

      set logfile "/var/log/fetchmaillog"
      set postmaster ""
      set daemon 123
      set bouncemail
      poll [provedor_internet] proto POP3
         user [usuário] password "[senha]" is [usuário_local] here

Como ficou a minha configuração pra baixar e-mail da conta antoniofzago@uol.com.br e salvar em /var/spool/mail/zago:

      set logfile "/var/log/fetchmaillog"
      set postmaster "nome do postmaster"
      set daemon 300
      set bouncemail
      poll pop3.uol.com.br proto POP3 user antoniofzago password senhadoxxxx is zago here

OBS.: veja no final deste tópico outros exemplos de configuração pra baixar e-mail de outros provedores ou varias contas de provedores diferentes.

Utilize seu editor preferido pra criar o arquivo .fetchmailrc dentro do home do root, exemplo pelo "vi":

vi /root/.fetchmailrc

ou vá pro diretório do root:

    cd ~
    vi .fetchmailrc
    pressione insert pra entrar no modo inserção
    digite as linhas acima, ou copie as linhas acima e altere os
    dados necessários, depois pra salvar e sair, pressione ESC SHIFT+: wq

Depois de criar o arquivo, acerte a permissão e inicie o serviço, execute estas duas linhas abaixo e prontinho....

    chmod 710 /root/.fetchmailrc
    fetchmail

Caso não ajuste a permissão como indicado acima vai ocorrer esta mensagem de erro:

  [root@faqcl10 root]# fetchmail -a
  File /root/.fetchmailrc must have no more than -rwx--x--- (0710) permissions.

Após executar chmod 710 /root/.fetchmailrc não ocorre mais o erro e fetchmail roda normalmente.

Quando reiniciar a maquina e fetchmail para de rodar, tem diversas opções para iniciar o serviço, manualmente, colocar no /etc/rc.d/rc.local ou no cron para executar periodicamente.

A opção "set daemon 300" indica para ser executado a cada 300 segundos, utilize somente em casos de iniciar manualmente, scripts ou pelo /etc/rc.d/rc.local.

A solução adotada e que funciona sem problema, foi retirar da configuração do fetchmail a linha: set daemon 300 Acrescentar no cron (agendador de tarefas pra executar o fetchmail a cada 5 minutos, como root execute esta linha de comando:

    crontab -e
    */5 * * * * /usr/bin/fetchmail -a

A primeira linha entra em modo de configuraçao do agendador de tarefas, a segunta linha agenda a executação do fetchmail a cada 5 minutos, para encerrar, pressione ESC :wq

Sobre o agendador de tarefas, veja o FAQ
http://www.zago.eti.br/agenda.txt

Prontinho, agora Fetchamil pega os e-mail de antoniofzago@uol.com.br e salva no arquivo de: /var/spool/mail/zago

este processo se repete a cada 5 minutos, pra alterar este intervalo, altere no cron para os minutos que deseja a repetição.

O arquivo de log /var/log/fetchmaillog, será criado automaticamente na primeira execução do fetchmail, pra acompanhar os logs, execute:

tail -f /var/log/fetchmaillog

OBS. No CL10 não criou o arquivo e portanto não registrava os logs, a solução foi criar o arquivo manualmente e passou a registrar os logs, caso na tua istalação não exista o arquivo de log, execute:

touch /var/log/fetchmaillog

Não entendi como funciona a quebra de linha, a configuração pra alguns provedores provoca quebra da linha de configuração e por consequencia a mensagem de erro do tipo:

  [root@faqcl10 root]# fetchmail -a
  fetchmail:/root/.fetchmailrc:5: syntax error em is

Solução - edite o arquivo de configuração .fetchmailrc e verifique se não tem algum erro de digitação, se falta espaço na separação dos paramentros, evite a quebra de palavra, quando o final da linha quebrar a palavra, acrescente espaços antes da palavra que acusa no erro de modo que ela passe para a linha seguinte e depois executar novamente: fetchmail -a

Com esta configuração, mesmo estações sem acesso à internet podem acessar este servidor com qualquer cliente de e-mail ou webmail.

Somente os usuários cadastrados na maquina terão acesso, o administrador do servidor precisa incluir as contas no .fetchmail para baixar as mensagens do provedor externo para a maquina local, inclusive com senhas diferente entre o provedor e maquina local.

Na maquina local o adminstrador tem acesso às mensagens de todos, ótimo pra backup, dependendo da empresa isto poderá ter varias consequencias que não cabe discutir neste tópico, pense em elaborar uma comunicação pra informar que o e-mail é correspondencia da empresa e que é proibido o uso de e-mail pessoal na empresa, que será auditado periodicamente e outros avisos que achar necessário, mantenha uma copia assinada como protocolo de entrega da comunicação.

Outros exemplos do arquivo de configuração do arquivo de configuração /root/.fetchmailrc

    cat /root/.fetchmailrc
  
      set logfile "/var/log/fetchmaillog"
      set postmaster "nome do postmaster"
      set bouncemail
      poll pop3.ig.com.br proto POP3 user zago_hard password senhadoxxxx is zago here
      poll pop3.uol.com.br proto POP3 user antoniofzago password senhadoxxxx is zago here
      poll pop3.bra.terra.com.br with proto POP3
         user zagoteste there with password senhadoxxxx is zago here
         user zagorede there with password senhadoxxxx is zago here
  
  #comando pra importar pro "vi" (veja cp.txt)
  #  :r !lynx -dump http://www.zago.eti.br/modelos/fetchmailrc

Faça seus testes, quando receber mensagens do provedor as configurações estão OK, mas ainda não envia mensagens para o mundo, este é um serviço que requer configuração do SASL, assunto do proximo tópico.

Veja mais sobre Fetchmail no FAQ;
http://www.zago.eti.br/email/fetchmail.txt

Resumo de comandos para fetchmail.

  apt-get install fetchmail
  touch /var/log/fetchmaillog
  vi /root/.fetchmailrc
  :r !lynx -dump http://www.zago.eti.br/modelos/fetchmailrc
  chmod 710 /root/.fetchmailrc
  fetchmail -a
  cat /var/spool/mail/zago
  tail -f /var/log/fetchmaillog

SASL, fazer relay no provedor

Fazer relay no provedor externo (autenticar mensagens eviadas) validar no seu provedor para não ser rejeitadas no destino como sendo um SPAM enviando diretametne de uma conexão ADSL.

Considerando que voce já tem o Postfix, Fetchmail e IMAP configurados e trocando e-mail internamente, vamos pra configuração do SASL, que servirá pra configurar teu servidor pra fazer relay no provedor externo.

Precisa instalar os pacotes dos SASL, caso ainda não instalou, execute;

apt-get install sasl2*

Com o SASL e seus plugins instalados, vamos pra configuração dele, criar o arquivo de senhas:

echo "smtp.seudominio.com.br usuario:suasenha" > /etc/postfix/sasl_passwd

Exemplo para o usuario zago com senha minhasenha autenticar no servidor http://www.zago.eti.br:

    echo "smtp.zago.eti.br zago:minhasenha" > /etc/postfix/sasl_passwd
    chown root.root /etc/postfix/sasl_passwd
    chmod 600 /etc/postfix/sasl_passwd
    postmap hash:/etc/postfix/sasl_passwd

Estas 4 linhas servem para criar o arquivo de senhas, ajustar as permissões e criar o banco de dados de senhas do SASL.

deverá ficar assim:

  [root@faqcl10 apt]# cat /etc/postfix/sasl_passwd
  smtp.zago.eti.br zago:minhasenha

OBS - Na configuração do SASL o dominio deve ser o mesmo utilizado no item (relayhost = smtp.zago.eti.br) do /etc/postfix/main.cf, portanto utilize o mesmo dominio nas duas configurações, nos dois arquivos, tanto no:

/etc/postfix/sasl_passwd e /etc/postfix/main.cf

Caso ocorra algum erro ou quando fizer qualquer alteração de usuário ou senha, edite o /etc/postfix/sasl_passwd, retire todos os espaços e use um TAB pra separar o dominio do usuário:senha, use seu editor ou pelo "vi":

vi /etc/postfix/sasl_passwd

Sempre que alterar /etc/postfix/sasl_passwd precisa recriar o banco de dados, execute esta linha de comando:

postmap hash:/etc/postfix/sasl_passwd

Este comando não retorna mensagem, utiliza os usuarios e senhas do arquivo: /etc/postfix/sasl_passwd pra criar o bando de dados do SASL em: /etc/postfix/sasl_passwd.db, sempre que utilizar o comando acima, ou alterar qualquer parametro do /etc/postfix/main.cf

Precisa também recarregar o postfix pra valer as alterações, para recarregar (reiniciar) o postfix execute;

service postfix reload

O arquivo de configuração do postfix /etc/postfix/main.cf pode ser copiado de outra istalação, ou faça a seu modo editando o arquivo /etc/postfix/main.cf

Fazer relay no provedor, precisa configurar o main.cf pra utilizar os SASL, precisa, após a instalação e configuração do SASL, edite o /etc/postfix/main.cf e acrescente no final deste arquivo as seguintes linhas:

  # Autenticação smtp
  smtp_sasl_auth_enable = yes
  smtp_sasl_security_options = noanonymous
  smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

Salve, feche o arquivo e recarregue o arquivo de configuração do postfix:

service postfix reload

Agora pode ir por topico de configuração do cliente de e-mail, em uma estação da rede e configure um cliente de e-mail pra testar o envio de e-mail pro mundo, pra enviar e-mail pra contas como do Yahoo, UOL e etc..., isto é, fazendo relay no teu provedor,

Alterações, inclusão de novos usuários e senhas, após qualquer alteração neste arquivo precisa recriar o banco de dados do SASL, o melhor é remover tudo e começar do zero, então faça isto:

use seu editor de texto preferido ou pelo "vi" para alterar, incluir ou fazer as correções da configuração:

vi /etc/postfix/sasl_passwd

Execute as linhas de comando abaixo, na ordem em quje estão, elas servem para remover o banco de dados, ajustar as permissões, recriar o banco de dados do SASL e por ultimo recarregar o postifix pra valer as alterações.

    rm -rf /etc/postfix/sasl_passwd.db
    chown root.root /etc/postfix/sasl_passwd
    chmod 600 /etc/postfix/sasl_passwd
    postmap hash:/etc/postfix/sasl_passwd
    service postfix reload

Em testes para usar o transport, ainda não funciona.

    rm -rf /etc/postfix/transport.db
      rm -rf /etc/postfix/transport.domains.db
    chown root.root /etc/postfix/transport
    chmod 600 /etc/postfix/transport
    postmap hash:/etc/postfix/transport
    chown root.root /etc/postfix/transport.domains
    chmod 600 /etc/postfix/transport.domains
    postmap hash:/etc/postfix/transport.domains

Agora teste a configuração enviando e-mail para o mundo, acompanhe o que está acontecendo, veja no log, execute:

tail -f /var/log/maillog

OBS. - O formato de dados no arquvo /etc/postfix/sasl_passwd pode ser diferente de um provedor pra outro, alguns exemplos;

UOL, IG, e muitos outros provedores funciona neste formato:

  smtp.dominio.com.br usuário:senha
  
  smtp.uol.com.br zagolinux:minhasenha

YAHOO! - tem que usar neste formato:

smtp.mail.yahoo.com.br zagolinux:minhasenha

Com um pequeno detalha a mais, antes de fazer relay, precisa entrar na sua conta de e-mail do Yahoo via web, em "Oções do Yahho Mail" procure por "Acesso POP e REdirecionamento" confirme a opção por acesso via POP, esta opção é a mesma que voce precisa configurar pra enviar e-mail atraves de clientes de e-mail.

LOCALWEB, FASTWEB, SCHEMER etc...

Quem tem sites hospedados na Localweb, Schemer, fastweb e etc..

o formato da linha de configuração no /etc/postfix/sasl_passwd tem que ser neste formato;

  smtp.dominio.com.br usuário@dominio.com.br:senha
  
  smtp.seudominio.com.br zago@seudominio.com.br:minhasenha

Veja que o detalhe está no usuário, pra alguns provedores se usa o nome de login, pra outros o nome de login é a conta de e-mail completa no formato usuario@dominio.com.br

Quando não funcionar de uma maneira tente da outra.

testes foram feitos com sites hospedados em:

  http://www.fastweb.com.br
  http://www.schemer.com.br
  http://www.localweb.com.br
  OBS. nestes servidores, a configuração do /etc/postfix/sasl_passwd
  tem este  formato:
  smtp.seudominio.com.br zago@seudominio.com.br:minhasenha

Nos provedores abaixo, funciona neste formato:

  smtp.uol.com.br zagolinux:minhasenha
  http://www.uol.com.br
  http://www.ig.com.br
  http://www.bol.com.br
  http://www.yahoo.com.br
  http://www.click21.com.br

Testar o SASL e testar relay

Anotações de rascunho, este tópico contém erros e não funciona.

root@aula# testsaslauthd testsaslauthd: usage: testsaslauthd -u username -p password

testsaslauthd -u zago -p minhasenha testsaslauthd -u zago -p minhasenha -s smtp

Tentei com diversas opções e sempre retorna esta mensagem;

connect() : No such file or directory :0

Deveria retornar algum OK, qualquer dia verifico melhor.

OBS IMPORTANTE. - Ainda não entendi, nem tenho a solução, está funcionando com esta "gambi"

Baixar e-mail do provedor para o servidor local, o fetchmail baixa e-mail de diversos provedores sem problema algum.

Enviar e-mail, precisa fazer relay no provedor, coloquei todas as contas com suas respecitivas senhas no arquivo de configuraçao do SASL e nenhuma funcionou, quando coloquei somente uma conta de e-mail e sua senha no SASL todas as contas passaram a fazer relay, ficou com uma única conta de email cadastrada arquivo:

/etc/postfix/sasl_passwd

Tenho diversas estações cada uma com contas de e-mail diferentes, a única coisa incomum entre elas é o dominio, mesmo as contas não cadastradas no SASL enviam e-mail pro mundo normalmente, estão fazendo relay no provedor com a conta cadastrada, por exemplo, tenho somente a conta de e-mail do zago@zago.eti.br cadastrada no SASL, mas o antonio, francisco, rui, diceu e todos os usuários que tem conta no servidor interno mandam e-mail pro mundo, até contas de e-mail inexistentes no provedor que faz relay.

Enfim, a dupla postfix+sasl faz relay de qualquer conta na única conta cadastrada, ficou confuso, qualquer momento explico isto melhor......

Caso alguém tenha a solução, por favor, envie pro FAQ.

Pelo que pesquisei, a solução está no /etc/postfix/transport com a diretiva no main.cf, acrescentei esta linha;

transport_maps = hash:/etc/postfix/transport

Comentei esta linha;

relayhost = smtp.uol.com.br

Arquivo de senhas - cat /etc/posttix/sasl_passwd smtp.zago.com.br zago:minhasenha smtp.uol.com.br antoniofzago:minhasenha smtp.ig.com.br zago_hard:minhasenha

Fiz a inclusão em /etc/postfix/transport

zago.com.br smtp:zago.com.br uol.com.br smtp:www.uol.com.br ig.com.br smtp:www.ig.com.br

com esta configuração faz a entrega direto, se colocar os 3 dominio de relayhost em main.cf

relayhost = smtp.zago.com.br relayhost = smtp.ig.com.br relayhost = smtp.uol.com.br

Neste formato acima faz relay somente no ultimo, fiz a troca e permanece o relay no ultimo da lista.

O problema está no formado dos dados em /etc/postfix/transport, também falhou no formato.

cat /etc/postfix/transport dominio.com.br smtp:[200.204.0.10] mail.dominio.com.br smtp:[200.204.0.10]

Outra tentativa a fazer

transport_maps: hash:transport.domains

## TRANSPORT.DOMAINS dominio1.com.br smtp:200.200.200.200 dominio2.com.br smtp:210.210.210.210

Comandos úteis

Testar a configuração do SASL

testsaslauthd

Usar senhas em plaintext deixa-o vazio

smtp_sasl_security_options =

Localizar palavra no main.cf, listar também o numero da linha, lista somente no console, facilita na localização da linha para edição, exemplo para listar todas as linhas que contém myhost;

cat -n /etc/postfix/main.cf | grep myhost

Tem mais detalhes sobre SASL em
http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html

Veja mais sobre SASL em
http://www.postfix.org/SASL_README.html#client_sasl

Veja também o FAQ:
http://www.zago.eti.br/email/postfix-sasl_auth.txt

http://www.unitednerds.org/thefallen/docs/index.php?area=Postfix&tuto=Postfix-SMTPAuth-Cli

ALIAS

Encaminhar todos e-mails destinados a fulano@meudominio.com.br para outra conta (encaminhar, forward ) para outro dominio externo siclano@outrodominio.com.br

Da mesma forma que cria um ALIAS para uma conta interna pode criar também para conta externa.

fulado@dominio.com.br usersac vendas@meudominio.com.br uservendas@outrodominio.com.br

Webmail Uebimiau

Mais detalhes sobre ele no tópico CL 10 - WEBMIAU em
http://www.zago.eti.br/email/uebimiau.txt

chkconfig imap on chkconfig imaps on

DNS

host -a <seu.dominio.com.br>

exemplo do retorno do UOL

  # host -a www.uol.com.br
  Trying "www.uol.com.br"
  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 840
  ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2
  
  ;; QUESTION SECTION:
  ;www.uol.com.br.                        IN      ANY
  
  ;; ANSWER SECTION:
  www.uol.com.br.         274     IN      A       200.221.8.18
  www.uol.com.br.         274     IN      A       200.221.8.17
  www.uol.com.br.         274     IN      A       200.221.8.16
  
  ;; AUTHORITY SECTION:
  uol.com.br.             540     IN      NS      eliot.uol.com.br.
  uol.com.br.             540     IN      NS      borges.uol.com.br.
  
  ;; ADDITIONAL SECTION:
  eliot.uol.com.br.       830     IN      A       200.221.11.98
  borges.uol.com.br.      1035    IN      A       200.147.255.105
  
  Received 153 bytes from 200.204.0.10#53 in 1294 ms

Iptables - redirecionar

Regras de iptables (firewall) pra redirecionar o trafego de e-mail pra outra maquina da rede interna (servidores atras de uma NAT)

obs.

este tópico está em elaboração, não use esta parte....

  iptables -t nat -A PREROUTING -t nat -p tcp -d 200.204.198.164 --dport 25 -j DNAT --to 192.168.1.238:25
  
  iptables -t nat -A PREROUTING -i eth0 -p tcp --sport 25 -j DNAT --to-destination 192.168.1.238
  
  pendente pra fazer testes.
  #Redirecionar Porta SMTP
  iptables -t nat -A PREROUTING -s 200.204.164.198 -i eth0 -j DNAT --to 192.168.1.4
  iptables -t nat -A POSTROUTING -s 200.204.164.198 -o eth0 -p tcp --dport 25 -j ACCEPT
  iptables -t nat -A POSTROUTING -s 192.168.1.4 -o eth0 -j SNAT --to 200.204.164.198
  iptables -t nat -A POSTROUTING -s 192.168.1.4 -o eth0 --p tcp --dport 25 -j ACCEPT
  
  
  
  
  iptables -A INPUT -p tcp -s 0/0 --source-port 25 -j ACCEPT
  iptables -A INPUT -p tcp -s 0/0 --source-port 110 -j ACCEPT
  iptables -A INPUT -p tcp -s 0/0 --source-port 53 -j ACCEPT
  iptables -A INPUT -p udp -s 0/0 --source-port 53 -j ACCEPT

Algumas dicas

o Postfix tem a mesma finalidade do Qmail, portando os dois nunca deverão ser instalados pra rodarem simultaneamente na mesma maquina porque terás problema com os dois aceitando conexões na mesma porta.

Pra descobrir qual tipo de autenticação do seu SMTP. Neste exemplo, fiz um telnet de outra maquina da rede interna para o servidor de e-mail interno.

  primeiro digitei:
  
  telnet 192.168.1.222 smtp
  
  [root@mail log]# telnet 192.168.1.222 smtp
  Trying 192.168.1.222...
  Connected to 192.168.1.222.
  Escape character is '^]'.
  220 email.intranet.br ESMTP Postfix (2.0.7)
  
  fica parado nesta tela, agora digite:
  EHLO localhost
  
  [root@faqmail postfix]# telnet 192.168.1.222 smtp
  Trying 192.168.1.222...
  Connected to 192.168.1.222.
  Escape character is '^]'.
  220 email.intranet.br ESMTP Postfix (2.0.7)
  EHLO localhost
  250-email.intranet.br
  250-PIPELINING
  250-SIZE 10240000
  250-VRFY
  250-ETRN
  250 8BITMIME
  
  pra sair digite quit

Quando voce digita correio.seu.dominio.com.br pra acessar tua conta de e-mail via webmail, faça telnet assim:

  [root@mail log]# telnet correio.seudominio.com.br smtp
  Trying 200.142.252.56...
  Connected to correio.xxxx.com.br.
  Escape character is '^]'.
  220 pop3host.ns1.com.br ESMTP
  EHLO localhost
  250-pop3host.ns1.com.br
  250-PIPELINING
  250 8BITMIME
  quit
  221 pop3host.ns1.com.br
  Connection closed by foreign host.

Algumas dicas sobre os itens de configuraçao do /etc/postfix/main.cf

mynetwork = aqui vai a rede ou ip que pode fazer o Relay, exemplo pra permitir somente as maquinas da rede interna enviar e-mail: mynetworks = 192.168.1.0/24, 127.0.0.0/8

relayhost

relayhost = smtp.zago.eti.br do /etc/postfix/main.cf Pra quem tem servidor interno, neste item deve informar o servidor (provedor) que utilizara pra autenticar a saida das mensagens, popularmente chamado de fazer relay, pra combater SPAM, a maioria dos provedores rejeitam mensagens de servidores de e-mail das conexões discadas e ADSL em geral, pra sulucionar este problema, no envio de e-mail voce faz autenticação (relay) no provedor, com este procedimento voce pode mandar e-mail pro mundo sem problemas, lembre que o postfix precisa do SASL pra fazer esta autenticação, veja neste documento o topico sobre SASL.

**************************************************** entregar mensagens ? postqueue -f ****************************************************

CLIENTE DE E-MAIL, configurando clientes de e-mail nas estações da rede interna, entre eles Evolution, Kmail, Outlouco.

OBS. Pra enviar mensagens pro mundo, precisa fazer relay no provedor, não teste esta condição por enquanto, faça testes somente com usuários locais, pra fazer relay no provedor precisa configurar o SASL que vem no proximo tópico.

Pra configurar o Kmail pra enviar e receber mensagens utilizando o servidor interno:

  Kmail -> Configurações -> configurar kmail -> rede ->
  adicione uma conta pop, depois entre em alterar e na aba de de menu "recebendo"
  configure como abaixo, claro que é só exemplo, utilize os dados da tua
  instalação, onde o maquina 192.168.1.201 é o IP do servidor que está rodando
  o Postfix com imap.
  
  nome:   zagopvt
  login:  zago
  senha:  ********
  maquina: 192.168.1.201
  porta:   110

Prontinho, agora de qualquer estação da rede pode enviar e receber e-mail deste servidor interno, basta criar o usuário pro Linux no servidor que ele automaticamente tem a conta de e-mail, lembre que esta configuração só funciona para os usuários que foram criados no servidor que está rodando o Postfix e valem somente pra e-mail interno, cuidado pra não usar conta de e-mail valido em provedores, isto poderá causar confusão pra distinguir o e-mail interno com um utilizado na internet.

Pra configurar o Outlouco pra enviar e receber mensagens utilizando o servidor interno:

Nas estações Windows configure normalmente a conta, com a diferença que no campo para smtp e pop, informe somente o IP do servidor Postfix, neste exemplo: 192.168.1.201, a partir desta configuração, também envia e receber e-mail internamente para os usuários deste servidor e também para o munto (internet).

Veja algumas telas da configuração das estações:
http://200.204.198.164/zago/email/telas-serv-interno/

Após a configuração do SASL envia e-mail para o mundo, na configuração do teu cliente de e-mail voce deverá configurar o remetente com uma conta de e-mail valida.

Na rede interna pode trocar e-mail com a conta zago@zago.intranet, mas este zago.intranet não é um dominio registrado, o que fala com o mundo é zago.eti.br, portando precisa configurar o cliente de e-mail com a conta de remetente usando zago@zago.eti.br, ou seja a conta do servidor externo (seu provedor) o endereço de maquina ou provedor quando for o do servidor interno o postfix com o SASL vai fazer relay no provedor, quando voce configurar os dados no cliente de e-mail com os dados do teu provedor estas mensagens não passarão pelo Postfix, portanto ficarão fora do controle de regras que voce tenha no teu servidor, pra evitar isto, voce pode configurar teu firewall pra não permitir que as estações envie e-mail diretamente.

Resumo geral - colinha do zago

Evite este tópico, não tem comentarios, é meu resumo de comandos para copiar e colar.

Pegar o nome da maquina (dominio). root@servmail# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.1.3 servmail.zago.eti.br servmail

instalar os pacotes, postfix, sasl, fetchmail, mailx e os opcionais lynx e wget

apt-get install postfix sasl2* fetchmail imap lynx wget mailx

Download dos modelos de configuração, download via wget.

  mv /etc/postfix/main.cf /etc/postfix/main.cf-original
  cd /etc/postfix/
  wget http://www.zago.eti.br/modelos/main.cf-cl10upd1
  cp main.cf-cl10upd1 main.cf
  cd /root
  wget http://www.zago.eti.br/modelos/fetchmailrc
  mv fetchmailrc .fetchmailrc

Importar configuração diretamente para dentro do editor "vi" + lynx, comandos;

  mv /etc/postfix/main.cf /etc/postfix/mainoriginal
  vi /etc/postfix/main.cf
  :r !lynx -dump http://www.zago.eti.br/modelos/main.cf-cl10upd1
  
  vi /root/.fetchmailrc
  :r !lynx -dump http://www.zago.eti.br/modelos/fetchmailrc

criar e ajustar arquivos, login, senhas, dominio....

  echo "smtp.seudominio.com.br seuusuario:suasenha" > /etc/postfix/sasl_passwd
  # Altere a linha acima pro seu dominio que foi informado no postfix,
  # pra editar depois da copia, use o vi: vi /etc/postfix/sasl_passwd
  # precisa de um "tab" pra separar dominio da conta:senha, exemplo:
  echo "smtp.zago.eti.br zago:minhasenha" > /etc/postfix/sasl_passwd
  
  # edite e ajuste os arquivos de configuração:
    vi /etc/postfix/main.cf
  myhostname = email.intranet.br
  mydomain = intranet.br
  relayhost = smtp.zago.eti.br
  
  altere estas opções acima conforme seu /etc/hosts, por exemplo:
  myhostname = servmail.zago.eti.br
  mydomain = zago.eti.br
  relayhost = smtp.zago.eti.br
  mynetworks = 192.168.1.0/24, 127.0.0.0/8
  onde relayhost é seu provedor que vai validar a saida de
  e-mail enviados pro mundo.
  
  Ou em uma tacada só, edite as linhas abaixo, mantenha a primeira referencia
  que é o termo de busca no arquivo e altere a segunda referencia para os teus 
  dados que serão objeto de troca no aqruivo e cole no terminal...
  
  sed -i "s/myhostname = servmail.zago.eti.br/myhostname = servmail.zago.eti.br/g" main.cf
  sed -i "s/mydomain = zago.eti.br/mydomain = zago.eti.br/g" main.cf
  sed -i "s/relayhost = smtp.zago.eti.br/relayhost = smtp.zago.eti.br/g" main.cf
  
  
  # ajustar login e senha no fetchmail pra baixar e sasl pra fazer relay
  vi /root/.fetchmailrc
  vi /etc/postfix/sasl_passwd
  
  
  # ajustar permissões, iniciar serviços e testar servidor...
  chown root.root /etc/postfix/sasl_passwd
  chmod 600 /etc/postfix/sasl_passwd
  postmap hash:/etc/postfix/sasl_passwd
  touch /var/log/fetchmaillog
  chmod 710 /root/.fetchmailrc
  # agendar o crontab pra executar fetchmail a cada 5 minutos
  crontab -e
   */5 * * * * /usr/bin/fetchmail -a
  chkconfig postfix on
  chkconfig xinetd on
  service postfix start
  service xinetd start
  df | mail zago -s  'uso do disco - via mailx!'
  cat /var/spool/mail/zago 

Chegou a mensagem? tudo OK?, então continue com os testes e implementação de outros serviços.

Não chegou?, Então inicie a solução de problemas pelos logs:

   tail -f /var/log/maillog
   tail -f /var/log/fetchmaillog

Tente resolver os problemas por parte, volte ao inicio e teste cada etapa, passe para o teste seguinte somente depois de obter resultado positivo na configuração em questão.

Indicações - serviços úteis no servidor de e-mail

O Procmail tem a finalidade de separar e filtrar mensagens, veja o FAQ:
http://www.zago.eti.br/email/procmail.txt

Blockmail - Filtro de anexos perigosos, veja tutorial e FAQ em
http://www.zago.eti.br/email/blockmail.txt

Webmail - Horde, uebmiau e outros, veja tutorial e FAQ em
http://www.zago.eti.br/email/webmail.txt

Anti-virus clamav e outros, veja tutorial e FAQ em
http://www.zago.eti.br/antivirus-tutoriais.txt
Página principal sobre E-mail
http://www.zago.eti.br/email/A-menu-email.html

Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html