Servidor Postfix Total

Neste artigo aprenderemos a configurar um servidor de e-mail completo com Postfix, Courier-IMAP, MySQL, Amavis_new, antivírus McAfee Uvscan, antispam SpamAssassin, POP-BEFORE-SMTP, PostfixAdmin e SquirrelWebmail.

[ Hits: 374.733 ]

Por: Kleber em 26/07/2004


Instalação e configuração do Amavis_new



A instalação do amavis não é difícil mas é um pouco chata por causa dos módulos do PERL, são vários módulos, para a instalação do amavis você precisa estar conectado, vamos usar o comando:

# perl -MCPAN -e "install modulo::perl"

Vamos ao módulos:
(Lista tirada da documentação do amavis_new)

Archive::Zip
Compress::Zlib
Convert::TNEF
Convert::UUlib
MIME::Base64
MIME::Parser
Mail::Internet
Net::Server
Net::SMTP
Digest::MD5
IO::Stringy
Time::HiRes
Unix::Syslog
Mail::SpamAssassin

Como foi dito a instalação é feita como no exemplo a seguir:

# perl -MCPAN -e "install Archiver::Zip"

Faça isso com todos os módulos listados acima.

Nota: A instalação do spamassassin é toda feita aqui, então não é preciso você baixar do site o spamassassin, a única coisa que você vai se preocupar e com o arquivo de configuração do spamassasin, no site http://www.yrex.com/spam/spamconfig.php tem um gerador automático do arquivo local.cf, nesse site você tem todas as informações necessárias para criar o arquivo, leia com bastante atenção. Vou colocar aqui um exemplo de como esse arquivo é:

# SpamAssassin config file for version 2.5x
# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)
# How many hits before a message is considered spam.
required_hits 10.0

# Whether to change the subject of suspected spam
rewrite_subject 0

# Text to prepend to subject if rewrite_subject is used
subject_tag *****SPAM*****

# Encapsulate spam in an attachment
report_safe 1

# Use terse version of the spam report
use_terse_report 0

# Enable the Bayes system
use_bayes 1

# Enable Bayes auto-learning
auto_learn 1

# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all

Há alguns softwares de sistema necessários também, aqui vai a lista deles, check se você tem esses softwares em seu sistema:
(Lista tirada da documentação do amavis_new)
Após a instalação de todas essas dependências vamos a instalação do amavis_new:

Crie um usuário e um grupo para o amavis_new:

# groupadd -g 1011 amavis
# useradd -s /bin/false -d /var/amavis -g 1011 -u 1011 amavis


Crie agora os diretórios necessários para o amavis_new:

# mkdir /var/amavis
# chown amavis.amavis -R /var/amavis
# chmod 750 -R /var/amavis

# mkdir /var/virusmails
# chown amavis.amavis -R /var/virusmails
# chmod 750 -R /var/virusmails


Descompacte o arquivo do amavis_new:

# tar -xvzf amavisd-new-20030616-p9.tar.gz

Entre dentro do diretório criado, vamos copiar alguns arquivos para diretórios específicos e mudar seus donos e permissões, são eles:

# cp amavisd /usr/sbin
# chown root.amavis /usr/sbin/amavisd
# chmod 750 /usr/sbin/amavisd

# cp amavisd.conf /etc/
# chown root.amavis /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf


Agora iremos configurar o arquivo de o /etc/amavisd.conf, vou colocar aqui as opções que eu julguei importantes para o meu ambiente. Esse arquivo é bem extenso, então dê uma boa olhada em /etc/amavisd.conf.

$MYHOME = '/var/amavis';
$mydomain = 'dominio.com.br';
$myhostname = 'maquina.dominio.com.br';
$daemon_user = 'amavis';
$daemon_group = 'amavis';
$TEMPBASE = $MYHOME;

$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;

Se você deseja notificar as pessoas que estão enviando vírus, spam, ou os seus usuários que estão recebendo esses emails, você pode personalizar essas notificações usando essas variáveis:

Por default elas vem comentadas, se você deseja personalizar é só descomentar e criar os arquivos especificados, eu preferi usar as mensagens que vem dentro do arquivo /usr/sbin/amavisd, apenas traduzindo essas mensagens para português.

$notify_sender_templ = read_text('/var/amavis/sender.txt');
$notify_virus_sender_templ= read_text('/var/amavis/virus_sender.txt');
$notify_virus_admin_templ = read_text('/var/amavis/virus_admin.txt');
$notify_virus_recips_templ= read_text('/var/amavis/virus_recip.txt');
$notify_spam_sender_templ = read_text('/var/amavis/notify_spam_sender.txt');
$notify_spam_admin_templ = read_text('/var/amavis/spam_admin.txt');

Aqui você define se as mensagens que contém virus ou spam devem passar ou não, os valores que você pode usar são D_BOUNCE, D_PASS, D_REJECT e D_DISCARD, se você usa D_PASS ou D_BOUCE todas as mensagens que chegarem com virus, o amavis notificara quem enviou o vírus e quem esta recebendo vírus e spam, eu achei melhor usar a opção D_DISCARD, usando essa opção você pode usar as variáveis que você desejar, $warnvirussender, $warnvirusrecip etc. Com o uso dessas variáveis o amavis vai notificar só quem você achar melhor, no meu caso não vou notificar quem esta enviando o vírus ou spam, somente quem esta recebendo, para evitar os spammers que usam a proliferação de vírus pra saber quais contas estão ativas ou não, no manual do Marco, ele deixa a variável $final_spam_destiny como D_PASS isso deixa o spam passar, mas assinala a mensagem com um ****SPAM****, eu preferi não deixar spam nenhum passar, mas isso você decide :), como você pode ver, só deixei as mensagens com um cabeçalho mal formado passar, o resto fica como D_DISCARD, o D_DISCARD vai rejeitar a mensagem e não vai retornar nada para quem está enviando D_REJECT retorna o erro para quem esta enviando a mensagem, as próximas linhas definem quem vai ou não receber a notificação.

$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested

Aqui você define quem vai ou não receber as notificações, no meu caso deixei somente o recipiente receber as notificações. Deixando a linha comentada o valor da variável e false, então descomente a linha que você desejar.

# Notify virus sender?
#$warnvirussender = 1;

# Notify spam sender?
#$warnspamsender = 1;

# Notify sender of banned files?
#$warnbannedsender = ; #

# Notify sender of syntactically invalid header containing non-ASCII characters?
#$warnbadhsender = 1;

# Notify virus (or banned files) RECIPIENT?
$warnvirusrecip = 1;
#$warnbannedrecip = 1;

A próxima configuração é para estabelecer qual o email do notificador do sistema, eu usei o postmaster, mas você pode usar quem achar melhor.

$virus_admin = "postmaster\@$mydomain";
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain
$hdrfrom_notify_sender = "postmaster ";


Aqui definimos qual diretório vai ser usando para a quarentena.

$QUARANTINEDIR = '/var/virusmails';

Aqui definimos quais as extensões de arquivos queremos proibir. No meu caso eu barrei extensões (vbs, pif, src, bat, cmd, com) faça da maneira que achar melhor.

$banned_filename_re = new_RE (

# qr'^UNDECIPHERABLE$', # is or contains any undecipherable components
# qr'\.[^.]*\.(vbs|pif|scr|bat|cmd|com|dll)$'i, # double extension
qr'.\.(exe|vbs|pif|scr|bat|cmd|com)$'i, # banned extension - basic
# qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
# jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
# vbe|vbs|wsc|wsf|wsh)$'ix, # banned extension - long
# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, # banned extension - WinZip vulnerab.
# qr'^\.(zip|lha|tnef|cab)$'i, # banned file(1) types
# qr'^\.exe$'i, # banned file(1) types
# qr'^application/x-msdownload$'i, # banned MIME types
qr'^application/x-msdos-program$'i,
# qr'^message/partial$'i, qr'^message/external-body$'i, # block rfc2046
);

Aqui ficam as configurações para o antivírus, como eu disso vou usar o Mcafee Antivírus pra linux, eu comentei todas as outras linhas referentes a outros antivírus. Caso queira usar outro antivírus é só instalar o software o amavis_new cuida do resto sozinho.

### http://www.nai.com/
['NAI McAfee AntiVirus (uvscan)', 'uvscan',
'--secure -rv --mime --summary --noboot - {}', [0], [13],
qr/(?x) Found (?:\ the\ (.+)\ (?:virus|trojan) |
\ (?:virus|trojan)\ or\ variant\ ([^ ]+) |
:\ (.+)\ NOT\ a\ virus)/,
# sub {$ENV{LD_PRELOAD}='/lib/libc.so.6'},
# sub {delete $ENV{LD_PRELOAD}},
],

NOTA: Como explicado no começo do documento, a instalação do uvscan é bem simples. Então é só seguir as perguntas da instalação e pronto.

Para iniciar o amavis_new é só digitar o seguinte comando:

# amavisd -c /etc/amavisd.conf start

E para pará-lo é só digitar:

# amavisd stop

Eu criei um script bem simples em /etc/rc.d/rc.amavisd com o seguinte conteúdo:

#!/bin/sh

amavis_start() {
/usr/sbin/amavisd -c /etc/amavisd.conf start
}

amavis_stop() {
/usr/sbin/amavisd stop
}

case "$1" in
'start')
amavis_start
;;
'stop')
amavis_stop
;;
'restart')
amavis_stop
sleep 3
amavis_start
;;
*)
echo "usage $0 start|stop|restart"
esac

NOTA: Notem que é bem simples mesmo, foi só pra mostrar uma maneira de iniciar, parar e restartar o amavis, sinta-se livre para fazer da maneira que achar melhor :).

Bom, eu ainda não vou falar aqui como configurar o amavis_new com o Postfix, isso vai ser feito na próxima seção onde iremos cobrir os dois arquivos principais da configuração do Postfix.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Softwares necessários
   3. Instalação do Postfix
   4. Instalação do POP-BEFORE-SMTP
   5. Instalação e configuração do Courier-IMAP
   6. Instalação e configuração do Amavis_new
   7. Configuração do main.cf e master.cf
   8. Instalação e configuração do PostfixAdmin
   9. Instalação e configuração do SquirrelWebmail
   10. Testando o sistema
   11. Fontes de pesquisa
   12. Sobre o autor
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Implantação de um Sistema de Workgroup Open Source

MailScanner - Email Gateway Virus Scanner

Servidor Postfix com Fedora Core 4

Enviando e-mail pelo shell com smtp remoto

Post-la - Gerador de relatórios para o Postfix

  
Comentários
[1] Comentário enviado por nunix79 em 26/07/2004 - 19:26h

Artigo excelente meus parabéns, é de grande valia.

Fabio Nunes

[2] Comentário enviado por wconserta em 26/07/2004 - 20:35h

Nota 10 pelo artigo , e notei que vc mesmo tendo usado o shack procurou deixar o artigo de modo que todos possam usar independente de distro, vou procura estudar seu artigo mais o do Maximo para fazer meu server de e-mail

Parabens

[3] Comentário enviado por y2h4ck em 26/07/2004 - 22:36h

O artigo ta massa ... so faltou falar do SpamAssassin

[4] Comentário enviado por gustavo_marcon em 27/07/2004 - 08:59h

Também achei ótimo o artigo, mas concordo que faltou falar + do SpamAssassin.... Estou precisando montar um "servidor de email remoto" para pegar emails de contas de servidores como Bol. BrTurbo, etc e passar um antispam do porte do Spam Assassin. Entrei no artigo só para ler a respeito dele, mas como falei ele está falho neste ponto. No mais o artigo está ótimo e veio complementar outros já existentes deixando assim nosso site ainda mais completo nesse aspecto.

Falow galera! Quem tiver dicas sobre Fetchmail + SpamAssassin porfavor me mandem!!!!!

[5] Comentário enviado por klinux em 27/07/2004 - 09:08h

Obrigado pelos comentários,
Vou atualizar o doc em breve, falando mais sobre spamassassin e greylist.
Obrigado mesmo :) é assim que a comunidade cresce :)

[6] Comentário enviado por gustavo_marcon em 27/07/2004 - 09:14h

Blz é assim que a coisa anda. Obrigadão mesmo, tô precisando mesmo do SpamAssassin. Falow galera!

[7] Comentário enviado por jeffestanislau em 27/07/2004 - 14:23h

Muito bom mesmo o artigo... Parabéns... e os acrescimos futuros serão de grande valia!!!
Novamente, parabéns klinux!!!

[8] Comentário enviado por guifreitas em 27/07/2004 - 17:06h

Jul 27 17:05:13 catatau postfix/trivial-rewrite[21635]: fatal: open dictionary: need "type:name" form instead of: "virtual"
Jul 27 17:05:14 catatau postfix/master[20202]: warning: process /usr/lib/postfix/trivial-rewrite pid 21635 exit status 1
Jul 27 17:05:14 catatau postfix/master[20202]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup -- throttling

transport_maps = virtual

virtual o que?

[9] Comentário enviado por klinux em 27/07/2004 - 17:18h

Me desculpe, tem que fazer uma inclusao na tabela domain, incluindo o campo transport, irei coloar as informacoes no doc original!

[10] Comentário enviado por klinux em 27/07/2004 - 17:51h

Caro guifreitas, realmente foi um descuido meu, olhe em http://200.96.158.74/postfix_tutorial.htm
la adicionei o que e necessário para funcionar, qualquer coisa entre em contato, obrigado.

[11] Comentário enviado por guifreitas em 27/07/2004 - 17:57h

valeu klinux
e parabéns pelo doc, muito fera!
ps.: esta rodando em debian!

[12] Comentário enviado por y2h4ck em 02/08/2004 - 10:04h

Aug 2 07:05:31 beowulf postfix/cleanup[3078]: fatal: /etc/postfix/mysql_virtual_alias_maps.cf: mysql options file does not include table name

to tendo esse problema ... mas veja o meu arquivo

[root@beowulf /]# cat /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user=post
password=******
dbname=postfix
table=mailbox
select_field=quota
where_field=username
hosts=localhost

[root@beowulf /]#

alguem sabe oq ta pegando ... ele gera esse log de erro toda vez que eu restarto o postfix ...
e ele nao esta enviando emails ...
fica tudo amontoado ...
mailq mostra que nao foram enviados ...

alguem sabe como arrumar ?

[13] Comentário enviado por eduardort em 13/08/2004 - 17:29h

Quando vou rodar o script de criação das tabelas do bando de dados, está me voltando a seguinte mensagem:

bash-2.05b# mysql -p < postfix.db
Enter password:
ERROR 1062 at line 4: Duplicate entry 'localhost-postfix' for key 1

Detalhe importante, eu estou usando Freebsd 4.9

Valeu

[14] Comentário enviado por trgtecno em 05/11/2004 - 18:43h

você é um cara paciente e dedicado. Parabéns.

[15] Comentário enviado por lamba0 em 09/12/2004 - 20:02h

esta me dando esse erro na hora do make install...
gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/bin/mysql -g -O -I. -I../../include -DLINUX2 -c dict_mysql.c
dict_mysql.c:118: mysql.h: No such file or directory
make: *** [dict_mysql.o] Error 1
make: *** [update] Error 1
o mysql foi instalado com o apt-get do debian... saberia me dizer o que preciso mudar na hora do "make -f" ? pois coloquei /usr/bin e não deu certo...
Valew

[16] Comentário enviado por martinws em 03/01/2005 - 08:52h

Para min esta dando o mesmo erro acima, mais na hora do
# make

eu uso slackware linux 10.0
alguem saberia me dizer onde eu baixo as lib necessarias para a distro slack 10 ?

Muito obrigado

[17] Comentário enviado por paulsantos em 17/03/2005 - 19:14h

Estou com este erro. Alguém poderia me ajudar? Uso o fedora core2

gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/include/mysql -g -O -I. -I../../include -DLINUX2 -o master master.o master_conf.o master_ent.o master_sig.o master_avail.o master_spawn.o master_service.o master_status.o master_listen.o master_vars.o master_wakeup.o master_flow.o ../../lib/libglobal.a ../../lib/libutil.a /usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -ldb -lnsl -lresolv
/usr/lib/mysql: file not recognized: à um diretório
collect2: ld returned 1 exit status
make: ** [master] Erro 1
make: ** [update] Erro 1

[18] Comentário enviado por ximenes10 em 21/03/2005 - 11:37h

o meu esta dando o meso erro :
______________________________________
dict_mysql.c: At top level:
dict_mysql.c:730: error: parse error before '*' token
dict_mysql.c:731: warning: `plmysql_dealloc' was used with no prototype before its definition
dict_mysql.c: In function `plmysql_dealloc':
dict_mysql.c:734: error: `PLDB' undeclared (first use in this function)
make: *** [dict_mysql.o] Error 1
make: *** [update] Error 1
root@canoa:~/programas/postfix-2.2.1#
_______________________________________
Qual e o problema? Sou Slack 10.1

[19] Comentário enviado por tardego em 05/08/2006 - 06:33h

que erro é este? eu uso o conectiva 10

make -f Makefile.in MAKELEVEL= Makefiles
(echo "# Do not edit -- this file documents how Postfix was built for your machi
ne."; /bin/sh makedefs) >makedefs.tmp
No <db.h> include file found.
Install the appropriate db*-devel package first.
See the RELEASE_NOTES file for more information.
make: ** [Makefiles] Erro 1
make: ** [makefiles] Erro 2

[20] Comentário enviado por vinicius.almeida em 25/08/2006 - 10:29h

Tenho este servidor de email aqui na empresa como teste gostaria de colocar um bloqueio de anexos (exe,dll,bat) como faria isso, alguem poderia me passar um tutorial passo a passo..

[21] Comentário enviado por removido em 18/10/2006 - 19:26h

aqui deu o mesmo erro do paulsantos e eu resolvi modificando a linha de comando ^^

ficou assim:
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql' 'AUXLIBS=/usr/lib/mysql/libmysqlclient.so -lz -lm -L/usr/lib'

[22] Comentário enviado por luizfernando_f em 17/03/2007 - 09:35h

Excelente artigo,

Obrigado pela dica..........vou fazer isto que você diz no seu artigo.......tomara que resolva la.....vlw.......Parabéns pelo artigo

[23] Comentário enviado por jonathanrock em 15/04/2007 - 20:38h

Está dando alguns erros pode ajudar ?

[24] Comentário enviado por andrentfs em 05/05/2007 - 23:11h

Desenvolvi um script para configurar o servidor postfix e disponibilizei no meu site, só que faltam alguns ajustes, conto com a ajuda de todos, o script faz toda a instalação do servidor, só que faltam algumas coisas, preciso da colaboração de todos, meu site é www.andreluiz.eti.br/index.php, espero que me ajudem a concluir esta tarefa, desde já muito obrigado.

Sejá forte, use software livre.

[25] Comentário enviado por gzanatta00 em 05/06/2007 - 08:13h

amigo estou com um problema q ja me atormenta
a muito tempo, meu servidor de e-mail envia e recebe
e-mails por um unico ip ex: 200.180....3,
que esta configurado dentro do bind ex:
pop3 IN A 200.180....3
smtp IN A 200.180....3
mail IN A 200.180.....3
E DENTRO DOs .cf que esta no diretorio
/etc/postfix, ..... entao eu pensei o seguinte
fazer com que o servidor enviasse e-mails pelo ip
200.180....4, e recebesse pelo ip 200.180...3
pq estou caindo quase todos os dias nas listas negras
e ja me cansei se ficar liberando e tal....
so que nao sei qual os arquivos q tenho q mudar...
ou se existe outra forma de acabar com isso

me de uma ajuda ai..

[26] Comentário enviado por linhocbj em 06/12/2007 - 16:22h

Ola pessoal.

Cara , seu artigo esta show.. fui fazendo direitinho, mas dai Parei no mesmo lugar que o amigo guifreitas ..

"""fatal: open dictionary: need "type:name" form instead of: "virtual"
No link que vc passou para elem, naum esta mais disponivel... alguem me ajude por favor.

Grato..

[27] Comentário enviado por rodrigosalmeida em 07/01/2008 - 00:49h

Boa... esse artigo está muito bem explicado...muito didático...Parabens...

[28] Comentário enviado por tecnoplace em 16/02/2008 - 17:47h

Quando vou rodar o script de criação das tabelas do bando de dados, está me voltando a seguinte mensagem:

bash-2.05b# mysql -p < postfix.db
Enter password:
ERROR 1062 at line 3: Duplicate entry 'localhost-postfix' for key 1

Detalhe importante, eu estou usando UNBUNTU 7.10

Valeu

[29] Comentário enviado por volcom em 21/02/2008 - 15:42h

Fala Klinux!!

Preciso fazer meu Postfix enviar as mensagens do Mailman...internamente tudo funciona, quando crio uma nova lista, envia mensagem administrativa tanto para o meu domínio quanto para outro domínio, mas quando eu envio mensagem para a lista, nenhum dos membros recebe, não aparece nada para os mederadores e não ocorre o envio.

Será que tem alguma luz? hehehe

Utilizo Debia Etch...

Abraço

[30] Comentário enviado por ttater em 11/01/2010 - 10:48h

Olá estou tendo dificuldades no momento do make install: (Ubuntu 9.10 -Desktop)

gcc -Wmissing-prototypes -Wformat -DHAS_MYSQL -I/usr/include/mysql -DHAS_PCRE -g -O -I. -I../../include -DLINUX2 -o master master.o master_conf.o master_ent.o master_sig.o master_avail.o master_spawn.o master_service.o master_status.o master_listen.o master_vars.o master_wakeup.o master_watch.o master_flow.o ../../lib/libglobal.a ../../lib/libutil.a /usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -L/usr/lib -lpcre -ldb -lnsl -lresolv
/usr/bin/ld: /usr/lib/mysql: No such file: File format not recognized
collect2: ld returned 1 exit status
make: ** [master] Erro 1
make: ** [update] Erro 1

Obrigado.

[31] Comentário enviado por terciocosta em 16/06/2010 - 11:11h

o postfix funciona com o oracleXE ao invez do MySql?

[32] Comentário enviado por carlos domingues em 05/07/2012 - 17:24h

Ao enviar o Email de teste pelo console, deu erro 451 4.3.5 Server Configuration error.
Já verifiquei todas as minhas configurações e não consegui achar nada. Agradeço imensamente se alguem puder ajudar me.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts