Postfix + MySQL + Courier + Webmail AfterLogic + Postfixadmin + Quota + Debian Squeeze

Objetivo desse How To, precisamos instalar e configurar o Postfix trabalhando com a sua autenticação no MySQL, vou abordar também a instalação e a configuração do servidor Courier que podemos utilizar para Pop e Imap ele vai utilizar a mesma base do Postfix para autenticar os usuários, para o gerenciamento de contas de Emails e domínios vamos utilizar o Postfixadmin, vou abordar a instalação e configuração do AfterLogic Webmail.

Prepare o seu sistema com o seguinte script Easy-Debian para que não falte nenhum pacote ou configuração.

Download do pacote do Postfix

Para a instalação é necessário que o sistema esteja atualizado. Para isto execute os comandos abaixo:

aptitude update && aptitude dist-upgrade -y

Após a atualização do sistema é necessário a adição de repositórios do wheezy para termos a versão mais atual do postfix para podermos aplicar o patch para cotas.

vim /etc/apt/sources.list
[...]
#REPOSITORIO PARA O POSTFIX
deb ftp://ftp.pucpr.br/debian wheezy main contrib non-free
deb-src ftp://ftp.pucpr.br/debian wheezy main contrib non-free

Vamos atualizar os repositórios com os novos dados.

aptitude update -y

Agora vamos obter o código fonte do postfix e o patch para cotas

cd /usr/src
apt-get source postfix
wget -c http://wiki.douglasqsantos.com.br/Downloads/mail/postfix-vda-v11-2.9.1.patch

A última versão do patch para o postfix foi para a versão 2.9.1 do postfix porém funciona na 2.9.3 do postfix só precisamos fazer um ajuste e aplicar o patch Vamos alterar a versão do postfix no patch

sed -i 's/2.9.1/2.9.3/g' /usr/src/postfix-vda-v11-2.9.1.patch

Agora vamos aplicar o patch

cd /usr/src/postfix-2.9.3 && patch -p1 < /usr/src/postfix-vda-v11-2.9.1.patch
patching file README_FILES/VDA_README
patching file src/global/mail_params.h
patching file src/util/file_limit.c
patching file src/virtual/mailbox.c
patching file src/virtual/maildir.c
patching file src/virtual/virtual.c
patching file src/virtual/virtual.h

Agora vamos comentar as linhas do arquivo “/etc/apt/sources.list” adicionadas para o download do postfix.

vim /etc/apt/sources.list
[...]
#REPOSITORIO PARA O POSTFIX
#deb ftp://ftp.pucpr.br/debian wheezy main contrib non-free
#deb-src ftp://ftp.pucpr.br/debian wheezy main contrib non-free

Montagem do pacote do Postfix Agora que já obtemos o pacote do Postfix e aplicamos o patch precisamos instalar as dependências para compilar o pacote.

aptitude update
aptitude install debhelper po-debconf libdb-dev ssl-cert libpcre3-dev libmysqlclient-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev hardening-wrapper -y
aptitude install libldap2-dev libsqlite3-dev -y

Agora vamos criar os pacotes .deb

dpkg-buildpackage
cd ../
apt-get remove --purge postfix -y
dpkg -i postfix_*.deb

Aqui vamos ter que responder algumas perguntas na instalação dos pacotes.

  • Irá perguntar o tipo de configuração do Postfix, informe Site Internet
  • Irá perguntar o nome do domínio kque será utilizado, informe douglasqsantos.com.br

Agora vamos instalar os pacotes adicionais necessários.

dpkg -i postfix-pcre*.deb
dpkg -i postfix-mysql*.deb
dpkg -i postfix-doc*.deb

Será instalado agora o mailx que é o tradicional agente de mail do utilizador de linha de comandos.

aptitude install bsd-mailx

Agora vamos acertar alguns parâmetros do sistema Nome e ip do servidor

vim /etc/hosts
127.0.0.1       localhost
ip_servidor     mail.douglasqsantos.com.br    mail

Agora vamos acertar o hostname

vim /etc/hostname
mail.douglasqsantos.com.br

Agora vamos acertar o mailname do servidor

vim /etc/mailname
mail.douglasqsantos.com.br

Agora vamos reiniciar o servidor para acertar o resto do sistema

reboot

Instalação do Apache e MySQL para a utilização do Postfixadmin

aptitude update && aptitude dist-upgrade -y
aptitude install mysql-server mysql-client apache2 php5 php5-mysql php5-imap libpam-mysql -y

Será solicitado a senha do banco de dados, informe e confirme ela. Agora precisamos instalar alguns pacotes para que o postfixadmin funcione corretamente

aptitude install php5-gd php5-mcrypt php5-json php5-xmlrpc php5-dev php5-common \
libapache2-mod-php5 php-pear php5-intl php5-curl -y

Criação do banco de dados dos usuários de e-mail

mysql -u root -p
CREATE DATABASE mail;
GRANT ALL PRIVILEGES ON mail.* TO mail@localhost IDENTIFIED BY "123";
FLUSH PRIVILEGES;
quit;

Instalação e configuração do PostFixAdmin

A versão 2.3.5 do postfixadmin ta com bug no envio de email para Alias, por isso estou utilizando a versão 2.3.3.

cd /var/www
rm -rf *
wget -c http://wiki.douglasqsantos.com.br/Downloads/mail/postfixadmin-2.3.3.tar.gz
tar -xzvf postfixadmin-2.3.3.tar.gz
mv postfixadmin-2.3.3 postfixadmin
rm -rf postfixadmin-2.3.3*
chown -R www-data:www-data *

Faça as alterações necessárias para o postfixadmin, aqui o que você vai precisar mudar com certeza é douglasqsantos.com.br que é o domínio e a senha que eu coloquei como 123 ;)

sed -i "s/change-this-to-your.domain.tld/douglasqsantos.com.br/g" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['configured'\] = false;/\$CONF\['configured'\] = true;/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['default_language'\] = 'en';/\$CONF\['default_language'\] = 'pt-br';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['database_user'\] = 'postfix';/\$CONF\['database_user'\] = 'mail';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['database_password'\] = 'postfixadmin';/\$CONF\['database_password'\] = '123';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['database_name'\] = 'postfix';/\$CONF\['database_name'\] = 'mail';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['domain_path'\] = 'NO';/\$CONF\['domain_path'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['domain_in_mailbox'\] = 'YES';/\$CONF\['domain_in_mailbox'\] = 'NO';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['quota'\] = 'NO';/\$CONF\['quota'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['transport'\] = 'NO';/\$CONF\['transport'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['vacation'\] = 'NO';/\$CONF\['vacation'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['emailcheck_resolve_domain'\]='YES';/\$CONF\['emailcheck_resolve_domain'\]='NO';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['used_quotas'\] = 'NO';/\$CONF\['used_quotas'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['new_quota_table'\] = 'NO';/\$CONF\['new_quota_table'\] = 'YES';/" /var/www/postfixadmin/config.inc.php
sed -i "s/\$CONF\['maxquota'\] = '10';/\$CONF\['maxquota'\] = '10000';/" /var/www/postfixadmin/config.inc.php

Insira as configurações adicionais do vacation no final do arquivo config.inc.php

vim /var/www/postfixadmin/config.inc.php
$CONF['transport_options'] = array (
    'virtual',   //for virtual accounts
    'local',     //for system accounts
    'vacation',  //for system accounts
    'relay'  //for backup mx
);

Reinicie o serviço do Apache

/etc/init.d/apache2 restart

Acesse pelo seu navegador o menu de configuração do PostfixAdmin para terminar a instalação pelo endereço: http://ip_servidor/postfixadmin/setup.php

  • Na primeira tela ele irá fazer a verificação se todos os critérios para funcionar estão intalados e funcionando.
  • No final da página, informe a senha para de acesso como administrador
  • Depois de alterada a senha, ele vai mostrar a linha com a senha, copie a linha e substitua a linha no arquivo config.inc.php
vim /var/www/postfixadmin/config.inc.php
 In order to setup Postfixadmin, you MUST specify a hashed password here.
 To create the hash, visit setup.php in a browser and type a password into the field,
 on submission it will be echoed out to you as a hashed value.
#$CONF['setup_password'] = 'changeme';
$CONF['setup_password'] = '0faa114f15c60534ff34a8248dfaeafc:0c7fcd264027316b45619a99af58f25a1cb1b130';

Depois de alterado o arquivo, volte na tela do postfixadmin e informe o e-mail do aministrador e a senha, para testar a autenticação. Agora vamos continuar a nossa configuração.

Vacation

O Vacation funciona para gerenciar as mensagens de ausência ou ferias do usuários. Útil quando você sai de férias por exemplo e não vai ler e-mails por um tempo e deixa uma mensagem pré-definida com as informações sobre as pessoas que vão ser contactadas no tempo que você estará fora. Preparando o ambiente:

Vamos criar o grupo e o usuário vacation

groupadd vacation
useradd -d /var/spool/vacation -g vacation -s /bin/false -m vacation

Agora vamos copiar o arquivo do vacation para o seu home

cp /var/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/

Agora vamos criar o diretório que vai armazenar os logs e acertar as permissões dos diretórios e arquivos

mkdir /var/log/vacation/
chown -R vacation:vacation /var/spool/vacation/
chown -R vacation:vacation /var/log/vacation/
chmod 750 /var/spool/vacation/
chmod 700 /var/spool/vacation/vacation.pl
touch /var/log/vacation.log
chown vacation:vacation /var/log/vacation.log

Agora vamos instalar as dependências para o vacation funcionar corretamente

aptitude install libmail-sender-perl libemail-valid-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl -y
aptitude install libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl  -y

Vamos acertar as configurações no arquivo vacation.pl

vim /var/spool/vacation/vacation.pl
[...]
#our $db_type = 'Pg'; ->temos que comentar essa linha
our $db_type = 'mysql';
 
# leave empty for connection via UNIX socket
our $db_host = '';
 
# connection details
our $db_username = 'mail';
our $db_password = '123';
our $db_name     = 'mail';
 
our $vacation_domain = 'autoreply.douglasqsantos.com.br';
 
[...]
our $syslog = 1;
our $log_to_file = 1; 

[...]
my $interval = 1*1*1;
# disabled by default
#our $interval = 0; -> comentar essa linha e deixar my $interval = 60*60*24;

Agora vamos criar dois domínios um principal e um domínio para o vacation que vão ser as auto repostas de ferias ou ausência. Logue na tela web http://ip_servidor/postfixadmin

  • Selecione Domínios/Criar domínio
  • Agora informe o domínio
  • A sua descrição
  • Informe uma cota ou deixe ela como 0
  • Transporte deixe o virtual
  • Selecione Adicionar aliases padrão
  • E selecione Criar domínio
  • Agora vamos criar o domínio do vacation
  • Domínio agora vai ser autoreply.douglasqsantos.com.br “douglasqsantos.com.br” é o domínio anteriormente criado
  • Coloque uma descrição para ele exemplo domínio de ferias
  • Selecione em transporte como vacation
  • Selecione criar domínio
  • Pode sair dessa tela.

Configuração do Postifx

Vamos instalar os módulos que serão usados para autenticação.

aptitude install libsasl2-2 libsasl2-modules-sql -y
aptitude install libsasl2-modules libsasl2-dev sasl2-bin openssl   -y

Agora vamos obter o gid do Postfix

grep postfix /etc/passwd
postfix:x:104:107::/var/spool/postfix:/bin/false

Como podemos notar o gid do postfix é 107 esse valor vai ser usado para criarmos o vmail que vai ser responsável pelas mensagens e pela identificação dos modulos do courierauthmysql

adduser --system --shell /bin/false --uid 107 --gid 107 vmail
Adicionando usuário de sistema 'vmail' (UID 107) ...
Adicionando novo usuário 'vmail' (UID 107) com grupo 'postfix' ...
Criando diretório pessoal '/home/vmail' ...

Agora vamos acertar as permissões do diretório do vmail

chown -R vmail:postdrop /home/vmail

Vamos fazer um backup do arquivo original

cp -Rfa /etc/postfix/main.cf{,.bkp}

Agora vamos configurar o nosso postfix

vim /etc/postfix/main.cf
#---------------------------------MAIN-----------------------------------------
smtpd_banner                    = $myhostname ESMTP
biff                            = no
append_dot_mydomain             = no
readme_directory                = no
alias_maps                      = hash:/etc/postfix/aliases
alias_database                  = hash:/etc/postfix/aliases
myhostname                      = mail.douglasqsantos.com.br
mydomain                        = douglasqsantos.com.br
myorigin                        = $myhostname
mydestination                   = $myhostname, localhost
relayhost                       =
mynetworks                      = 127.0.0.0/8, 10.0.0.0/24
relay_domains                   = $mydestination
home_mailbox                    = Maildir/
mailbox_command                 = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir/
mailbox_size_limit              = 0
message_size_limit              = 10240000
recipient_delimiter             = +
mynetworks_style                = subnet
inet_interfaces                 = all
default_transport               = smtp
smtpd_recipient_limit           = 30
bounce_queue_lifetime           = 300s
maximal_queue_lifetime          = 300s
#-----------------------------END MAIN-----------------------------------------
#-----------------------------SASL--------------------------------------------- 
smtpd_sasl_auth_enable          = yes
smtpd_sasl_security_options     = noanonymous
broken_sasl_auth_clients        = yes
smtpd_sasl_local_domain         = $mydomain
#----------------------------END SASL------------------------------------------
#-------------------------------TLS--------------------------------------------
smtp_tls_CAfile                 = /etc/postfix/ssl/cacert.pem
smtp_tls_cert_file              = /etc/postfix/ssl/smtpd.crt
smtp_tls_key_file               = /etc/postfix/ssl/smtpd.key
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_security_level         = may
smtpd_tls_CAfile                = /etc/postfix/ssl/cacert.pem
smtpd_tls_cert_file             = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file              = /etc/postfix/ssl/smtpd.key
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
smtpd_tls_dh1024_param_file     = /etc/postfix/ssl/dh_1024.pem
smtpd_tls_dh512_param_file      = /etc/postfix/ssl/dh_512.pem
smtpd_tls_security_level        = may
smtpd_tls_received_header       = yes
smtpd_tls_ask_ccert             = yes
smtpd_tls_loglevel              = 1
tls_random_source               = dev:/dev/urandom
smtpd_enforce_tls               = yes
#-----------------------------END TLS-------------------------------------------- 
#--------------------------------MYSQL------------------------------------------- 
transport_maps                  = proxy:mysql:/etc/postfix/mysql_transport_maps.cf
virtual_alias_maps              = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains         = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps            = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport               = virtual
virtual_minimum_uid             = 107
virtual_uid_maps                = static:107
virtual_gid_maps                = static:107
virtual_mailbox_base            = /home/vmail
#-----------------------------END MYSQL------------------------------------------- 
#-----------------------------QUOTA-----------------------------------------------
virtual_mailbox_limit           = 51200000
virtual_mailbox_limit           = 0
virtual_maildir_extended        = yes
virtual_mailbox_limit_override  = yes
virtual_mailbox_limit_maps      = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_overquota_bounce        = yes
virtual_maildir_limit_message   = Desculpe, o diretorio de correio do usuario estourou sua quota, por favor tente novamente depois.
#----------------------------END QUOTA-------------------------------------------
#----------------------------CONTROLS--------------------------------------------
smtpd_helo_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_invalid_hostname,
 reject_unknown_hostname,
 reject_non_fqdn_hostname,
 reject_unauth_pipelining
 
smtpd_client_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_pipelining,
 reject_rbl_client dnsbl.sorbs.net,
 reject_rbl_client dnsbl.njabl.org,
 reject_rbl_client rbl.schulte.org,   
 reject_rbl_client dnsbl.anticaptcha.net,
 reject_rbl_client bl.spamcannibal.org,
 reject_rbl_client bl.spamcop.net,
 reject_rbl_client cart00ney.surriel.com,
 reject_rbl_client korea.services.net,
 reject_rbl_client cbl.abuseat.org,
 reject_unknown_client
 
smtpd_sender_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unauth_pipelining,
 reject_unknown_sender_domain,
 
smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_invalid_hostname,
 reject_non_fqdn_hostname,
 reject_non_fqdn_recipient,
 reject_unauth_destination,
 reject_unauth_pipelining,
 reject_unknown_recipient_domain,
 reject_unknown_client
#------------------------END CONTROLS-------------------------------------------

Geração das chaves para a conexão via TLS no Postfix

Vamos gerar as chaves de autenticação

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
52 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.......++++++
...............................................................++++++
e is 65537 (0x10001)
Enter pass phrase for smtpd.key: senha
Verifying - Enter pass phrase for smtpd.key: senha

Acertando permissão da key gerada

chmod 600 smtpd.key

Agora vamos gerar o pedido de assinatura

openssl req -new -key smtpd.key -out smtpd.csr
Enter pass phrase for smtpd.key: senha
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Parana
Locality Name (eg, city) []:Curitiba
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Douglas
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:mail.douglasqsantos.com.br
Email Address []:douglas@douglasqsantos.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas

Vamos assinar agora o nosso certificado

openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
Signature ok
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=IT/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
Getting Private key
Enter pass phrase for smtpd.key:

Agora vamos tirar a senha do certificado agora

openssl rsa -in smtpd.key -out smtpd.key.unencrypted
Enter pass phrase for smtpd.key: senha
writing RSA key

Gerando o CA

mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Generating a 1024 bit RSA private key
.++++++
......++++++
writing new private key to 'cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Parana
Locality Name (eg, city) []:Curitiba
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Douglas
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:mail.douglasqsantos.com.br
Email Address []:douglas@douglasqsantos.com.br

Ultimas chaves de Diffie Hellman

openssl dhparam 1024 -out dh_1024.pem
openssl dhparam 512 -out dh_512.pem

Configuração da conexão do MySQL + Postfix

Vamos configurar o arquivo que tem o controle do tipo de transporte se vai ser virtual ou vacation por exemplo

vim /etc/postfix/mysql_transport_maps.cf
user = mail
password = 123
hosts = localhost
dbname = mail
table = domain
select_field = transport
where_field = domain

Aqui vamos configurar o arquivo que controla as contas de email

vim /etc/postfix/mysql_virtual_alias_maps.cf 
user = mail
password = 123
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address

Aqui vamos configurar o arquivo que controla os domínios do postfix

vim /etc/postfix/mysql_virtual_domains_maps.cf 
user = mail
password = 123
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain

Aqui vamos acertar o arquivo que controla as cotas do usuários e domínios

vim /etc/postfix/mysql_virtual_mailbox_limit_maps.cf 
user = mail
password = 123
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username

Aqui vamos acertar o arquivo que controla as mailbox

vim /etc/postfix/mysql_virtual_mailbox_maps.cf 
user = mail
password = 123
hosts = localhost
dbname = mail
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1

Vamos acertar as permissões

chmod o= /etc/postfix/mysql_*
chgrp postfix /etc/postfix/mysql_*

Vamos fazer o acerto dos aliases agora

mv /etc/aliases /etc/postfix

Ajustando arquivos de aliases para os redirecionamentos

vim /etc/postfix/aliases
[...]
root: douglas@douglasqsantos.com.br

Agora vamos gerar a nova base de dados dos aliases

newaliases

Vamos fazer backup do arquivo de configuração

cp /etc/postfix/master.cf{,.bkp}

Ajustando arquivo de serviços do postfix

vim /etc/postfix/master.cf
#-------------------------SERVICES--------------------------------------------
#-----------------------------------------------------------------------------
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
#-----------------------------------------------------------------------------
smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
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
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp
relay     unix  -       -       -       -       -       smtp
        -o smtp_fallback_relay=
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     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
#----------------------------END SERVICES-----------------------------------------
#----------------------------DELIVERY METHODS-------------------------------------
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
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}
#--------------------------END DELIVERY METHODS----------------------------------------------- 
#----------------------------VACATION---------------------------------------------------------
vacation    unix  -       n       n       -       -       pipe
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
#----------------------------END VACATION-----------------------------------------------------

Configuração do controle de autenticação do Postfix

Agora vamos configurar o sasl

vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
auxprop_plugin: sql
allow_plaintext: truesql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: mail
sql_passwd: 123
sql_database: mail
sql_select: select password from mailbox where username = '%u'

Vamos acertar a localização do arquivo com um link

ln -sf /usr/lib/sasl2/smtpd.conf /etc/postfix/sasl/smtpd.conf

Vamos colocar o sasl no grupo do postfix

usermod -G sasl postfix

Agora vamos acertar o sasauthd mais primeiro vamos fazer o backup do arquivo

cp /etc/default/saslauthd{,.bkp}

Agora vamos acertar a configuração do arquivo saslauthd

vim /etc/default/saslauthd
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Vamos acertar os arquivos do saslauthd para o postfix

mkdir -p /var/spool/postfix/var/run/saslauthd
chown postfix /var/spool/postfix/var/run/saslauthd/
cd /var/run
mv saslauthd saslauthd.bkp
ln -sf /var/spool/postfix/var/run/saslauthd

Agora vamos preparar o mysql para trabalhar com o Postfix

mkdir -p /var/spool/postfix/var/run/mysqld

Agora vamos acertar o arquivo de inicialização do MySQL

vim /etc/init.d/mysql
[...]
        fi
#insira a linha abaixo antes do ;; por quando o mysql for iniciar ele cria o socket e o link
/bin/ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock
        ;;
 
  'stop')

Agora vamos acertar a permissão do diretório /var/run/mysqld

chown -R vmail:mysql /var/run/mysqld && chmod -R 775 /var/run/mysqld

Agora vamos reiniciar os serviços

/etc/init.d/mysql restart
/etc/init.d/saslauthd restart

Galera aqui vou demostrar a instalação do Courier e do Dovecot na minha opinião o Dovecot é um pouco mais chato, e o Courier mais simples de manipular.

Instalação do e configuração do Courier

aptitude install courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-authlib-mysql courier-authdaemon libgamin-dev -y
#Resposta1) No
2) Ok

Agora vamos fazer backup dos arquivos de configuração do courier

cp /etc/courier/authdaemonrc{,.bkp}
cp /etc/courier/authmysqlrc{,.bkp}

Agora vamos acertar o arquivo de conexão do Courier com o Mysql

vim /etc/courier/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD 123
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD '107'
MYSQL_GID_FIELD '107'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/home/vmail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD CONCAT("/home/vmail/",maildir)
MYSQL_QUOTA_FIELD concat(quota,'S')

Agora vamos acertar a configuração do serviço do Courier

vim /etc/courier/authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5
authdaemonvar=/var/run/courier/authdaemon
subsystem=mail
DEFAULTOPTIONS=""
LOGGEROPTS=""

Agora vamos acertar a configuração dos arquivos que vão gerar os nosso certificados para ssl. Primeiro vamos editar o arquivo do imap

vim /etc/courier/imapd.cnf

RANDFILE = /usr/lib/courier/imapd.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=BR
ST=PR
L=Curitiba
O=Douglas Imap Server
OU=Douglas IMAP SSL key
CN=mail.douglasqsantos.com.br
emailAddress=postmaster@douglasqsantos.com.br


[ cert_type ]
nsCertType = server

Agora vamos editar o arquivo do pop

vim /etc/courier/pop3d.cnf
RANDFILE = /usr/lib/courier/pop3d.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=BR
ST=PR
L=Curitiba
O=Douglas Pop Server
OU=Douglas POP3 SSL key
CN=mail.douglasqsantos.com.br
emailAddress=postmaster@douglasqsantos.com.br


[ cert_type ]
nsCertType = server

Agora vamos fazer backup dos certificados antigos.

mv /etc/courier/pop3d.pem /etc/courier/pop3d.pem.bkp
mv /etc/courier/imapd.pem /etc/courier/imapd.pem.bkp
unlink /usr/lib/courier/pop3d.pem
unlink /usr/lib/courier/imapd.pem

Agora vamos gerar o novo certificado para o Imap-ssl

mkimapdcert

Agora vamos gerar o novo certificado para o Pop-ssl

mkpop3dcert

Agora vamos acertar os links dos certificados do courier

ln -sf /usr/lib/courier/imapd.pem /etc/courier/imapd.pem
ln -sf /usr/lib/courier/pop3d.pem /etc/courier/pop3d.pem

Agora é só reiniciar os serviços

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

Ajustando a forma de autenticação do POP3, IMAP e SMTP

vim /etc/pam.d/pop3
auth required pam_mysql.so user=mail passwd=123 host=localhost db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0 debug
account sufficient pam_mysql.so user=mail passwd=123 host=localhost db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0 debug
auth sufficient pam_unix.so debug
account sufficient pam_unix.so debug

Agora vamos copiar os arquivos da pam

cp -Rfa /etc/pam.d/pop3 /etc/pam.d/imap
cp -Rfa /etc/pam.d/pop3 /etc/pam.d/smtp

Agora vamos fazer alguns ajustes na configuração do MySQL.

vim /etc/mysql/my.cnf
[...]
key_buffer              = 32M
max_allowed_packet      = 32M
[...]
query_cache_limit       = 4M
query_cache_size        = 32M
[...]

Restartando os serviços:

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

Verificando se os serviços estão sendo executados:

nmap -sS -T4 localhost
Starting Nmap 5.00 ( http://nmap.org ) at 2011-10-04 16:10 BRT
Interesting ports on localhost (127.0.0.1):
Not shown: 986 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
80/tcp    open  http
110/tcp   open  pop3
111/tcp   open  rpcbind
143/tcp   open  imap
587/tcp   open  submission
993/tcp   open  imaps
995/tcp   open  pop3s
3306/tcp  open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.14 seconds

Agora já podemos testar o nosso servidor de email Acesse o postfixadmin

  • Em Virtual/Criar conta de email
  • Informe o nome da conta ex: douglas
  • Selecione o domínio ex: douglasqsantos.com.br
  • Informe uma senha e confirme ela
  • Informe um nome para a conta de email
  • Agora selecione Criar conta de email

Agora nos logs do servidor de email vamos ter algo como abaixo

tail -f /var/log/mail.log
Oct  2 16:25:18 mail postfix/smtpd[1847]: connect from localhost[127.0.0.1]
Oct  2 16:25:18 mail postfix/smtpd[1847]: B3C1611F4E: client=localhost[127.0.0.1]
Oct  2 16:25:18 mail postfix/cleanup[1854]: B3C1611F4E: message-id=<20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Oct  2 16:25:18 mail postfix/qmgr[1790]: B3C1611F4E: from=<douglas@douglasqsantos.com.br>, size=486, nrcpt=1 (queue active)
Oct  2 16:25:18 mail postfix/smtpd[1847]: disconnect from localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/smtpd[1857]: connect from localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/smtpd[1857]: 3354E11F51: client=localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/cleanup[1854]: 3354E11F51: message-id=<20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Oct  2 16:25:21 mail postfix/qmgr[1790]: 3354E11F51: from=<douglas@douglasqsantos.com.br>, size=875, nrcpt=1 (queue active)
Oct  2 16:25:21 mail postfix/smtp[1855]: B3C1611F4E: to=<douglas@douglasqsantos.com.br>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.7, delays=0.04/0.01/0.65/2, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=00911-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 3354E11F51)
Oct  2 16:25:21 mail postfix/virtual[1858]: 3354E11F51: to=<douglas@douglasqsantos.com.br>, relay=virtual, delay=0.2, delays=0.03/0.03/0/0.14, dsn=2.0.0, status=sent (delivered to maildir)
Oct  2 16:25:21 mail postfix/qmgr[1790]: 3354E11F51: removed
Oct  2 16:25:21 mail postfix/qmgr[1790]: B3C1611F4E: removed

Agora vamos testar a autenticação do Cliente.

testsaslauthd -u douglas@douglasqsantos.com.br -p doug123
0: OK "Success."

Vamos fazer um teste para verificar se o smtp esta funcionando

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.douglasqsantos.com.br ESMTP
ehlo mail.douglasqsantos.com.br
250-mail.douglasqsantos.com.br
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
starttls
220 2.0.0 Ready to start TLS
quit
quit
Connection closed by foreign host.

Agora vamos fazer um teste de envio de email utilizando smtp + tls

Vamos criar um script para gerar o nosso usuário e senha em base64

vim /srv/base64
#!/usr/bin/perl -w
use strict;
use MIME::Base64;
print "Pressione Enter para sair. \n";
print "Insira a string: ";
my $line;
while( $line = <STDIN> )
{
  if( $line ne "\n" ){
    chomp($line) ;
    print "Base64 encode é : " . encode_base64($line) ;
    print "Insira a string: ";
  }
  else
  {
    exit;
  }
}

Agora precisamos dar a permissão para o nosso script

chmod +x /srv/base64

Vamos gerar o usuário e a senha em base64 que o postfix utiliza para validar o usuário e senha

/srv/base64 
Pressione Enter para sair. 
Insira a string: douglas@douglasqsantos.com.br
Base64 encode é : ZG91Z2xhc0Bkb3VnbGFzLndpa2kuYnI=
Insira a string: doug123
Base64 encode é : ZG91ZzEyMw==
Insira a string: 
openssl s_client -starttls smtp -crlf -connect localhost:25 -quiet
depth=0 /C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
verify return:1
250 DSN
EHLO mail.douglasqsantos.com.br
250-mail.douglasqsantos.com.br
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
#A Linha abaixo é o codigo base64 que foi gerado para o usuário douglas@douglasqsantos.com.br
ZG91Z2xhc0Bkb3VnbGFzLndpa2kuYnI=
334 UGFzc3dvcmQ6
#A linha abaixo é o codigo base64 que foi gerado para a senha doug123
ZG91ZzEyMw==
235 2.7.0 Authentication successful
mail from: <douglas@douglasqsantos.com.br>
250 2.1.0 Ok
rcpt to: <douglas@douglasqsantos.com.br>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Douglas <douglas@douglasqsantos.com.br>
To: Douglas <douglas@douglasqsantos.com.br>
Subject: Teste de tls
Teste de Envio de email utilizando TLS
.
250 2.0.0 Ok: queued as 5C72411F4E
quit
221 2.0.0 Bye

Para somente visualizarmos o certificado do smtp podemos fazer da seguinte maneira

openssl s_client -starttls smtp -crlf -connect localhost:25 -showcerts
CONNECTED(00000003)
depth=0 /C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
verify return:1
---
Certificate chain
 0 s:/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
   i:/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
-----BEGIN CERTIFICATE-----
MIICpzCCAhACCQCNYYi667jJpjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMC
QlIxDzANBgNVBAgTBlBhcmFuYTERMA8GA1UEBxMIQ3VyaXRpYmExEDAOBgNVBAoT
B0RvdWdsYXMxCzAJBgNVBAsTAlRJMR0wGwYDVQQDExRtYWlsLmRvdWdsYXMud2lr
aS5icjEmMCQGCSqGSIb3DQEJARYXZG91Z2xhc0Bkb3VnbGFzLndpa2kuYnIwHhcN
MTIxMDA0MTc1NzEyWhcNMjIxMDAyMTc1NzEyWjCBlzELMAkGA1UEBhMCQlIxDzAN
BgNVBAgTBlBhcmFuYTERMA8GA1UEBxMIQ3VyaXRpYmExEDAOBgNVBAoTB0RvdWds
YXMxCzAJBgNVBAsTAlRJMR0wGwYDVQQDExRtYWlsLmRvdWdsYXMud2lraS5icjEm
MCQGCSqGSIb3DQEJARYXZG91Z2xhc0Bkb3VnbGFzLndpa2kuYnIwgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAMOdgm3xKBSrq0zCLvNFjkvlb8Zj6f8/0YbrAZV7
/bfUmCWus/h7PES4Eh7TnQF/b+EIQItQ9oBB1XG6t0+nOoAsfli11qFa3z8eSqCI
vECpXZCrzOYQwicRztA2Zoaie8WMCPiKE0kvXW5ps/vUu8aPCdxmMN/xXzhLnlm3
fXajAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAZ7X/Wnz9cM6Ty/03ukMr0q0lj1cw
YZk2bMDnDtOL17X8mNtwRCHOFgKh2sk9Xh80xxJqMlcbHVdCqxLKBfUEwwifj35/
uXe61BADWKsy+p6bjo6tLtE0FEHkwGu/afguHtMmW/9FPXiv1DQloj5A7+T92UT6
SnESkeuJoy+Bfos=
-----END CERTIFICATE-----
---
Server certificate
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
issuer=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
---
Acceptable client certificate CA names
/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=TI/CN=mail.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
---
SSL handshake has read 1671 bytes and written 366 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 938A6DEB769A3209B4C95D4695C74D4E3337F77B9AD334E40374C5759462B3AB
    Session-ID-ctx: 
    Master-Key: 2A46F82490908839CB5C87E7F3DEAE7383187FDE338C542C499082A12D0CE2E63A7D9DCAA2815C00D8D3F5B740C6C006
    Key-Arg   : None
    Start Time: 1349382058
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
250 DSN
 quit
221 2.0.0 Bye
closed

Vamos fazer um teste de acesso pop

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user douglas@douglasqsantos.com.br
+OK Password required.
pass doug123
l+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 982
.
retr 1
+OK 982 octets follow.
Return-Path: <douglas@douglasqsantos.com.br>
X-Original-To: douglas@douglasqsantos.com.br
Delivered-To: douglas@douglasqsantos.com.br
Received: from localhost (localhost [127.0.0.1])
        by mail.douglasqsantos.com.br (Postfix) with ESMTP id 3354E11F51
        for <douglas@douglasqsantos.com.br>; Tue,  2 Oct 2012 16:25:21 -0300 (BRT)
Received: from mail.douglasqsantos.com.br ([127.0.0.1])
        by localhost (mail.douglasqsantos.com.br [127.0.0.1]) (amavisd-new, port 10024)
        with ESMTP id FTU91CRKqv-J for <douglas@douglasqsantos.com.br>;
        Tue,  2 Oct 2012 16:25:19 -0300 (BRT)
Received: from 10.101.0.25 (localhost [127.0.0.1])
        by mail.douglasqsantos.com.br (Postfix) with ESMTP id B3C1611F4E
        for <douglas@douglasqsantos.com.br>; Tue,  2 Oct 2012 16:25:18 -0300 (BRT)
To: douglas@douglasqsantos.com.br
From: douglas@douglasqsantos.com.br
Subject: Bem-vindo(a)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Message-Id: <20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Date: Tue,  2 Oct 2012 16:25:18 -0300 (BRT)
 
Hi,
 
Welcome to your new account.
.
quit
+OK Bye-bye.
Connection closed by foreign host.

Agora vamos efetuar um teste de pop com ssl

openssl s_client -connect localhost:995 -quiet
depth=0 /C=BR/ST=PR/L=Curitiba/O=Douglas Pop Server/OU=Douglas POP3 SSL key/CN=mail.douglasqsantos.com.br/emailAddress=postmaster@douglasqsantos.com.br
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=BR/ST=PR/L=Curitiba/O=Douglas Pop Server/OU=Douglas POP3 SSL key/CN=mail.douglasqsantos.com.br/emailAddress=postmaster@douglasqsantos.com.br
verify return:1
+OK Hello there.
user douglas@douglasqsantos.com.br
+OK Password required.
pass doug123
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 625
2 7541
3 2304
4 6702
5 1286
.
retr 1
+OK 625 octets follow.
Return-Path: <douglas@douglasqsantos.com.br>
X-Original-To: douglas@douglasqsantos.com.br
Delivered-To: douglas@douglasqsantos.com.br
Received: from 10.101.0.25 (localhost [127.0.0.1])
  by mail.douglasqsantos.com.br (Postfix) with ESMTP id 41BEA11F4A
  for <douglas@douglasqsantos.com.br>; Thu,  4 Oct 2012 15:05:29 -0300 (BRT)
To: douglas@douglasqsantos.com.br
From: douglas@douglasqsantos.com.br
Subject: Bem-vindo(a)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Message-Id: <20121004180529.41BEA11F4A@mail.douglasqsantos.com.br>
Date: Thu,  4 Oct 2012 15:05:29 -0300 (BRT)

Hi,

Welcome to your new account.
.
quit
+OK Bye-bye.

Agora vamos efetuar um teste com o Imap

telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
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-2010 Double Precision, Inc.  See COPYING for distribution information.
a login douglas@douglasqsantos.com.br doug123
a OK LOGIN Ok.
a list "" "*"
* LIST (\Unmarked \HasNoChildren) "." "INBOX"
a OK LIST completed
a examine inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS ()] No permanent flags permitted
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 1349207001] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
a OK [READ-ONLY] Ok
a fetch 1 body[]
* 1 FETCH (BODY[] {982}
Return-Path: <douglas@douglasqsantos.com.br>
X-Original-To: douglas@douglasqsantos.com.br
Delivered-To: douglas@douglasqsantos.com.br
Received: from localhost (localhost [127.0.0.1])
        by mail.douglasqsantos.com.br (Postfix) with ESMTP id 3354E11F51
        for <douglas@douglasqsantos.com.br>; Tue,  2 Oct 2012 16:25:21 -0300 (BRT)
Received: from mail.douglasqsantos.com.br ([127.0.0.1])
        by localhost (mail.douglasqsantos.com.br [127.0.0.1]) (amavisd-new, port 10024)
        with ESMTP id FTU91CRKqv-J for <douglas@douglasqsantos.com.br>;
        Tue,  2 Oct 2012 16:25:19 -0300 (BRT)
Received: from 10.101.0.25 (localhost [127.0.0.1])
        by mail.douglasqsantos.com.br (Postfix) with ESMTP id B3C1611F4E
        for <douglas@douglasqsantos.com.br>; Tue,  2 Oct 2012 16:25:18 -0300 (BRT)
To: douglas@douglasqsantos.com.br
From: douglas@douglasqsantos.com.br
Subject: Bem-vindo(a)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Message-Id: <20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Date: Tue,  2 Oct 2012 16:25:18 -0300 (BRT)
 
Hi,
 
Welcome to your new account.
)
a OK FETCH completed.
a logout
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.

Agora vamos efetuar um teste do imap com ssl

openssl s_client -connect localhost:993 -quiet
depth=0 /C=BR/ST=PR/L=Curitiba/O=Douglas Imap Server/OU=Douglas IMAP SSL key/CN=mail.douglasqsantos.com.br/emailAddress=postmaster@douglasqsantos.com.br
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=BR/ST=PR/L=Curitiba/O=Douglas Imap Server/OU=Douglas IMAP SSL key/CN=mail.douglasqsantos.com.br/emailAddress=postmaster@douglasqsantos.com.br
verify return:1
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2010 Double Precision, Inc.  See COPYING for distribution information.
a login douglas@douglasqsantos.com.br doug123
* OK [ALERT] 
a OK LOGIN Ok.
a list "" "*"
* LIST (\Marked \HasNoChildren) "." "INBOX"
a OK LIST completed
a examine inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS ()] No permanent flags permitted
* 5 EXISTS
* 5 RECENT
* OK [UIDVALIDITY 1349380413] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
a OK [READ-ONLY] Ok
a fetch 1 body[]
* 1 FETCH (BODY[] {625}
Return-Path: <douglas@douglasqsantos.com.br>
X-Original-To: douglas@douglasqsantos.com.br
Delivered-To: douglas@douglasqsantos.com.br
Received: from 10.101.0.25 (localhost [127.0.0.1])
  by mail.douglasqsantos.com.br (Postfix) with ESMTP id 41BEA11F4A
  for <douglas@douglasqsantos.com.br>; Thu,  4 Oct 2012 15:05:29 -0300 (BRT)
To: douglas@douglasqsantos.com.br
From: douglas@douglasqsantos.com.br
Subject: Bem-vindo(a)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Message-Id: <20121004180529.41BEA11F4A@mail.douglasqsantos.com.br>
Date: Thu,  4 Oct 2012 15:05:29 -0300 (BRT)

Hi,

Welcome to your new account.
)
a OK FETCH completed.
a logout
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed

Até aqui já temos o Postfix trabalhando corretamente porém vamos adicionar mais funcionalidades a ele ;)

Sincronismos de contas de Email entre servidores com o Fetchmail

apt-get install fetchmail liblockfile-simple-perl -y 
mkdir /var/run/fetchmail
touch /var/run/fetchmail/fetchmail-all.lock 

Vamos instalar as dependências

perl -MCPAN -e shell 
cpan[1]> force install DBI
cpan[2]> force install MIME::Base64
cpan[3]> force install File::Temp
cpan[4]> force install Sys::Syslog
cpan[5]> force install LockFile::Simple
cpan[6]> force install YAML
cpan[7]> q

Acertando o fetchmail

vim /var/www/postfixadmin/ADDITIONS/fetchmail.pl
[...]
#our $db_type = ‘Pg’;
my $db_type = 'mysql';

# host name
our $db_host="127.0.0.1";
# database name
our $db_name="mail";
# database username
our $db_username="mail";
# database password
our $db_password="123";

# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
#Deixar as linhas abaixo comentadas por padrão elas vem descomentadas
# $db_username = 'mail';
#if (-f "/etc/mail/postfixadmin/fetchmail.conf") {
#       require "/etc/mail/postfixadmin/fetchmail.conf";
#}

Acertando as permissões do fetchmail

chmod 755 /var/www/postfixadmin/ADDITIONS/fetchmail.pl 

Ajuste o Crontab para efetuar sincronismo das contas aqui estou agendando para ser efetuado a cada 10 minutos acerte de acordo com a necessidade.

crontab -e
* */10      *       *       *       /usr/bin/perl /var/www/postfixadmin/ADDITIONS/fetchmail.pl

Sincronismo de contas de e-mail entre servidores Para que o servidor já inicie o sincronismo das contas de e-mail do servidor atual, configuraremos as contas da seguinte forma:

  • Acesse o frontend do postfixadmin:
  • Clique no menu Recuperar Mensagem
  • Clique no Sub-menu Criar novo registro
  • Selecione a conta
  • Informar o servidor:
  • Autenticação : password
  • Usuario: email@dominio.com.br
  • Senha: senha
  • Diretorio: INBOX
  • Checar: 10
  • Recuperar todas: Marcar
  • Manter: Marcar
  • Protocolo: IMAP
  • Agora GRAVAR.

Instalação e configuração do AfterLogicWebmail

Vamos obter ele e desempacotar

mkdir /var/www/webmail
cd /var/www/webmail
wget -c http://wiki.douglasqsantos.com.br/Downloads/mail/afterlogicwebmail.zip
unzip afterlogicwebmail.zip
rm -rf changelog.txt readme.txt afterlogicwebmail.zip
mv webmail/* .
rm -rf webmail

Agora vamos acertar as permissões do nosso webmail.

cd /var/www/webmail
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chown -R www-data:www-data /var/www/webmail

Agora vamos preparar o banco de dados para o webmail

mysql -u root -p
CREATE DATABASE webmail;
GRANT ALL PRIVILEGES ON webmail.* TO webmail@localhost IDENTIFIED BY 'senha';
flush privileges;
quit;

Agora vamos acessar pelo navegador a tela de configuração do webmail http://ip_servidor/webmail/install/

  1. Nesta página inicial de instalação os requisitos devem estar todos em Verde, no final da página selecione Next.
  2. Agora leia o termo de licença e selecione I Agree para continuar.
  3. Agora aqui nesta tela temos que informar:
    1. SQL login: webmail
    2. SQL password: senha
    3. Database name: webmail
    4. Host: localhost
  4. Agora selecione Test database, o resultado deve ser Connected successfully se os dados estiverem corretos.
  5. Deixe selecionado Create Database Tables.
  6. Agora selecione Next.
  7. Agora precisamos informar a senha e confirmar para o nosso mailadm que vai poder gerenciar a configuração global do nosso webmail.
  8. Agora selecione Next.
  9. Agora vamos selecionar os protocolos que o nosso webmail vai utilizar, vou selecionar SMTP e IMAP4.
  10. Agora selecione Test connection, caso tenha sucesso vai aparecer: SMTP connection to port 25 successful, sending outgoing e-mail over SMTP should work, IMAP connection to port 143 successful, checking and downloading incoming e-mail over IMAP should work.
  11. Agora selecione Next.
  12. Agora nós fomos redirecionados para uma página sobre a conclusão da nossa instalação. Volte a instalação do nosso webmail.
  13. Agora selecione Exit

Agora precisamos excluir a pasta install do nosso webmail.

rm -rf /var/www/webmail/install/

Vamos acertar o arquivo /etc/php5/apache2/php.ini

vim /etc/php5/apache2/php.ini
[...]
memory_limit = 256M
[...]
suhosin.session.encrypt=0
[...]
date.timezone = America/Sao_Paulo

Agora precisamos reiniciar o apache

/etc/init.d/apache2 restart

Agora vamos acertar a configuração global do nosso webmail em http://ip_servidor/webmail/adminpanel/ informe o usuário mailadm e a senha que você definiu para ele.

  • Selecione a Parte seperior da tela Domains
  • Agora selecione Default domain settings
  • Agora do lado direito da tela temos a configuração geral do webmail
  • Em site name informe o nome para o seu Webmail
  • Agora em skin selecione o Skin padrão para os seus usuários.
  • Agora fica a sua escolha a opção allow users to access interface settings, que habilita o usuário a efetuar alterações na configuração do webmail.
  • Agora em Language selecione Portuguese-Brazil
  • Agora em Timezone selecione (GMT -03:00) Brasilia
  • Agora em time format selecione 13:00
  • Agora selecione Save no final da tela do lado direito.
  • Agora na guia Webmail vamos mudar MEssages per page para 50.
  • Agora em Autocheck mail every selecione 1 minute.
  • Agora selecione Save
  • Selecione agora na parte superior da tela System.
  • Aqui temos a configuração do nosso banco de dados caso necessite efetuar alguma alteração.
  • Do lado esquerdo da tela temos o link Security aonde temos o nome do usuário que pode efetuar login no painel de controle e temos a opção de alterar a senha para ele.

O Webmail é bem simples de utilizar não vou entrar em detalhes, basta acessar http://ip_servidor/webmail e informar o usuário e senha que foi criado no postfixadmin.

Agora vamos criar um script para gerenciar os nossos serviços de Email o primeiro vamos levar em consideração que instalamos o Courier.

vim /etc/init.d/servmail.sh
#!/bin/bash
### CORES UTILIZADAS NO SCRIPT ###
GREY="\033[01;30m"
RED="\033[01;31m"
GREEN="\033[01;32m"
YELLOW="\033[01;33m"
BLUE="\033[01;34m"
PURPLE="\033[01;35m"
CYAN="\033[01;36m"
WHITE="\033[01;37m"
CLOSE="\033[m"

#VALIDA RETORNO DE COMANDO
_CHECAR () {
if [ $? -eq 0 ]; then
  echo -e "${GREEN}[  OK  ]${CLOSE}"
else
  echo -e " ${RED}[ FALHOU ]${CLOSE}"
fi
}


STOP="apache2 saslauthd courier-authdaemon courier-imap courier-imap-ssl courier-pop courier-pop-ssl postfix"
START="saslauthd courier-authdaemon courier-imap courier-imap-ssl courier-pop courier-pop-ssl postfix apache2"


case $1 in
stop)
echo -e "${RED} PARANDO OS SERVICOS ${CLOSE}"
for END in ${STOP}
do
/etc/init.d/${END} stop 
echo -e "${RED} SERVICO ${END} PARADO COM SUCESSO ${CLOSE} $(_CHECAR)";
done
echo -e "${RED} SERVICOS PARADOS ${CLOSE}"
;;

start)
echo -e "${BLUE} INICIANDO OS SERVICOS ${CLOSE}"
for END in ${START}
do
/etc/init.d/${END} start
echo -e "${BLUE} SERVICO ${END} INICIADO COM SUCESSO ${CLOSE} $(_CHECAR)";
done
echo -e "${BLUE} SERVICOS INICIADOS ${CLOSE}"
;;

restart)
  $0 stop
  $0 start
;;

  *)
   echo  "${RED}Opcoes Validas:(start|stop|restart)${CLOSE}"
  ;;

esac

Agora vamos acertar as permissões do script.

chmod 755 /etc/init.d/servmail.sh

Agora para parar os serviços de email.

/etc/init.d/servmail.sh stop

Agora para iniciar os serviços de email.

/etc/init.d/servmail.sh start

Agora para reiniciar os serviços de email.

/etc/init.d/servmail.sh restart

Agora é só ir ajustando de acordo com o seu ambiente.

Referências