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 SPF e a outra o DKIM.

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

Download do pacote do Postfix

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

aptitude update && aptitude dist-upgrade -y

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

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

Vamos atualizar os repositórios com os novos dados.

aptitude update -y

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

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

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

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

Vamos mandar instalar o dos2unix por que aonde ta o site a codificação fica meio bagunçada :(

aptitude install dos2unix

Agora vamos converter o patch

dos2unix postfix-vda-v11-2.9.1.patch

Agora vamos aplicar o patch

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

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

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

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

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

Agora vamos criar os pacotes .deb

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

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

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

Agora vamos instalar os pacotes adicionais necessários.

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

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

aptitude install bsd-mailx

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

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

Agora vamos acertar o hostname

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

Agora vamos acertar o mailname do servidor

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

Agora vamos reiniciar o servidor para acertar o resto do sistema

reboot

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

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

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

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

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

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

Instalação e configuração do PostFixAdmin

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

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

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

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

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

sed -i -e '203i\' -e "    'vacation',  //for system accounts'" /var/www/postfixadmin/config.inc.php

Reinicie o serviço do Apache

/etc/init.d/apache2 restart

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

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

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

Vacation

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

Vamos criar o grupo e o usuário vacation

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

Agora vamos copiar o arquivo do vacation para o seu home

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

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

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

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

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

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

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

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

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

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

Configuração do Postifx

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

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

Agora vamos obter o gid do Postfix

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

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

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

Instalando os módulos do postfix

aptitude install postfix-policyd-spf-perl libsasl2-2 libsasl2-modules-sql -y

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

chown -R vmail:postdrop /home/vmail

Vamos fazer um backup do arquivo original

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

Agora vamos configurar o nosso postfix

vim /etc/postfix/main.cf
#---------------------------------MAIN-----------------------------------------
smtpd_banner                    = $myhostname ESMTP
biff                            = no
append_dot_mydomain             = no
readme_directory                = no
alias_maps                      = hash:/etc/postfix/aliases
alias_database                  = hash:/etc/postfix/aliases
myhostname                      = mail.douglasqsantos.com.br
mydomain                        = douglasqsantos.com.br
myorigin                        = $myhostname
mydestination                   = $myhostname, localhost
relayhost                       =
mynetworks                      = 127.0.0.0/8, 10.0.0.0/24
relay_domains                   = $mydestination
home_mailbox                    = Maildir/
mailbox_command                 = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir/
mailbox_size_limit              = 0
message_size_limit              = 10240000
recipient_delimiter             = +
mynetworks_style                = subnet
inet_interfaces                 = all
default_transport               = smtp
smtpd_recipient_limit           = 30
bounce_queue_lifetime           = 300s
maximal_queue_lifetime          = 300s
#-----------------------------END MAIN-----------------------------------------
#-----------------------------SASL--------------------------------------------- 
smtpd_sasl_auth_enable          = yes
smtpd_sasl_security_options     = noanonymous
broken_sasl_auth_clients        = yes
smtpd_sasl_local_domain         = $mydomain
#----------------------------END SASL------------------------------------------
#-------------------------------TLS--------------------------------------------
smtp_tls_CAfile                 = /etc/postfix/ssl/cacert.pem
smtp_tls_cert_file              = /etc/postfix/ssl/smtpd.crt
smtp_tls_key_file               = /etc/postfix/ssl/smtpd.key
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_tls_security_level         = may
smtpd_tls_CAfile                = /etc/postfix/ssl/cacert.pem
smtpd_tls_cert_file             = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file              = /etc/postfix/ssl/smtpd.key
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
smtpd_tls_dh1024_param_file     = /etc/postfix/ssl/dh_1024.pem
smtpd_tls_dh512_param_file      = /etc/postfix/ssl/dh_512.pem
smtpd_tls_security_level        = may
smtpd_tls_received_header       = yes
smtpd_tls_ask_ccert             = yes
smtpd_tls_loglevel              = 1
tls_random_source               = dev:/dev/urandom
smtpd_enforce_tls               = yes
#-----------------------------END TLS-------------------------------------------- 
#--------------------------------MYSQL------------------------------------------- 
transport_maps                  = proxy:mysql:/etc/postfix/mysql_transport_maps.cf
virtual_alias_maps              = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains         = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps            = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport               = virtual
virtual_minimum_uid             = 107
virtual_uid_maps                = static:107
virtual_gid_maps                = static:107
virtual_mailbox_base            = /home/vmail
#-----------------------------END MYSQL------------------------------------------- 
#-----------------------------QUOTA-----------------------------------------------
virtual_mailbox_limit           = 51200000
virtual_mailbox_limit           = 0
virtual_maildir_extended        = yes
virtual_mailbox_limit_override  = yes
virtual_mailbox_limit_maps      = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_overquota_bounce        = yes
virtual_maildir_limit_message   = Desculpe, o diretorio de correio do usuario estourou sua quota, por favor tente novamente depois.
#----------------------------END QUOTA-------------------------------------------
#----------------------------CONTROLS--------------------------------------------
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-------------------------------------------

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

Vamos gerar as chaves de autenticação

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

Acertando permissão da key gerada

chmod 600 smtpd.key

Agora vamos gerar o pedido de assinatura

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

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

Vamos assinar agora o nosso certificado

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

Agora vamos tirar a senha do certificado agora

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

Gerando o CA

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

Ultimas chaves de Diffie Hellman

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

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

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

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

Aqui vamos configurar o arquivo que controla as contas de email

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

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

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

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

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

Aqui vamos acertar o arquivo que controla as mailbox

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

Vamos acertar as permissões

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

Vamos fazer o acerto dos aliases agora

mv /etc/aliases /etc/postfix

Ajustando arquivos de aliases para os redirecionamentos

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

Agora vamos gerar a nova base de dados dos aliases

newaliases

Vamos fazer backup do arquivo de configuração

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

Ajustando arquivo de serviços do postfix

vim /etc/postfix/master.cf
#-------------------------SERVICES--------------------------------------------
#-----------------------------------------------------------------------------
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
#-----------------------------------------------------------------------------
smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp
relay     unix  -       -       -       -       -       smtp
        -o smtp_fallback_relay=
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       1       scache
#----------------------------END SERVICES-----------------------------------------
#----------------------------DELIVERY METHODS-------------------------------------
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}
#--------------------------END DELIVERY METHODS----------------------------------------------- 
#--------------------------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-------------------------------------------------

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

Agora vamos configurar o sasl

vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
auxprop_plugin: sql
allow_plaintext: 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'

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

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

Vamos colocar o sasl no grupo do postfix

usermod -G sasl postfix

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

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

Agora vamos acertar a configuração do arquivo saslauthd

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

Vamos acertar os arquivos do saslauthd para o postfix

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

Agora vamos preparar o mysql para trabalhar com o Postfix

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

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

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

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

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

Agora vamos reiniciar os serviços

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

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

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

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

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

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

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

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

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

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

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

vim /etc/courier/imapd.cnf

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

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

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


[ cert_type ]
nsCertType = server

Agora vamos editar o arquivo do pop

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

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

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


[ cert_type ]
nsCertType = server

Agora vamos fazer backup dos certificados antigos.

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

Agora vamos gerar o novo certificado para o Imap-ssl

mkimapdcert

Agora vamos gerar o novo certificado para o Pop-ssl

mkpop3dcert

Agora vamos acertar os links dos certificados do courier

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

Agora é só reiniciar os serviços

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

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

aptitude install dovecot-dev dovecot-imapd dovecot-pop3d -y

Vamos acertar as chaves de criptografia para o nosso servidor

find /etc -iname "dovecot.pem" -exec rm -rf {} \;

Agora vamos gerar elas novamente com os valores necessários Vamos criar o diretório para armazenar as chaves

mkdir /etc/ssl/dovecot
cd /etc/ssl/dovecot

Gerar a chave principal

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:

Agora vamos acertar a permissão

chmod 600 dovecot.key 

Agora vamos gerar o csr

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

Agora vamos assinar a nossa chave

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:

Vamos tirar a senha do nosso certificado

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

Agora vamos acertar o nome dela

mv -f dovecot.key.unencrypted dovecot.key

Agora vamos gerar a nossa entidade certificadora

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

Agora vamos fazer um backup do arquivo do dovecot

cp /etc/dovecot/dovecot.conf{,.bkp}

Agora vamos acertar o dovecot

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-------------------------------------

Agora vamos acertar a autenticação do dovecot no MySQL

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'

Vamos acertar o arquivo de controle de lixeira e spam.

vim /etc/dovecot/trash.conf
1 Spam
2 Trash

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

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

Agora vamos copiar os arquivos da pam

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

Instalação e configuração de Anti-Virus e Anti-Spam

Instalação dos pacotes para do antivirus e do antispam.

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

Ajustando permissões

adduser clamav amavis

Vamos mandar atualizar a base do clamav

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)

Instalando suporte a razor e pyzor

apt-get install libnet-dns-perl razor pyzor -y

Acertando as configurações do razor e do pyzor

su - amavis -c 'razor-admin -d --create'
su - amavis -c 'razor-admin -register'
su - amavis -c 'razor-admin -discover'
su - amavis -c 'pyzor discover'

Configurando o SpamAssassin Vamos fazer backup do arquivo de configuração

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

Agora vamos configurar o spamassassin

vim /etc/default/spamassassin
ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
PIDFILE="/var/run/spamd.pid"
CRON=0

Fazendo um backup do arquivo de configuração do SpamAssassin

cp /etc/spamassassin/local.cf{,.bkp}

Acertando o SpamAssassin

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-----------------------

Agora precisamos habilitar o amavis a utilizar o spamassassim e o clamav Vamos fazer um backup do arquivo de configuração

cp /etc/amavis/conf.d/15-content_filter_mode{,.bkp}

Agora vamos deixar ele como abaixo

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 

Vamos fazer backup do arquivo de configuração do postgrey

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

Agora vamos acertar a configuração do postgrey

vim /etc/default/postgrey
POSTGREY_OPTS="--inet=60000 --delay=60"
POSTGREY_TEXT="Seu email sera entregue em aproximadamente 60 segundos."

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

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

Agora precisamos reiniciar o serviço do MySQL

/etc/init.d/mysql restart

Restartando os serviços:

/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

Caso tenha utilizado o courier

/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

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

nmap -sS -T4 localhost
Starting Nmap 5.00 ( http://nmap.org ) at 2011-10-04 16:10 BRT
Interesting ports on localhost (127.0.0.1):
Not shown: 986 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
80/tcp    open  http
110/tcp   open  pop3
111/tcp   open  rpcbind
143/tcp   open  imap
587/tcp   open  submission
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

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

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

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

tail -f /var/log/mail.log
Oct  2 16:25:18 mail postfix/smtpd[1847]: connect from localhost[127.0.0.1]
Oct  2 16:25:18 mail postfix/smtpd[1847]: B3C1611F4E: client=localhost[127.0.0.1]
Oct  2 16:25:18 mail postfix/cleanup[1854]: B3C1611F4E: message-id=<20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Oct  2 16:25:18 mail postfix/qmgr[1790]: B3C1611F4E: from=<douglas@douglasqsantos.com.br>, size=486, nrcpt=1 (queue active)
Oct  2 16:25:18 mail postfix/smtpd[1847]: disconnect from localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/smtpd[1857]: connect from localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/smtpd[1857]: 3354E11F51: client=localhost[127.0.0.1]
Oct  2 16:25:21 mail postfix/cleanup[1854]: 3354E11F51: message-id=<20121002192518.B3C1611F4E@mail.douglasqsantos.com.br>
Oct  2 16:25:21 mail postfix/qmgr[1790]: 3354E11F51: from=<douglas@douglasqsantos.com.br>, size=875, nrcpt=1 (queue active)
Oct  2 16:25:21 mail 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

Agora vamos testar a autenticação do Cliente.

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

Vamos fazer um teste para verificar se o smtp esta funcionando

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

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

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

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

Agora precisamos dar a permissão para o nosso script

chmod +x /srv/base64

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

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

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

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

Vamos fazer um teste de acesso pop

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

Agora vamos efetuar um teste de pop com ssl

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

Hi,

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

Agora vamos efetuar um teste com o Imap

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

Agora vamos efetuar um teste do imap com ssl

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

Hi,

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

Até aqui já temos o Postfix trabalhando corretamente porém vamos adicionar mais funcionalidades a ele ;) Agora vamos testar o envio de uma mensagem de SPAM

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 

Agora vamos fazer um teste de envio de uma mensagem não spam

cd /usr/share/doc/spamc/
gunzip sample-nonspam.txt.gz

Agora vamos enviar a mensagem de teste

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 

Agora vamos fazer um teste de envio de virus

echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/arquivo.doc

Agora vamos enviar o arquivo

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 

Os arquivos bloqueados vão ficar em /var/lib/amavis/virusmails/

Sincronismos de contas de Email entre servidores com o Fetchmail

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

Vamos instalar as dependências

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

Acertando o fetchmail

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

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

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

Acertando as permissões do fetchmail

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

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

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

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

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

Instalando e configurando o RoundCubeMail

Vamos obter ele e desempacotar

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

Agora vamos preparar o banco de dados para o webmail

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

Vamos acertar as permissões do webmail

chown -R www-data:www-data /var/www/webmail

Vamos acertar a configuração do suhosin

vim /etc/php5/conf.d/suhosin.ini
[...]
suhosin.session.encrypt = off
[...]

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

vim /etc/php5/apache2/php.ini
[...]
date.timezone = America/Sao_Paulo

Agora precisamos reiniciar o apache

/etc/init.d/apache2 restart

Agora vamos acertar os arquivos de configuração

cd /var/www/webmail/config
cp db.inc.php.dist db.inc.php
cp main.inc.php.dist main.inc.php

Vamos acertar o arquivo de conexão com o banco de dados

sed -i "s|mysql://roundcube:pass@localhost/roundcubemail|mysql://webmail:senha@localhost/roundcubemail|g" db.inc.php

Vamos editar o arquivo de configuração principal do webmail

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

Agora vamos acertar o plugin do roundcubemail para que o usuário possa trocar a senha.

cd /var/www/webmail/plugins/password
cp config.inc.php.dist config.inc.php

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.

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

Agora precisamos dar permissão para o webmail atualizar a tabela mailbox do banco mail.

grant select,update on mail.mailbox to webmail@localhost identified by 'senha';
flush privileges;
quit

Inicialize o banco

mysql -u root -p roundcubemail < /var/www/webmail/SQL/mysql.initial.sql

Removendo o instalador do Webmail:

rm -rf /var/www/webmail/installer

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

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

Agora vamos acertar as permissões do nosso webmail.

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

Agora vamos preparar o banco de dados para o webmail

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

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

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

Agora precisamos excluir a pasta install do nosso webmail.

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

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

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

Agora precisamos reiniciar o apache

/etc/init.d/apache2 restart

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

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

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

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

aptitude install fail2ban -y

Vamos fazer backup do arquivo de configuração

cp /etc/fail2ban/jail.conf{,.bkp}

Vamos acertar o arquivo de configuração do fail2ban

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------------------------------------------------

Agora é so reiniciar o serviço

/etc/init.d/fail2ban restart

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

aptitude install knockd -y

Agora vamos fazer backup do arquivo

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

Vamos editar o arquivo e liberar para qual interface ele vai ficar escutando

vim /etc/default/knockd
START_KNOCKD=1
KNOCKD_OPTS="-i eth0"

Vamos fazer backup do arquivo de configuração

cp /etc/knockd.conf{,.bkp}

Vamos ao arquivo de configuração

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

Vamos restartar o serviço:

/etc/init.d/knockd restart

Agora no cliente é so intalar o pacote do knockd

apt-get install knockd -y

Agora para abrir a porta do servidor para o nosso cliente fazemos como abaixo

knock ip_servidor     1234:udp 4321:tcp 6789:udp

Agora vamos ver o log no servidor

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

A porta foi aberta vamos analizar no firewall

iptables -L -n -v | egrep 22
59  4508 ACCEPT     tcp  --  *      *       10.0.0.20            0.0.0.0/0           tcp dpt:22 
  • 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

knock 10.0.0.23 6789:tcp 4321:udp 1234:tcp

Agora vamos ver nos logs para ver se fechou a porta

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

Habilitando os VirtualHosts com https

Vamos gerar a key para o https

Preparando o diretório que vai armazenar os nosso certificados

mkdir -p /etc/ssl/apache
cd /etc/ssl/apache

Gerando a key

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

Vamos gerar agora a requisição de assinatura para o certificado

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

Agora vamos auto assinar o nosso certificado

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

Agora vamos acertar as permissões das chaves

chmod 0400 server.*
 cp server.key server.key.orig

Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar

openssl rsa -in server.key.orig -out server.key
 Enter pass phrase for server.key.orig: senha
 writing RSA key

Vamos acertar as permissões de todas as chaves

chmod 0400 /etc/ssl/apache/* 

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

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

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

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>

Configurando a porta que o nosso host Virtual vai estar escutando.

vim /etc/apache2/ports.conf
[...]
NameVirtualHost *:443

Vamos carregar o módulo ssl para o apache.

a2enmod ssl

Vamos acertar as permissões do diretório

chown -R www-data:www-data /var/www/postfixadmin/

Vamos carregar o nosso host Virtual

a2ensite postfixadmin

Agora vamos criar o virtual host para o webmail

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>

Vamos carregar o virtual host do webmail

a2ensite webmail

Agora vamos desabilitar os virtuais hosts defaults

a2dissite default
a2dissite default-ssl

Agora é sé reiniciar o apache

/etc/init.d/apache2 restart

Agora você pode acessar da seguinte forma

Geradores de relatórios

Iremos instalar alguns geradores de relatórios para acompanharmos o desenpenho dos serviços do servidor:

aptitude install rrdtool mailgraph queuegraph isoqlog munin munin-plugins-extra munin-node munin-common mailping -y
  • 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

dpkg-reconfigure mailgraph 
  • Responda da seguinte forma
  1. Sim.
  2. Ok
  3. 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.

cp -rfa /etc/cron.daily/isoqlog /etc/cron.hourly/ 

Agora vamos configurar o virtual host do isoqlog

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>

Agora vamos carregar o virtual host do isoqlog

a2ensite isoqlog

Agora temos que reiniciar o apache

/etc/init.d/apache2 restart

Agora vamos executar o isoqlog para gerar os nosso relátorio

/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

A configuração do nosso isoqlog se baseia em dois arquivos

Primeiro arquivo que tem a configuração principal do isoqlog

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

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.

vim /etc/isoqlog/isoqlog.domains
douglasqsantos.com.br

Agora vamos acessar os relatórios em

Ajustando o munin

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

Vamos reiniciar o munin

/etc/init.d/munin-node restart

Vamos acertar o virtual host do munin

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>

Vamos carregar o virtual host do munin

a2ensite monitor

Agora vamos fazer um acerto

cd /var/www
ln -sf /var/cache/munin/www monitor

Agora só reiniciar o apache <code> /etc/init.d/apache2 restart </sxh>

Agora para acessar o nosso monitor é só acessar

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

$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"

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

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------------------------------------------------------------

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

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)

Agora precisamos adicionar no arquivo do Amavis o nosso certificado

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

Agora vamos mandar visualizar a nossa chave

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")

Nós precisamos inserir a informação do domainkey no servidor 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")
[...]

Após isso precisamos reiniciar o serviço do bind

/etc/init.d/bind9 restart

Após isso já podemos testar a nossa chave DKIM

amavisd-new testkeys
TESTING#1: mail._domainkey.douglasqsantos.com.br   => pass

Agora vamos reiniciar o amavis

/etc/init.d/amavis restart

Agora vamos visualizar uma mensagem com o dkim

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.

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

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

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


STOP="apache2 saslauthd 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

Agora vamos criar um script levando em consideração que instalamos o dovecot.

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

Agora vamos acertar as permissões do script.

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

Agora para parar os serviços de email.

/etc/init.d/servmail.sh stop

Agora para iniciar os serviços de email.

/etc/init.d/servmail.sh start

Agora para reiniciar os serviços de email.

/etc/init.d/servmail.sh restart

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

Referências