Differences

This shows you the differences between two versions of the page.

Link to this comparison view

postfix_mysql_courier_webmail_afterlogic_postfixadmin_quota_wheezy_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Postfix + MySQL + Courier + Webmail AfterLogic + Postfixadmin + Quota + Debian Wheezy ​ ======
  
 +
 + ​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 [[https://​github.com/​douglasqsantos/​easy-debian|Easy-Debian]] para que não falte nenhum pacote ou configuração.
 +
 +  * **Nome do servidor:** mail.douglasqsantos.com.br
 +  * **IP do servidor:** 192.168.1.70/​24
 +  * **Gateway:​** 192.168.1.1
 +  * **DNS:** 8.8.8.8 e 8.8.4.4
 +  * **RAM:** 2 GB
 +  * **Processador:​** 2 Núcleos
 +
 +
 +====== Download e Instalação do Postfix e Patch para Quota ======
 + 
 +
 +Para a instalação é necessário que o sistema esteja atualizado. Para isto execute os comandos abaixo: ​
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +</​sxh>​
 +
 +Agora vamos obter o código fonte do postfix
 +<sxh bash>
 +cd /usr/src
 +apt-get source postfix
 +</​sxh>​
 +
 +Agora vamos obter o nosso patch
 +<sxh bash>
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​mail/​postfix-vda-v13-2.10.0.patch
 +</​sxh>​
 +
 +Agora vamos ajustar a versão do postfix no patch, se utilizar o patch 2.9.6 o debian não consegue gerar o pacote por causa de um erro no vonte virtual.c
 +<sxh bash>
 +sed -i '​s/​2.10.0/​2.9.6/​g'​ /​usr/​src/​postfix-vda-v13-2.10.0.patch
 +</​sxh>​
 +
 +Agora vamos aplicar o patch no postfix
 +<sxh bash>
 +cd /​usr/​src/​postfix-2.9.6 && patch -p1 < /​usr/​src/​postfix-vda-v13-2.10.0.patch
 +(Stripping trailing CRs from patch.)
 +patching file README_FILES/​VDA_README
 +(Stripping trailing CRs from patch.)
 +patching file src/​global/​mail_params.h
 +Hunk #1 succeeded at 2360 (offset -7 lines).
 +(Stripping trailing CRs from patch.)
 +patching file src/​util/​file_limit.c
 +(Stripping trailing CRs from patch.)
 +patching file src/​virtual/​mailbox.c
 +(Stripping trailing CRs from patch.)
 +patching file src/​virtual/​maildir.c
 +(Stripping trailing CRs from patch.)
 +patching file src/​virtual/​virtual.c
 +(Stripping trailing CRs from patch.)
 +patching file src/​virtual/​virtual.h
 +</​sxh>​
 +
 +
 +
 +Agora vamos ajustar as variáveis do debian para a instalação do postfix
 +<sxh bash>
 +export DEBIAN_PRIORITY=critical
 +export DEBIAN_FRONTEND=noninteractive
 +</​sxh>​
 +
 +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. ​
 +<sxh bash>
 +aptitude update && apt-get build-dep postfix -y
 +</​sxh>​
 +
 +Agora vamos criar os pacotes .deb 
 +<sxh bash>
 +cd /​usr/​src/​postfix-2.9.6 ​
 +dpkg-buildpackage
 +cd ../
 +apt-get remove --purge postfix -y
 +dpkg -i postfix_*.deb
 +</​sxh>​
 +
 +Agora vamos instalar os pacotes adicionais necessários. ​
 +<sxh bash>
 +dpkg -i postfix-*.deb
 +</​sxh>​
 +
 +Agora vamos voltar as variáveis ao padrão
 +<sxh bash>
 +unset DEBIAN_PRIORITY
 +unset DEBIAN_FRONTEND
 +</​sxh>​
 +
 +Será instalado agora o mailx que é o tradicional agente de mail do utilizador de linha de comandos. ​
 +<sxh bash>
 +aptitude install bsd-mailx
 +</​sxh>​
 +
 +Agora vamos ajustar o Debian para ele não atualizar o postfix e sobreescrever o nosso postfix com patch
 +<sxh bash>
 +vim /​etc/​apt/​preferences
 +#Pacote core do postfix
 +Package: postfix
 +Pin: release a=stable
 +Pin-Priority:​ -1
 +
 +#Pacotes adicionais do postfix
 +Package: postfix-*
 +Pin: release a=stable
 +Pin-Priority:​ -1
 +</​sxh>​
 +====== Ajuste de alguns parâmetros do sistema ======
 +
 +Nome e ip do servidor ​
 +<sxh bash>
 +vim /etc/hosts
 +127.0.0.1 ​      ​localhost
 +192.168.1.70 ​    ​mail.douglasqsantos.com.br ​   mail
 +</​sxh>​
 +Agora vamos acertar o hostname ​
 +<sxh bash>
 +vim /​etc/​hostname
 +mail.douglasqsantos.com.br
 +</​sxh>​
 +Agora vamos acertar o mailname do servidor ​
 +<sxh bash>
 +vim /​etc/​mailname
 +mail.douglasqsantos.com.br
 +</​sxh>​
 +Agora vamos reiniciar o servidor para acertar o resto do sistema ​
 +<sxh bash>
 +reboot
 +</​sxh>​
 +
 +
 +====== Instalação do Apache e MySQL para a utilização do Postfixadmin ======
 + 
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +aptitude install mysql-server mysql-client apache2 php5 php5-mysql php5-imap libpam-mysql -y
 +</​sxh>​
 +Será solicitado a senha do banco de dados, informe e confirme ela. 
 +Agora precisamos instalar alguns pacotes para que o postfixadmin funcione corretamente ​
 +<sxh bash>
 +aptitude install php5-gd php5-mcrypt php5-json php5-xmlrpc php5-dev php5-common \
 +libapache2-mod-php5 php-pear php5-intl php5-curl -y
 +</​sxh>​
 +Criação do banco de dados dos usuários de e-mail ​
 +<sxh sql>
 +mysql -u root -p
 +CREATE DATABASE mail;
 +GRANT ALL PRIVILEGES ON mail.* TO mail@localhost IDENTIFIED BY "​123";​
 +FLUSH PRIVILEGES;
 +quit;
 +</​sxh>​
 +
 +====== Instalação e configuração do PostFixAdmin ​ ======
 +
 +Vamos obter o postfixadmin
 +<sxh bash>
 +cd /var/www
 +rm -rf *
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​mail/​postfixadmin-2.3.6.tar.gz
 +tar -xzvf postfixadmin-2.3.6.tar.gz
 +mv postfixadmin-2.3.6 postfixadmin
 +rm -rf postfixadmin-2.3.6*
 +chown -R www-data:​www-data *
 +</​sxh>​
 +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 ;) 
 +<sxh bash>
 +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
 +</​sxh>​
 +Insira as configurações adicionais do vacation no final do arquivo config.inc.php ​
 +<sxh bash>
 +sed -i "​s/'​relay'/'​relay',/"​ /​var/​www/​postfixadmin/​config.inc.php
 +sed -i "/​relay/​ a '​vacation'"​ /​var/​www/​postfixadmin/​config.inc.php
 +</​sxh>​
 +
 +Reinicie o serviço do Apache ​
 +<sxh bash>
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +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 ​
 +
 +<sxh 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';​
 +</​sxh>​
 +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. ​
 +
 +Agora vamos remover o setup.php
 +<sxh bash>
 +rm -rf /​var/​www/​postfixadmin/​setup.php
 +</​sxh>​
 +
 +====== 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 ​
 +<sxh bash>
 +groupadd vacation
 +useradd -d /​var/​spool/​vacation -g vacation -s /bin/false -m vacation
 +</​sxh>​
 +Agora vamos copiar o arquivo do vacation para o seu home 
 +<sxh bash>
 +cp /​var/​www/​postfixadmin/​VIRTUAL_VACATION/​vacation.pl /​var/​spool/​vacation/​
 +</​sxh>​
 +Agora vamos criar o diretório que vai armazenar os logs e acertar as permissões dos diretórios e arquivos ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos instalar as dependências para o vacation funcionar corretamente ​
 +<sxh bash>
 +aptitude install libmail-sender-perl libemail-valid-perl libmime-tools-perl liblog-log4perl-perl liblog-dispatch-perl -y
 +aptitude install libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl libdbd-pg-perl -y
 +</​sxh>​
 +Vamos acertar as configurações no arquivo vacation.pl ​
 +<sxh perl>
 +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;
 +</​sxh>​
 +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. ​
 +<sxh bash>
 +aptitude install libsasl2-2 libsasl2-modules-sql -y
 +aptitude install libsasl2-modules libsasl2-dev sasl2-bin openssl ​  -y
 +</​sxh>​
 +
 +Agora vamos obter o gid do Postfix ​
 +<sxh bash>
 +grep postfix /etc/passwd
 +postfix:​x:​104:​107::/​var/​spool/​postfix:/​bin/​false
 +</​sxh>​
 +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 ​
 +<sxh bash>
 +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'​ ...
 +</​sxh>​
 +
 +Agora vamos acertar as permissões do diretório do vmail
 +<sxh bash>
 +chown -R vmail:​postdrop /home/vmail
 +</​sxh>​
 +
 +Vamos fazer um backup do arquivo original ​
 +<sxh bash>
 +cp -Rfa /​etc/​postfix/​main.cf{,​.bkp}
 +</​sxh>​
 +Agora vamos configurar o nosso postfix ​
 +<sxh bash>
 +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,​ 192.168.1.0/​24 [::​ffff:​127.0.0.0]/​104 [::1]/128
 +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 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-------------------------------------------
 +</​sxh>​
 +====== Geração das chaves para a conexão via TLS no Postfix ======
 +Vamos gerar as chaves de autenticação ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Acertando permissão da key gerada ​
 +<sxh bash>
 +chmod 600 smtpd.key
 +</​sxh>​
 +Agora vamos gerar o pedido de assinatura ​
 +<sxh bash>
 +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.q.santos@douglasqsantos.com.br
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +Vamos assinar agora o nosso certificado ​
 +<sxh bash>
 +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.q.santos@douglasqsantos.com.br
 +Getting Private key
 +Enter pass phrase for smtpd.key:
 +</​sxh>​
 +Agora vamos tirar a senha do certificado agora 
 +<sxh bash>
 +openssl rsa -in smtpd.key -out smtpd.key.unencrypted
 +Enter pass phrase for smtpd.key: senha
 +writing RSA key
 +</​sxh>​
 +Gerando o CA 
 +<sxh bash>
 +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.q.santos@douglasqsantos.com.br
 +</​sxh>​
 +Ultimas chaves de Diffie Hellman ​
 +<sxh bash>
 +openssl dhparam 1024 -out dh_1024.pem
 +openssl dhparam 512 -out dh_512.pem
 +</​sxh>​
 +
 +====== 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
 +<sxh bash>
 +vim /​etc/​postfix/​mysql_transport_maps.cf
 +user = mail
 +password = 123
 +hosts = localhost
 +dbname = mail
 +table = domain
 +select_field = transport
 +where_field = domain
 +</​sxh>​
 +
 +Aqui vamos configurar o arquivo que controla as contas de email
 +<sxh bash>
 +vim /​etc/​postfix/​mysql_virtual_alias_maps.cf ​
 +user = mail
 +password = 123
 +hosts = localhost
 +dbname = mail
 +table = alias
 +select_field = goto
 +where_field = address
 +</​sxh>​
 +Aqui vamos configurar o arquivo que controla os domínios do postfix
 +<sxh bash>
 +vim /​etc/​postfix/​mysql_virtual_domains_maps.cf ​
 +user = mail
 +password = 123
 +hosts = localhost
 +dbname = mail
 +table = domain
 +select_field = domain
 +where_field = domain
 +</​sxh>​
 +
 +Aqui vamos acertar o arquivo que controla as cotas do usuários e domínios
 +<sxh bash>
 +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
 +</​sxh>​
 +Aqui vamos acertar o arquivo que controla as mailbox ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Vamos acertar as permissões ​
 +<sxh bash>
 +chmod o= /​etc/​postfix/​mysql_*
 +chgrp postfix /​etc/​postfix/​mysql_*
 +</​sxh>​
 +Vamos fazer o acerto dos aliases agora 
 +<sxh bash>
 +mv /​etc/​aliases /​etc/​postfix
 +</​sxh>​
 +Ajustando arquivos de aliases para os redirecionamentos ​
 +<sxh bash>
 +vim /​etc/​postfix/​aliases
 +[...]
 +root: douglas.q.santos@douglasqsantos.com.br
 +</​sxh>​
 +Agora vamos gerar a nova base de dados dos aliases ​
 +<sxh bash>
 +newaliases
 +</​sxh>​
 +Vamos fazer backup do arquivo de configuração ​
 +<sxh bash>
 +cp /​etc/​postfix/​master.cf{,​.bkp}
 +</​sxh>​
 +Ajustando arquivo de serviços do postfix ​
 +<sxh bash>
 +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-----------------------------------------------------
 +</​sxh>​
 +
 +====== Configuração do controle de autenticação do Postfix ======
 +Agora vamos configurar o sasl 
 +<sxh bash>
 +vim /​usr/​lib/​sasl2/​smtpd.conf
 +pwcheck_method:​ saslauthd
 +mech_list: PLAIN LOGIN
 +auxprop_plugin:​ sql
 +sql_engine: mysql
 +sql_hostnames:​ 127.0.0.1
 +sql_user: mail
 +sql_passwd: 123
 +sql_database:​ mail
 +sql_select: select password from mailbox where username = '​%u@%r'​
 +allowanonymouslogin:​ no
 +allowplaintext:​ yes
 +#Para efetuar debug de problemas analisar o arquivo /​var/​log/​auth.log
 +#​sql_verbose:​ yes
 +#log_level: 9
 +</​sxh>​
 +
 +Vamos acertar a localização do arquivo com um link 
 +<sxh bash>
 +ln -sf /​usr/​lib/​sasl2/​smtpd.conf /​etc/​postfix/​sasl/​smtpd.conf
 +</​sxh>​
 +Vamos colocar o sasl no grupo do postfix ​
 +<sxh bash>
 +usermod -G sasl postfix
 +</​sxh>​
 +Agora vamos acertar o sasauthd mais primeiro vamos fazer o backup do arquivo ​
 +<sxh bash>
 +cp /​etc/​default/​saslauthd{,​.bkp}
 +</​sxh>​
 +Agora vamos acertar a configuração do arquivo saslauthd ​
 +<sxh bash>
 +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"
 +</​sxh>​
 +Vamos acertar os arquivos do saslauthd para o postfix ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos preparar o mysql para trabalhar com o Postfix ​
 +<sxh bash>
 +mkdir -p /​var/​spool/​postfix/​var/​run/​mysqld
 +</​sxh>​
 +Agora vamos acertar o arquivo de inicialização do MySQL 
 +<sxh bash>
 +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 -sf /​var/​run/​mysqld/​mysqld.sock /​var/​spool/​postfix/​var/​run/​mysqld/​mysqld.sock
 +        ;;
 + 
 +  '​stop'​)
 +</​sxh>​
 +Agora vamos acertar a permissão do diretório /​var/​run/​mysqld ​
 +<sxh bash>
 +chown -R vmail:mysql /​var/​run/​mysqld && chmod -R 775 /​var/​run/​mysqld
 +</​sxh>​
 +Agora vamos reiniciar os serviços ​
 +<sxh bash>
 +/​etc/​init.d/​mysql restart
 +/​etc/​init.d/​saslauthd restart
 +</​sxh>​
 +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 ======
 +<sxh bash>
 +aptitude install courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-authlib-mysql courier-authdaemon libgamin-dev -y
 +#Resposta
 +1) No
 +2) Ok
 +</​sxh>​
 +Agora vamos fazer backup dos arquivos de configuração do courier ​
 +<sxh bash>
 +cp /​etc/​courier/​authdaemonrc{,​.bkp}
 +cp /​etc/​courier/​authmysqlrc{,​.bkp}
 +</​sxh>​
 +Agora vamos acertar o arquivo de conexão do Courier com o Mysql 
 +<sxh bash>
 +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'​)
 +</​sxh>​
 +Agora vamos acertar a configuração do serviço do Courier ​
 +<sxh bash>
 +vim /​etc/​courier/​authdaemonrc
 +authmodulelist="​authmysql"​
 +authmodulelistorig="​authmysql"​
 +daemons=5
 +authdaemonvar=/​var/​run/​courier/​authdaemon
 +subsystem=mail
 +DEFAULTOPTIONS=""​
 +LOGGEROPTS=""​
 +</​sxh>​
 +Agora vamos acertar a configuração dos arquivos que vão gerar os nosso certificados para ssl. 
 +Primeiro vamos editar o arquivo do imap 
 +<sxh bash>
 +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
 +</​sxh>​
 +
 +Agora vamos editar o arquivo do pop 
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos fazer backup dos certificados antigos. ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos gerar o novo certificado para o Imap-ssl ​
 +<sxh bash>
 +mkimapdcert
 +</​sxh>​
 +Agora vamos gerar o novo certificado para o Pop-ssl ​
 +<sxh bash>
 +mkpop3dcert
 +</​sxh>​
 +Agora vamos acertar os links dos certificados do courier ​
 +<sxh bash>
 +ln -sf /​usr/​lib/​courier/​imapd.pem /​etc/​courier/​imapd.pem
 +ln -sf /​usr/​lib/​courier/​pop3d.pem /​etc/​courier/​pop3d.pem
 +</​sxh>​
 +Agora é só reiniciar os serviços ​
 +<sxh bash>
 +/​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
 +</​sxh>​
 +
 +Ajustando a forma de autenticação do POP3, IMAP e SMTP 
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos copiar os arquivos da pam 
 +<sxh bash>
 +cp -Rfa /​etc/​pam.d/​pop3 /​etc/​pam.d/​imap
 +cp -Rfa /​etc/​pam.d/​pop3 /​etc/​pam.d/​smtp
 +</​sxh>​
 +
 +
 +Agora vamos fazer alguns ajustes na configuração do MySQL.
 +<sxh bash>
 +vim /​etc/​mysql/​my.cnf
 +[...]
 +key_buffer ​             = 32M
 +max_allowed_packet ​     = 32M
 +[...]
 +query_cache_limit ​      = 4M
 +query_cache_size ​       = 32M
 +[...]
 +</​sxh>​
 +
 +Restartando os serviços: ​
 +<sxh bash>
 +/​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
 +</​sxh>​
 +Verificando se os serviços estão sendo executados: ​
 +<sxh bash>
 +nmap -sS -T4 localhost
 +
 +Starting Nmap 6.00 ( http://​nmap.org ) at 2013-11-15 15:08 BRST
 +Nmap scan report for localhost (127.0.0.1)
 +Host is up (0.000031s latency).
 +Other addresses for localhost (not scanned): 127.0.0.1
 +Not shown: 990 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.22 seconds
 +</​sxh>​
 +
 +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.q.santos
 +  * 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 ​
 +<sxh bash>
 +tail -f /​var/​log/​mail.log
 +Nov 15 15:14:17 mail postfix/​smtpd[12807]:​ connect from localhost[::​1]
 +Nov 15 15:14:17 mail postfix/​smtpd[12807]:​ D730317443: client=localhost[::​1]
 +Nov 15 15:14:17 mail postfix/​cleanup[12812]:​ D730317443: message-id=<​20131115171417.D730317443@mail.douglasqsantos.com.br>​
 +Nov 15 15:14:17 mail postfix/​qmgr[12789]:​ D730317443: from=<​douglas.q.santos@douglasqsantos.com.br>,​ size=488, nrcpt=1 (queue active)
 +Nov 15 15:14:17 mail postfix/​smtpd[12807]:​ disconnect from localhost[::​1]
 +Nov 15 15:14:17 mail postfix/​virtual[12813]:​ D730317443: to=<​douglas.q.santos@douglasqsantos.com.br>,​ relay=virtual,​ delay=0.12, delays=0.04/​0.04/​0/​0.04,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Nov 15 15:14:17 mail postfix/​qmgr[12789]:​ D730317443: removed
 +</​sxh>​
 +
 +Agora vamos testar a autenticação do Cliente. ​
 +<sxh bash>
 +testsaslauthd -u douglas.q.santos@douglasqsantos.com.br -p doug123
 +0: OK "​Success."​
 +</​sxh>​
 +
 +Vamos fazer um teste para verificar se o smtp esta funcionando
 +<sxh bash>
 +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.
 +</​sxh>​
 +
 +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
 +<sxh perl>
 +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;
 +  }
 +}
 +</​sxh>​
 +Agora precisamos dar a permissão para o nosso script
 +<sxh bash>
 +chmod +x /srv/base64
 +</​sxh>​
 +Vamos gerar o usuário e a senha em base64 que o postfix utiliza para validar o usuário e senha
 +<sxh bash>
 +/​srv/​base64 ​
 +Pressione Enter para sair. 
 +Insira a string: douglas.q.santos@douglasqsantos.com.br
 +Base64 encode é : ZG91Z2xhc0Bkb3VnbGFzLmxhbg==
 +Insira a string: doug123
 +Base64 encode é : ZG91ZzEyMw==
 +Insira a string: ​
 +</​sxh>​
 +
 +<sxh bash>
 +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.q.santos@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.q.santos@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.q.santos@douglasqsantos.com.br
 +ZG91Z2xhc0Bkb3VnbGFzLmxhbg==
 +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.q.santos@douglasqsantos.com.br>​
 +250 2.1.0 Ok
 +rcpt to: <​douglas.q.santos@douglasqsantos.com.br>​
 +250 2.1.5 Ok
 +data
 +354 End data with <​CR><​LF>​.<​CR><​LF>​
 +From: Douglas <​douglas.q.santos@douglasqsantos.com.br>​
 +To: Douglas <​douglas.q.santos@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
 +</​sxh>​
 +
 +Para somente visualizarmos o certificado do smtp podemos fazer da seguinte maneira
 +<sxh bash>
 +openssl s_client -starttls smtp -crlf -connect localhost:​25 -showcerts
 +CONNECTED(00000003)
 +depth=0 C = BR, ST = Parana, L = Curitiba, O = Douglas, OU = IT, CN = mail.douglasqsantos.com.br,​ emailAddress = douglas.q.santos@douglasqsantos.com.br
 +verify error:​num=18:​self signed certificate
 +verify return:1
 +depth=0 C = BR, ST = Parana, L = Curitiba, O = Douglas, OU = IT, CN = mail.douglasqsantos.com.br,​ emailAddress = douglas.q.santos@douglasqsantos.com.br
 +verify return:1
 +---
 +Certificate chain
 + 0 s:/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=IT/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas.q.santos@douglasqsantos.com.br
 +   ​i:/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=IT/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas.q.santos@douglasqsantos.com.br
 +-----BEGIN CERTIFICATE-----
 +MIIClzCCAgACCQCi9HiCKiuCjzANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMC
 +QlIxDzANBgNVBAgMBlBhcmFuYTERMA8GA1UEBwwIQ3VyaXRpYmExEDAOBgNVBAoM
 +B0RvdWdsYXMxCzAJBgNVBAsMAklUMRkwFwYDVQQDDBBtYWlsLmRvdWdsYXMubGFu
 +MSIwIAYJKoZIhvcNAQkBFhNkb3VnbGFzQGRvdWdsYXMubGFuMB4XDTEzMTExNTE2
 +NTk0NFoXDTIzMTExMzE2NTk0NFowgY8xCzAJBgNVBAYTAkJSMQ8wDQYDVQQIDAZQ
 +YXJhbmExETAPBgNVBAcMCEN1cml0aWJhMRAwDgYDVQQKDAdEb3VnbGFzMQswCQYD
 +VQQLDAJJVDEZMBcGA1UEAwwQbWFpbC5kb3VnbGFzLmxhbjEiMCAGCSqGSIb3DQEJ
 +ARYTZG91Z2xhc0Bkb3VnbGFzLmxhbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
 +gYEAwTZ8ugoGDl1aPMQ3xxD5mjplJmfU65Sm44yNbkNssqjqjAVYEQ1vhWus8jOl
 +7k9shupEkw+RdxED1Cn0AkddRkN9Ncen/​aaUL5dHMq6QuXleNU2KrTWI0Kb+rfnq
 +USoyCntfs1lcsDVYdwuFWsFmsHtuhANgQJIW25dlA7pd/​VsCAwEAATANBgkqhkiG
 +9w0BAQUFAAOBgQCIIG5gY63zSnrRzNQCJm5OkUdq/​fa+Q3a5QKqnX28J5hBkYkZb
 +AV3rVAoXyhldwduLi2DIIKMwOpjTUJ0lnifxq4Bo3+4iKz/​heMKt2bTrZRg1TKLD
 +5VCi/​k88nuMPhfvzWCoFm83+mBRy8O73AYnmdv7IwPMMHkKTp+oAPO66jw==
 +-----END CERTIFICATE-----
 +---
 +Server certificate
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=IT/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas.q.santos@douglasqsantos.com.br
 +issuer=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=IT/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas.q.santos@douglasqsantos.com.br
 +---
 +Acceptable client certificate CA names
 +/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=IT/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas.q.santos@douglasqsantos.com.br
 +---
 +SSL handshake has read 1656 bytes and written 502 bytes
 +---
 +New, TLSv1/​SSLv3,​ Cipher is ECDHE-RSA-AES256-GCM-SHA384
 +Server public key is 1024 bit
 +Secure Renegotiation IS supported
 +Compression:​ zlib compression
 +Expansion: zlib compression
 +SSL-Session:​
 +    Protocol ​ : TLSv1.2
 +    Cipher ​   : ECDHE-RSA-AES256-GCM-SHA384
 +    Session-ID: 3E99954060BA522690224B7BA574F12DA08D9FE489C9F3E9F2F560963847B830
 +    Session-ID-ctx: ​
 +    Master-Key: 4C890F162CF0F19BDE4A2208264B880E2C62F5E45A0E4ADBB07B34CC68D5D610572C082128E368F663FE70BF33683B87
 +    Key-Arg ​  : None
 +    PSK identity: None
 +    PSK identity hint: None
 +    SRP username: None
 +    TLS session ticket lifetime hint: 3600 (seconds)
 +    TLS session ticket:
 +    0000 - 2e f5 61 81 cd bf 72 4e-db 7b ff b1 40 53 7f bc   ​..a...rN.{..@S..
 +    0010 - f3 1a e2 6a d0 65 45 78-21 29 56 d0 62 8a 34 6a   ​...j.eEx!)V.b.4j
 +    0020 - 30 47 65 3a f9 be 3b 5a-73 c3 b7 68 5b f1 d5 ad   ​0Ge:​..;​Zs..h[...
 +    0030 - 0f 41 96 33 e7 f9 73 25-6a 3f 85 00 4e f0 ec 35   ​.A.3..s%j?​..N..5
 +    0040 - bb 2f cc 70 fe f3 1e e1-99 7d e7 a0 69 29 a3 83   ​./​.p.....}..i)..
 +    0050 - 2d 17 61 78 69 a2 2b 35-6e 7e 85 c4 c0 92 02 86   ​-.axi.+5n~......
 +    0060 - ac f8 ed dc 63 f0 f5 f4-a3 a9 1d 4a d5 95 ff df   ​....c......J....
 +    0070 - ad 66 11 6b 36 49 00 2a-0c f6 0c e4 69 d7 a9 c3   ​.f.k6I.*....i...
 +    0080 - f1 46 33 89 0c d9 7c 79-67 89 dd 79 5d de 5b 2f   ​.F3...|yg..y].[/​
 +    0090 - 72 b8 7a 2b 5e 76 3a 3b-37 48 7a 1e 8e be 78 f2   ​r.z+^v:;​7Hz...x.
 +    00a0 - ae 94 75 e9 b3 86 0d 3b-40 ad a6 09 42 6f 77 c8   ​..u....;​@...Bow.
 +
 +    Compression:​ 1 (zlib compression)
 +    Start Time: 1384536023
 +    Timeout ​  : 300 (sec)
 +    Verify return code: 18 (self signed certificate)
 +---
 +250 DSN
 +quit
 +221 2.0.0 Bye
 +closed
 +</​sxh>​
 +
 +Vamos fazer um teste de acesso pop 
 +<sxh bash>
 +telnet localhost 110
 +Trying ::1...
 +Connected to localhost.
 +Escape character is '​^]'​.
 ++OK Hello there.
 +user douglas.q.santos@douglasqsantos.com.br
 ++OK Password required.
 +pass doug123
 ++OK logged in.
 +list
 ++OK POP3 clients that break here, they violate STD53.
 +1 595
 +.
 +retr 1
 ++OK 595 octets follow.
 +Return-Path:​ <​douglas.q.santos@douglasqsantos.com.br>​
 +X-Original-To:​ douglas.q.santos@douglasqsantos.com.br
 +Delivered-To:​ douglas.q.santos@douglasqsantos.com.br
 +Received: from 192.168.1.70 (localhost [IPv6:::1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id D730317443
 +  for <​douglas.q.santos@douglasqsantos.com.br>;​ Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +To: douglas.q.santos@douglasqsantos.com.br
 +From: douglas.q.santos@douglasqsantos.com.br
 +Subject: Bem-vindo(a)
 +MIME-Version:​ 1.0
 +Content-Type:​ text/plain; charset=utf-8
 +Content-Transfer-Encoding:​ 8bit
 +Message-Id: <​20131115171417.D730317443@mail.douglasqsantos.com.br>​
 +Date: Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +
 +Hi,
 +
 +Welcome to your new account.
 +.
 +quit
 ++OK Bye-bye.
 +Connection closed by foreign host.
 +</​sxh>​
 +
 +Agora vamos efetuar um teste de pop com ssl
 +<sxh bash>
 +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@douglas.q.santos
 +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@douglas.q.santos
 +verify return:1
 ++OK Hello there.
 +user douglas.q.santos@douglasqsantos.com.br
 ++OK Password required.
 +pass doug123
 ++OK logged in.
 +list
 ++OK POP3 clients that break here, they violate STD53.
 +1 595
 +.
 +retr 1
 ++OK 595 octets follow.
 +Return-Path:​ <​douglas.q.santos@douglasqsantos.com.br>​
 +X-Original-To:​ douglas.q.santos@douglasqsantos.com.br
 +Delivered-To:​ douglas.q.santos@douglasqsantos.com.br
 +Received: from 192.168.1.70 (localhost [IPv6:::1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id D730317443
 +  for <​douglas.q.santos@douglasqsantos.com.br>;​ Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +To: douglas.q.santos@douglasqsantos.com.br
 +From: douglas.q.santos@douglasqsantos.com.br
 +Subject: Bem-vindo(a)
 +MIME-Version:​ 1.0
 +Content-Type:​ text/plain; charset=utf-8
 +Content-Transfer-Encoding:​ 8bit
 +Message-Id: <​20131115171417.D730317443@mail.douglasqsantos.com.br>​
 +Date: Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +
 +Hi,
 +
 +Welcome to your new account.
 +.
 +quit
 ++OK Bye-bye.
 +</​sxh>​
 +
 +Agora vamos efetuar um teste com o Imap 
 +<sxh bash>
 +telnet localhost 143
 +Trying ::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-2011 Double Precision, Inc.  See COPYING for distribution information.
 +a login douglas.q.santos@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 384536156] Ok
 +* OK [MYRIGHTS "​acdilrsw"​] ACL
 +a OK [READ-ONLY] Ok
 +a fetch 1 body[]
 +* 1 FETCH (BODY[] {595}
 +Return-Path:​ <​douglas.q.santos@douglasqsantos.com.br>​
 +X-Original-To:​ douglas.q.santos@douglasqsantos.com.br
 +Delivered-To:​ douglas.q.santos@douglasqsantos.com.br
 +Received: from 192.168.1.70 (localhost [IPv6:::1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id D730317443
 +  for <​douglas.q.santos@douglasqsantos.com.br>;​ Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +To: douglas.q.santos@douglasqsantos.com.br
 +From: douglas.q.santos@douglasqsantos.com.br
 +Subject: Bem-vindo(a)
 +MIME-Version:​ 1.0
 +Content-Type:​ text/plain; charset=utf-8
 +Content-Transfer-Encoding:​ 8bit
 +Message-Id: <​20131115171417.D730317443@mail.douglasqsantos.com.br>​
 +Date: Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +
 +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.
 +</​sxh>​
 +
 +Agora vamos efetuar um teste do imap com ssl
 +<sxh bash>
 +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@douglas.q.santos
 +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@douglas.q.santos
 +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-2011 Double Precision, Inc.  See COPYING for distribution information.
 +a login douglas.q.santos@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 384536218] Ok
 +* OK [MYRIGHTS "​acdilrsw"​] ACL
 +a OK [READ-ONLY] Ok
 +a fetch 1 body[]
 +* 1 FETCH (BODY[] {595}
 +Return-Path:​ <​douglas.q.santos@douglasqsantos.com.br>​
 +X-Original-To:​ douglas.q.santos@douglasqsantos.com.br
 +Delivered-To:​ douglas.q.santos@douglasqsantos.com.br
 +Received: from 192.168.1.70 (localhost [IPv6:::1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id D730317443
 +  for <​douglas.q.santos@douglasqsantos.com.br>;​ Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +To: douglas.q.santos@douglasqsantos.com.br
 +From: douglas.q.santos@douglasqsantos.com.br
 +Subject: Bem-vindo(a)
 +MIME-Version:​ 1.0
 +Content-Type:​ text/plain; charset=utf-8
 +Content-Transfer-Encoding:​ 8bit
 +Message-Id: <​20131115171417.D730317443@mail.douglasqsantos.com.br>​
 +Date: Fri, 15 Nov 2013 15:14:17 -0200 (BRST)
 +
 +Hi,
 +
 +Welcome to your new account.
 +)
 +a OK FETCH completed.
 +a logout
 +* BYE Courier-IMAP server shutting down
 +a OK LOGOUT completed
 +</​sxh>​
 +
 +
 +Até aqui já temos o Postfix trabalhando corretamente porém vamos adicionar mais funcionalidades a ele ;) 
 +====== Migrando as contas do Servidor Atual para o Novo Servidor com o ImapSync ======
 +
 +Vamos obter o imapsync
 +<sxh bash>
 +cd /usr/src
 +git clone https://​github.com/​imapsync/​imapsync.git
 +</​sxh>​
 +
 +Vamos instalar as dependências do ImapSync
 +<sxh bash>
 +aptitude install ​ libmail-imapclient-perl libdigest-md5-file-perl libterm-readkey-perl libio-socket-ssl-perl libfile-spec-perl libdigest-hmac-perl makepasswd -y
 +</​sxh>​
 +
 +
 +Agora vamos acessar o diretório do imapsync
 +<sxh bash>
 +cd /​usr/​src/​imapsync
 +</​sxh>​
 +
 +Agora precisamos criar um diretório de controle interno dele
 +<sxh bash>
 +mkdir dist
 +</​sxh>​
 +
 +Agora vamos compilar ele
 +<sxh bash>
 +make
 +</​sxh>​
 +
 +Agora vamos mandar instalar ele
 +<sxh bash>
 +make install clean
 +</​sxh>​
 +
 +Agora vamos pegar por exemplo a conta do nerso para sincronizar
 +
 +Vamos criar um arquivo contendo o usuário e senha do servidor de email atual e o usuário e senha do servidor novo, nós podemos ter um usuário por linha 
 +<sxh bash>
 +vim /​usr/​src/​users
 +nerso@douglas.q.santos;​senha1;​nerso@douglas.q.santos;​senha2
 +</​sxh>​
 +
 +O arquivo deve ser no seguinte formato:
 +<sxh bash>
 +usuário1;​senha1;​usuário2;​senha2
 +</​sxh>​
 +
 +**Onde:**
 +  * **usuário1:​** é o usuário do servidor atual que está no uol
 +  * **senha1:** é a senha do usuário atual que está no uol
 +  * **usuário2:​** é o usuário do servidor novo que acabamos de montar
 +  * **senha2:** é a senha do usuário do servidor novo que acabamos de montar
 +
 +Nós vamos fazer o sincronismo de todas as contas que estiverem no arquivo /tmp/users
 +
 +Agora vamos ao script de sincronismo
 +<sxh bash>
 +vim /​usr/​src/​sincroniza.sh
 +#!/bin/bash
 +#​-------------------------------------------------------------------------
 +# sincroniza.sh
 +#
 +# Site  : http://​wiki.douglasqsantos.com.br
 +# Autor : Douglas Q. dos Santos <​douglas.q.santos@douglasqsantos.com.br>​
 +# Manutenção:​ Douglas Q. dos Santos <​douglas.q.santos@douglasqsantos.com.br>​
 +#
 +#​-------------------------------------------------------------------------
 +# Efetua o sincronismo das caixas de mensagens entre servidor de email
 +#​-------------------------------------------------------------------------
 +# Histórico:
 +#
 +# Versão 1:
 +# Data: 22/02/2011
 +# Descrição:​ Efetua o sincronismo das caizas de mensagens entre servidores
 +# de email utilizando o imapsync no Debian Squeeze
 +#
 +#​--------------------------------------------------------------------------
 +#Licença: http://​creativecommons.org/​licenses/​by-sa/​3.0/​legalcode
 +#
 +#​--------------------------------------------------------------------------
 +
 +#VARIAVEIS GLOBAIS UTILIZADAS NO SCIRPT
 +RED="​\033[01;​31m"​
 +GREEN="​\033[01;​32m"​
 +WHITE="​\033[01;​37m"​
 +CLOSE="​\033[m"​
 +IMAPSYNC=$(which imapsync)
 +SERVER1="​mail.douglasqsantos.com.br"​
 +SERVER2="​localhost"​
 +LISTA="/​usr/​src/​users"​
 +LOGS="/​var/​log/​sincroniza.log"​
 +
 +
 +#FUNÇÃO PARA SINCRONIZAR AS MENSAGENS
 +_Sincronizar()
 +{
 +for END in $(cat ${LISTA}); ​
 +do
 +#O ARQUIVO DEVE ESTAR SEPARADO POR ; 
 +USER1=$(echo ${END} | cut -d ';'​ -f 1)
 +SENHA1=$(echo ${END} | cut -d ';'​ -f 2)
 +USER2=$(echo ${END} | cut -d ';'​ -f 3)
 +SENHA2=$(echo ${END} | cut -d ';'​ -f 4)
 +echo -e "​${GREEN}SINCRONIZANDO A CONTA DE EMAIL ${RED}${USER1}${CLOSE} ${GREEN}DO SERVIDOR${CLOSE} ${RED}${SERVER1}${CLOSE} ${GREEN}PARA O SERVIDOR${CLOSE} ${RED}${SERVER2}${CLOSE} ${CLOSE}"​
 +sleep 2
 +${IMAPSYNC} --host1 ${SERVER1} --user1 ${USER1} --password1 ${SENHA1} --host2 localhost --user2 ${USER2} --password2 ${SENHA2}
 +_Validar ${USER1}
 +done
 +}
 +
 +#FUNÇÃO PARA VALIDAR SE A CONTA CONSEGUIU SER SINCRONIZADA
 +_Validar()
 +{
 +if [ $? -eq 0 ]; then
 +  echo -e "​${GREEN}CONTA DE EMAIL ${RED}${1}${CLOSE} ${GREEN}SINCRONIZADA COM SUCESSO ${CLOSE}" ​
 +else
 +      echo -e "​${RED}FALHA AO SINCRONIZAR A CONTA DE EMAIL ${WHITE}${1}${CLOSE}${CLOSE}"​
 +  #GERANDO LOGS DAS CONTAS QUE DERAO PROBLEMAS PARA SINCRONIZAR
 +      echo -e "FALHA AO SINCRONIZAR A CONTA DE EMAIL ${1} NA DATA: $(date)"​ >> ${LOGS}
 +fi
 +
 +}
 +
 +_Sincronizar
 +</​sxh>​
 +
 +Agora precisamos dar permissão para o nosso script
 +<sxh bash>
 +chmod +x /​usr/​src/​sincroniza.sh
 +</​sxh>​
 +
 +Agora é só mandar executar ele
 +<sxh bash>
 +/​usr/​src/​sincroniza.sh
 +</​sxh>​
 +
 +Quando acabar o sincronismo vamos ter algo como abaixo
 +<sxh bash>
 +Host2 Nb messages: ​            494 messages
 +Host2 Total size:        117416141 bytes (111.98 MiB)
 +Host2 Biggest message: ​    ​7830835 bytes (7.47 MiB)
 +Host2 Time spent: ​             0.7 seconds
 +++++ Statistics
 +Transfer started on               : Sun Jan 13 16:39:00 2013
 +Transfer ended on                 : Sun Jan 13 16:39:13 2013
 +Transfer time                     : 13.0 sec
 +Messages transferred ​             : 0 
 +Messages skipped ​                 : 496
 +Messages found duplicate on host1 : 12
 +Messages found duplicate on host2 : 0
 +Messages void (noheader) on host1 : 0
 +Messages void (noheader) on host2 : 0
 +Messages deleted on host1         : 0
 +Messages deleted on host2         : 0
 +Total bytes transferred ​          : 0 (0.00 KiB)
 +Total bytes duplicate host1       : 383100 (374.12 KiB)
 +Total bytes duplicate host2       : 0 (0.00 KiB)
 +Total bytes skipped ​              : 117384026 (111.95 MiB)
 +Total bytes error                 : 0 (0.00 KiB)
 +Message rate                      : 0.0 messages/s
 +Average bandwidth rate            : 0.0 KiB/s
 +Reconnections to host1            : 0
 +Reconnections to host2            : 0
 +Memory consumption ​               : 82.4 MiB
 +Biggest message ​                  : 0 bytes
 +Initial difference host2 - host1  : -2 messages, -350985 bytes (-342.76 KiB)
 +Final   ​difference host2 - host1  : -2 messages, -350985 bytes (-342.76 KiB)
 +Detected 0 errors
 +
 +This current imapsync is up to date
 +Homepage: http://​imapsync.lamiral.info/​
 +CONTA DE EMAIL nerso@douglas.q.santos SINCRONIZADA COM SUCESSO ​
 +</​sxh>​
 +
 +Caso alguma conta de problemas para sincronizar vamos ter o arquivo de log em **/​var/​log/​sincroniza.log**
 +
 +====== Instalação e configuração do AfterLogicWebmail ======
 +
 +Vamos obter ele e desempacotar
 +<sxh bash>
 +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
 +</​sxh>​
 +
 +Agora vamos acertar as permissões do nosso webmail.
 +<sxh bash>
 +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
 +</​sxh>​
 +
 +
 +Agora vamos preparar o banco de dados para o webmail
 +<sxh sql>
 +mysql -u root -p
 +CREATE DATABASE webmail;
 +GRANT ALL PRIVILEGES ON webmail.* TO webmail@localhost IDENTIFIED BY '​senha';​
 +flush privileges;
 +quit;
 +</​sxh>​
 +
 +
 +Agora vamos acessar pelo navegador a tela de configuração do webmail http://​ip_servidor/​webmail/​install/ ​
 +
 +  - Nesta página inicial de instalação os requisitos devem estar todos em Verde, no final da página selecione Next.
 +  - Agora leia o termo de licença e selecione I Agree para continuar.
 +  - Agora aqui nesta tela temos que informar:
 +    - **SQL login:** webmail
 +    - **SQL password:** senha
 +    - **Database name:** webmail
 +    - **Host:** localhost
 +  - Agora selecione Test database, o resultado deve ser Connected successfully se os dados estiverem corretos.
 +  - Deixe selecionado **Create Database Tables**.
 +  - Agora selecione Next.
 +  - Agora precisamos informar a senha e confirmar para o nosso mailadm que vai poder gerenciar a configuração global do nosso webmail.
 +  - Agora selecione Next.
 +  - Agora vamos selecionar os protocolos que o nosso webmail vai utilizar, vou selecionar SMTP e IMAP4.
 +  - 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.
 +  - Agora selecione Next.
 +  - Agora nós fomos redirecionados para uma página sobre a conclusão da nossa instalação. Volte a instalação do nosso webmail.
 +  - Agora selecione Exit
 +
 +Agora precisamos excluir a pasta install do nosso webmail.
 +<sxh bash>
 +rm -rf /​var/​www/​webmail/​install/​
 +</​sxh>​
 +
 +Vamos acertar o arquivo /​etc/​php5/​apache2/​php.ini
 +
 +<sxh bash>
 +vim /​etc/​php5/​apache2/​php.ini
 +[...]
 +memory_limit = 256M
 +[...]
 +suhosin.session.encrypt=0
 +[...]
 +date.timezone = America/​Sao_Paulo
 +</​sxh>​
 +
 +Agora precisamos reiniciar o apache
 +<sxh bash>
 +
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +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.
 +<sxh bash>
 +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
 +</​sxh>​
 +
 +
 +Agora vamos acertar as permissões do script.
 +<sxh bash>
 +chmod 755 /​etc/​init.d/​servmail.sh
 +</​sxh>​
 +
 +Agora para parar os serviços de email.
 +<sxh bash>
 +/​etc/​init.d/​servmail.sh stop
 +</​sxh>​
 +
 +Agora para iniciar os serviços de email.
 +<sxh bash>
 +/​etc/​init.d/​servmail.sh start
 +</​sxh>​
 +
 +Agora para reiniciar os serviços de email.
 +<sxh bash>
 +/​etc/​init.d/​servmail.sh restart
 +</​sxh>​
 +
 +Agora é só ir ajustando de acordo com o seu ambiente.
 +
 +====== Referências ======
 +
 +  - http://​www.postfix.org/​
 +  - http://​www.postfix.org/​documentation.html
 +  - http://​www.postfix.org/​docs.html
 +  - http://​www.postfix.org/​SASL_README.html
 +  - http://​pam-mysql.sourceforge.net/​
 +  - http://​pam-mysql.sourceforge.net/​Documentation/​
 +  - http://​httpd.apache.org/​
 +  - http://​httpd.apache.org/​docs/​
 +  - http://​httpd.apache.org/​docs/​2.2/​ssl/​
 +  - http://​wiki.apache.org/​httpd/​
 +  - http://​httpd.apache.org/​docs/​2.2/​vhosts/​
 +  - http://​postfixadmin.sourceforge.net/​
 +  - http://​dev.mysql.com/​
 +  - http://​dev.mysql.com/​doc/​
 +  - http://​php.net/​
 +  - http://​vda.sourceforge.net/​
 +  - http://​www.openssl.org/​
 +  - https://​github.com/​imapsync/​imapsync