Differences

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

Link to this comparison view

postfix_mysql_courier_roundcubemail_dkim_spf_quota_postfixadmin_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Postfix + MySQL + Courier + Roudcube Webmail + Postfixadmin + Quota + DKIM + SPF + Debian Squeeze ======
  
 +
 + ​Objetivo desse How To, precisamos instalar e configurar o Postfix trabalhando com a sua autenticação no MySQL, vou abordar também a instalação e a configuração do Dovecot que podemos utilizar ​ como servidor de Imap e Pop, vou abordar a instalação e configuração do servidor Courier que podemos utilizar para Pop e Imap, tanto o Dovecot quanto o Courier vão 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,​ vamos também utilizar o Spamassassin,​ Clamav e o Amavis para controle de Anti-Spam e Anti-Vírus,​ depois vou abordar a instalação e configuração do RoundCubeMail para Webmail, vou abordar também a instalação e configuração do AfterLogic Webmail que acho bem melhor que o Roundcubemail em questão de consumo de recursos e alguns geradores de relatórios para os emails e o munin para ficarmos de olho em nosso servidor, vamos tambem fazer a instalação e configuração do knock e do fail2ban para garantirmos mais segurança para o nosso servidor, também vou estar implementando 2 recursos para garantir a autenticidade dos email umas delas é o [[http://​pt.wikipedia.org/​wiki/​Spf|SPF]] e a outra o [[http://​en.wikipedia.org/​wiki/​Dkim|DKIM]]. ​
 +
 +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>​
 +
 +Vamos mandar instalar o dos2unix por que aonde ta o site a codificação fica meio bagunçada :(
 +<sxh bash>
 +aptitude install dos2unix
 +</​sxh>​
 +
 +Agora vamos converter o patch
 +<sxh bash>
 +dos2unix 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 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-mysql*.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 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 ​ ======
 +
 +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\['​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 -e '​203i\'​ -e " ​   '​vacation', ​ //for system accounts'"​ /​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. ​
 +
 +====== 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';​ ->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>​
 +
 +Instalando os módulos do postfix ​
 +<sxh bash>
 +aptitude install postfix-policyd-spf-perl libsasl2-2 libsasl2-modules-sql -y
 +</​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-------------------------------------------- ​
 +#​--------------------------------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--------------------------------------------
 +content_filter = smtp-amavis:​[127.0.0.1]:​10024
 +receive_override_options = no_address_mappings
 +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,​
 + ​check_policy_service unix:​private/​policy,​
 + ​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,​
 + ​check_policy_service inet:​127.0.0.1:​60000,​
 + ​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 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@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----------------------------------------------- ​
 +#​--------------------------SPF----------------------------------------------------------------
 +policy ​ unix  -       ​n ​      ​n ​      ​- ​      ​- ​      spawn
 + ​user=nobody argv=/​usr/​bin/​perl /​usr/​sbin/​postfix-policyd-spf-perl
 +#​--------------------------END SPF------------------------------------------------------------
 +#​----------------------------VACATION---------------------------------------------------------
 +vacation ​   unix  -       ​n ​      ​n ​      ​- ​      ​- ​      pipe
 +  flags=Rq user=vacation argv=/​var/​spool/​vacation/​vacation.pl -f ${sender} -- ${recipient}
 +#​----------------------------END VACATION-----------------------------------------------------
 +#​-------------------------------------AMAVIS--------------------------------------------------
 +smtp-amavis ​      ​unix ​ -       ​- ​      ​- ​      ​- ​      ​2 ​      smtp
 +        -o smtp_data_done_timeout=1200
 +        -o smtp_send_xforward_command=yes
 +        -o disable_dns_lookups=yes
 +        -o max_use=20
 +        -o smtp_generic_maps=
 +
 +127.0.0.1:​10025 inet    n -     ​- ​      ​- ​      ​- ​      smtpd
 +        -o content_filter=
 +        -o smtpd_delay_reject=no
 +        -o smtpd_client_restrictions=permit_mynetworks,​reject
 +        -o smtpd_helo_restrictions=
 +        -o smtpd_sender_restrictions=
 +        -o smtpd_recipient_restrictions=permit_mynetworks,​reject
 +        -o smtpd_end_of_data_restrictions=
 +        -o smtpd_restriction_classes=
 +        -o mynetworks=127.0.0.0/​8
 +        -o smtpd_error_sleep_time=0
 +        -o smtpd_soft_error_limit=1001
 +        -o smtpd_hard_error_limit=1000
 +        -o smtpd_client_connection_count_limit=0
 +        -o smtpd_client_connection_rate_limit=0
 +        -o receive_override_options=no_header_body_checks,​no_unknown_recipient_checks
 +        -o local_header_rewrite_clients=
 +        -o local_recipient_maps=
 +        -o relay_recipient_maps=
 +        -o strict_rfc821_envelopes=yes
 +#​------------------------------------END AMAVIS-------------------------------------------------
 +</​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:​ true
 +sql_verbose:​ yes
 +sql_engine: mysql
 +sql_hostnames:​ localhost
 +sql_user: mail
 +sql_passwd: 123
 +sql_database:​ mail
 +sql_select: select password from mailbox where username = '​%u'​
 +</​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 -f /​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 -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/​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>​
 +====== Instalação e configuração do Dovecot ======
 +Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente. Dovecot tem o objetivo primário de ser um servidor de email open source leve, rápido e de fácil configuração. ​
 +
 +Dovecot suporta mbox, Maildir e seu próprio formato nativo de alta performance Dbox. É 100% compatível com os servidores UW IMAP, Courier IMAP, e clientes de emails acessando as caixas de correio diretamente. ​
 +
 +Dovecot também inclui um agente de entrega de emails (chamado "Local delivery agent" na documentação do Dovecot), com suporte opcional a filtros Sieve. ​
 +
 +Vamos instalar o dovecot ​
 +<sxh bash>
 +aptitude install dovecot-dev dovecot-imapd dovecot-pop3d -y
 +</​sxh>​
 +Vamos acertar as chaves de criptografia para o nosso servidor ​
 +<sxh bash>
 +find /etc -iname "​dovecot.pem"​ -exec rm -rf {} \;
 +</​sxh>​
 +Agora vamos gerar elas novamente com os valores necessários ​
 +Vamos criar o diretório para armazenar as chaves ​
 +<sxh bash>
 +mkdir /​etc/​ssl/​dovecot
 +cd /​etc/​ssl/​dovecot
 +</​sxh>​
 +Gerar a chave principal ​
 +<sxh bash>
 +openssl genrsa -des3 -rand /etc/hosts -out dovecot.key 1024
 +302 semi-random bytes loaded
 +Generating RSA private key, 1024 bit long modulus
 +.....................................++++++
 +.................++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for dovecot.key:​
 +Verifying - Enter pass phrase for dovecot.key:​
 +</​sxh>​
 +Agora vamos acertar a permissão ​
 +<sxh bash>
 +chmod 600 dovecot.key ​
 +</​sxh>​
 +Agora vamos gerar o csr 
 +<sxh bash>
 +openssl req -new -key dovecot.key -out dovecot.csr
 +Enter pass phrase for dovecot.key:​
 +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) []:TI
 +Common Name (eg, YOUR name) []:​mail.douglasqsantos.com.br
 +Email Address []:​postmaster@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>​
 +Agora vamos assinar a nossa chave 
 +<sxh bash>
 +openssl x509 -req -days 3650 -in dovecot.csr -signkey dovecot.key -out dovecot.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=TI/​CN=mail.douglasqsantos.com.br /​emailAddress=postmaster@douglasqsantos.com.br ​
 +Getting Private key
 +Enter pass phrase for dovecot.key:​
 +</​sxh>​
 +Vamos tirar a senha do nosso certificado ​
 +<sxh bash>
 +openssl rsa -in dovecot.key -out dovecot.key.unencrypted
 +Enter pass phrase for dovecot.key:​
 +writing RSA key
 +</​sxh>​
 +Agora vamos acertar o nome dela 
 +<sxh bash>
 +mv -f dovecot.key.unencrypted dovecot.key
 +</​sxh>​
 +Agora vamos gerar a nossa entidade certificadora ​
 +<sxh bash>
 +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]:PR
 +State or Province Name (full name) [Some-State]:​Curitiba
 +Locality Name (eg, city) []:Parana
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas
 +Organizational Unit Name (eg, section) []:TI
 +Common Name (eg, YOUR name) []:​mail.douglasqsantos.com.br
 +Email Address []:​postmaster@douglasqsantos.com.br
 +</​sxh>​
 +Agora vamos fazer um backup do arquivo do dovecot ​
 +<sxh bash>
 +cp /​etc/​dovecot/​dovecot.conf{,​.bkp}
 +</​sxh>​
 +Agora vamos acertar o dovecot ​
 +<sxh bash>
 +vim /​etc/​dovecot/​dovecot.conf
 +#​-----------------------MAIN----------------------------------------
 +mail_location = maildir:/​home/​mail/​%d/​%u
 +maildir_copy_with_hardlinks = yes
 +protocols = imap pop3 imaps pop3s
 +first_valid_uid = 107
 +last_valid_uid = 107
 +#​----------------------SSL------------------------------------------
 +ssl = yes
 +ssl_cert_file = /​etc/​ssl/​dovecot/​dovecot.crt
 +ssl_key_file = /​etc/​ssl/​dovecot/​dovecot.key
 +#​-------------------END SSL-----------------------------------------
 +#​-------------------IMAP--------------------------------------------
 +protocol imap {
 +mail_executable = /​usr/​lib/​dovecot/​rawlog /​usr/​lib/​dovecot/​imap
 +mail_plugins = quota imap_quota
 +imap_client_workarounds = outlook-idle delay-newmail
 +}
 +#​------------------END IMAP-----------------------------------------
 +#​------------------POP3---------------------------------------------
 +protocol pop3 {
 +mail_plugins = quota
 +pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
 +}
 +#​-----------------END POP3------------------------------------------
 +#​------------------AUTH---------------------------------------------
 +auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
 +auth default {
 +mechanisms = plain login
 +passdb sql {
 +args = /​etc/​dovecot/​sql.conf
 +}
 +userdb sql {
 +args = /​etc/​dovecot/​sql.conf
 +}
 +userdb prefetch {
 +}
 +user = nobody
 +
 +}
 +#​-------------------END AUTH---------------------------------------
 +#​------------------PLUGINS-----------------------------------------
 +plugin {
 +quota = maildir:​storage=10240:​messages=1000
 +trash = /​etc/​dovecot/​trash.conf
 +}
 +#​------------------END PLUGINS-------------------------------------
 +</​sxh>​
 +Agora vamos acertar a autenticação do dovecot no MySQL 
 +<sxh bash>
 +vim /​etc/​dovecot/​sql.conf
 +#​Autenticação em MySQLdriver = mysql
 +default_pass_scheme = CRYPT
 +#Driver utilizado pelo banco
 +driver = mysql
 +connect = host=localhost dbname=mail user=mail password=123
 +user_query = SELECT concat('/​home/​vmail/',​ maildir) as home, concat('​maildir:/​home/​vmail/',​ maildir) as mail, 107 AS uid, 107 AS gid,
 + ​concat('​maildir:​storage=',​ quota) AS quota FROM mailbox WHERE username = '​%u'​ AND active = '​1'​
 +password_query = SELECT username as user, password, concat('/​home/​vmail/',​ maildir) as userdb_home,​ concat('​maildir:/​home/​vmail/',​ maildir) as userdb_mail,​
 + 107 as userdb_uid, 107 as userdb_gid FROM mailbox WHERE username = '​%u'​ AND active = '​1'​
 +</​sxh>​
 +Vamos acertar o arquivo de controle de lixeira e spam. 
 +<sxh bash>
 +vim /​etc/​dovecot/​trash.conf
 +1 Spam
 +2 Trash
 +</​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>​
 +
 +====== Instalação e configuração de Anti-Virus e Anti-Spam ======
 +Instalação dos pacotes para do antivirus e do antispam. ​
 +<sxh bash>
 +aptitude install bzip2 unrar unzip zip arj pax arc ripole cabextract lzop p7zip-full libgamin-dev gamin -y
 +aptitude install clamav amavis clamav-freshclam clamav-daemon spamassassin postgrey libpathtools-perl -y
 +</​sxh>​
 +Ajustando permissões ​
 +<sxh bash>
 +adduser clamav amavis
 +</​sxh>​
 +
 +Vamos mandar atualizar a base do clamav
 +<sxh bash>
 +freshclam ​
 +ClamAV update process started at Wed Dec 12 11:45:39 2012
 +Downloading main.cvd [100%]
 +main.cvd updated (version: 54, sigs: 1044387, f-level: 60, builder: sven)
 +Downloading daily.cvd [100%]
 +daily.cvd updated (version: 15745, sigs: 304527, f-level: 63, builder: neo)
 +Downloading bytecode.cvd [100%]
 +bytecode.cvd updated (version: 204, sigs: 41, f-level: 63, builder: neo)
 +Database updated (1348955 signatures) from db.local.clamav.net (IP: 150.214.142.197)
 +</​sxh>​
 +
 +Instalando suporte a razor e pyzor 
 +<sxh bash>
 +apt-get install libnet-dns-perl razor pyzor -y
 +</​sxh>​
 +Acertando as configurações do razor e do pyzor 
 +<sxh bash>
 +su - amavis -c '​razor-admin -d --create'​
 +su - amavis -c '​razor-admin -register'​
 +su - amavis -c '​razor-admin -discover'​
 +su - amavis -c 'pyzor discover'​
 +</​sxh>​
 +Configurando o SpamAssassin ​
 +Vamos fazer backup do arquivo de configuração ​
 +<sxh bash>
 +cp /​etc/​default/​spamassassin{,​.bkp}
 +</​sxh>​
 +Agora vamos configurar o spamassassin ​
 +<sxh bash>
 +vim /​etc/​default/​spamassassin
 +ENABLED=1
 +OPTIONS="​--create-prefs --max-children 5 --helper-home-dir"​
 +PIDFILE="/​var/​run/​spamd.pid"​
 +CRON=0
 +</​sxh>​
 +
 +Fazendo um backup do arquivo de configuração do SpamAssassin
 +<sxh bash>
 +cp /​etc/​spamassassin/​local.cf{,​.bkp}
 +</​sxh>​
 +Acertando o SpamAssassin ​
 +<sxh bash>
 +vim /​etc/​spamassassin/​local.cf
 +#​-------------------------MARKUP----------------------------------------
 +header DSPAM_SPAM X-DSPAM-Result =~ /^Spam$/
 +score DSPAM_SPAM 0.5
 +header DSPAM_HAM X-DSPAM-Result =~ /​^Innocent$/​
 +score DSPAM_HAM -0.1
 +#​------------------------END MARKUP-------------------------------------
 +#​----------------------DKIM---------------------------------------------
 +score DKIM_VERIFIED -0.1
 +score DKIM_SIGNED ​   0
 +score DKIM_POLICY_SIGNALL ​ 0
 +score DKIM_POLICY_SIGNSOME 0
 +score DKIM_POLICY_TESTING ​ 0
 +score USER_IN_DKIM_WHITELIST -8.0
 +score USER_IN_DEF_DKIM_WL -1.5
 +def_whitelist_from_dkim ​  ​*@google.com
 +def_whitelist_from_dkim ​  ​*@googlemail.com
 +def_whitelist_from_dkim ​  ​*@*googlegroups.com
 +score ENV_AND_HDR_DKIM_MATCH -0.1
 +score ENV_AND_HDR_SPF_MATCH ​ -0.5
 +#​---------------------END DKIM------------------------------------------
 +#​---------------------BLACK LIST AND WHITELIST--------------------------
 +blacklist_from ​ chakerv@att.net
 +whitelist_from_dkim ​ *@ebay.com
 +whitelist_from_dkim ​ *@*.ebay.com
 +whitelist_from_dkim ​ *@ebay.co.uk
 +whitelist_from_dkim ​ *@*.ebay.co.uk
 +whitelist_from_dkim ​ *@ebay.at
 +whitelist_from_dkim ​ *@ebay.ca
 +whitelist_from_dkim ​ *@ebay.de
 +whitelist_from_dkim ​ *@ebay.fr
 +whitelist_from_dkim ​ *@*.paypal.com
 +whitelist_from_dkim ​ *@paypal.com
 +whitelist_from_dkim ​ *@*paypal.com
 +whitelist_from_dkim ​ *@*.paypal.be
 +whitelist_from_dkim ​ *@cern.ch
 +whitelist_from_dkim ​ *@amazon.com
 +whitelist_from_dkim ​ *@cisco.com
 +whitelist_from_dkim ​ *@cnn.com
 +whitelist_from_dkim ​ *@*.cnn.com
 +whitelist_from_dkim ​ service@youtube.com
 +whitelist_from_dkim ​ googlealerts-noreply@google.com
 +#​-------------------END BLACK LIST AND WHITE LIST-----------------------
 +</​sxh>​
 +
 +Agora precisamos habilitar o amavis a utilizar o spamassassim e o clamav
 +Vamos fazer um backup do arquivo de configuração
 +<sxh bash>
 +cp /​etc/​amavis/​conf.d/​15-content_filter_mode{,​.bkp}
 +</​sxh>​
 +Agora vamos deixar ele como abaixo
 +<sxh bash>
 +vim /​etc/​amavis/​conf.d/​15-content_filter_mode
 +use strict; ​
 +
 +# You can modify this file to re-enable SPAM checking through spamassassin ​
 +# and to re-enable antivirus checking. ​
 +
 +
 +# Default antivirus checking mode 
 +# Please note, that anti-virus checking is DISABLED by 
 +# default. ​
 +# If You wish to enable it, please uncomment the following lines: ​
 +
 +#precisamos deixar as duas linhas abaixo descomentadas
 +@bypass_virus_checks_maps = ( 
 +   ​\%bypass_virus_checks,​ \@bypass_virus_checks_acl,​ \$bypass_virus_checks_re); ​
 +
 +
 +
 +# Default SPAM checking mode 
 +# Please note, that anti-spam checking is DISABLED by 
 +# default. ​
 +# If You wish to enable it, please uncomment the following lines: ​
 +
 +#precisamos deixar as duas linhas abaixo descomentadas
 +@bypass_spam_checks_maps = ( 
 +   ​\%bypass_spam_checks,​ \@bypass_spam_checks_acl,​ \$bypass_spam_checks_re); ​
 +
 +1;  # ensure a defined return ​
 +</​sxh>​
 +
 +Vamos fazer backup do arquivo de configuração do postgrey
 +<sxh bash>
 +cp /​etc/​default/​postgrey{,​.bkp}
 +</​sxh>​
 +
 +Agora vamos acertar a configuração do postgrey ​
 +<sxh bash>
 +vim /​etc/​default/​postgrey
 +POSTGREY_OPTS="​--inet=60000 --delay=60"​
 +POSTGREY_TEXT="​Seu email sera entregue em aproximadamente 60 segundos."​
 +</​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>​
 +
 +Agora precisamos reiniciar o serviço do MySQL
 +<sxh bash>
 +/​etc/​init.d/​mysql restart
 +</​sxh>​
 +
 +Restartando os serviços: ​
 +<sxh bash>
 +/​etc/​init.d/​clamav-daemon restart
 +/​etc/​init.d/​clamav-freshclam restart
 +/​etc/​init.d/​spamassassin restart
 +/​etc/​init.d/​postgrey restart
 +/​etc/​init.d/​amavis restart
 +/​etc/​init.d/​postfix restart
 +/​etc/​init.d/​dovecot restart
 +</​sxh>​
 +Caso tenha utilizado o courier ​
 +<sxh bash>
 +/​etc/​init.d/​clamav-daemon restart
 +/​etc/​init.d/​clamav-freshclam restart
 +/​etc/​init.d/​spamassassin restart
 +/​etc/​init.d/​postgrey restart
 +/​etc/​init.d/​amavis 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 2011-10-04 16:10 BRT
 +Interesting ports on localhost (127.0.0.1):​
 +Not shown: 986 closed ports
 +PORT      STATE SERVICE
 +22/​tcp ​   open  ssh
 +25/​tcp ​   open  smtp
 +80/​tcp ​   open  http
 +110/​tcp ​  ​open ​ pop3
 +111/​tcp ​  ​open ​ rpcbind
 +143/​tcp ​  ​open ​ imap
 +587/​tcp ​  ​open ​ submission
 +783/​tcp ​  ​open ​ spamassassin
 +993/​tcp ​  ​open ​ imaps
 +995/​tcp ​  ​open ​ pop3s
 +3306/​tcp ​ open  mysql
 +10024/tcp open  unknown
 +10025/tcp open  unknown
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.14 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
 +Oct  2 16:25:18 mail postfix/​smtpd[1847]:​ connect from localhost[127.0.0.1]
 +Oct  2 16:25:18 mail postfix/​smtpd[1847]:​ B3C1611F4E: client=localhost[127.0.0.1]
 +Oct  2 16:25:18 mail postfix/​cleanup[1854]:​ B3C1611F4E: message-id=<​20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>​
 +Oct  2 16:25:18 mail postfix/​qmgr[1790]:​ B3C1611F4E: from=<​douglas@douglasqsantos.com.br>,​ size=486, nrcpt=1 (queue active)
 +Oct  2 16:25:18 mail postfix/​smtpd[1847]:​ disconnect from localhost[127.0.0.1]
 +Oct  2 16:25:21 mail postfix/​smtpd[1857]:​ connect from localhost[127.0.0.1]
 +Oct  2 16:25:21 mail postfix/​smtpd[1857]:​ 3354E11F51: client=localhost[127.0.0.1]
 +Oct  2 16:25:21 mail postfix/​cleanup[1854]:​ 3354E11F51: message-id=<​20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>​
 +Oct  2 16:25:21 mail postfix/​qmgr[1790]:​ 3354E11F51: from=<​douglas@douglasqsantos.com.br>,​ size=875, nrcpt=1 (queue active)
 +Oct  2 16:25:21 mail amavis[911]:​ (00911-01) Passed CLEAN, LOCAL [127.0.0.1] [127.0.0.1] <​douglas@douglasqsantos.com.br>​ -> <​douglas@douglasqsantos.com.br>,​ Message-ID: <​20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>,​ mail_id: FTU91CRKqv-J,​ Hits: -, size: 486, queued_as: 3354E11F51, 2276 ms
 +Oct  2 16:25:21 mail postfix/​smtp[1855]:​ B3C1611F4E: to=<​douglas@douglasqsantos.com.br>,​ relay=127.0.0.1[127.0.0.1]:​10024,​ delay=2.7, delays=0.04/​0.01/​0.65/​2,​ dsn=2.0.0, status=sent (250 2.0.0 Ok, id=00911-01,​ from MTA([127.0.0.1]:​10025):​ 250 2.0.0 Ok: queued as 3354E11F51)
 +Oct  2 16:25:21 mail postfix/​virtual[1858]:​ 3354E11F51: to=<​douglas@douglasqsantos.com.br>,​ relay=virtual,​ delay=0.2, delays=0.03/​0.03/​0/​0.14,​ dsn=2.0.0, status=sent (delivered to maildir)
 +Oct  2 16:25:21 mail postfix/​qmgr[1790]:​ 3354E11F51: removed
 +Oct  2 16:25:21 mail postfix/​qmgr[1790]:​ B3C1611F4E: removed
 +</​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 ;) 
 +Agora vamos testar o envio de uma mensagem de SPAM
 +<sxh bash>
 +mail -s "​TESTE"​ douglas@douglasqsantos.com.br < /​usr/​share/​doc/​spamc/​sample-spam.txt && tail -f /​var/​log/​syslog ​
 +Oct  3 09:55:31 mail amavis[3323]:​ No decoder for       ​.zoo ​ tried: zoo 
 +Oct  3 09:55:31 mail amavis[3323]:​ No decoder for       ​.lha ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Found decoder for    .doc  at /​usr/​bin/​ripole ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Found decoder for    .cab  at /​usr/​bin/​cabextract ​
 +Oct  3 09:55:31 mail amavis[3323]:​ No decoder for       ​.tnef ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Internal decoder for .tnef 
 +Oct  3 09:55:31 mail amavis[3323]:​ Found decoder for    .exe  at /​usr/​bin/​arj ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Using primary internal av scanner code for ClamAV-clamd ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Found secondary av scanner ClamAV-clamscan at /​usr/​bin/​clamscan ​
 +Oct  3 09:55:31 mail amavis[3323]:​ Creating db in /​var/​lib/​amavis/​db/;​ BerkeleyDB 0.42, libdb 4.8 
 +Oct  3 09:56:14 mail postfix/​pickup[3009]:​ 2122D11F52: uid=0 from=<​root> ​
 +Oct  3 09:56:14 mail postfix/​cleanup[3355]:​ 2122D11F52: message-id=<​20121003125614.2122D11F52@mail.douglasqsantos.com.br> ​
 +Oct  3 09:56:14 mail postfix/​qmgr[3010]:​ 2122D11F52: from=<​root@mail.douglasqsantos.com.br>,​ size=1118, nrcpt=1 (queue active) ​
 +Oct  3 09:56:22 mail amavis[3338]:​ (03338-01) Blocked SPAM, <​root@mail.douglasqsantos.com.br>​ -> <​douglas@douglasqsantos.com.br>,​ quarantine: v/​spam-vZtynFxhLBkk.gz,​ Message-ID: <​20121003125614.2122D11F52@mail.douglasqsantos.com.br>,​ mail_id: vZtynFxhLBkk,​ Hits: 1003.163, size: 1118, 7884 ms 
 +Oct  3 09:56:22 mail postfix/​smtp[3357]:​ 2122D11F52: to=<​douglas@douglasqsantos.com.br>,​ relay=127.0.0.1[127.0.0.1]:​10024,​ delay=8.3, delays=0.08/​0.3/​0.03/​7.9,​ dsn=2.5.0, status=sent (250 2.5.0 Ok, id=03338-01,​ DISCARD(bounce.suppressed)) ​
 +Oct  3 09:56:22 mail postfix/​qmgr[3010]:​ 2122D11F52: removed ​
 +</​sxh>​
 +Agora vamos fazer um teste de envio de uma mensagem não spam
 +<sxh bash>
 +cd /​usr/​share/​doc/​spamc/​
 +gunzip sample-nonspam.txt.gz
 +</​sxh>​
 +Agora vamos enviar a mensagem de teste
 +<sxh bash>
 +mail -s "​TESTE"​ douglas@douglasqsantos.com.br < sample-nonspam.txt && tail -f /​var/​log/​mail.log
 +Oct  3 10:04:03 mail postfix/​pickup[3009]:​ CF92411F52: uid=0 from=<​root> ​
 +Oct  3 10:04:04 mail postfix/​cleanup[3469]:​ CF92411F52: message-id=<​20121003130403.CF92411F52@mail.douglasqsantos.com.br> ​
 +Oct  3 10:04:04 mail postfix/​qmgr[3010]:​ CF92411F52: from=<​root@mail.douglasqsantos.com.br>,​ size=6934, nrcpt=1 (queue active) ​
 +Oct  3 10:04:10 mail postfix/​smtpd[3478]:​ connect from localhost[127.0.0.1] ​
 +Oct  3 10:04:10 mail postfix/​smtpd[3478]:​ 48C8611F51: client=localhost[127.0.0.1] ​
 +Oct  3 10:04:10 mail postfix/​cleanup[3469]:​ 48C8611F51: message-id=<​20121003130403.CF92411F52@mail.douglasqsantos.com.br> ​
 +Oct  3 10:04:10 mail postfix/​qmgr[3010]:​ 48C8611F51: from=<​root@mail.douglasqsantos.com.br>,​ size=7380, nrcpt=1 (queue active) ​
 +Oct  3 10:04:10 mail amavis[3339]:​ (03339-01) Passed CLEAN, <​root@mail.douglasqsantos.com.br>​ -> <​douglas@douglasqsantos.com.br>,​ Message-ID: <​20121003130403.CF92411F52@mail.douglasqsantos.com.br>,​ mail_id: YXrgth3YjeU3,​ Hits: 1.178, size: 6934, queued_as: 48C8611F51, 5764 ms 
 +Oct  3 10:04:10 mail postfix/​smtp[3474]:​ CF92411F52: to=<​douglas@douglasqsantos.com.br>,​ relay=127.0.0.1[127.0.0.1]:​10024,​ delay=6.9, delays=0.83/​0.15/​0.02/​5.9,​ dsn=2.0.0, status=sent (250 2.0.0 Ok, id=03339-01,​ from MTA([127.0.0.1]:​10025):​ 250 2.0.0 Ok: queued as 48C8611F51) ​
 +Oct  3 10:04:10 mail postfix/​qmgr[3010]:​ CF92411F52: removed ​
 +Oct  3 10:04:10 mail postfix/​virtual[3479]:​ 48C8611F51: to=<​douglas@douglasqsantos.com.br>,​ relay=virtual,​ delay=0.46, delays=0.02/​0.17/​0/​0.26,​ dsn=2.0.0, status=sent (delivered to maildir) ​
 +Oct  3 10:04:10 mail postfix/​qmgr[3010]:​ 48C8611F51: removed ​
 +</​sxh>​
 +Agora vamos fazer um teste de envio de virus
 +<sxh bash>
 +echo '​X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'​ > /​tmp/​arquivo.doc
 +</​sxh>​
 +Agora vamos enviar o arquivo
 +<sxh bash>
 +mail -s "​Arquivo Doc" douglas@douglasqsantos.com.br < /​tmp/​arquivo.doc && tail -f /​var/​log/​mail.log
 +Oct  3 10:06:29 mail postfix/​smtpd[3502]:​ connect from localhost[127.0.0.1] ​
 +Oct  3 10:06:29 mail postfix/​smtpd[3502]:​ E4C5611F51: client=localhost[127.0.0.1] ​
 +Oct  3 10:06:29 mail postfix/​cleanup[3496]:​ E4C5611F51: message-id=<​VAMijKVwUhs+Fz@mail.douglasqsantos.com.br> ​
 +Oct  3 10:06:29 mail postfix/​qmgr[3010]:​ E4C5611F51: from=<​postmaster@mail.douglasqsantos.com.br>,​ size=1952, nrcpt=1 (queue active) ​
 +Oct  3 10:06:29 mail postfix/​smtpd[3502]:​ disconnect from localhost[127.0.0.1] ​
 +Oct  3 10:06:29 mail amavis[3338]:​ (03338-02) Blocked INFECTED (Eicar-Test-Signature),​ <​root@mail.douglasqsantos.com.br>​ -> <​douglas@douglasqsantos.com.br>,​ quarantine: M/​virus-MijKVwUhs+Fz,​ Message-ID: <​20121003130628.9099611F52@mail.douglasqsantos.com.br>,​ mail_id: MijKVwUhs+Fz,​ Hits: -, size: 369, 1299 ms 
 +Oct  3 10:06:29 mail postfix/​smtp[3499]:​ 9099611F52: to=<​douglas@douglasqsantos.com.br>,​ relay=127.0.0.1[127.0.0.1]:​10024,​ delay=1.4, delays=0.03/​0.03/​0/​1.3,​ dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=03338-02 - INFECTED: Eicar-Test-Signature) ​
 +Oct  3 10:06:29 mail postfix/​qmgr[3010]:​ 9099611F52: removed ​
 +Oct  3 10:06:30 mail postfix/​smtp[3503]:​ E4C5611F51: to=<​postmaster@mail.douglasqsantos.com.br>,​ relay=none, delay=0.47, delays=0.01/​0.27/​0.19/​0,​ dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=mail.douglasqsantos.com.br type=AAAA: Host not found) ​
 +Oct  3 10:06:30 mail postfix/​cleanup[3496]:​ 7006A11F55: message-id=<​20121003130630.7006A11F55@mail.douglasqsantos.com.br> ​
 +Oct  3 10:06:30 mail postfix/​qmgr[3010]:​ 7006A11F55: from=<>,​ size=4001, nrcpt=1 (queue active) ​
 +Oct  3 10:06:30 mail postfix/​bounce[3504]:​ E4C5611F51: sender non-delivery notification:​ 7006A11F55 ​
 +Oct  3 10:06:30 mail postfix/​qmgr[3010]:​ E4C5611F51: removed ​
 +Oct  3 10:06:30 mail postfix/​smtp[3503]:​ 7006A11F55: to=<​postmaster@mail.douglasqsantos.com.br>,​ relay=none, delay=0.01, delays=0.01/​0/​0/​0,​ dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=mail.douglasqsantos.com.br type=AAAA: Host not found) ​
 +Oct  3 10:06:30 mail postfix/​qmgr[3010]:​ 7006A11F55: removed ​
 +</​sxh>​
 +Os arquivos bloqueados vão ficar em **/​var/​lib/​amavis/​virusmails/​**
 +
 +====== 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>
 +mysql -u root -p
 +CREATE DATABASE roundcubemail;​
 +GRANT ALL PRIVILEGES ON roundcubemail.* TO webmail@localhost IDENTIFIED BY '​senha';​
 +flush privileges;
 +quit;
 +</​sxh>​
 +
 +Vamos acertar as permissões do webmail
 +<sxh bash>
 +chown -R www-data:​www-data /​var/​www/​webmail
 +</​sxh>​
 +
 +Vamos acertar a configuração do suhosin
 +<sxh bash>
 +vim /​etc/​php5/​conf.d/​suhosin.ini
 +[...]
 +suhosin.session.encrypt = off
 +[...]
 +</​sxh>​
 +Vamos acertar o arquivo /​etc/​php5/​apache2/​php.ini
 +
 +<sxh bash>
 +vim /​etc/​php5/​apache2/​php.ini
 +[...]
 +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|mysql://​webmail:​senha@localhost/​roundcubemail|g"​ db.inc.php
 +</​sxh>​
 +
 +Vamos editar o 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'​\] = '​mysql://​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>
 +grant select,​update on mail.mailbox to webmail@localhost identified by '​senha';​
 +flush privileges;
 +quit
 +</​sxh>​
 +
 +Inicialize o banco
 +<sxh bash>
 +mysql -u root -p roundcubemail < /​var/​www/​webmail/​SQL/​mysql.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
 +====== 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.
 +
 +====== Instalando o Fail2ban ======
 +
 +O Fail2Ban é uma aplicação que analisa continuamente os ficheiros log e bloqueia os endereços Internet de onde originaram várias tentativas falhadas de acesso com senha inválida.
 +
 +O Fail2Ban é extremamente eficaz na prevenção de ataques de força bruta e de negação de serviço (DoS).
 +
 +Vamos instalar o fail2ban
 +<sxh bash>
 +aptitude install fail2ban -y
 +</​sxh>​
 +
 +Vamos fazer backup do arquivo de configuração
 +<sxh bash>
 +cp /​etc/​fail2ban/​jail.conf{,​.bkp}
 +</​sxh>​
 +
 +Vamos acertar o arquivo de configuração do fail2ban
 +<sxh bash>
 +vim /​etc/​fail2ban/​jail.conf
 +#​---------------------------MAIN--------------------------------------------------------
 +[DEFAULT]
 +ignoreip = 127.0.0.1, 10.0.0.0/24
 +bantime ​ = 600
 +maxretry = 3
 +backend = polling
 +destemail = douglas@douglasqsantos.com.br
 +banaction = iptables-multiport
 +mta = sendmail
 +protocol = tcp
 +action_ = %(banaction)s[name=%(__name__)s,​ port="​%(port)s",​ protocol="​%(protocol)s]
 +action_mw = %(banaction)s[name=%(__name__)s,​ port="​%(port)s",​ protocol="​%(protocol)s]
 +              %(mta)s-whois[name=%(__name__)s,​ dest="​%(destemail)s",​ protocol="​%(protocol)s]
 +action_mwl = %(banaction)s[name=%(__name__)s,​ port="​%(port)s",​ protocol="​%(protocol)s]
 +               ​%(mta)s-whois-lines[name=%(__name__)s,​ dest="​%(destemail)s",​ logpath=%(logpath)s]
 +action = %(action_mwl)s
 +#​--------------------------------END MAIN----------------------------------------------
 +#​-----------------------------SERVICES-------------------------------------------------
 +[ssh]
 +enabled = true
 +port    = ssh
 +filter ​ = sshd
 +logpath ​ = /​var/​log/​auth.log
 +maxretry = 3
 +
 +[pam-generic]
 +enabled = true
 +filter ​ = pam-generic
 +port = all
 +banaction = iptables-allports
 +port     = anyport
 +logpath ​ = /​var/​log/​auth.log
 +maxretry = 3
 +
 +[ssh-ddos]
 +enabled = true
 +port    = ssh
 +filter ​ = sshd-ddos
 +logpath ​ = /​var/​log/​auth.log
 +maxretry = 3
 +
 +[apache]
 +enabled = true
 +port    = http,https
 +filter ​ = apache-auth
 +logpath = /​var/​log/​apache*/​*error.log
 +maxretry = 3
 +
 +[apache-overflows]
 +enabled = true
 +port    = http,https
 +filter ​ = apache-overflows
 +logpath = /​var/​log/​apache*/​*error.log
 +maxretry = 3
 +
 +[postfix]
 +enabled ​ = true
 +port     = smtp,​ssmtp,​submission
 +filter ​  = postfix
 +logpath ​ = /​var/​log/​mail.log
 +maxtretry = 3
 +
 +[sasl]
 +enabled ​ = true
 +port     = smtp,​ssmtp,​imap2,​imap3,​imaps,​pop3,​pop3s
 +filter ​  = sasl
 +logpath ​ = /​var/​log/​mail.log
 +maxretry = 3
 +#​-----------------------------END SERVICES------------------------------------------------
 +</​sxh>​
 +
 +Agora é so reiniciar o serviço ​
 +<sxh bash>
 +/​etc/​init.d/​fail2ban restart
 +</​sxh>​
 +
 +====== Instação e configuração do Knock ======
 +
 +Agora vamos instalar o knockd para fazer o controle da porta do ssh
 +   * “O knockd é uma implementação de port-knocking. Resumidamente falando, com ele podemos deixar todas as portas do servidor fechadas e tê-lo configurado para ouvir “batidas” em algumas portas específicas,​ sendo que as batidas (corretas) podem gerar a execução de uma regra de firewall para abrir uma porta ou executar qualquer outro comando.”
 +
 +Vamos fazer a instalação do knock
 +<sxh bash>
 +aptitude install knockd -y
 +</​sxh>​
 +
 +Agora vamos fazer backup do arquivo
 +<sxh bash>
 +cp /​etc/​default/​knockd{,​.bkp}
 +</​sxh>​
 +
 +Vamos editar o arquivo e liberar para qual interface ele vai ficar escutando
 +<sxh bash>
 +vim /​etc/​default/​knockd
 +START_KNOCKD=1
 +KNOCKD_OPTS="​-i eth0"
 +</​sxh>​
 +
 +Vamos fazer backup do arquivo de configuração
 +<sxh bash>
 +cp /​etc/​knockd.conf{,​.bkp}
 +</​sxh>​
 +
 +Vamos ao arquivo de configuração
 +<sxh bash>
 +vim /​etc/​knockd.conf
 +[options]
 +        UseSyslog
 +        LogFile = /​var/​log/​knockd.log
 +[openSSH]
 +        sequence ​   = 1234:​udp,​4321:​tcp,​6789:​udp
 +        seq_timeout = 5
 +        command ​    = /​sbin/​iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 +        tcpflags ​   = syn
 +
 +[closeSSH]
 +        sequence ​   = 6789:​tcp,​4321:​udp,​1234:​tcp
 +        seq_timeout = 5
 +        command ​    = /​sbin/​iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 +        tcpflags ​   = syn
 +</​sxh>​
 +
 +Vamos restartar o serviço:
 +<sxh bash>
 +/​etc/​init.d/​knockd restart
 +</​sxh>​
 +
 +Agora no cliente é so intalar o pacote do knockd
 +<sxh bash>
 +apt-get install knockd -y
 +</​sxh>​
 +
 +Agora para abrir a porta do servidor para o nosso cliente fazemos como abaixo
 +<sxh bash>
 +knock ip_servidor ​    ​1234:​udp 4321:tcp 6789:udp
 +</​sxh>​
 +
 +Agora vamos ver o log no servidor
 +<sxh bash>
 +tail -f /​var/​log/​knockd.log
 +[2011-08-31 17:41] starting up, listening on eth0
 +[2011-08-31 17:43] 10.0.0.20: openSSH: Stage 1
 +[2011-08-31 17:43] 10.0.0.20: openSSH: Stage 2
 +[2011-08-31 17:43] 10.0.0.20: openSSH: Stage 3
 +[2011-08-31 17:43] 10.0.0.20: openSSH: OPEN SESAME
 +[2011-08-31 17:43] openSSH: running command: /​sbin/​iptables -A INPUT -s 10.0.0.20 -p tcp --dport 22 -j ACCEPT
 +</​sxh>​
 +
 +A porta foi aberta vamos analizar no firewall
 +<sxh bash>
 +iptables -L -n -v | egrep 22
 +59  4508 ACCEPT ​    ​tcp ​ --  *      *       ​10.0.0.20 ​           0.0.0.0/​0 ​          tcp dpt:​22 ​
 +</​sxh>​
 +
 +   * Como pode ser notado foi aberta a porta 22 somente para o cliente 10.0.0.20
 +
 +Para fechar a porta é a sequencia do closeSSH
 +
 +<sxh bash>
 +knock 10.0.0.23 6789:tcp 4321:udp 1234:tcp
 +</​sxh>​
 +
 +Agora vamos ver nos logs para ver se fechou a porta
 +<sxh bash>
 +tail -f /​var/​log/​knockd.log
 +[2011-08-31 17:50] 10.0.0.20: closeSSH: Stage 1
 +[2011-08-31 17:50] 10.0.0.20: closeSSH: Stage 2
 +[2011-08-31 17:50] 10.0.0.20: closeSSH: Stage 3
 +[2011-08-31 17:50] 10.0.0.20: closeSSH: OPEN SESAME
 +[2011-08-31 17:50] closeSSH: running command: /​sbin/​iptables -D INPUT -s 10.0.0.20 -p tcp --dport 22 -j ACCEPT
 +</​sxh>​
 +
 +====== Habilitando os VirtualHosts com https ======
 +
 +Vamos gerar a key para o https
 +
 +Preparando o diretório que vai armazenar os nosso certificados
 +<sxh bash>
 +mkdir -p /​etc/​ssl/​apache
 +cd /​etc/​ssl/​apache
 +</​sxh>​
 +
 +
 +Gerando a key
 +<sxh bash>
 +openssl genrsa -des3 -out server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +....................++++++
 +...........++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for server.key: senha
 +Verifying - Enter pass phrase for server.key: senha
 +</​sxh>​
 +
 +Vamos gerar agora a requisição de assinatura para o certificado
 +<sxh bash>
 +openssl req -new -key server.key -out server.csr
 +Enter pass phrase for server.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) []:Douglas
 +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>​
 +
 +Agora vamos auto assinar o nosso certificado
 +<sxh bash>
 +openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=Douglas/​CN=mail.douglasqsantos.com.br/​emailAddress=douglas@douglasqsantos.com.br
 +Getting Private key
 +Enter pass phrase for server.key: senha
 +</​sxh>​
 +
 +Agora vamos acertar as permissões das chaves
 +<sxh bash>
 + chmod 0400 server.*
 + cp server.key server.key.orig
 +</​sxh>​
 +
 +Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar
 +<sxh bash>
 + ​openssl rsa -in server.key.orig -out server.key
 + Enter pass phrase for server.key.orig:​ senha
 + ​writing RSA key
 +</​sxh>​
 +
 +Vamos acertar as permissões de todas as chaves ​
 +<sxh bash>
 + chmod 0400 /​etc/​ssl/​apache/​* ​
 +</​sxh>​
 +
 +Vamos agora configurar o host virtual com o acesso via https para o nosso postfixadmin.
 +
 +OBS:. Não esqueça de inserir uma entrada no servidor DNS para resolver o seu endereço http://​postfixadmin.douglasqsantos.com.br para o ip do servidor. ​
 +
 +Você também pode testar editando o arquivo /etc/hosts do cliente que vai acessar da seguinte formar
 +<sxh bash>
 +vim /etc/hosts
 +[...]
 +ip_servidor ​ postfixadmin.douglasqsantos.com.br mailadmin
 +ip_servidor ​ webmail.douglasqsantos.com.br webmail
 +ip_servidor ​ isoqlog.douglasqsantos.com.br isoqlog
 +ip_servidor ​ monitor.douglasqsantos.com.br monitor
 +</​sxh>​
 +
 +
 +Quando o cliente for acessar esse endereço vai ser resolvido diretamente para o ip do servidor e o apache vai receber a solicitação do mailadmin.douglasqsantos.com.br ​
 +
 +Aqui estamos redirecionando qualquer acesso ao site via http para https para forçar o cliente utilizar criptografia na conexão
 +
 +<sxh apache>
 +vim /​etc/​apache2/​sites-available/​postfixadmin
 +<​VirtualHost *:​80> ​
 +  ServerName postfixadmin.douglasqsantos.com.br
 +  Redirect / https://​postfixadmin.douglasqsantos.com.br/ ​
 +</​VirtualHost> ​
 + 
 +<​VirtualHost *:​443> ​
 +        ServerAdmin webmaster@douglasqsantos.com.br ​
 +        ServerName postfixadmin.douglasqsantos.com.br
 +  DocumentRoot "/​var/​www/​postfixadmin"​
 +   <​Directory "/​var/​www/​postfixadmin">​
 +     ​Options -Indexes +FollowSymLinks +MultiViews
 +     ​AllowOverride All
 +     Order Allow,deny
 +     Allow From All
 +   </​Directory>​
 +        ​
 +       # ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +       # <​Directory "/​usr/​lib/​cgi-bin">​
 +       # ​        ​AllowOverride None
 +       # ​        ​Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +       # ​        Order allow,deny
 +       # ​        Allow from all
 +       # </​Directory>​
 +
 +   <​IfModule mod_php5.c>​
 +   ​AddType application/​x-httpd-php .php
 +     ​php_flag expose_php Off
 +     ​php_flag allow_url_fopen Off
 +     ​php_flag allow_url_include Off
 +     ​php_flag magic_quotes_gpc Off
 +     ​php_flag register_globals Off
 +     ​php_flag disable_functions show_source
 +     ​php_flag disable_functions system
 +     ​php_flag disable_functions shell_exec
 +     ​php_flag disable_functions passthru
 +     ​php_flag disable_functions exec
 +     ​php_flag disable_functions popen
 +     ​php_flag disable_functions proc_open
 +     ​php_flag disable_functions symlink
 +   </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​postfixadmin.access.log combined ​
 +        ErrorLog /​var/​log/​apache2/​postfixadmin.error.log ​
 +        LogLevel warn 
 +  SSLEngine on
 +  SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +  SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +  SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +     ​SSLOptions +StdEnvVars
 +  </​FilesMatch>​
 +     ​BrowserMatch "​.*MSIE.*"​ \
 +     ​nokeepalive ssl-unclean-shutdown \
 +     ​downgrade-1.0 force-response-1.0
 +  ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Configurando a porta que o nosso host Virtual vai estar escutando.
 +<sxh bash>
 +vim /​etc/​apache2/​ports.conf
 +[...]
 +NameVirtualHost *:443
 +</​sxh>​
 +
 +Vamos carregar o módulo ssl para o apache.
 +<sxh bash>
 +a2enmod ssl
 +</​sxh>​
 +
 +Vamos acertar as permissões do diretório
 +<sxh bash>
 +chown -R www-data:​www-data /​var/​www/​postfixadmin/​
 +</​sxh>​
 +
 +Vamos carregar o nosso host Virtual
 +<sxh bash>
 +a2ensite postfixadmin
 +</​sxh>​
 +
 +Agora vamos criar o virtual host para o webmail
 +<sxh apache>
 +vim /​etc/​apache2/​sites-available/​webmail
 +<​VirtualHost *:​80> ​
 +  ServerName webmail.douglasqsantos.com.br
 +  Redirect / https://​webmail.douglasqsantos.com.br/ ​
 +</​VirtualHost> ​
 + 
 +<​VirtualHost *:​443> ​
 +        ServerAdmin webmaster@douglasqsantos.com.br
 +        ServerName webmail.douglasqsantos.com.br
 +  DocumentRoot "/​var/​www/​webmail"​
 +   <​Directory "/​var/​www/​webmail">​
 +     ​Options -Indexes +FollowSymLinks +MultiViews
 +     ​AllowOverride All
 +     Order Allow,deny
 +     Allow From All
 +   </​Directory>​
 +        ​
 +       # ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +       # <​Directory "/​usr/​lib/​cgi-bin">​
 +       # ​        ​AllowOverride None
 +       # ​        ​Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +       # ​        Order allow,deny
 +       # ​        Allow from all
 +       # </​Directory>​
 +
 +   <​IfModule mod_php5.c>​
 +   ​AddType application/​x-httpd-php .php
 +     ​php_flag expose_php Off
 +     ​php_flag allow_url_fopen Off
 +     ​php_flag allow_url_include Off
 +     ​php_flag magic_quotes_gpc Off
 +     ​php_flag register_globals Off
 +     ​php_flag disable_functions show_source
 +     ​php_flag disable_functions system
 +     ​php_flag disable_functions shell_exec
 +     ​php_flag disable_functions passthru
 +     ​php_flag disable_functions exec
 +     ​php_flag disable_functions popen
 +     ​php_flag disable_functions proc_open
 +     ​php_flag disable_functions symlink
 +   </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​webmail.access.log combined ​
 +        ErrorLog /​var/​log/​apache2/​webmail.error.log ​
 +        LogLevel warn 
 +  SSLEngine on
 +  SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +  SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +  SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +     ​SSLOptions +StdEnvVars
 +  </​FilesMatch>​
 +     ​BrowserMatch "​.*MSIE.*"​ \
 +     ​nokeepalive ssl-unclean-shutdown \
 +     ​downgrade-1.0 force-response-1.0
 +  ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Vamos carregar o virtual host do webmail
 +<sxh bash>
 +a2ensite webmail
 +</​sxh>​
 +
 +Agora vamos desabilitar os virtuais hosts defaults
 +<sxh bash>
 +a2dissite default
 +a2dissite default-ssl
 +</​sxh>​
 +
 +Agora é sé reiniciar o apache
 +<sxh bash>
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +
 +Agora você pode acessar da seguinte forma
 +  - Webmail em http://​webmail.douglasqsantos.com.br
 +  - Postfixadmin em http://​postfixadmin.douglasqsantos.com.br
 +
 +====== Geradores de relatórios ======
 +
 +Iremos instalar alguns geradores de relatórios para acompanharmos o desenpenho dos serviços do servidor:
 +
 +<sxh bash>
 +aptitude install rrdtool mailgraph queuegraph isoqlog munin munin-plugins-extra munin-node munin-common mailping -y
 +</​sxh>​
 +   * Será perguntado qual o servidor de e-mail utilizado, selecione **postfix** ;
 +   * Será perguntado onde será gravado os logs, deixe o padrão;
 +   * Será perguntado o nome da máquina, deixe o mostrado;
 +   * Será perguntado a Língua usada para as saídas dos relatórios,​ seleciona **Português**
 +   * Será perguntado os domṕinios que serão gerados relatórios,​ informe os domínios separados por espaços;
 +   
 +
 +Agora vamos acertar algumas configurações dos geradores de relatórios mailgraph
 +<sxh bash>
 +dpkg-reconfigure mailgraph ​
 +</​sxh>​
 +   * Responda da seguinte forma
 +   - Sim. 
 +   - Ok 
 +   - não   
 +
 +Aqui no caso do isoqlog temos que executar /​usr/​bin/​isoqlog para ele gerar os nossos relátorios ele ta no cron.daily então ele vai ser  executado uma vez por dia.
 +
 +No meu ponto de vista acho interresante executar ele a cada hora então podemos mudar ele. 
 +<sxh bash>
 +cp -rfa /​etc/​cron.daily/​isoqlog /​etc/​cron.hourly/ ​
 +</​sxh>​
 +
 +Agora vamos configurar o virtual host do isoqlog
 +<sxh apache>
 +vim /​etc/​apache2/​sites-available/​isoqlog
 +<​VirtualHost *:​80> ​
 +  ServerName isoqlog.douglasqsantos.com.br
 +  Redirect / https://​isoqlog.douglasqsantos.com.br/ ​
 +</​VirtualHost> ​
 + 
 +<​VirtualHost *:​443> ​
 +        ServerAdmin webmaster@douglasqsantos.com.br
 +        ServerName isoqlog.douglasqsantos.com.br
 +  DocumentRoot "/​var/​www/​isoqlog"​
 +   <​Directory "/​var/​www/​isoqlog">​
 +     ​Options -Indexes +FollowSymLinks +MultiViews
 +     ​AllowOverride All
 +     Order Allow,deny
 +     Allow From All
 +   </​Directory>​
 +        ​
 +       ​ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +       <​Directory "/​usr/​lib/​cgi-bin">​
 +               ​AllowOverride None
 +               ​Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +               Order allow,deny
 +               Allow from all
 +       </​Directory>​
 +
 +   <​IfModule mod_php5.c>​
 +   ​AddType application/​x-httpd-php .php
 +     ​php_flag expose_php Off
 +     ​php_flag allow_url_fopen Off
 +     ​php_flag allow_url_include Off
 +     ​php_flag magic_quotes_gpc Off
 +     ​php_flag register_globals Off
 +     ​php_flag disable_functions show_source
 +     ​php_flag disable_functions system
 +     ​php_flag disable_functions shell_exec
 +     ​php_flag disable_functions passthru
 +     ​php_flag disable_functions exec
 +     ​php_flag disable_functions popen
 +     ​php_flag disable_functions proc_open
 +     ​php_flag disable_functions symlink
 +   </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​isoqlog.access.log combined ​
 +        ErrorLog /​var/​log/​apache2/​isoqlog.error.log ​
 +        LogLevel warn 
 +  SSLEngine on
 +  SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +  SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +  SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +     ​SSLOptions +StdEnvVars
 +  </​FilesMatch>​
 +     ​BrowserMatch "​.*MSIE.*"​ \
 +     ​nokeepalive ssl-unclean-shutdown \
 +     ​downgrade-1.0 force-response-1.0
 +  ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Agora vamos carregar o virtual host do isoqlog
 +<sxh bash>
 +a2ensite isoqlog
 +</​sxh>​
 +
 +Agora temos que reiniciar o apache
 +<sxh bash>
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +Agora vamos executar o isoqlog para gerar os nosso relátorio
 +<sxh bash>
 + /​usr/​bin/​isoqlog ​
 +Year: 2011 Month: 10
 +outputdir:/​var/​www/​isoqlog
 +htmldir:/​usr/​share/​isoqlog/​htmltemp
 +logtype:​postfix
 +logstore:/​var/​log/​mail.log
 +langfile:/​usr/​share/​isoqlog/​lang/​portuguese
 +maxsender:​100
 +maxreceiver:​100
 +maxtotal:​100
 +maxbyte:100
 +hostname: mail.douglasqsantos.com.br
 +Domains douglasqsantos.com.br
 +The Created directory : /​var/​www/​isoqlog/​douglasqsantos.com.br
 +The Created directory : /​var/​www/​isoqlog/​douglasqsantos.com.br/​2011
 +The Created directory : /​var/​www/​isoqlog/​douglasqsantos.com.br/​2011/​10
 +The Created directory : /​var/​www/​isoqlog/​general
 +The Created directory : /​var/​www/​isoqlog/​general/​2011
 +The Created directory : /​var/​www/​isoqlog/​general/​2011/​10
 +</​sxh>​
 +
 +A configuração do nosso isoqlog se baseia em dois arquivos
 +
 +Primeiro arquivo que tem a configuração principal do isoqlog
 +<sxh bash>
 +vim /​etc/​isoqlog/​isoqlog.conf
 +#isoqlog 2.0 Configuration file
 +
 +logtype ​    = "​postfix"​
 +logstore ​   = "/​var/​log/​mail.log"​
 +domainsfile = "/​etc/​isoqlog/​isoqlog.domains"​
 +outputdir ​  = "/​var/​www/​isoqlog"​
 +htmldir ​    = "/​usr/​share/​isoqlog/​htmltemp"​
 +langfile ​   = "/​usr/​share/​isoqlog/​lang/​portuguese"​
 +hostname ​   = "​mail.douglasqsantos.com.br"​
 +
 +maxsender ​  = 100
 +maxreceiver = 100
 +maxtotal ​   = 100
 +
 +maxbyte ​    = 100
 +</​sxh>​
 +
 +Arquivo que controla os domínios que vão ser gerados relatórios,​ informe um domínio por linha caso tenha mais de um domínio.
 +<sxh bash>
 +vim /​etc/​isoqlog/​isoqlog.domains
 +douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora vamos acessar os relatórios em 
 +  - Isoqlog em http://​isoqlog.douglasqsantos.com.br
 +  - MailGraph em http://​isoqlog.douglasqsantos.com.br/​cgi-bin/​mailgraph.cgi
 +  - QueueGraph em http://​isoqlog.douglasqsantos.com.br/​cgi-bin/​queuegraph.cgi
 +
 +Ajustando o munin
 +
 +<sxh bash> ​
 +vim /​etc/​munin/​munin.conf
 +[...]
 +dbdir  /​var/​lib/​munin
 +htmldir /​var/​www/​monitor
 +logdir /​var/​log/​munin
 +rundir ​ /​var/​run/​munin
 +[...]
 +tmpldir /​etc/​munin/​templates
 +
 +# a simple host tree
 +[localhost.localdomain]
 +   ​address 127.0.0.1
 +   ​use_node_name yes
 +</​sxh>​
 +
 +Vamos reiniciar o munin
 +<sxh bash>
 +/​etc/​init.d/​munin-node restart
 +</​sxh>​
 +Vamos acertar o virtual host do munin
 +
 +<sxh apache>
 +vim /​etc/​apache2/​sites-available/​monitor
 +<​VirtualHost *:​80> ​
 +  ServerName monitor.douglasqsantos.com.br
 +  Redirect / https://​monitor.douglasqsantos.com.br/ ​
 +</​VirtualHost> ​
 + 
 +<​VirtualHost *:​443> ​
 +        ServerAdmin webmaster@douglasqsantos.com.br
 +        ServerName monitor.douglasqsantos.com.br
 +  DocumentRoot "/​var/​www/​monitor"​
 +   <​Directory "/​var/​www/​monitor">​
 +     ​Options -Indexes +FollowSymLinks +MultiViews
 +     ​AllowOverride All
 +     Order Allow,deny
 +     Allow From All
 +   </​Directory>​
 +        ​
 +       #​ScriptAlias /cgi-bin/ /​usr/​lib/​cgi-bin/​
 +       #<​Directory "/​usr/​lib/​cgi-bin">​
 +       # ​       AllowOverride None
 +       # ​       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +       # ​       Order allow,deny
 +       # ​       Allow from all
 +       #</​Directory>​
 +
 +   <​IfModule mod_php5.c>​
 +   ​AddType application/​x-httpd-php .php
 +     ​php_flag expose_php Off
 +     ​php_flag allow_url_fopen Off
 +     ​php_flag allow_url_include Off
 +     ​php_flag magic_quotes_gpc Off
 +     ​php_flag register_globals Off
 +     ​php_flag disable_functions show_source
 +     ​php_flag disable_functions system
 +     ​php_flag disable_functions shell_exec
 +     ​php_flag disable_functions passthru
 +     ​php_flag disable_functions exec
 +     ​php_flag disable_functions popen
 +     ​php_flag disable_functions proc_open
 +     ​php_flag disable_functions symlink
 +   </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​monitor.access.log combined ​
 +        ErrorLog /​var/​log/​apache2/​monitor.error.log ​
 +        LogLevel warn 
 +  SSLEngine on
 +  SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +  SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +  SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +     ​SSLOptions +StdEnvVars
 +  </​FilesMatch>​
 +     ​BrowserMatch "​.*MSIE.*"​ \
 +     ​nokeepalive ssl-unclean-shutdown \
 +     ​downgrade-1.0 force-response-1.0
 +  ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 +Vamos carregar o virtual host do munin
 +<sxh bash>
 +a2ensite monitor
 +</​sxh>​
 +
 +Agora vamos fazer um acerto
 +<sxh bash>
 +cd /var/www
 +ln -sf /​var/​cache/​munin/​www monitor
 +</​sxh>​
 +
 +Agora só reiniciar o apache
 +<​code>​
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 +Agora para acessar o nosso monitor é só acessar
 +  - Munin em http://​monitor.douglasqsantos.com.br
 +
 +Aqui vamos ter as estatísticas do nosso servidor de vários fatores.
 +
 +====== Configuração do SPF ======
 +Agora vamos a configuração do SPF, aqui nós precisamos inserir em nosso servidor DNS quais são os hosts que podem enviar email em nome de nosso dominio
 +
 +Exemplo da linha no arquivo da zona no Bind
 +<sxh dns>
 +$TTL    3600
 +@               IN SOA  ns1.douglasqsantos.com.br. ​    ​root.douglasqsantos.com.br. (
 +                                2012100402
 +                                      3600              ; refresh
 +                                      1800              ; retry
 +                                    1209600 ​             ; expiry
 +                                      3600 )            ; minimum
 +; NS
 +@               IN NS   ​ns1.douglasqsantos.com.br.
 +@               IN NS   ​ns2.douglasqsantos.com.br.
 +@               IN MX   0 mail.douglasqsantos.com.br.
 +@               IN MX   1 mail2.douglasqsantos.com.br.
 +douglasqsantos.com.br. IN TXT "​v=spf1 a mx ip4:​10.0.0.0/​24 -all"
 +</​sxh>​
 +
 +Aqui estamos especificando que estamos utilizando a versão 1 do spf e que os endereços que podem enviar email pelo nosso domínio são 10.0.0.0/​24,​ com isso qualquer servidor que faça a validação de spf a nossa rede vai podem enviar email sem problemas. aqui precisamos trocar o 10.0.0.0/24 pela sua faixa de endereços pública que é o que a internet vai precisar validar.
 +
 +O spf também foi adicionado na configuração do nosso master.cf como mostrado abaixo
 +<sxh bash>
 +vim /​etc/​postfix/​master.cf
 +[...]
 +#​--------------------------SPF----------------------------------------------------------------
 +policy ​ unix  -       ​n ​      ​n ​      ​- ​      ​- ​      spawn
 + ​user=nobody argv=/​usr/​bin/​perl /​usr/​sbin/​postfix-policyd-spf-perl
 +#​--------------------------END SPF------------------------------------------------------------
 +</​sxh>​
 +
 +Com isso estamos fazendo a validação de spf dos domínios que nos enviarem email, e adicionando a configuração no dns estamos habilitando o spf e especificando quais ips podem enviar emails em nosso nome ;)
 +
 +====== Configuração do DKIM ======
 +
 +Aqui vamos configurar o DKIM com o Amavis, aqui sempre que enviarmos uma mensagem vai anexado a ela uma assinatura DKIM, o destinatário pode obter a chave pública por dns e validar se a mensagem bate com quem assinou, com isso conseguimos garantir a autenticidade da mensagem.
 +
 +Precisamos primeiro gerar a nossa chave para assinar as mensagens
 +<sxh bash>
 +amavisd-new genrsa /​etc/​amavis/​conf.d/​mail.douglasqsantos.com.br.pem
 +Private RSA key successfully written to file "​mail.douglasqsantos.com.br.pem"​ (1024 bits, PEM format)
 +</​sxh>​
 +
 +Agora precisamos adicionar no arquivo do Amavis o nosso certificado
 +<sxh bash>
 +vim /​etc/​amavis/​conf.d/​50-user ​
 +use strict;
 +
 +#
 +# Place your configuration directives here.  They will override those in
 +# earlier files.
 +#
 +# See /​usr/​share/​doc/​amavisd-new/​ for documentation and examples of
 +# the directives you can use in this file
 +#
 +#Aqui vamos habilitar a verificação com dkim
 +$enable_dkim_verification = 1;
 +#Aqui vamos habilitar a assinatura com dkim
 +$enable_dkim_signing = 1;
 +#Aqui vamos especificar o nosso domínio que temos o reverso no provedor, depois o nome do servidor e por último a localização da chave
 +dkim_key('​douglasqsantos.com.br',​ '​mail',​ '/​etc/​amavis/​conf.d/​mail.douglasqsantos.com.br.pem'​);​
 +#Agora vamos passar algumas informações sobre o ttl, forma de trabalho e quais são as nossas redes internas
 +@dkim_signature_options_bysender_maps = (
 +   { '​.'​ => { ttl => 21*24*3600, c => '​relaxed/​simple'​ } } );
 +@mynetworks = qw(127.0.0.0/​8 10.101.0.0/​24); ​ # list your internal networks
 +
 +#​------------ Do not modify anything below this line -------------
 +1;  # ensure a defined return
 +</​sxh>​
 +
 +Agora vamos mandar visualizar a nossa chave
 +<sxh bash>
 +amavisd-new showkeys
 +; key#1, domain douglasqsantos.com.br,​ /​etc/​amavis/​conf.d/​mail.douglasqsantos.com.br.pem
 +mail._domainkey.douglasqsantos.com.br. ​ 3600 TXT (
 +  "​v=DKIM1;​ p="
 +  "​MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChENjvBjXVffoV+9imJhFOjWf4"​
 +  "​c9V1syZGsvdUMZHDU7F/​vA5YDO6x+ZycIOsYKHGdtoxbw6emV2pbkM6deH1p3qAy"​
 +  "​cpStVO81A/​LcUmkM0aeWAB6WOJAnQ2ldHDvRbvnBACFDtSIu52YrBfros9+jjMCh"​
 +  "​B3iFi0D5IaIgGw/​uJQIDAQAB"​)
 +</​sxh>​
 +
 +Nós precisamos inserir a informação do domainkey no servidor dns
 +<sxh dns>
 +vim /​var/​lib/​named/​var/​cache/​bind/​db.douglasqsantos.com.br
 +$TTL    3600
 +@               IN SOA  ns1.douglasqsantos.com.br. ​    ​root.douglasqsantos.com.br. (
 +                                2012100404
 +                                      3600              ; refresh
 +                                      1800              ; retry
 +                                    1209600 ​             ; expiry
 +                                      3600 )            ; minimum
 +; NS
 +@               IN NS   ​ns1.douglasqsantos.com.br.
 +@               IN NS   ​ns2.douglasqsantos.com.br.
 +@               IN MX   0 mail.douglasqsantos.com.br.
 +@               IN MX   1 mail2.douglasqsantos.com.br.
 +
 +douglasqsantos.com.br. IN TXT "​v=spf1 a mx ip4:​10.0.0.0/​24 -all"
 +mail._domainkey.douglasqsantos.com.br. ​       3600 TXT (
 +  "​v=DKIM1;​ p="
 +  "​MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChENjvBjXVffoV+9imJhFOjWf4"​
 +  "​c9V1syZGsvdUMZHDU7F/​vA5YDO6x+ZycIOsYKHGdtoxbw6emV2pbkM6deH1p3qAy"​
 +  "​cpStVO81A/​LcUmkM0aeWAB6WOJAnQ2ldHDvRbvnBACFDtSIu52YrBfros9+jjMCh"​
 +  "​B3iFi0D5IaIgGw/​uJQIDAQAB"​)
 +[...]
 +</​sxh>​
 +
 +Após isso precisamos reiniciar o serviço do bind
 +<sxh bash>
 +/​etc/​init.d/​bind9 restart
 +</​sxh>​
 +
 +Após isso já podemos testar a nossa chave DKIM
 +<sxh bash>
 +amavisd-new testkeys
 +TESTING#1: mail._domainkey.douglasqsantos.com.br ​  => pass
 +</​sxh>​
 +
 +Agora vamos reiniciar o amavis
 +<sxh bash>
 +/​etc/​init.d/​amavis restart
 +</​sxh>​
 +
 +Agora vamos visualizar uma mensagem com o dkim
 +<sxh bash>
 +Trying 127.0.0.1...
 +Connected to localhost.
 +Escape character is '​^]'​.
 ++OK Hello there.
 +user bob@douglasqsantos.com.br
 ++OK Password required.
 +pass doug123
 ++OK logged in.
 +list
 ++OK POP3 clients that break here, they violate STD53.
 +1 1558
 +.
 +retr 1
 ++OK 1558 octets follow.
 +Return-Path:​ <​douglas@douglasqsantos.com.br>​
 +X-Original-To:​ bob@douglasqsantos.com.br
 +Delivered-To:​ bob@douglasqsantos.com.br
 +Received: from localhost (localhost [127.0.0.1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id BCA1111F52
 +  for <​bob@douglasqsantos.com.br>;​ Thu,  4 Oct 2012 16:45:42 -0300 (BRT)
 +DKIM-Signature:​ v=1; a=rsa-sha256;​ c=relaxed/​simple;​ d=douglasqsantos.com.br;​
 +   ​h=date:​date:​message-id:​content-transfer-encoding:​content-type
 +  :​content-type:​mime-version:​subject:​subject:​from:​from:​received
 +  :received; s=mail; t=1349379941;​ x=1351194341;​ bh=QgJIMkj7bcmiv3
 +  bFFw8uU+eTOPQz1gHSN7Nj+L6bx8g=;​ b=EGa3dz5V+CNEC//​R0zzTi8wcRv5O5M
 +  dtJN4FJlsNGahb90gE8goLGL3zrUx3zlOVxnTFoOmHC3r2RxamW5H6AkVmqydbnb
 +  i3bCPVg7yKi69UgNMM3ZaXYk6kNfG/​qm3xNEvT0k/​XDQMhWtC57esH3B1fRXgRLL
 +  qLi3WUSmzYjaY=
 +X-Virus-Scanned:​ Debian amavisd-new at mail.douglasqsantos.com.br
 +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 EttAH5JYiz1M for <​bob@douglasqsantos.com.br>;​
 +  Thu,  4 Oct 2012 16:45:41 -0300 (BRT)
 +Received: from 10.101.0.26 (localhost [127.0.0.1])
 +  by mail.douglasqsantos.com.br (Postfix) with ESMTP id 1696811F4E
 +  for <​bob@douglasqsantos.com.br>;​ Thu,  4 Oct 2012 16:45:41 -0300 (BRT)
 +To: bob@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: <​20121004194541.1696811F4E@mail.douglasqsantos.com.br>​
 +Date: Thu,  4 Oct 2012 16:45:41 -0300 (BRT)
 +
 +Hi,
 +
 +Welcome to your new account.
 +.
 +quit
 ++OK Bye-bye.
 +Connection closed by foreign host.
 +</​sxh>​
 +
 +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 amavis spamassassin postgrey clamav-daemon clamav-freshclam courier-authdaemon courier-imap courier-imap-ssl courier-pop courier-pop-ssl postfix"​
 +START="​saslauthd amavis spamassassin postgrey clamav-daemon clamav-freshclam 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 criar um script levando em consideração que instalamos o dovecot.
 +<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 amavis spamassassin postgrey clamav-daemon clamav-freshclam dovecot postfix"​
 +START="​saslauthd amavis spamassassin postgrey clamav-daemon clamav-freshclam dovecot 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://​www.dovecot.org/​
 +  - http://​www.dovecot.org/​documentation.html
 +  - http://​postgrey.schweikert.ch/​
 +  - http://​www.postfix.org/​SMTPD_POLICY_README.html
 +  - http://​www.eicar.org/​86-0-Intended-use.html
 +  - http://​www.clamav.net/​lang/​en/​
 +  - http://​roundcube.net/​
 +  - http://​roundcube.net/​about
 +  - http://​trac.roundcube.net/​wiki/​Howto_Install
 +  - http://​vda.sourceforge.net/​
 +  - http://​www.enderunix.org/​isoqlog/​
 +  - http://​www.enderunix.org/​isoqlog/​isoqlog-2.2/​INSTALL
 +  - http://​www200.pair.com/​mecham/​spam/​ubuntu104-maia.html
 +  - http://​www.maiamailguard.com/​maia/​wiki
 +  - http://​www.maiamailguard.com/​maia/​wiki/​FAQ
 +  - http://​www.openspf.org/​
 +  - http://​www.openspf.org/​Software
 +  - http://​www.fail2ban.org/​wiki/​index.php/​Main_Page
 +  - http://​www.fail2ban.org/​wiki/​index.php/​HOWTOs
 +  - http://​www.zeroflux.org/​projects/​knock
 +  - http://​www.openssl.org/​
 +  - http://​www.amavis.org/​
 +  - http://​www.ijs.si/​software/​amavisd/​
 +  - http://​www.ijs.si/​software/​amavisd/​amavisd-new-docs.html
 +  - http://​www.cacert.org/​
 +  - http://​wiki.cacert.org/​ServerCerts
 +  - http://​wiki.cacert.org/​HowToDocuments
 +  - http://​munin-monitoring.org/​
 +  - http://​munin-monitoring.org/​wiki/​Documentation
 +  - http://​munin-monitoring.org/​wiki/​LinuxInstallation
 +  - http://​munin-monitoring.org/​wiki/​munin.conf
 +  - http://​munin-monitoring.org/​wiki/​munin-node.conf
 +  - http://​www.ijs.si/​software/​amavisd/​amavisd-new-docs.html#​dkim