Differences

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

Link to this comparison view

postfix_postgresql_courier_roudcube_webmail_postfixadmin_quota_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Postfix + PostgreSQL + Courier + Roudcube Webmail + Postfixadmin + Quota + Debian Squeeze ======
  
 +
 + ​Objetivo desse How To, precisamos instalar e configurar o Postfix trabalhando com a sua autenticação no PostgreSQL, 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 Roundcube 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.
 +
 +
 +Download do pacote do Postfix ​
 +
 +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>​
 +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. ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Vamos atualizar os repositórios com os novos dados. ​
 +<sxh bash>
 +aptitude update -y
 +</​sxh>​
 +Agora vamos obter o código fonte do postfix e o patch para cotas 
 +<sxh bash>
 +cd /usr/src
 +apt-get source postfix
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​mail/​postfix-vda-v11-2.9.1.patch
 +</​sxh>​
 +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 
 +<sxh bash>
 +sed -i '​s/​2.9.1/​2.9.3/​g'​ /​usr/​src/​postfix-vda-v11-2.9.1.patch
 +</​sxh>​
 +Agora vamos aplicar o patch 
 +<sxh bash>
 +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
 +</​sxh>​
 +Agora vamos comentar as linhas do arquivo "/​etc/​apt/​sources.list"​ adicionadas para o download do postfix. ​
 +<sxh bash>
 +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
 +</​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
 +aptitude install debhelper po-debconf libdb-dev ssl-cert libpcre3-dev libpg-perl libmysqlclient-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev hardening-wrapper -y
 +aptitude install libldap2-dev libsqlite3-dev -y
 +</​sxh>​
 +Agora vamos criar os pacotes .deb 
 +<sxh bash>
 +dpkg-buildpackage
 +cd ../
 +apt-get remove --purge postfix -y
 +dpkg -i postfix_*.deb
 +</​sxh>​
 +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. ​
 +<sxh bash>
 +dpkg -i postfix-pcre*.deb
 +dpkg -i postfix-pgsql*.deb
 +dpkg -i postfix-doc*.deb
 +</​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 acertar alguns parâmetros do sistema ​
 +Nome e ip do servidor ​
 +<sxh bash>
 +vim /etc/hosts
 +127.0.0.1 ​      ​localhost
 +ip_servidor ​    ​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 para a utilização do Postfixadmin ​
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +aptitude install apache2 php5 php5-pgsql php5-imap libpam-pgsql -y
 +</​sxh>​
 +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>​
 +
 +Agora vamos instalar o PostgreSQL
 +<sxh bash>
 +aptitude install postgresql postgresql-client postgresql-common postgresql-contrib postgresql-doc postgresql-server-dev-all -y
 +</​sxh>​
 +
 +Aqui vamos configurar em qual endereço ip o servidor vai escutar vamos colocar * para ele escutar em todas as interfaces disponíveis,​ e vamos desativar o ssl.
 +<sxh bash>
 +vim /​etc/​postgresql/​8.4/​main/​postgresql.conf
 +[...]
 +listen_address = '​*'​
 +[...]
 +ssl = false 
 +[...]
 +</​sxh>​
 +
 +Agora precisamos liberar o acesso no PostgreSQL caso precisemos conectar nele de alguma máquina fora o servidor
 +<sxh bash>
 +vim /​etc/​postgresql/​8.4/​main/​pg_hba.conf
 +[...]
 +#no final do arquivo adicione a seguinte linha
 +host    all         ​all ​        ​192.168.1.0/​24 ​            md5
 +</​sxh>​
 +
 +Agora vamos mandar reiniciar o nosso PostgreSQL
 +<sxh bash>
 +/​etc/​init.d/​postgresql restart
 +</​sxh>​
 +
 +Agora vamos definir uma senha para o usuário postgres
 +<sxh bash>
 +su - postgres
 +psql
 +postgres=# ALTER USER postgres WITH PASSWORD '​senha';​
 +ALTER ROLE
 +postgres=# \q
 +postgres@mail:​~$ exit
 +logout
 +</​sxh>​
 +
 +Agora vamos criar o usuário e o banco que vamos utilizar para o Postfix
 +<sxh bash>
 +psql -h localhost -U postgres
 +Senha para usuário postgres: #senha
 +psql (8.4.13)
 +Digite "​help"​ para ajuda.
 +postgres=# create user mail with password '​123';​
 +CREATE ROLE
 +postgres=# create database mail with owner mail;
 +CREATE DATABASE
 +postgres=# \q
 +</​sxh>​
 +====== 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. ​
 +<sxh bash>
 +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 *
 +</​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\['​database_type'​\] = '​mysql';/​\$CONF\['​database_type'​\] = '​pgsql';/"​ /​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 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
 +);
 +</​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. ​
 +
 +====== 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-perl liblog-log4perl-perl liblog-dispatch-perl -y
 +aptitude install libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl ​ -y
 +</​sxh>​
 +Vamos acertar as configurações no arquivo vacation.pl ​
 +<sxh perl>
 +vim /​var/​spool/​vacation/​vacation.pl
 +[...]
 +our $db_type = '​Pg'; ​
 +#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,​ 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-------------------------------------------- ​
 +#​--------------------------------POSTGRESQL-------------------------------------- ​
 +transport_maps ​                 = proxy:​pgsql:/​etc/​postfix/​pgsql_transport_maps.cf
 +virtual_alias_maps ​             = proxy:​pgsql:/​etc/​postfix/​pgsql_virtual_alias_maps.cf
 +virtual_mailbox_domains ​        = proxy:​pgsql:/​etc/​postfix/​pgsql_virtual_domains_maps.cf
 +virtual_mailbox_maps ​           = proxy:​pgsql:/​etc/​postfix/​pgsql_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 POSTGRESQL-------------------------------------- ​
 +#​-----------------------------QUOTA-----------------------------------------------
 +virtual_mailbox_limit ​          = 51200000
 +virtual_mailbox_limit ​          = 0
 +virtual_maildir_extended ​       = yes
 +virtual_mailbox_limit_override ​ = yes
 +virtual_mailbox_limit_maps ​     = pgsql:/​etc/​postfix/​pgsql_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-------------------------------------------
 +</​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@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@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@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 PostgreSQL + 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/​pgsql_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/​pgsql_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/​pgsql_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/​pgsql_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/​pgsql_virtual_mailbox_maps.cf ​
 +user = mail
 +password = 123
 +hosts = localhost
 +dbname = mail
 +query = SELECT maildir FROM mailbox WHERE username='​%s'​ AND active = '​t'​
 +</​sxh>​
 +Vamos acertar as permissões ​
 +<sxh bash>
 +chmod o= /​etc/​postfix/​pgsql_*
 +chgrp postfix /​etc/​postfix/​pgsql_*
 +</​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@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
 +allow_plaintext:​ truesql_verbose:​ yes
 +sql_engine: pgsql
 +sql_hostnames:​ localhost
 +sql_user: mail
 +sql_passwd: 123
 +sql_database:​ mail
 +sql_select: select password from mailbox where username = '​%u'​
 +</​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 acertar o acesso do PostgreSQL para a jaula do Postfix
 +
 +Vamos parar o postgresql
 +<sxh bash>
 +/​etc/​init.d/​postgresql stop
 +</​sxh>​
 +
 +Agora vamos remover o diretório default que armazena o pid do postgresql
 +<sxh bash>
 +rm -rf /​var/​run/​postgresql/​
 +</​sxh>​
 +
 +Agora vamos criar o diretório dentro da jaula do postfix e vamos criar um link para o sistema
 +<sxh bash>
 +cd /var/run
 +mkdir /​var/​spool/​postfix/​var/​run/​postgresql
 +ln -sf /​var/​spool/​postfix/​var/​run/​postgresql/​
 +chown -R postfix:​postgres postgresql
 +chown -R postfix:​postgres /​var/​spool/​postfix/​var/​run/​postgresql
 +chmod 775 /​var/​spool/​postfix/​var/​run/​postgresql
 +</​sxh>​
 +
 +Agora vamos reiniciar os serviços ​
 +<sxh bash>
 +/​etc/​init.d/​postgresql restart
 +/​etc/​init.d/​saslauthd restart
 +</​sxh>​
 +====== Instalação do e configuração do Courier ======
 +<sxh bash>
 +aptitude install courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-authlib-postgresql courier-authdaemon libgamin-dev -y
 +#Resposta1) 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/​authpgsqlrc{,​.bkp}
 +</​sxh>​
 +Agora vamos acertar o arquivo de conexão do Courier com o PostgreSQL
 +<sxh bash>
 +vim /​etc/​courier/​authpgsqlrc
 +PGSQL_HOST ​             127.0.0.1
 +PGSQL_PORT ​             5432
 +PGSQL_USERNAME ​         mail
 +PGSQL_PASSWORD ​         123
 +PGSQL_DATABASE ​         mail
 +PGSQL_USER_TABLE ​       mailbox
 +PGSQL_CRYPT_PWFIELD ​    ​password
 +PGSQL_UID_FIELD ​        '​107'​
 +PGSQL_GID_FIELD ​        '​107'​
 +PGSQL_LOGIN_FIELD ​      ​username
 +PGSQL_HOME_FIELD ​       '/​home/​vmail'​
 +PGSQL_MAILDIR_FIELD ​    '/​home/​vmail/'​ || maildir
 +PGSQL_QUOTA_FIELD ​      quota || '​S'​
 +</​sxh>​
 +
 +Agora vamos acertar a configuração do serviço do Courier ​
 +<sxh bash>
 +vim /​etc/​courier/​authdaemonrc
 +authmodulelist="​authpgsql"​
 +authmodulelistorig="​authpgsql"​
 +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>​
 +
 +Vamos ajustar o pam_pgsql.conf ele não existe por padrão no sistema então temos que criar ele
 +<sxh bash>
 +vim /​etc/​pam_pgsql.conf ​
 +database = mail
 +host = localhost
 +user = mail
 +password = 123
 +table = mailbox
 +user_column = username
 +pwd_column = password
 +pw_type = crypt
 +debug
 +</​sxh>​
 +
 +Ajustando a forma de autenticação do POP3, IMAP e SMTP 
 +<sxh bash>
 +vim /​etc/​pam.d/​pop3
 +auth        required ​   pam_pgsql.so
 +account ​    ​required ​   pam_pgsql.so
 +password ​   required ​   pam_pgsql.so
 +</​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>​
 +
 +
 +Restartando os serviços: ​
 +<sxh bash>
 +/​etc/​init.d/​postgresql 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 5.00 ( http://​nmap.org ) at 2012-11-12 20:56 BRST
 +Interesting ports on localhost (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
 +5432/tcp open  postgresql
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.05 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
 +  * 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 12 20:57:32 mail postfix/​smtpd[11581]:​ connect from localhost[127.0.0.1]
 +Nov 12 20:57:32 mail postfix/​smtpd[11581]:​ 90E9FE235: client=localhost[127.0.0.1]
 +Nov 12 20:57:32 mail postfix/​cleanup[11588]:​ 90E9FE235: message-id=<​20121112225732.90E9FE235@mail.douglasqsantos.com.br>​
 +Nov 12 20:57:32 mail postfix/​qmgr[5898]:​ 90E9FE235: from=<​douglas@douglasqsantos.com.br>,​ size=495, nrcpt=1 (queue active)
 +Nov 12 20:57:32 mail postfix/​smtpd[11581]:​ disconnect from localhost[127.0.0.1]
 +Nov 12 20:57:32 mail postfix/​virtual[11589]:​ 90E9FE235: to=<​douglas@douglasqsantos.com.br>,​ relay=virtual,​ delay=0.04, delays=0.01/​0.01/​0/​0.01,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Nov 12 20:57:32 mail postfix/​qmgr[5898]:​ 90E9FE235: remove
 +</​sxh>​
 +Agora vamos testar a autenticação do Cliente. ​
 +<sxh bash>
 +testsaslauthd -u douglas@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@douglasqsantos.com.br
 +Base64 encode é : ZG91Z2xhc0Bkb3VnbGFzLndpa2kuYnI=
 +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@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
 +</​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=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
 +</​sxh>​
 +
 +Vamos fazer um teste de acesso pop 
 +<sxh bash>
 +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.
 +</​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@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.
 +</​sxh>​
 +
 +Agora vamos efetuar um teste com o Imap 
 +<sxh bash>
 +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.
 +</​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@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
 +</​sxh>​
 +
 +
 +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 ======
 +<sxh bash>
 +apt-get install fetchmail liblockfile-simple-perl -y 
 +mkdir /​var/​run/​fetchmail
 +touch /​var/​run/​fetchmail/​fetchmail-all.lock ​
 +</​sxh>​
 +Vamos instalar as dependências ​
 +<sxh bash>
 +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
 +</​sxh>​
 +Acertando o fetchmail ​
 +<sxh perl>
 +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";​
 +#}
 +</​sxh>​
 +Acertando as permissões do fetchmail ​
 +<sxh bash>
 +chmod 755 /​var/​www/​postfixadmin/​ADDITIONS/​fetchmail.pl ​
 +</​sxh>​
 +Ajuste o Crontab para efetuar sincronismo das contas aqui estou agendando para ser efetuado a cada 10 minutos acerte de acordo com a necessidade. ​
 +<sxh bash>
 +crontab -e
 +* */10      *       ​* ​      ​* ​      /​usr/​bin/​perl /​var/​www/​postfixadmin/​ADDITIONS/​fetchmail.pl
 +</​sxh>​
 +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. ​
 +====== Instalando e configurando o RoundCubeMail ======
 +
 +Vamos obter ele e desempacotar
 +<sxh bash>
 +mkdir /​var/​www/​webmail
 +cd /​var/​www/​webmail
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​mail/​roundcubemail-0.8.3.tar.gz
 +tar -xzvf roundcubemail-0.8.3.tar.gz
 +rm -rf roundcubemail-0.8.3.tar.gz
 +mv roundcubemail-0.8.3/​* .
 +rm -rf roundcubemail-0.8.3
 +</​sxh>​
 +
 +Agora vamos preparar o banco de dados para o webmail
 +<sxh sql>
 +psql -U postgres -h localhost
 +create user webmail with password '​senha';​
 +create database webmail with owner webmail;
 +\q
 +</​sxh>​
 +
 +Vamos acertar as permissões do webmail
 +<sxh bash>
 +chown -R www-data:​www-data /​var/​www/​webmail
 +</​sxh>​
 +
 +Vamos acertar o arquivo /​etc/​php5/​apache2/​php.ini
 +
 +<sxh bash>
 +vim /​etc/​php5/​apache2/​php.ini
 +[...]
 +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 os arquivos de configuração
 +<sxh bash>
 +cd /​var/​www/​webmail/​config
 +cp db.inc.php.dist db.inc.php
 +cp main.inc.php.dist main.inc.php
 +</​sxh>​
 +
 +Vamos acertar o arquivo de conexão com o banco de dados
 +<sxh bash>
 +sed -i "​s|mysql://​roundcube:​pass@localhost/​roundcubemail|pgsql://​webmail:​senha@localhost/​webmail|g"​ db.inc.php
 +</​sxh>​
 +
 +Vamos acertar a configuração do arquivo de configuração principal do webmail
 +<sxh bash>
 +sed -i "​s,​\$rcmail_config\['​default_host'​\] = '';,​\$rcmail_config\['​default_host'​\] = '​ssl://​localhost';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​default_port'​\] = 143;,​\$rcmail_config\['​default_port'​\] = 993;,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​smtp_server'​\] = '';,​\$rcmail_config\['​smtp_server'​\] = '​tls://​localhost';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​smtp_port'​\] = 25;,​\$rcmail_config\['​smtp_port'​\] = 587;,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​smtp_user'​\] = '';,​\$rcmail_config\['​smtp_user'​\] = '​%u';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​smtp_pass'​\] = '';,​\$rcmail_config\['​smtp_pass'​\] = '​%p';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​plugins'​\] = array();,​\$rcmail_config\['​plugins'​\] = array(\"​password\"​);,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​language'​\] = null;,​\$rcmail_config\['​language'​\] = '​pt_BR';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​drafts_mbox'​\] = '​Drafts';,​\$rcmail_config\['​drafts_mbox'​\] = '​Rascunhos';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​junk_mbox'​\] = '​Junk';,​\$rcmail_config\['​junk_mbox'​\] = '​Spam';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​sent_mbox'​\] = '​Sent';,​\$rcmail_config\['​sent_mbox'​\] = '​Enviados';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​trash_mbox'​\] = '​Trash';,​\$rcmail_config\['​trash_mbox'​\] = '​Lixeira';,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​create_default_folders'​\] = false;,​\$rcmail_config\['​create_default_folders'​\] = true;,​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s,​\$rcmail_config\['​mime_param_folding'​\] = 1;,​\$rcmail_config\['​mime_param_folding'​\] = 0;,g" /​var/​www/​webmail/​config/​main.inc.php
 +sed -i "​s/​\$rcmail_config\['​default_folders'​\] = array('​INBOX',​ '​Drafts',​ '​Sent',​ '​Junk',​ '​Trash'​);/​\$rcmail_config\['​default_folders'​\] = array('​INBOX',​ '​Rascunhos',​ '​Enviados',​ '​Spam',​ '​Lixeira'​);/​g"​ /​var/​www/​webmail/​config/​main.inc.php
 +</​sxh>​
 +
 +Agora vamos acertar o plugin do roundcubemail para que o usuário possa trocar a senha.
 +<sxh bash>
 +cd /​var/​www/​webmail/​plugins/​password
 +cp config.inc.php.dist config.inc.php
 +</​sxh>​
 +
 +Agora vamos acertar a configuração sobre qual tabela o webmail vai ter que atualizar no banco, e a query que vamos enviar para o banco para mandar atualizar a senha.
 +<sxh bash>
 +sed -i "​s,​\$rcmail_config\['​password_db_dsn'​\] = '';,​\$rcmail_config\['​password_db_dsn'​\] = '​pgsql://​webmail:​senha@localhost/​mail';,​g"​ /​var/​www/​webmail/​plugins/​password/​config.inc.php
 +sed -i "​s/​\$rcmail_config\['​password_query'​\] = '​SELECT update_passwd(%c,​ %u)';/​\$rcmail_config\['​password_query'​\] = '​UPDATE mailbox SET password=%c,​modified=NOW() WHERE username=%u';/​g"​ /​var/​www/​webmail/​plugins/​password/​config.inc.php
 +</​sxh>​
 +
 +Agora precisamos dar permissão para o webmail atualizar a tabela mailbox do banco mail.
 +<sxh bash>
 +psql -h localhost -U mail
 +Senha para usuário mail: #senha
 +psql (8.4.13)
 +Digite "​help"​ para ajuda.
 +mail=> grant select,​update on table mailbox to webmail;
 +GRANT
 +mail=> \q
 +</​sxh>​
 +
 +Inicialize o banco
 +<sxh bash>
 +psql -h localhost -U webmail -d webmail ​ < /​var/​www/​webmail/​SQL/​postgres.initial.sql
 +</​sxh>​
 +
 +Removendo o instalador do Webmail:
 +<sxh bash>
 +rm -rf /​var/​www/​webmail/​installer
 +</​sxh>​
 +
 +Nosso webmail já esta no ar para testar acesse http://​ip_servidor/​webmail informe o usuário e senha
 +
 +
 +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.
 +====== Fazendo backup das bases de dados ======
 +
 +Para efetuarmos o backup das bases de dados podemos fazer da seguinte forma
 +<sxh bash>
 +pg_dumpall -i -h localhost -U postgres -c -o -f bancos.dump
 +</​sxh>​
 +
 +No comando acima estamos fazendo backup de todos os bancos disponíveis no PostgreSQL, eu acho o mais correto pois não podemos nada.
 +
 +Para restaurar todos os bancos podemos fazer da seguinte forma
 +<sxh bash>
 +psql -h localhost -U postgres -f bancos.dump
 +</​sxh> ​
 +
 +No comando acima estamos restaurando todos os banco de dados do PostgreSQL.
 +
 +Caso precise efetuar o backup de somente um banco pode exemplo o banco dos emails podemos fazer da seguinte forma
 +<sxh bash>
 +pg_dump mail -i -h localhost -U postgres -c -o -f mail.dump
 +</​sxh>​
 +
 +Para restaurar o backup deste banco podemos fazer da seguinte forma
 +<sxh bash>
 +psql -h localhost -U postgres -f mail.dump
 +</​sxh>​
 +
 +
 +Para que o sistema não fique solicitando a senha podemos fazer o backup e o restore utilizando o usuário postgres do sistema da seguinte forma no servidor ​
 +
 +<sxh bash>
 +su - postgres
 +postgres@mail:​~$ pg_dumpall -i -c -o -f bancos.dump
 +</​sxh>​
 +
 +Agora para efetuar o restore
 +<sxh bash>
 +su - postgres
 +postgres@mail:​~$ psql -f bancos.dump
 +</​sxh>​
 +
 +Simples fácil e rápido ;)
 +
 +====== 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://​freecode.com/​projects/​pam_pgsql
 +  - http://​wiki.dovecot.org/​HowTo/​DovecotPostgresql
 +  - 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/​
 +  - http://​www.postgresql.org/​docs/​8.1/​static/​sql-grant.html