Postfix + MySQL + Courier + MailScanner + MailWatch + Webmail AfterLogic + Postfixadmin + Quota + Debian Squeeze
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 -yAgora 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.patchA ú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.patchAgora 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
Comentar as linhas do arquivo “/etc/apt/sources.list” adicionadas para o download do postfix.
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 PostFix Admin
Obtendo o 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/pacotes/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
sed -i "s/change-this-to-your.domain.tld/douglasqsantos.com.br/g" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['configured'\] = false;/\$CONF\['configured'\] = true;/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['default_language'\] = 'en';/\$CONF\['default_language'\] = 'pt-br';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['database_user'\] = 'postfix';/\$CONF\['database_user'\] = 'mail';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['database_password'\] = 'postfixadmin';/\$CONF\['database_password'\] = '123';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['database_name'\] = 'postfix';/\$CONF\['database_name'\] = 'mail';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['domain_path'\] = 'NO';/\$CONF\['domain_path'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['domain_in_mailbox'\] = 'YES';/\$CONF\['domain_in_mailbox'\] = 'NO';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['quota'\] = 'NO';/\$CONF\['quota'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['transport'\] = 'NO';/\$CONF\['transport'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['vacation'\] = 'NO';/\$CONF\['vacation'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['emailcheck_resolve_domain'\]='YES';/\$CONF\['emailcheck_resolve_domain'\]='NO';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['used_quotas'\] = 'NO';/\$CONF\['used_quotas'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['new_quota_table'\] = 'NO';/\$CONF\['new_quota_table'\] = 'YES';/" /var/www/postfixadmin/config.inc.php sed -i "s/\$CONF\['maxquota'\] = '10';/\$CONF\['maxquota'\] = '10000';/" /var/www/postfixadmin/config.inc.php
Insira as configurações adicionais do vacation no final do arquivo config.inc.php
vim /var/www/postfixadmin/config.inc.php $CONF['transport_options'] = array ( 'virtual', for virtual accounts 'local', for system accounts 'vacation', for system accounts 'relay' for backup mx );
Reinicie o serviço do Apache
/etc/init.d/apache2 restart
Acesse pelo seu navegador o menu de configuração do PostfixAdmin para terminar a instalação pelo endereço: http://ip_servidor/postfixadmin/setup.php
- Na primeira tela ele irá fazer a verificação se todos os critérios para funcionar estão intalados e funcionando.
- No final da página, informe a senha para de acesso como administrador
Depois de alterada a senha, ele vai mostrar a linha com a senha, copie a linha e substitua a linha no arquivo config.inc.php
vim /var/www/postfixadmin/config.inc.php In order to setup Postfixadmin, you MUST specify a hashed password here. To create the hash, visit setup.php in a browser and type a password into the field, on submission it will be echoed out to you as a hashed value. #$CONF['setup_password'] = 'changeme'; $CONF['setup_password'] = '0faa114f15c60534ff34a8248dfaeafc:0c7fcd264027316b45619a99af58f25a1cb1b130';
Depois de alterado o arquivo, volte na tela do postfixadmin e informe o e-mail do aministrador e a senha, para testar a autenticação. Agora vamos continuar a nossa configuração.
Vacation
O Vacation funciona para gerenciar as mensagens de ausência ou ferias do usuários. Útil quando você sai de férias por exemplo e não vai ler e-mails por um tempo e deixa uma mensagem pré-definida com as informações sobre as pessoas que vão ser contactadas no tempo que você estará fora.
Preparando o ambiente:
Vamos criar o grupo e o usuário vacation
groupadd vacation useradd -d /var/spool/vacation -g vacation -s /bin/false -m vacationAgora 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 libmail-sender-perl 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.dominio.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.
Autenticação
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
Usuário do Postfix
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' ...
Modulos do postfix
Instalando os módulos do postfix
aptitude install postfix-policyd-spf-perl libsasl2-2 libsasl2-modules-sql -y chown -R vmail:postdrop /home/vmail
Ajustando configurações do Postfix
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, 172.31.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 header_checks = regexp:/etc/postfix/header_checks #-----------------------------END MAIN----------------------------------------- #-----------------------------SASL--------------------------------------------- smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_local_domain = $mydomain #----------------------------END SASL------------------------------------------ #-------------------------------TLS-------------------------------------------- smtp_tls_CAfile = /etc/postfix/ssl/cacert.pem smtp_tls_cert_file = /etc/postfix/ssl/smtpd.crt smtp_tls_key_file = /etc/postfix/ssl/smtpd.key smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtp_tls_security_level = may smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache smtpd_tls_dh1024_param_file = /etc/postfix/ssl/dh_1024.pem smtpd_tls_dh512_param_file = /etc/postfix/ssl/dh_512.pem smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_ask_ccert = yes smtpd_tls_loglevel = 1 tls_random_source = dev:/dev/urandom smtpd_enforce_tls = yes #-----------------------------END TLS-------------------------------------------- #--------------------------------MYSQL------------------------------------------- transport_maps = proxy:mysql:/etc/postfix/mysql_transport_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_transport = virtual virtual_minimum_uid = 107 virtual_uid_maps = static:107 virtual_gid_maps = static:107 virtual_mailbox_base = /home/vmail #-----------------------------END MYSQL------------------------------------------- #-----------------------------QUOTA----------------------------------------------- virtual_mailbox_limit = 51200000 virtual_mailbox_limit = 0 virtual_maildir_extended = yes virtual_mailbox_limit_override = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_overquota_bounce = yes virtual_maildir_limit_message = Desculpe, o diretorio de correio do usuario estourou sua quota, por favor tente novamente depois. #----------------------------END QUOTA------------------------------------------- #----------------------------CONTROLS-------------------------------------------- smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname, reject_unauth_pipelining smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_rbl_client dnsbl.sorbs.net, reject_rbl_client dnsbl.njabl.org, reject_rbl_client rbl.schulte.org, reject_rbl_client dnsbl.anticaptcha.net, reject_rbl_client bl.spamcannibal.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cart00ney.surriel.com, reject_rbl_client korea.services.net, reject_rbl_client cbl.abuseat.org, reject_unknown_client smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, 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-------------------------------------------
Vamos criar o arquivo necessário para para a checagem de Spam e AntiVirus.
echo "/^Received:/ HOLD" > /etc/postfix/header_checks
Geração das chaves para a conexão com TLS
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.keyAgora 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 = addressAqui 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 = usernameAqui 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 = 1Vamos 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-----------------------------------------------------
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.confVamos colocar o sasl no grupo do postfix
usermod -G sasl postfixAgora 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
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 linka /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
/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 Courier
aptitude install courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-authlib-mysql courier-authdaemon -y #Resposta 1) No 2) Ok
Agora vamos fazer backup dos arquivos de configuração do courier
cp /etc/courier/authdaemonrc{,.bkp} cp /etc/courier/authmysqlrc{,.bkp}
Agora vamos acertar o arquivo de conexão do Courier com o Mysql
vim /etc/courier/authmysqlrc MYSQL_SERVER localhost MYSQL_USERNAME mail MYSQL_PASSWORD 123 MYSQL_SOCKET /var/run/mysqld/mysqld.sock MYSQL_PORT 3306 MYSQL_OPT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD '107' MYSQL_GID_FIELD '107' MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD '/home/vmail' MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD CONCAT("/home/vmail/",maildir) MYSQL_QUOTA_FIELD concat(quota,'S')
Agora vamos acertar a configuração do serviço do Courier
vim /etc/courier/authdaemonrc authmodulelist="authmysql" authmodulelistorig="authmysql" daemons=5 authdaemonvar=/var/run/courier/authdaemon subsystem=mail DEFAULTOPTIONS="" LOGGEROPTS=""
Agora vamos acertar a configuração dos arquivos que vão gerar os nosso certificados para ssl.
Primeiro vamos editar o arquivo do imap
vim /etc/courier/imapd.cnf RANDFILE = /usr/lib/courier/imapd.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=BR ST=PR L=Curitiba O=Douglas Imap Server OU=Douglas IMAP SSL key CN=mail.douglasqsantos.com.br emailAddress=postmaster@douglasqsantos.com.br [ cert_type ] nsCertType = server
Agora vamos editar o arquivo do pop
vim /etc/courier/pop3d.cnf RANDFILE = /usr/lib/courier/pop3d.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=BR ST=PR L=Curitiba O=Douglas Pop Server OU=Douglas POP3 SSL key CN=mail.douglasqsantos.com.br emailAddress=postmaster@douglasqsantos.com.br [ cert_type ] nsCertType = server
Agora vamos fazer backup dos certificados antigos.
mv /etc/courier/pop3d.pem /etc/courier/pop3d.pem.bkp mv /etc/courier/imapd.pem /etc/courier/imapd.pem.bkp unlink /usr/lib/courier/pop3d.pem unlink /usr/lib/courier/imapd.pem
Agora vamos gerar o novo certificado para o Imap-ssl
mkimapdcert
Agora vamos gerar o novo certificado para o Pop-ssl
mkpop3dcert
Agora vamos acertar os links dos certificados do courier
ln -sf /usr/lib/courier/imapd.pem /etc/courier/imapd.pem ln -sf /usr/lib/courier/pop3d.pem /etc/courier/pop3d.pem
Agora é só reiniciar os serviços
/etc/init.d/courier-authdaemon restart /etc/init.d/courier-imap restart /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-pop restart /etc/init.d/courier-pop-ssl restart
Ajustando a forma de autenticação do POP3, IMAP e SMTP
vim /etc/pam.d/pop3 auth required pam_mysql.so user=mail passwd=123 host=localhost db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0 debug account sufficient pam_mysql.so user=mail passwd=123 host=localhost db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0 debug auth sufficient pam_unix.so debug account sufficient pam_unix.so debug
cp -Rfa /etc/pam.d/pop3 /etc/pam.d/imap cp -Rfa /etc/pam.d/pop3 /etc/pam.d/smtpAnti-Virus
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 clamav-freshclam clamav-daemon spamassassin postgrey libpathtools-perl mailscanner -y
Instalando suporte a razor e pyzor
apt-get install libnet-dns-perl razor pyzor -y
Acertando as configurações do razor e do pyzor
razor-admin -d --create razor-admin -register razor-admin -discover 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
cp /etc/spamassassin/local.cf{,.bkp}
Acertando o SpamAssassin
vim /etc/spamassassin/local.cf #-------------------------GLOBAL---------------------------------------- rewrite_header Subject *****SPAM***** report_safe 0 trusted_networks 10.0.0. 172.31.0. required_score 2.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status ifplugin Mail::SpamAssassin::Plugin::Shortcircuit shortcircuit USER_IN_WHITELIST on shortcircuit USER_IN_DEF_WHITELIST on shortcircuit USER_IN_ALL_SPAM_TO on shortcircuit SUBJECT_IN_WHITELIST on shortcircuit USER_IN_BLACKLIST on shortcircuit USER_IN_BLACKLIST_TO on shortcircuit SUBJECT_IN_BLACKLIST on shortcircuit ALL_TRUSTED on shortcircuit BAYES_99 spam shortcircuit BAYES_00 ham endif #-------------------------END GLOBAL------------------------------------ #-------------------------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 vamos reiniciar o SpamAssassin
/etc/init.d/spamassassin restart
Configurando o Postgrey
Vamos fazer backup do arquivo de configuração
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."
Vamos acertar a configuração do MailScanner
vim /etc/MailScanner/MailScanner.conf [...] %org-name% = Douglas [...] %org-long-name% = Douglas Quintiliano dos Santos [...] %web-site% = wiki.douglasqsantos.com.br [...] %report-dir% = /usr/local/share/MailScanner/reports/pt_br [...] Run As User = postfix [...] Run As Group = postfix [...] Incoming Queue Dir = /var/spool/postfix/hold [...] Outgoing Queue Dir = /var/spool/postfix/incoming [...] MTA = postfix [...] Virus Scanners = clamav [...] Virus Subject Text = ***VIRUS*** [...] Filename Subject Text = ***ARQUIVO BLOQUEADO*** [...] Content Subject Text = ***CONTEUDO PERIGOSO*** [...] Size Subject Text = ***TAMANHO ALTERADO*** [...] Disarmed Modify Subject = no [...] Phishing Modify Subject = start [...] Phishing Subject Text = ***FRAUDE*** [...] Spam Subject Text = ***SPAM*** [...] High Scoring Spam Subject Text = ***SPAM*** [...] Rebuild Bayes Every = 86400 [...] Wait During Bayes Rebuild = yes [...] Log Spam = yes [...] Is Definitely Not Spam = &SQLWhitelist [...] Is Definitely Spam = &SQLBlacklist [...] Always Looked Up Last = &MailWatchLogging [...] Detailed Spam Report = yes [...] Quarantine Whole Message = yes [...] Quarantine Whole Message As Queue Files = no [...] Include Scores In SpamAssassin Report = yes [...] Quarantine User = postfix [...] Quarantine Group = www-data [...] Quarantine Permissions = 0660 [...] Scan Messages = %rules-dir%/scan.messages.rules [...] Required SpamAssassin Score = 6.03 [...] Spam Score Number Format = %5.2f [...] #include /etc/MailScanner/conf.d/*
Agora vamos criar o arquivo que controla os domínios que vão ser verificados pelo MailScanner.
vim /etc/MailScanner/rules/scan.messages.rules To: douglasqsantos.com.br no From: douglasqsantos.com.br no FromOrTo: default yes
Aqui estamos definindo que não vão ser verificadas as mensagens de destino ou origem douglasqsantos.com.br, qualquer outro domínio vai ser checado por padrão.
Agora vamos habilitar ele para inicializar no boot.
sed -i "s/#run_mailscanner=1/run_mailscanner=1/g" /etc/default/mailscanner
Vamos acertar mais um arquivo do MailScanner
sed -i "s|#!/usr/bin/perl -I/usr/share/MailScanner/|#!/usr/bin/perl -U -I/usr/share/MailScanner/|g" /usr/sbin/MailScanner
Acertar a configuração do SpamAssasin com MailScanner
vim /etc/MailScanner/spam.assassin.prefs.conf [...] bayes_path /etc/MailScanner/bayes/bayes bayes_file_mode 0660
Agora temos que acertar os diretórios
mkdir /etc/MailScanner/bayes chown postfix:www-data /etc/MailScanner/bayes chmod g+rws /etc/MailScanner/bayes
Agora vamos acertar a permissão da Quarentena
chown -R postfix:www-data /var/spool/MailScanner/quarantine chmod -R 770 /var/spool/MailScanner/quarantine
Agora vamos instalar o MailWatch que é uma interface Web para monitorarmos os nossos Emails Scaneados pelo MailScanner.
Vamos instalar os pacotes necessários.
aptitude install apache2 php5-cli php5 mysql-server libdbd-mysql-perl php5-gd php5-mysql libapache2-mod-php5 -y
Agora vamos obter o nosso MailWatch
cd /usr/src/ wget -c http://wiki.douglasqsantos.com.br/pacotes/mailwatch-1.0.5.tar.gz
Agora vamos desempacotar e acessar ele.
tar zxvf mailwatch-1.0.5.tar.gz && cd mailwatch-1.0.5
Agora vamos importar o banco de dados.
mysql -u root -p < create.sql
Agora Vamos acertar as permissões do banco de dados do mailscanner.
mysql -u root -p GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY '123'; GRANT file ON *.* TO mailwatch@localhost IDENTIFIED BY '123'; FLUSH PRIVILEGES;
Agora vamos acertar a configuração do MailWatch.
cd /usr/src/mailwatch-1.0.5 sed -i "s/my(\$db_user) = 'root';/my(\$db_user) = 'mailwatch';/g" MailWatch.pm sed -i "s/my(\$db_pass) = '';/my(\$db_pass) = '123';/g" MailWatch.pm sed -i "s/my(\$db_user) = 'root';/my(\$db_user) = 'mailwatch';/g" SQLBlackWhiteList.pm sed -i "s/my(\$db_pass) = '';/my(\$db_pass) = '123';/g" SQLBlackWhiteList.pm sed -i "s/INTERVAL 60 DAY/INTERVAL 30 DAY/g" tools/db_clean.php sed -i "s|require_once('/var/www/html/mailscanner/functions.php')|require_once('/var/www/mailwatch/functions.php')|g" tools/quarantine_report.php sed -i "s|require('/var/www/html/mailscanner/functions.php')|require('/var/www/mailwatch/functions.php')|g" tools/db_clean.php sed -i "s|require('/var/www/html/mailscanner/functions.php')|require('/var/www/mailwatch/functions.php')|g" tools/quarantine_maint.php
Agora temos que acertar a localização do arquivo que insere as estatísticas do Mailscanner no Banco.
cd /usr/src/mailwatch-1.0.5 cp -Rf MailWatch.pm /usr/share/MailScanner/MailScanner/CustomFunctions/ cp -Rf SQLBlackWhiteList.pm /usr/share/MailScanner/MailScanner/CustomFunctions/ cp -Rf tools/db_clean.php /etc/cron.daily/ cp -Rf tools/quarantine_maint.php /etc/cron.daily/ cp -Rf tools/quarantine_report.php /etc/cron.daily/
Agora vamos acertar a permissão dos arquivo do cron
chmod 755 /etc/cron.daily/{db_clean.php,quarantine_maint.php,quarantine_report.php}Agora vamos inserir o nosso usuário admin do MailWatch no banco de dados, vou inserir o usuário admin com a senha 123.
mysql -u root -p mailscanner -e "INSERT INTO users VALUES ('mailwatch',md5('123'),'Administrator name','A','0','0','0','0','0');"
Agora vamos copiar o mailscanner para o /var/www/mailwatch
cp -Rf mailscanner/ /var/www/mailwatch
Agora vamos acertar as permissões do mailwatch
cd /var/www/mailwatch find . -type f -exec chmod 664 {} \; find . -type d -exec chmod 775 {} \; chown -R www-data:www-data /var/www/mailwatch chmod -R 777 temp images/cache
Agora vamos fazer mais uns ajuste na configuração do mailwatch
cd /var/www/mailwatch/ mv conf.php.example conf.php
Agora vamos acertar a configuração da conexão do mailwatch com o banco
cd /var/www/mailwatch sed -i "s/define('DB_USER', 'root');/define('DB_USER', 'mailwatch');/g" conf.php sed -i "s/define('DB_PASS', '');/define('DB_PASS', '123');/g" conf.php sed -i "s|define('MAILWATCH_HOME', '/var/www/html/mailscanner');|define('MAILWATCH_HOME', '/var/www/mailwatch');|g" conf.php sed -i "s|define('QUARANTINE_USE_FLAG', false)|define('QUARANTINE_USE_FLAG', true)|g" conf.php sed -i "s|ini_set('include_path','.:'.MAILWATCH_HOME.'/pear:'.MAILWATCH_HOME.'/fpdf:'.MAILWATCH_HOME.'/xmlrpc');|ini_set('include_path','.:'.MAILWATCH_HOME.'/pear:'.MAILWATCH_HOME.'/fpdf:'.MAILWATCH_HOME.'/xmlrpc:/usr/share/php');|g" functions.php
Agora vamos instalar alguns módulos pear necessários.
pear install DB pear install DB_Pager pear install Mail_mimeDecode
Configurando o fetchmail para o postfixadmin
apt-get install fetchmail liblockfile-simple-perl -y mkdir /var/run/fetchmail touch /var/run/fetchmail/fetchmail-all.lockVamos 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.
Agora vamos fazer uns acertos 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 [...]
Reiniciando 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/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 /etc/init.d/mailscanner restart /etc/init.d/apache2 restart /etc/init.d/mysql restart
Verificando se os serviços estão sendo executados:
nmap -sS -T4 localhost Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-31 16:26 BRT Interesting ports on localhost (127.0.0.1): Not shown: 988 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 Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds
Agora em http://ip_servidor/postfixadmin crie um usuário para teste e continue com a configuração do maia pois sem um usuário cadastrado no sistema não vamos poder continuar os testes.
Na tela web informe o usuário e a senha, agora selecione o dominio douglasqsantos.com.br e selecione criar conta, agora informe o nome dela uma senha e confirme e selecione criar conta.
Nos logs vai ter que aparecer algo como abaixo.
tail -f /var/log/mail.log May 31 16:33:51 mail postfix/smtpd[26360]: connect from localhost[127.0.0.1] May 31 16:33:51 mail postfix/smtpd[26360]: 510F82CA62: client=localhost[127.0.0.1] May 31 16:33:51 mail postfix/cleanup[26362]: 510F82CA62: hold: header Received: from 10.101.0.20 (localhost [127.0.0.1])??by mail.douglas.lan (Postfix) with ESMTP id 510F82CA62??for <maria@douglas.lan>; Thu, 31 May 2012 16:33:51 -0300 (BRT) from localhost[127.0.0.1]; from=<admin@douglas.lan> to=<maria@douglas.lan> proto=ESMTP helo=<10.101.0.20> May 31 16:33:51 mail postfix/cleanup[26362]: 510F82CA62: message-id=<20120531193351.510F82CA62@mail.douglas.lan> May 31 16:33:51 mail postfix/smtpd[26360]: disconnect from localhost[127.0.0.1] May 31 16:33:55 mail MailScanner[26321]: New Batch: Scanning 1 messages, 1106 bytes May 31 16:33:55 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:34:00 mail MailScanner[26321]: Spam Checks: Starting May 31 16:34:00 mail MailScanner[26321]: SpamAssassin cache hit for message 510F82CA62.AEB0C May 31 16:34:01 mail MailScanner[26321]: Requeue: 510F82CA62.AEB0C to 82C2A2CA63 May 31 16:34:01 mail MailScanner[26321]: Uninfected: Delivered 1 messages May 31 16:34:01 mail postfix/qmgr[26296]: 82C2A2CA63: from=<admin@douglas.lan>, size=480, nrcpt=1 (queue active) May 31 16:34:01 mail postfix/virtual[26358]: 82C2A2CA63: to=<maria@douglas.lan>, relay=virtual, delay=9.9, delays=9.8/0.04/0/0.04, dsn=2.0.0, status=sent (delivered to maildir) May 31 16:34:01 mail postfix/qmgr[26296]: 82C2A2CA63: removed May 31 16:34:01 mail MailScanner[26321]: Deleted 1 messages from processing-database
Agora vamos verificar se o nosso mailscanner está sabendo identificar virus e Spam, vamos testar primeiro o SPAM.
Vamos enviar uma mensagem de Spam para o usuário maria.
mail -s "Teste" maria@douglas.lan < /usr/share/doc/spamc/sample-spam.txt
Agora vamos verificar os logs.
tail -f /var/log/mail.log May 31 16:42:07 mail postfix/pickup[26295]: 959462CA63: uid=0 from=<root> May 31 16:42:07 mail postfix/cleanup[26460]: 959462CA63: hold: header Received: by mail.douglas.lan (Postfix, from userid 0)??id 959462CA63; Thu, 31 May 2012 16:42:07 -0300 (BRT) from local; from=<root@mail.douglas.lan> to=<maria@douglas.lan> May 31 16:42:07 mail postfix/cleanup[26460]: 959462CA63: message-id=<20120531194207.959462CA63@mail.douglas.lan> May 31 16:42:08 mail MailScanner[26321]: New Batch: Scanning 1 messages, 1336 bytes May 31 16:42:08 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:42:12 mail MailScanner[26321]: Spam Checks: Starting May 31 16:42:12 mail MailScanner[26321]: SpamAssassin cache hit for message 959462CA63.A9757 May 31 16:42:12 mail MailScanner[26321]: Message 959462CA63.A9757 from 127.0.0.1 (root@mail.douglas.lan) to douglas.lan is spam, SpamAssassin (cached, escore=999.999, requerido 6, GTUBE 1000.00, NO_RELAYS -0.00) May 31 16:42:12 mail MailScanner[26321]: Spam Checks: Found 1 spam messages May 31 16:42:12 mail MailScanner[26321]: Spam Actions: message 959462CA63.A9757 actions are store May 31 16:42:12 mail MailScanner[26321]: Deleted 1 messages from processing-database
Agora vamos mandar uma mensagem que não pode ser identificada como Spam.
gunzip /usr/share/doc/spamc/sample-nonspam.txt.gz mail -s "Teste" maria@douglas.lan < /usr/share/doc/spamc/sample-nonspam.txt
Agora vamos verificar os logs.
tail -f /var/log/mail.log May 31 16:45:30 mail postfix/pickup[26295]: 3B5072CA63: uid=0 from=<root> May 31 16:45:30 mail postfix/cleanup[26574]: 3B5072CA63: hold: header Received: by mail.douglas.lan (Postfix, from userid 0)??id 3B5072CA63; Thu, 31 May 2012 16:45:30 -0300 (BRT) from local; from=<root@mail.douglas.lan> to=<maria@douglas.lan> May 31 16:45:30 mail postfix/cleanup[26574]: 3B5072CA63: message-id=<20120531194530.3B5072CA63@mail.douglas.lan> May 31 16:45:36 mail MailScanner[26321]: New Batch: Scanning 1 messages, 7151 bytes May 31 16:45:36 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:45:39 mail MailScanner[26321]: Spam Checks: Starting May 31 16:45:44 mail MailScanner[26321]: Requeue: 3B5072CA63.AA6EA to EFD8A2CA62 May 31 16:45:44 mail MailScanner[26321]: Uninfected: Delivered 1 messages May 31 16:45:44 mail postfix/qmgr[26296]: EFD8A2CA62: from=<root@mail.douglas.lan>, size=6932, nrcpt=1 (queue active) May 31 16:45:44 mail MailScanner[26321]: Deleted 1 messages from processing-database May 31 16:45:44 mail postfix/virtual[26587]: EFD8A2CA62: to=<maria@douglas.lan>, relay=virtual, delay=15, delays=14/0.15/0/0.03, dsn=2.0.0, status=sent (delivered to maildir) May 31 16:45:44 mail postfix/qmgr[26296]: EFD8A2CA62: removed
Como pode ser notado a mensagem passou normalmente, agora vamos testar a verificação de Virus.
Vamos criar o nosso arquivo
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/arquivo.doc
Agora vamos enviar ele para a usuário maria.
mail -s "Arquivo Doc" maria@douglas.lan < /tmp/arquivo.doc
Agora vamos ver os logs de Email
tail -f /var/log/mail.log May 31 16:48:48 mail postfix/pickup[26295]: BB6842CA63: uid=0 from=<root> May 31 16:48:48 mail postfix/cleanup[26604]: BB6842CA63: hold: header Received: by mail.douglas.lan (Postfix, from userid 0)??id BB6842CA63; Thu, 31 May 2012 16:48:48 -0300 (BRT) from local; from=<root@mail.douglas.lan> to=<maria@douglas.lan> May 31 16:48:48 mail postfix/cleanup[26604]: BB6842CA63: message-id=<20120531194848.BB6842CA63@mail.douglas.lan> May 31 16:48:50 mail MailScanner[26321]: New Batch: Scanning 1 messages, 587 bytes May 31 16:48:50 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:48:53 mail MailScanner[26321]: ./BB6842CA63.A9E9B/msg-26321-8.txt: Eicar-Test-Signature FOUND May 31 16:48:53 mail MailScanner[26321]: Virus Scanning: ClamAV found 1 infections May 31 16:48:53 mail MailScanner[26321]: Infected message BB6842CA63.A9E9B came from 127.0.0.1 May 31 16:48:53 mail MailScanner[26321]: Virus Scanning: Found 1 viruses May 31 16:48:53 mail MailScanner[26321]: Saved infected "msg-26321-8.txt" to /var/spool/MailScanner/quarantine/20120531/BB6842CA63.A9E9B May 31 16:48:53 mail MailScanner[26321]: Spam Checks: Starting May 31 16:48:55 mail MailScanner[26321]: Requeue: BB6842CA63.A9E9B to 9114A2CA62 May 31 16:48:55 mail postfix/qmgr[26296]: 9114A2CA62: from=<root@mail.douglas.lan>, size=367, nrcpt=1 (queue active) May 31 16:48:55 mail MailScanner[26321]: Cleaned: Delivered 1 cleaned messages May 31 16:48:55 mail postfix/pickup[26295]: A8D542CA64: uid=104 from=<postmaster> May 31 16:48:55 mail postfix/cleanup[26604]: A8D542CA64: hold: header Received: by mail.douglas.lan (Postfix, from userid 104)??id A8D542CA64; Thu, 31 May 2012 16:48:55 -0300 (BRT) from local; from=<postmaster@mail.douglas.lan> May 31 16:48:55 mail postfix/cleanup[26604]: A8D542CA64: message-id=<20120531194855.A8D542CA64@mail.douglas.lan> May 31 16:48:55 mail postfix/virtual[26617]: 9114A2CA62: to=<maria@douglas.lan>, relay=virtual, delay=7.2, delays=6.9/0.04/0/0.22, dsn=2.0.0, status=sent (delivered to maildir) May 31 16:48:55 mail postfix/qmgr[26296]: 9114A2CA62: removed May 31 16:48:55 mail MailScanner[26321]: Notices: Warned about 1 messages May 31 16:48:55 mail MailScanner[26321]: Deleted 1 messages from processing-database May 31 16:48:55 mail MailScanner[26321]: New Batch: Scanning 1 messages, 1362 bytes May 31 16:48:56 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:48:59 mail MailScanner[26321]: Spam Checks: Starting May 31 16:49:01 mail MailScanner[26321]: Requeue: A8D542CA64.A1BB0 to 2B6ED2CA62 May 31 16:49:01 mail postfix/qmgr[26296]: 2B6ED2CA62: from=<postmaster@mail.douglas.lan>, size=1126, nrcpt=1 (queue active) May 31 16:49:01 mail MailScanner[26321]: Uninfected: Delivered 1 messages May 31 16:49:01 mail MailScanner[26321]: Deleted 1 messages from processing-database May 31 16:49:01 mail postfix/cleanup[26604]: 6C10A2CA63: message-id=<20120531194855.A8D542CA64@mail.douglas.lan> May 31 16:49:01 mail postfix/qmgr[26296]: 6C10A2CA63: from=<postmaster@mail.douglas.lan>, size=1562, nrcpt=1 (queue active) May 31 16:49:01 mail postfix/local[26630]: 2B6ED2CA62: to=<postmaster@mail.douglas.lan>, orig_to=<postmaster>, relay=local, delay=5.8, delays=5.6/0.14/0/0.04, dsn=2.0.0, status=sent (forwarded as 6C10A2CA63) May 31 16:49:01 mail postfix/qmgr[26296]: 2B6ED2CA62: removed May 31 16:49:01 mail postfix/virtual[26617]: 6C10A2CA63: to=<douglas@douglas.lan>, orig_to=<postmaster>, relay=virtual, delay=0.13, delays=0.04/0/0/0.09, dsn=2.0.0, status=sent (delivered to maildir) May 31 16:49:01 mail postfix/qmgr[26296]: 6C10A2CA63: removed
Como pode ser verificado o Email foi reconhecido como um Vírus.
Vamos fazer teste de autenticação
testsaslauthd -u douglas@douglasqsantos.com.br -p doug123 0: OK "Success."
Agora vamos fazer um teste com o pop3
telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there. user maria@douglas.lan +OK Password required. pass doug123 +OK logged in. quit +OK Bye-bye. Connection closed by foreign host.
Vamos fazer um teste de 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 maria@douglas.lan doug123 a OK LOGIN Ok. a logout * BYE Courier-IMAP server shutting down a OK LOGOUT completed Connection closed by foreign host.
Agora vamos a um teste de envio de email
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 PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN mail from: <maria@douglasqsantos.com.br> 250 2.1.0 Ok rcpt to: <maria@douglasqsantos.com.br> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> Teste De envio de Email por Telnet . 250 2.0.0 Ok: queued as A134C2CA65 quit 221 2.0.0 Bye Connection closed by foreign host.
Vamos ver os logs
tail -f /var/log/mail.log May 31 16:55:24 mail postfix/smtpd[26809]: A134C2CA65: client=localhost[127.0.0.1] May 31 16:55:43 mail postfix/cleanup[26812]: A134C2CA65: hold: header Received: from mail.douglas.lan (localhost [127.0.0.1])??by mail.douglas.lan (Postfix) with ESMTP id A134C2CA65??for <maria@douglas.lan>; Thu, 31 May 2012 16:55:13 -0300 (BRT) from localhost[127.0.0.1]; from=<maria@douglas.lan> to=<maria@douglas.lan> proto=ESMTP helo=<mail.douglas.lan> May 31 16:55:43 mail postfix/cleanup[26812]: A134C2CA65: message-id=<20120531195524.A134C2CA65@mail.douglas.lan> May 31 16:55:45 mail postfix/smtpd[26809]: disconnect from localhost[127.0.0.1] May 31 16:55:49 mail MailScanner[26321]: New Batch: Scanning 1 messages, 966 bytes May 31 16:55:49 mail MailScanner[26321]: Virus and Content Scanning: Starting May 31 16:55:52 mail MailScanner[26321]: Spam Checks: Starting May 31 16:55:59 mail MailScanner[26321]: Requeue: A134C2CA65.AE38F to 048F82CA66 May 31 16:55:59 mail MailScanner[26321]: Uninfected: Delivered 1 messages May 31 16:55:59 mail postfix/qmgr[26296]: 048F82CA66: from=<maria@douglas.lan>, size=345, nrcpt=1 (queue active) May 31 16:55:59 mail MailScanner[26321]: Deleted 1 messages from processing-database May 31 16:55:59 mail postfix/virtual[26822]: 048F82CA66: to=<maria@douglas.lan>, relay=virtual, delay=46, delays=46/0.29/0/0.11, dsn=2.0.0, status=sent (delivered to maildir) May 31 16:55:59 mail postfix/qmgr[26296]: 048F82CA66: removed
Vamos acessar o nosso MailWatch Em http://ip_servidor/mailwatch usuário: mailwatch senha: 123
- Na página inícial do MailWatch selecione Tools/Links
- Agora selecione Update GeoIP Database
- Agora selecione Run Now, com isso vamos atualizar a base dos endereços ips por localização.
Agora é so acompanhar os logs e bloquear o que for necessário.
Configurando o Webmail
Vamos obter ele e desempacotar
mkdir /var/www/webmail cd /var/www/webmail wget -c http://wiki.douglasqsantos.com.br/pacotes/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/
- Nesta página inicial de instalação os requisitos devem estar todos em Verde, no final da página selecione Next.
- Agora leia o termo de licença e selecione I Agree para continuar.
- Agora aqui nesta tela temos que informar:
- SQL login: webmail
- SQL password: senha
- Database name: webmail
- Host: localhost
- Agora selecione Test database, o resultado deve ser Connected successfully se os dados estiverem corretos.
- Deixe selecionado Create Database Tables.
- Agora selecione Next.
- Agora precisamos informar a senha e confirmar para o nosso mailadm que vai poder gerenciar a configuração global do nosso webmail.
- Agora selecione Next.
- Agora vamos selecionar os protocolos que o nosso webmail vai utilizar, vou selecionar SMTP e IMAP4.
- Agora selecione Test connection, caso tenha sucesso vai aparecer: SMTP connection to port 25 successful, sending outgoing e-mail over SMTP should work, IMAP connection to port 143 successful, checking and downloading incoming e-mail over IMAP should work.
- Agora selecione Next.
- Agora nós fomos redirecionados para uma página sobre a conclusão da nossa instalação. Volte a instalação do nosso webmail.
- Agora selecione Exit
Agora precisamos excluir a pasta install do nosso webmail.
rm -rf /var/www/webmail/install/
Vamos acertar o arquivo /etc/php5/apache2/php.ini
vim /etc/php5/apache2/php.ini [...] 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}
vim /etc/default/knockd Vamos editar o arquivo e liberar para qual interface ele vai ficar escutando 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
Agora vamos acertar os Virtuals Host para os nossos serviços trabalharem 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 mailwatch.douglasqsantos.com.br mailwatch 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 configurar o virtual host do mailwatch
vim /etc/apache2/sites-available/mailwatch <VirtualHost *:80> ServerName mailwatch.douglasqsantos.com.br Redirect / https://mailwatch.douglasqsantos.com.br/ </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@douglasqsantos.com.br ServerName mailwatch.douglasqsantos.com.br DocumentRoot "/var/www/mailwatch" <Directory "/var/www/mailwatch"> 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/maia.access.log combined ErrorLog /var/log/apache2/maia.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 nosso virtual host do mailwatch
a2ensite mailwatch
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
- Webmail em http://webmail.douglasqsantos.com.br
- Postfixadmin em http://postfixadmin.douglasqsantos.com.br
- MailWatch em http://mailwatch.douglasqsantos.com.br
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
- Sim.
- Ok
- não
Aqui no caso do isoqlog temos que executar /usr/bin/isoqlog para ele gerar os nossos relátorios ele ta no cron.daily então ele vai ser executado uma vez por dia.
No meu ponto de vista acho interresante executar ele a cada hora então podemos mudar ele.
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
- Isoqlog em http://isoqlog.douglasqsantos.com.br
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 restartVamos 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
ln -sf /var/cache/munin/www monitor
Agora só reiniciar o apache
/etc/init.d/apache2 restart
Agora para acessar o nosso monitor é só acessar
- Munin em http://monitor.douglasqsantos.com.br
Aqui vamos ter as estatísticas do nosso servidor de vários fatores.
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 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
- http://www.afterlogic.com/wiki/Installation_Instructions_for_Linux_(WebMail_Lite_6_PHP)