Postfix - Dicas, comandos e indicações de manterial para consulta.

Atualizado em: 23/07/2006



Sobre este documento

documento em elaboração, contém erros, nos proximos dias faço a correção e removo este aviso, preciso fazer novos testes e resolver estas mensagens de erro.

  Apr  4 03:51:17 localhost kernel: audit(1144133477.964:21): avc:  denied  { read write } for  pid=5173 comm="postmap" name="3" dev=devpts ino=5 scontext=user_u:system_r:postfix_map_t:s0-s0:c0.c255 tcontext=user_u:object_r:devpts_t:s0 tclass=chr_file
  Apr  4 03:51:17 localhost kernel: audit(1144133477.988:22): avc:  denied  { read } for  pid=5173 comm="postmap" name="stat" dev=proc ino=4026531853 scontext=user_u:system_r:postfix_map_t:s0-s0:c0.c255 tcontext=system_u:object_r:proc_t:s0 tclass=file
  Apr  4 03:51:17 localhost kernel: audit(1144133477.988:23): avc:  denied  { read } for  pid=5173 comm="postmap" name="cpuinfo" dev=proc ino=4026531851 scontext=user_u:system_r:postfix_map_t:s0-s0:c0.c255 tcontext=system_u:object_r:proc_t:s0 tclass=file
  Apr  4 03:51:17 localhost kernel: audit(1144133477.996:24): avc:  denied  { search } for  pid=5173 comm="postmap" name="root" dev=dm-0 ino=2162689 scontext=user_u:system_r:postfix_map_t:s0-s0:c0.c255 tcontext=root:object_r:user_home_dir_t:s0 tclass=dir

Tutorial (howto) como montar um servidor de e-mail para uso interno, uso em empresas que utilizam hospedam sites e servidores de e-mail externo e deseja baixar as mensagens para um servidor interno e aplicar mais regras no recebimento e envio de mensagens.

Ambiente; utilizado uma maquina da rede sem restrição no firewall, neste ambiente tem outra maquina fazendo NAT e rodando o proxy, segue um resumo do firewal que libera a maquina (servidor de e-mail) com IP 192.168.1.53;

      modprobe iptable_nat
  /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.53/32 -p tcp -m multiport  --dport 80,443 -j ACCEPT
  /usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      echo 1 > /proc/sys/net/ipv4/ip_forward

Estação com FC5 (x86_64) instalado com perfil estação de trabalho Gnome, navegando sem restrição de firewall, utilizando smart como gerenciador de pacotes, com outro gerenciador precisa ajustar a linha de comando, veja no menu quais os serviços já estão configurados e se tem alguma observação sobre o serviço.

Nesta configuração inclue a configuração e testes de funcionamento do Postfix, fetchmail, SASL e outros serviços que fazem parte de um servidor de e-mail

Postfix - instalar, configurar e testar

Instalar, configurar e testar o servidor de e-mail (postfix-2.2.8-1.2.x86_64).

Instalar pacote Postfix e mailx para testar o funcionamento

smart install postfix maix -y

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

  [root@localhost ~]# cat /etc/hosts
  # Do not remove the following line, or various programs
  # that require network functionality will fail.
  127.0.0.1               localhost.localdomain localhost
  192.168.1.53            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/fc5-postfix.txt, 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, mesmo assim precisa usar um editor de texto para ajustar a linha de comando para depois copiar e colar na linha de comando, depois os dados acima, execute estas linhas de comando;

  service postfix start
  chkconfig postfix on
  df | mail zago -s  'uso do disco - via mailx!'
  cat /var/spool/mail/zago 

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, seu servidor de e-mail externo, 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 com mais detalhes e log

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:

cp /etc/postfix/main.cf /etc/postfix/main.cf-original

Use seu editor preferido, caso queira usar o "vi" para importar este modelo de main.cf, execute dentro do do "vi" em modo comando:

:r !lynx -dump http://www.zago.eti.br/modelos/fc5-postfix.txt

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 /etc/postfix/main.cf:

  linha __ - Comente esta linha:
  default_privs = nobody
  Pra ficar assim:
  #default_privs = nobody
  
  linha __, 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 = aula.intranet.net
  
  (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 = intranet.net
  
  linha 100, retire o comentario(#):
  #myorigin = $myhostname
  #myorigin = $mydomain
  remova o comentário como abaixo:
  #myorigin = $myhostname
  myorigin = $mydomain
  
  linha 163 retire o comentario(#):
  
  mydestination = $myhostname, localhost.$mydomain, localhost
  #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
  
  trocar o comentário de linha
  #mydestination = $myhostname, localhost.$mydomain, localhost
  mydestination = $myhostname, localhost.$mydomain, localhost, $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
  
  [root@localhost postfix]# service postfix start
  Iniciando postfix:                                         [  OK  ]

Iniciar o Postfix sempre junto com o boot execute:

chkconfig postfix on

Testar envio de e-mail para usuário zago, execute o comando no próprio shell do servidor, 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!'

mailx faz parte dos pacotes em instalação indicada no inicio deste documento, caso falhe o comando mail, então instale o pacote mailx ou outro qualquer, via smart execute;

smart install mailx -y

Não ocorrendo erro no envio da mensagem, então confera se está tudo OK, se o e-mail chegou, execute no shell do próprio servidor;

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, veja o que retornou na minha instalação;

  [root@localhost postfix]# df | mail zago -s  'uso do disco - via mailx!'
  [root@localhost postfix]# cat /var/spool/mail/zago
  From root@localhost.localdomain  Tue Apr  4 01:32:14 2006
  Return-Path: <root@localhost.localdomain>
  Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
          by localhost.localdomain (8.13.5/8.13.5) with ESMTP id k344WERU004458
          for <zago@localhost.localdomain>; Tue, 4 Apr 2006 01:32:14 -0300
  Received: (from root@localhost)
          by localhost.localdomain (8.13.5/8.13.5/Submit) id k344WELk004457
          for zago; Tue, 4 Apr 2006 01:32:14 -0300
  Date: Tue, 4 Apr 2006 01:32:14 -0300
  From: root <root@localhost.localdomain>
  Message-Id: <200604040432.k344WELk004457@localhost.localdomain>
  To: zago@localhost.localdomain
  Subject: uso do disco - via mailx!
  
  Sist. Arq.           1K-blocos      Usad Dispon.   Uso% Montado em
  /dev/mapper/VolGroup00-LogVol00
                       112267896   3031600 103441276   3% /
  /dev/sda1               101086     10441     85426  11% /boot
  tmpfs                   286992         0    286992   0% /dev/shm
  

Outros comandos e dicas:

Lista um resumo da configuração; postconf -n

Lista toda a configuração; postconf

Após qualquer alteração nas configurações do postfix, precisa recarregar a configuração com; service postfix reload

Evite o uso do restart, 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 na rede interna, mesmo desconectado da internet as estações enviam e-mail para este servidor Postfix, serve unica e exclusivamente como 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 GNU/Linux e Windows, tem estações usando Evolution, Kmail, Outlouco e outras usando somente webmail ou FreeNX, 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 que libera ou bloqueaia o 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 contas no servidor interno ou não.

Acompanhar os logs em: /var/log/maillog tail -f /var/log/maillog

Neste exemplo retornou;

  Apr  4 01:32:14 localhost sendmail[4457]: k344WELk004457: from=root, size=329, class=0, nrcpts=1, msgid=<200604040432.k344WELk004457@localhost.localdomain>, relay=root@localhost
  Apr  4 01:32:14 localhost sendmail[4458]: k344WERU004458: from=<root@localhost.localdomain>, size=633, class=0, nrcpts=1, msgid=<200604040432.k344WELk004457@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
  Apr  4 01:32:14 localhost sendmail[4457]: k344WELk004457: to=zago, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30329, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (k344WERU004458 Message accepted for delivery)
  Apr  4 01:32:14 localhost sendmail[4459]: k344WERU004458: to=<zago@localhost.localdomain>, ctladdr=<root@localhost.localdomain> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30869, dsn=2.0.0, stat=Sent

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

netstat -na

tem que aparecer esta linha: tcp 0 0 127.0.0.1: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, ao tentar conexão via telnet a partir de outra maquina da rede com o comando telnet 192.168.1.53 25, retorna este erro;

  zago@suse64:~> telnet 192.168.1.53 25
  Trying 192.168.1.53...
  telnet: connect to address 192.168.1.53: Connection refused

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.

resumo de todos os comandos - copiar e colar

Minha colinha, resumo dos comandos que utilizo para copiar e colar.

  
  smart install postfix lynx -y
  smart install dovecot -y
  mv /etc/postfix/main.cf /etc/postfix/main.cf-original
  cat /etc/hosts > /etc/postfix/main.cf
  vi /etc/postfix/main.cf
  #dentro do "vi":
  :r !lynx -dump http://www.zago.eti.br/modelos/fc5-postfix.txt
  service postfix start
  chkconfig postfix on
  df | mail zago -s  'uso do disco - via mailx!'
  cat /var/spool/mail/zago

dovecot - servidor IMAP (POP) para as maquinas internas.

dovecot - Dovecot Secure imap server

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 (dovecot - Dovecot Secure imap server), já tem pacote da distro, veja o que retorna na pesquisa;

  [root@localhost postfix]# smart info dovecot-1.0-0.beta2.7@x86_64
  Nome: dovecot
  Versãoo: 1.0-0.beta2.7@x86_64
  Prioridade: 0
  Grupo: System Environment/Daemons
  Tamanho Instalado: 2.4MB
  URLs de referencia:
  Flags:
  Canais: FC5 x86_64 Linux packages apt-rpm repository on redhat
  Sumário: Dovecot Secure imap server
  Descrição:
   Dovecot is an IMAP server for Linux/UNIX-like systems, written with security
   primarily in mind.  It also contains a small POP3 server.  It supports mail
   in either of maildir or mbox formats

"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: smart install dovecot -y

Iniciar o serviço nesta seção: service dovecot start, quando Ok retorna;

  [root@localhost postfix]# service dovecot start
  Iniciando Dovecot Imap:                                    [  OK  ]
  
  Execute "tail -f /var/log/maillog" e deverá encontrar registro semelhante a este; 
  
  Apr  4 02:25:13 localhost dovecot: Dovecot v1.0.beta2 starting up

Iniciar o serviço junto com o boot da maquina: chkconfig dovecot on

Depois de reiniciar o dovecot, quando Ok abre algumas portas, veja os resultados de netstat -na, compare com resultado deste serviço parado e rodando, a difereça deve ser estas portas a mais.

  Proto Recv-Q Send-Q Local Address               Foreign Address             State
  
  tcp        0      0 :::993                      :::*                        OUÃA
  tcp        0      0 :::995                      :::*                        OUÃA
  tcp        0      0 :::110                      :::*                        OUÃA
  tcp        0      0 :::143                      :::*                        OUÃA

Testar o funcionamento do servidor pop.

Neste exemplo foi utilizado o kmail no SUSE 10, 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  
               adicionar  ## preencha os dados ....
  Onde conta de e-mail zago@intranet.net, claro que deve trocar para o seu usuário e nome da tua maquina.
               contas
                 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.53  #IP do servidor de e-mail ou nome quando rodar  DNS para as maquinas internas.
                   porta: 110
  
  Prontinho,  Ok, aplicar e OK, pra receber as mensagens de teste que estão no servidor basta um clique em "Verificar Correio em", quando Ok e configurado com login e senha do mesmo usuário utilizado no teste com mailx, receberá no kmail aquela mensagem do teste de disco, quando falhar, confira os dados e tente interpretar a mensagem de erro.
  
  
  Confira o que consta no log "tail -f /var/log/maillog". Quando receber as mensagens deve registrar algo neste formato;
  
  Apr  4 02:43:17 localhost dovecot: pop3-login: Login: user=<zago>, method=PLAIN, rip=::ffff:192.168.1.43, lip=::ffff:192.168.1.53
  Apr  4 02:43:17 localhost dovecot: pop3(zago): Logout. top=0/0, retr=1/ del=1/1, size=903
  
  
  
  configurações do Kmail para enviar mensagens:
      Menu Configurações
         Configurar kmail
             contas
                Enviando
                    Adicionar
                    (selecione SMTP)
                     preencha neste formato:
                   Nome: qualquer nome
                   Máquina: 192.168.1.53  #IP do servidor de e-mail ou nome quando rodar DNS para as maquinas internas.
                   porta: 25
  
  OK, aplicar e OK, em uma segunda instalação falhou, acho que errei ou esqueci algum detalhe. 

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

Transferir mensagens do provedor externo para o servidor local, baixar mensagens.

Instale e cofigure o Fetchmail somente em servidores que não respondem pelo dominio, ele é indicado para quem utiliza servidor externo para hospedar o dominio e contas de e-mail, quem não tem o MX redirecionado para o servidor interno, fetchmail faz um papel semelhante ao de um cliente de e-mail como Kmail ou Evolution, pega as mensagens no servidor externo e entrega ao Postfix local.

Portanto não utilize fetchmail quando tem o MX redirecionado para seu IP, neste caso o Postfix responde pelo dominio e recebe as mensagens diretamente, neste caso precisa configurar o DNS e outros serviços relacionados a comunicação com outros servidores na internet.

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;

smart install fetchmail -y

Configurando o Fetchmail

Apoveitando para lembrar do manual; man fetchmail

fetchmail - fetch mail from a POP, IMAP, ETRN, or ODMR-capable server

Webmin tem modulo de configuração do fetchmail.

Depois de instalado precisa configurar com dados das contas que deseja baixar mensagens para esta maquina.

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.

Meu .fetchmailrc abaixo, 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 minhasenha is zago here

Veja no FAQ sobre fetchmail, tem outros exemplos de configuração, outros provedores ou varias contas de provedores diferentes.

Utilize seu editor preferido na criação do 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
  
  Veja a mensagem (aviso) é desencorajado rodar como root
  [root@localhost ~]#   fetchmail
  fetchmail: WARNING: Running as root is discouraged.

Caso não ajuste a permissão como indicado acima vai ocorrer mensagem de erro relacionado a permissão.

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, 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, acompanhe os logs, execute:

tail -f /var/log/fetchmaillog

Não entendi como funciona a quebra de linha, a configuração para 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.

  smart install fetchmail -y
  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, veja mensagens que circulou na Linux-br sobre ete tema;

http://www.zago.eti.br/email/servidor-adsl-bloqueado.txt

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

Precisa instalar os pacotes do cyrus-sasl, caso ainda não instalou, execute;

smart install cyrus-sasl -y

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@localhost ~]# 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 fazer testes com envio de mensagens para o mundo, em uma estação da rede configurada para acessar este servidor interno, faça testes de envio de e-mail para o mundo, 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