Estou migrando e atualizando essa WIKI por enquanto ainda nao está funcional.

objetivo

Ter um servidor de e-mail funcional usando postfix e mysql para armazenar as contas.

informações

Este artigo aborda a configuração de um servidor de e-mail completo, com as seguintes características…..

  • Debian Lenny

ferramentas

  • postfix
  • postfix mysql support
  • postfix tls support
  • courier authlib
  • courier mysql support
  • courier imap
  • courier imap-ssl
  • courier pop
    • courier pop-ssl
    • sasl2
    • clamav
    • spamassassin
    • amavisd-new
    • razor
    • pyzor
    • postgrey
    • postfix-policyd-spf-perl
    • mailman
    • mailgraph
    • queuegraph
    • couriergraph
    • pfqueue
    • pflogsum
    • roundcube-webmail

    mao na massa

mysql

instalando

aptitude install mysql-server-5.0

sete a senha na instalação

postfixadmin

entre no diretório tmp

cd /tmp

agora vamos fazer o download do programa

wget http://ufpr.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.2/postfixadmin-2.3.2.tar.gz

vamos descompactar

tar zxvf postfixadmin-2.3.2.tgz

entre no diretório

cd postfixadmin-2.3.2

configure o arquivo config.inc.php

$CONF['configured'] = false;

para

$CONF['configured'] = true;

vamos criar o banco, acesse o console do mysql e execute

CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'suasenha';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
FLUSH PRIVILEGES;

após criar o banco acesse a URL e configure o sistema, ele irá popular o banco no instalador.

http://www.seuservidor.com.br/postfixadmin/setup.php

postfix

instalando o programa

apt-get install postfix postfix-doc postfix-mysql

vmail

O seu sistema pode ter milhares de caixas postais de usuários. Provavelmente você não quer que cada usuário tenha um ID, desta forma utilizaremos o vmail que é um pseudo-usuário para que ele se torne dono das caixas postais.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

dentro do diretorio do vmail ficaram as contas dos dominios virtuais

cd /home/vmail/dominio.com.br/jose
ls -lah /home/vmail

sasl2

O SASL permite que um usuário consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's liberados para relay, no postfix é configurado na linha “mynetworks” no arquivo main.cf.

O requisito para enviar email é que o usuário exista no sistema. Isso é um ótimo recurso, pois o usuário onde estiver pode enviar email pelo seu servidor, sem que você precise liberar o “Relay” para todo mundo.

aptitude install libsasl2 libsasl2-modules libsasl2-modules-sql
mkdir /etc/postfix/sasl/
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: suasenha
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username = '%u@%r'
sql_verbose: yes
log_level: 10
ln -s /etc/postfix/sasl/smtpd.conf /usr/lib/sasl2/

A senha deve estar plain text no banco, senão não autentica.

chown root:postfix /etc/postfix/sasl/smtpd.conf
chmod u=rw,g=r,o= /etc/postfix/sasl/smtpd.conf

tls certs

vamos entrar no diretório do postfix

cd /etc/postfix
mkdir tls
cd tls

vamos gerar o certificado para conexoes seguras no MTA.

openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 999 -x509

procure preencher como o exemplo abaixo:

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:MS
Locality Name (eg, city) []:CGR
Organization Name (eg, company) [Internet Widgits Pty Ltd]: empresa dominio.com.br
Organizational Unit Name (eg, section) []:nocc, network operation command center
Common Name (eg, YOUR name) []:admin
Email Address []: admin@dominio.com.br

insira as seguintes linhas no arquivo /etc/postfix/main.cf, pode ser no final do arquivo

vim /etc/postfix/main.cf
smtpd_use_tls = yes 
smtpd_tls_cert_file = /etc/postfix/tls/postfix.cert 
smtpd_tls_key_file = /etc/postfix/tls/postfix.key 
smtpd_data_restrictions = reject_unauth_pipelining

insira as linhas abaixo no master.cf

vim /etc/posfix/master.cf
tlsmgr unix - - n 300 1 tlsmgr
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

conexao mysql

veja se o postfix esta com suporte ao mysql habilitado

postconf -m
  • btree
  • cidr
  • environ
  • hash
  • mysql
  • nis
  • proxy
  • regexp
  • sdbm
  • static
  • tcp
  • unix

crie os arquivos abaixo e ajuste a senha

cd /etc/postfix
mkdir mysql
cd mysql
vim mysql_relay_domains_maps.cf
user = postfix
password = '''suasenha'''
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
vim mysql_virtual_alias_maps.cf
user = postfix
password = '''suasenha'''
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
vim mysql_virtual_domains_maps.cf
user = postfix
password = '''suasenha'''
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
vim mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = '''suasenha'''
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
vim mysql_virtual_mailbox_maps.cf
user = postfix
password = '''suasenha'''
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

arquivos criados agora vamos fazer ajustes finais no master.cf e main.cf

master.cf

root@voyager:~# vim /etc/posfix/master.cf
#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps     inet  n       -       -       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628      inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       -       300     1       oqmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       -       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       -       -       -       smtp
        -o fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
#
# ==================================================================== 
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
 flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
 flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
#mailman   unix  -       n       n       -       -       pipe
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user} 

# configuracoes tls
tlsmgr unix - - n 300 1 tlsmgr
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

main.cf

editando arquivo main.cf

root@voyager:~# vim /etc/posfix/main.cf

### configuracoes globais #######################################

# não se esqueça de ajustar as diretivas MYNETWORKS, MYHOSTNAME, MYDESTINATION
 
smtpd_banner = $myhostname ESMTP $mail_name (ubuntu)
biff = no
 
# appending .domain is the MUA's job.
append_dot_mydomain = no

myhostname = mail.seudominio.net

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

myorigin = /etc/mailname
mydestination = mail.seudominio.net, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 192.168.1.0/24 201.41.xx.xx/29
recipient_delimiter = +
inet_interfaces = all

# tamanho maximo de caixa postal
mailbox_size_limit = 50000000

# tamanho maximo de mensagem
message_size_limit = 10240000
 
### otimizando #########

# how long if undelivered before sending warning update to sender
delay_warning_time = 4h

# will it be a permanent error or temporary
unknown_local_recipient_reject_code = 450

# how long to keep message on queue before return as failed.
# some have 3 days, I have 16 days as I am backup server for some people
# whom go on holiday with their server switched off.
maximal_queue_lifetime = 7d

# max and min time in seconds between retries if connection failed
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s

# how long to wait when servers connect before receiving rest of data
smtp_helo_timeout = 60s

# how many address can be used in one message.
# effective stopper to mass spammers, accidental copy in whole address list # but may restrict intentional mail shots.
smtpd_recipient_limit = 16
# how many error before back off.
smtpd_soft_error_limit = 3
# how many max errors before blocking it.
smtpd_hard_error_limit = 12

### configuracoes dos dominios virtuais #############

virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /home/vmail/

### armazenamento de mensagens dos dominios virtuais #####################

virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual

### configuraoes de quota ##############################

virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the your maildir has overdrawn your diskspace quota, please free up some of spaces of your mailbox try again.
virtual_overquota_bounce = yes

### configuracoes tls e sasl ##################################

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/tls/postfix.cert
smtpd_tls_key_file = /etc/postfix/tls/postfix.key
smtpd_data_restrictions = reject_unauth_pipelining
 
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
 
### configuracoes de restricoes ##########################

smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes
strict_rfc821_envelopes = yes

### necessario pra clamav-filter ####
# quanto tempo um comando externo pode rodar antes de dar timeout

command_time_limit = 1h

### restricao durante o HELO/EHLO
smtpd_helo_restrictions =
        permit_mynetworks,
        warn_if_reject,
        reject_non_fqdn_hostname,
        reject_invalid_hostname,
        permit 

### detalhes necessarios para o sender
smtpd_sender_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_non_fqdn_sender,
        reject_unknown_sender_domain,
        reject_unauth_pipelining,
        permit

### restricao para servidores que estao conectando (apos helo/ehlo)
smtpd_client_restrictions =
        #reject_rbl_client sbl.spamhaus.org,
        #reject_rbl_client bl.spamcop.net,
        permit

### restricao aplicada aos recipientes
smtpd_recipient_restrictions =
        reject_unauth_pipelining,
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unauth_destination,
        reject_invalid_hostname,
        reject_rbl_client sbl.spamhaus.org,
        reject_rbl_client bl.spamcop.net,
        permit

policy_time_limit = 3600

inet_protocols = ipv4

courier

pop, imap e ssl

instalando os programas

apt-get install courier-authdaemon courier-authlib-mysql  courier-pop courier-pop-ssl courier-imap courier-imap-ssl

Bom nós instalamos o courier-imap-ssl e couirer-pop-ssl, o pacote do ubuntu cria o certificado pra gente, mas vamos criar o nosso personalizado como fizemos acima.

cd /etc/courier

criando o certificado para conexões imap seguras (IMAP-SSL)

openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999

preencha conforme o exemplo

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:MS
Locality Name (eg, city) []:CGR
Organization Name (eg, company) [Internet Widgits Pty Ltd]: empresa dominio.com.br
Organizational Unit Name (eg, section) []:nocc, network operation command center
Common Name (eg, YOUR name) []:admin
Email Address []: admin@dominio.com.br

certifique-se que o arquivo /etc/courier/imapd-ssl esta com a linha abaixo

TLS_CERTFILE=/etc/courier/imapd.pem

criando o certificado para conexões pop3 seguras (POP3-SSL)

openssl req -x509 -newkey rsa:1024 -keyout pop3d.pem -out pop3d.pem -nodes -days 999

preencha conforme o exemplo

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:MS
Locality Name (eg, city) []:CGR
Organization Name (eg, company) [Internet Widgits Pty Ltd]: empresa dominio.com.br
Organizational Unit Name (eg, section) []:nocc, network operation command center
Common Name (eg, YOUR name) []:admin
Email Address []: admin@dominio.com.br

certifique-se que o arquivo /etc/courier/pop3d-ssl esta com a linha abaixo

TLS_CERTFILE=/etc/courier/pop3d.pem

conexao mysql

Configurar o courier para autenticar no MySQL:

As configurações default dos arquivos imapd e pop3d, ao meu ver, já são boas. Altere caso você sinta necessidade.

Edite o /etc/courier/authmysqlrc. Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações.

cd /etc/courier
vim /etc/courier/authmysqlrc
MYSQL_SERVER            127.0.0.1
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          suasenha
MYSQL_PORT              0
MYSQL_OPT               0
MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        mailbox
MYSQL_CLEAR_PWFIELD     password
MYSQL_UID_FIELD         5000
MYSQL_GID_FIELD         5000
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        /home/vmail
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota

agora vamos editar o arquivo authdaemonrc

vim /etc/courier/authdaemonrc

procure a linha authmodulelist e ajuste conforme abaixo:

authmodulelist="authmysql"

agora vamos ajustar os avisos de quota do courier

copiar o arquivo de exemplo warning de cota:

cp /usr/share/doc/courier-base/examples/quotawarnmsg.example quotawarnmsg
vim /etc/courier/quotawarnmsg

Ajuste o arquivo quotawarnmsg de acordo com suas necessidades.

ele deve ficar parecido com o abaixo:

X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes
X-Comment: See deliverquota man page for more information
From: Mail Delivery System <guto@gutocarvalho.net>
Reply-To: guto@gutocarvalho.net
To: Valued Customer:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Your mailbox on the server is now more than 90% full. So that you can continue
to receive mail you need to remove some messages from your mailbox. 

Sua caixa-postal no servidor esta com mais de 90% do espaço utilizado. Para continuar
recebendo e-mails por favor remova algumas mensagens de sua caixa.

Obrigado.

reiciando daemods…

/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart

agora vamos testar…

primeiro o imap

root@voyager:/etc/courier# /etc/courier# telnet localhost 143
Trying 0.0.0.0...
 
Connected to 0.
 
Escape character is '^]'.

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT 
THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. 
Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.
 
0 logout
 
* BYE Courier-IMAP server shutting down
 
0 OK LOGOUT completed
  
Connection closed by foreign host.

agora o pop

root@voyager:/etc/courier# telnet localhost 110
Trying 0.0.0.0... 
 
Connected to 0.
 
Escape character is '^]'.
 
+OK Hello there.

quit
 
+OK Better luck next time.

Connection closed by foreign host.

Ok, os serviços POP e IMAP estão ativos, vamos ao restante das configurações

addons

postgrey

instalando o programa

root@voyager:~# apt-get install postgrey

edite o /etc/default/postgrey

root@voyager:~# vim /etc/default/postgrey

e ajuste a linha existente, deixando como abaixo

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60"

isto ajusta o tempo de tentativas do servidor.

Devemos ajustar a configuração do smtpdrecipientrestrictions no arquivo main.cf

root@voyager:~# vim /etc/postfix/main.cf
smtpd_recipient_restrictions = 
       reject_unauth_pipelining, 

permitmynetworks, rejectnonfqdnrecipient, rejectunknownrecipientdomain, rejectunauthdestination, checkpolicy_service inet:127.0.0.1:60000, permit

Essa ultima linha é referente ao postgrey.

o postgrey tem os seguintes arquivos a configurar:

/etc/postgrey/whitelist_clients
/etc/postgrey/whitelist_recipients

o conteúdo é auto-explicativo, são listas brancas ou seja o que estiver ali é liberado.

postfix-policyd-spf-perl

este programa vai fazer checagens SPF nas mensagens tratadas pelo servudor

instalando o programa

apt-get install postfix-policyd-spf-perl

ajustando o main.cf vamos alterar a configuração do smtpdrecipientrestrictions inserindo a seguinte linha antes da checagem do postgrey

check_policy_service unix:private/policy

ficaria assim:

smtpd_recipient_restrictions =
      reject_unauth_pipelining,
      permit_mynetworks,
      permit_sasl_authenticated,
      reject_non_fqdn_recipient,
      reject_unauth_destination,
      check_policy_service unix:private/policy
      check_policy_service inet:127.0.0.1:60000
      permit

ajustando o master.cf

insira esta linha antes das configurações TLS e do clamav-filter.

policy  unix  -       n       n       -       -       spawn
          user=nobody argv=/usr/bin/perl /usr/sbin/postfix-policyd-spf-perl

antispam

clamav

spamassassin

amavisd-new

aptitude install amavisd-new clamav spamassassin

reiniciando daemons

porém antes vamos reiniciar os daemons

parando tudo

root@voyager:~# /etc/init.d/courier-imap-ssl stop
root@voyager:~# /etc/init.d/courier-imap stop
root@voyager:~# /etc/init.d/courier-pop-ssl stop
root@voyager:~# /etc/init.d/courier-pop stop
root@voyager:~# /etc/init.d/courier-authdaemon stop
root@voyager:~# /etc/init.d/postfix stop
root@voyager:~# /etc/init.d/spamassassin stop
root@voyager:~# /etc/init.d/clamav-daemon stop
root@voyager:~# /etc/init.d/clamav-freshclam stop
root@voyager:~# /etc/init.d/postgrey stop
root@voyager:~# /etc/init.d/amavisd-new stop

iniciando tudo

root@voyager:~# /etc/init.d/courier-authlib start
root@voyager:~# /etc/init.d/courier-imap start
root@voyager:~# /etc/init.d/courier-imap-ssl start
root@voyager:~# /etc/init.d/courier-pop start
root@voyager:~# /etc/init.d/courier-pop-ssl start
root@voyager:~# /etc/init.d/spamassassin start
root@voyager:~# /etc/init.d/clamav-daemon start
root@voyager:~# /etc/init.d/clamav-freshclam start
root@voyager:~# /etc/init.d/postgrey start
root@voyager:~# /etc/init.d/amavisd-new start
root@voyager:~# /etc/init.d/postfix start

testes

autenticacao pop/imap

Beleza agora que está configurado e funcionando vamos criar um dominio e um usuário para fazermos testes.

Estou supondo que tu já tenha feito a criação e tudo deu certo, vamos aos testes!

Testando autenticação no courier-imap.

root@voyager:~# telnet 0 143

Trying 0.0.0.0…

Connected to 0.

Escape character is '^]'.

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.

0 login usuario@dominio.com.br 'minhasenha'

0 OK LOGIN Ok.

0 select inbox

* FLAGS (Draft Answered Flagged Deleted Seen Recent)

* OK [PERMANENTFLAGS (* Draft Answered Flagged Deleted Seen)] Limited

* 1 EXISTS

* 1 RECENT

* OK [UIDVALIDITY 1154248579] Ok

* OK [MYRIGHTS “acdilrsw”] ACL

0 OK [READ-WRITE] Ok

0 logout

* BYE Courier-IMAP server shutting down

0 OK LOGOUT completed

Connection closed by foreign host.

Tudo ok com a autenticação no courier-imap, agora vamos testar agora a autenticação do courier-pop3.

root@voyager:~# telnet 0 110

Trying 0.0.0.0…

Connected to 0.

Escape character is '^]'.

+OK Hello there.

user usuario@dominio.com.br

+OK Password required.

pass 'minhasenha'

+OK logged in.

list

+OK POP3 clients that break here, they violate STD53.

1 4259

.

quit

+OK Bye-bye.

Connection closed by foreign host.

Até agora tudo funcionou corretamente, caso tenha problemas, verifique no log do MySQL, veja como a query está sendo feita, isso pode te poupar muito tempo de dor de cabeça.

antivirus

Vamos agora fazer um teste, para saber se nosso servidor realmente está evitando vírus, vamos utilizar para isto o arquivo de teste do EICAR, com o seguinte comando:

instalando programas necessários para o teste

root@voyager:~# apt-get install mailx nail

  • Teste 1, arquivo anexado.

baixe o arquivo de teste para antivirus do site https://www.eicar.org

root@voyager:~# wget https://secure.eicar.org/eicar_com.zip

estou supondo que você tem um MTA local em sua workstation.

root@sua-workstation-de-teste:~# nail -s “teste” -a eicar_com.zip usuario@dominio.com.br

agora vamos ver se o servidor pegou verifique o log do servidor de e-mail….

root@voyager:~# tail -f /var/log/mail.log
==> /var/log/mail.log <==
Jul 30 10:34:27 voyager postfix/cleanup[5983]: 48E3C77521: message-id=<1185806063.6017.6.camel@defiant>
Jul 30 10:34:27 voyager postfix/qmgr[5782]: 48E3C77521: from=<guto@gutocarvalho.net>, size=1111, nrcpt=1 (queue active)
Jul 30 10:34:27 voyager postfix/virus-filter: message-id=<1185806063.6017.6.camel@defiant> reject: VIRUS from=<guto@gutocarvalho.net>  to=<listas@gutocarvalho.net>
Jul 30 10:34:27 voyager spamd[4350]: spamd: connection from localhost [127.0.0.1] at port 51287
Jul 30 10:34:27 voyager spamd[4350]: spamd: setuid to clamav succeeded
Jul 30 10:34:27 voyager spamd[4350]: spamd: processing message (unknown) for clamav:110
 ==> /var/log/clamav/clamav.log <==
Mon Jul 30 10:34:27 2007 -> /var/spool/filter/in.6255.20070730103427: Eicar-Test-Signature FOUND
  • Teste 2, codigo malicioso na mensagem

    root@sua-workstation-de-teste:~# mail -s “teste” usuario@dominio.com.br

    X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
    .
    CC:

agora vamos verificar o log novamente.

==> /var/log/mail.info <==
Jul 30 10:45:59 voyager postfix/cleanup[6422]: 2876E77521: message-id=<1185806754.6017.10.camel@defiant>
Jul 30 10:45:59 voyager postfix/qmgr[5782]: 2876E77521: from=<guto@gutocarvalho.net>, size=641, nrcpt=1 (queue active)
Jul 30 10:45:59 voyager postfix/virus-filter: message-id=<1185806754.6017.10.camel@defiant> reject: VIRUS from=<guto@gutocarvalho.net>   to=<listas@gutocarvalho.net>
Jul 30 10:45:59 voyager postfix/virus-filter: message-id=<1185806754.6017.10.camel@defiant> reject: VIRUS from=<guto@gutocarvalho.net>  to=<listas@gutocarvalho.net>

Veja se funcionar como descrito o usuário que mandou o vírus vai receber uma mensagem do MTA com a seguinte MSG.

Return-Path: <>
X-Original-To: guto@gutocarvalho.net
Delivered-To: guto@gutocarvalho.net
Received: by mail.gutocarvalho.net (Postfix, from userid 110) id 98BB877525; Mon, 30 Jul 2007 10:34:37 -0400 (AMT)
X-Spam-Checker-Version: SpamAssassin _VERSION (2006-10-05) on voyager
X-Spam-Level: 
X-Spam-Status: No, hits=-0.0 required=4.0 tests=NO_RECEIVED,NO_RELAYS  version=3.1.7-deb
De: Virus Scanner <mailer-daemon@mail.gutocarvalho.net>
Assunto: AVISO: Email rejeitado: VIRUS Detectado
Para: guto@gutocarvalho.net
Message-Id: <20070730143437.98BB877525@mail.gutocarvalho.net>
Data: Mon, 30 Jul 2007 10:34:37 -0400 (AMT)
X-Evolution-Source: pop://guto%40gutocarvalho.net@pop.gutocarvalho.net/
Mime-Version: 1.0

Seu email para (listas@gutocarvalho.net) com assunto (sera que pega?) foi rejeitado por conter virus.

Virus encontrados: Eicar-Test-Signature FOUND

logs

spamassassin

se ver mensagens como abaixo a integração do spamassassin com clamav-filter estará perfeita.

root@voyager:~# tail -f /var/log/mail.log

Jul 30 10:55:38 voyager spamd[4350]: spamd: identified spam (18.3/4.0) for clamav:110 in 13.8 seconds, 4086 bytes. Jul 30 10:55:38 voyager spamd[4350]: spamd: result: Y 18 - HTMLMESSAGE,HTMLOBFUSCATE1020,RAZOR2CFRANGE51100,RAZOR2CFRANGEE851100,RAZOR2CHECK,URIBLABSURBL,URIBLJPSURBL,URIBLOBSURBL,URIBLSCSURBL,URIBLWSSURBL scantime=13.8,size=4086,user=clamav,uid=110,required_score=4.0,rhost=localhost,raddr=127.0.0.1,rport=36072,mid=656380318.24930185074963@bigape.com,autolearn=no

postgrey

postgrey funcionando corretamente.

root@voyager:~# tail -f /var/log/mail.log

Jul 30 10:54:15 voyager postfix/smtpd[6544]: NOQUEUE: reject: RCPT from ip-85-144.wnet.cz[62.77.85.144]: 450 4.7.1 deffente@rcon.com.br: Recipient address rejected: Greylisted, see http://isg.ee.ethz.ch/tools/postgrey/help/rcon.com.br.html; from=zesupport@zacks.com to=deffente@rcon.com.br proto=SMTP helo=<ip-85-144.wnet.cz>

postfix-spf

postfix/spf checando corretamente

root@voyager:~# tail -f /var/log/mail.log|grep spf

Dec 27 15:14:30 gutocarvalho postfix/policy-spf[21470]: handler senderpolicyframework: is decisive. Dec 27 15:14:30 gutocarvalho postfix/policy-spf[21470]: : Policy action=PREPEND Received-SPF: none (bonnenkrant.com: No applicable sender policy available) receiver=gutocarvalho.net; identity=mfrom; envelope-from=“ilcs@bonnenkrant.com”; helo=corporat190-025204002.sta.etb.net.co; client-ip=190.25.204.2

relatorios e estatisticas

pflogsumm

instalando o programa

root@voyager:~# apt-get install pflogsumm

vamos copiar um exemplo de script para relatórios diários

root@voyager:~# cp /usr/share/doc/pflogsumm/examples/example.cron.daily /etc/cron.daily/pflogsumm

agora vamos ajustá-lo.

root@voyager:~# vim /etc/cron.daily/pflogsumm

#!/bin/sh # # Debian pflogsumm daily cron script # # This script analyses the logfile for statistics and problems. #

DATA=date --date=yesterday +%Y%m%d

if [ -x /usr/sbin/pflogsumm.pl ]; then

       /usr/sbin/pflogsumm.pl -d yesterday --problems_first /var/log/mail.log > /var/www/relatorios/pflogsumm/relatorio-posfix-pflogsumm-$DATA.txt

fi

não se esqueça de ajustar as permissões do script e criar o diretório dos relatórios

root@voyager:~# chmod 700 /etc/cron.daily/pflogsumm

root@voyager:~# mkdir -p /var/www/relatorios/pflogsumm

mailgraph

instalando o programa

root@voyager:~# apt-get install mailgraph

para acessá-lo vá até http://ip-do-servidor/cgi-bin/mailgraph.cgi

pfqueue

excelente ferramenta para ver a fila de mensagens no console

root@voyager:~# apt-get install pfqueue

queuegraph

instalando o programa para gerar gráficos da fila de mensagens

root@voyager:~# apt-get install queuegraph

para acessá-lo vá até http://ip-do-servidor/cgi-bin/queuegraph.cgi

couriergraph

instalando o programa para gerar gráficos de uso do courier imap e pop

root@voyager:~# apt-get install couriergraph

para acessá-lo vá até http://ip-do-servidor/cgi-bin/couriergraph.cgi

dicas

script de controle

criando o arquivo

root@voyager:~# vim /usr/sbin/pfctl

ele deve ter este conteúdo

#!/bin/bash

up=“clamav-daemon spamassassin postgrey postfix courier-authdaemon courier-imap courier-imap-ssl courier-pop courier-pop-ssl” down=“postfix postgrey clamav-daemon spamassassin courier-pop-ssl courier-pop courier-imap-ssl courier-imap courier-authdaemon”

start(){

       for i in $up;do
         /etc/init.d/$i start
       done

} stop(){

       for i in $down;do
         /etc/init.d/$i stop
       done

} status(){

       for i in $daemon;do
         /etc/init.d/$i status
       done

}

case “$1” in

       start)
       start
       ;;
       stop)
       stop
       ;;
       status)
       status
       ;;
       restart)
       stop
       start
       ;;
       *)
       echo comando invalido.
       ;;

esac exit 0

setando permissoes

root@voyager:~# chmod 700 /usr/sbin/pfctl

agora para usar digite apenas no console

root@voyager:~# pfctl stop

root@voyager:~# pfctl start

root@voyager:~# pfctl restart

alias

é legal criar alguns alias para facilitar a observação dos logs.

eu geralmente coloco isto no final do /root/.bashrc

root@voyager:~# vim /root/.bashrc

alias l='ls -lh' alias la='ls -lha'

alias rm='rm -i' alias mv='mv -i' alias cp='cp -i'

alias tm='tail -f /var/log/messages' alias td='tail -f /var/log/daemon.log' alias ta='tail -f /var/log/auth.log' alias tu='tail -f /var/log/user.log' alias tk='tail -f /var/log/kern.log'

alias tp='tail -f /var/log/auth.log /var/log/mail.log /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/clamav/clamav.log'

assim quando quero ver log do serviço de e-mail digito apenas tp.

webmail

roundcube

vamos fazer o download do roundcube

root@voyager:~# cd /var/www
root@voyager:/var/www# wget http://ufpr.dl.sourceforge.net/sourceforge/roundcubemail/roundcubemail-0.1-rc2.tar.gz
root@voyager:/var/www# tar zxvf roundcubemail-0.1-rc2.tar.gz
root@voyager:/var/www# cd roundcubemail-0.1-rc2
root@voyager:/var/www# cp config/db.inc.php.dist config/db.inc.php
root@voyager:/var/www# cp config/main.inc.php.dist config/main.inc.php

agora vamos editar o arquivo db.inc.php para e ajustar a linha 68

root@voyager:/var/www# vim config/db.inc.php
$rcmail_config['db_dsnw'] = 'mysql://'''usuario''':'''senha'''@127.0.0.1/'''nomedobanco'''';

agora vamos criar o banco, entre no mysql

root@voyager:/var/www# mysql -u root -p
mysql> create database '''nomedobanco''';
mysql> grant all privileges on '''nomedobanco'''.* to '''usuario'''@localhost identified by ''''suasenha'''';

feito isto vamos criar um link simbolico

root@voyager:/var/www# ln -s roundcubemail-0.1-rc2 webmail

Agora vamos importar o sql no banco criado.

root@voyager:/var/www# mysql roundcubemail < SQL/mysql5.initial.sql

agora vamos acessar pelo navegador no endereço: 'http://seu-endereco-ip/webmail/'

agradecimentos

Patrick Ximenes (hexaclamys@gmail.com)

Rafael Bedendo

Fernando R.Durso

Clenio W. e Silva (cleniogyn@gmail.com)

referências



postfix_pantaneiro.txt · Last modified: 2011/01/31 19:31 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0