Tutorial dividido em tópicos pra facilitar o entendimento e solução de problemas, principais tópicos neste tutorial:
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.
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.
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)
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.
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
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.
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
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
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
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
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
chkconfig imap on chkconfig imaps on
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
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
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.
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).
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.
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.