centos

Atualização do Zimbra para a versão 6

A alguns dias atrás, foi lançada a versão 6 do Zimbra, para atualizar da versão 5 para a 6, o processo é relativamente simples.
Dando continuidade ao howto que escrevi anteriormente, vou descrever os passos necessários para atualizar o zimbra.

Dependências:
O “Zimbra 6″ requer a instalação um pacote novo: sysstat
# yum install sysstat

Download:
Entre em http://www.zimbra.com/community/downloads.html e baixe versão mais atual do zimbra.

Atualização:
# tar xvfz zcs-6
# cd zcs-6
(No CentOS 5.x ou outra distro não listada)
# ./install --plataform-override
(Outra distro suportada oficialmente)
# ./install

Responda as perguntas que aparecem na tela, caso encontre algum erro, corrija-o antes de prosseguir.

HOWTO: ISPConfig 3.x no CentOS 5.x

O ISPConfig é uma ótima ferramenta Open Source para gerenciamento completo de um servidor de Web Hosting. Ele possui ferramentas que abrangem todos os itens indispensáveis para este tipo de serviço, como emails, web, ftp, dns, mysql, revendedores (reseller), painel administrativo para o usuário gerenciar o seu domínio, etc.. é sem dúvidas, uma ótima alternativa ao cPanel WHM.

Instale o repositório rpmforge de acordo com este guia: Adicionando o repositório rpmforge no CentOS 5.X

Pré ajustes

  • Desabilite o Selinux
  • Desabilite o firewall do CentOS
  • Ambos podem ser desabilitados através do menu “setup” – no item “firewall”.

    Preparando o servidor e instalando as dependências:
    # yum remove sendmail
    # yum update
    # yum install amavisd-new bzip2 clamav clamav-data clamav-server clamav-update clamd curl curl-devel cyrus-sasl-devel expect gamin-devel gcc gcc-c++ gdbm-devel getmail httpd imagemagick libtool libtool-ltdl-devel libxml2 libxml2-devel mysql-devel mysql-server ntp openldap-devel openldap-servers openssl-devel pam-devel pcre-devel perl-datetime-format-builder perl-datetime-format-http perl-dbd-mysql perl-libwww-perl php php-bcmath php-common php-devel php-eaccelerator php-gd php-imap php-ldap php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql phpmyadmin php-mysql php-odbc php-pear php-shout php-snmp php-soap php-tidy php-xml php-xmlrpc pkgconfig postfix postgresql-devel pure-ftpd quota redhat-rpm-config rpm-build spamassassin squirrelmail subversion unrar unzip webalizer zlib-devel -y

    Para facilitar a sua vida, reuni a instalação de todos os pacotes necessários em apenas um “yum install”, assim você pode ir tomar um café e fumar um cigarro tranquilamente enquanto o yum trabalha ;)

    Instalando serviços que não estão disponíveis nos repositórios:
    # cd /usr/src
    mydns:
    # wget http://mydns.bboy.net/download/mydns-mysql-1.1.0-1.i386.rpm
    # rpm -ivh mydns-mysql-1.1.0-1.i386.rpm

    vlogger:
    # wget http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz
    # tar xvfz vlogger-1.3.tar.gz
    # mv vlogger-1.3/vlogger /usr/sbin/

    Courier
    Por uma exigência do courier-imap, este não pode ser compilado utilizando o usuário root, portanto, iremos criar um usuário apenas para criar os pacotes rpm, não esqueça de remove-lo no final.

    # useradd -m -s /bin/bash rpmbuilduser
    # passwd rpmbuilduser

    Edite o arquivo /etc/sudoers e adicione na última linha:
    rpmbuilduser ALL=(ALL) ALL

    Faça o download dos pacotes do courier:
    # wget http://sourceforge.net/projects/courier/files/courier-authlib/courier-authlib-0.62.4.tar.bz2
    # wget http://sourceforge.net/projects/courier/files/courier-imap/courier-imap-4.5.1.tar.bz2
    # wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2

    Alterne para o usuário “rpmbuilder” e prepare o ambiente para gerar os arquivos rpm
    # su rpmbuilduser

    # mkdir $HOME/rpm
    # mkdir $HOME/rpm/SOURCES
    # mkdir $HOME/rpm/SPECS
    # mkdir $HOME/rpm/BUILD
    # mkdir $HOME/rpm/SRPMS
    # mkdir $HOME/rpm/RPMS
    # mkdir $HOME/rpm/RPMS/i386
    # mkdir $HOME/rpm/RPMS/x86_64

    # echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

    Crie os rpms do courier-authlib e instale os pacotes requeridos pelo ISPConfig
    # rpmbuild -ta courier-authlib-0.62.4.tar.bz2
    # sudo rpm -ivh /home/rpmbuilduser/rpm/RPMS/i386/courier-authlib-0.62.4-1.i386.rpm
    # sudo rpm -ivh /home/rpmbuilduser/rpm/RPMS/i386/courier-authlib-mysql-0.62.4-1.i386.rpm
    # sudo rpm -ivh /home/rpmbuilduser/rpm/RPMS/i386/courier-authlib-devel-0.62.4-1.i386.rpm

    Mesmo procedimento com o courier-imap
    # rpmbuild -ta courier-imap-4.5.1.tar.bz2
    # sudo rpm -ivh /home/rpmbuilduser/rpm/RPMS/i386/courier-imap-4.5.1-1.i386.rpm

    E finalmente o maildrop…
    # rpmbuild -ta maildrop-2.0.4.tar.bz2
    # sudo rpm -ivh /home/rpmbuilduser/rpm/RPMS/i386/maildrop-2.0.4-1.i386.rpm

    Opcionalmente, volte para o usuário root, copie os rpms para /usr/src e delete o usuário rpmbuilder
    # exit
    # mv /home/rpmbuilduser/rpm/ /usr/src/
    # userdel -r rpmbuilduser

    Edite novamente o arquivo /etc/sudoers e remova a linha adicionada anteriormente.

    Atualize o clam
    /usr/bin/freshclam

    Ative o sistema de quotas
    Edite o arquivo /etc/fstab e na linha referente a partição em que as quotas devem ser acionadas, adicione as opções “,usrquota,grpquota“:
    Exemplo:
    /dev/sda3 / ext3 defaults,usrquota,grpquota 1 1
    Para ativar o sistema de quota (assumindo que você está utilizando quota na /)
    # touch /aquota.user /aquota.group
    # chmod 600 /aquota*
    # mount -o remount /
    # quotacheck -avugm
    # quotaon -avug

    Agora que todos os serviços estão instalados, inicialize eles e verifique se todos subiram corretamente.
    # service amavisd start
    # service clamd start
    # service courier-authlib start
    # service courier-imap restart
    # service httpd start
    # service mydns start
    # service mysqld start
    # service postfix start
    # service pure-ftpd start
    # service saslauthd start

    Altere o runlevel dos serviços utilizados para que estes inicializem durante o boot:
    # chkconfig --level 345 amavisd on
    # chkconfig --level 345 clamd on
    # chkconfig --level 345 courier-authlib on
    # chkconfig --level 345 courier-imap on
    # chkconfig --level 345 httpd on
    # chkconfig --level 345 mydns on
    # chkconfig --level 345 mysqld on
    # chkconfig --level 345 postfix on
    # chkconfig --level 345 pure-ftpd on
    # chkconfig --level 345 saslauthd on

    Defina uma senha de root para o banco mysql:
    # mysqladmin -u root password senhacomplexa (mas é complexa mesmo viu?)

    Nesta altura, todas as dependências e serviços que o ISPConfig estão instalados e rodando corretamente, então podemos inicializar a instalação.

    Download do ISPConfig
    # cd /usr/src
    # wget http://www.ispconfig.org/downloads/ISPConfig-3.0.1.x.tar.gz

    Descompacte e rode o script de instalação
    # tar xvfz ISPConfig-3.0.1.x.tar.gz
    # cd ispconfig3_install/install/
    # php -q install.php

    Quando você executar o install.php, você precisará responder algumas perguntas específicas do seu servidor, para a maioria delas, uma resposta satisfatória já vem definida.
    Durante a execução deste script, todos os serviços serão configurados automagicamente de acordo com as especificações do ISPConfig. Não será necessário editar nenhum arquivo manualmente.

    Após rodar o script de instalação, acesse o painel do ISPConfig em http://ipdoservidor:8080 e entre com o usuário admin senha admin (mude imediatamente esta senha)

    Observação: Durante o yum inicial, você realizou a instalação do squirrel e este encontra-se disponível em http://ipdoservidor/webmail ;)

    Pronto, seu ISPConfig deve estar completamente instalado, agora basta dedicar um pouco de tempo para configurar de acordo com as suas necessidades.

    Se você chegou neste post procurando uma alternativa para o cPanel e por algum motivo não gostou do ISPConfig, cito algumas outras opções que podem agradar:

    Domain Technologie Control
    ispCPOmega – (Fork do VHCS) – Demo – admin / admin123
    RavenCoreDemo – Login: admin / ravencore
    GNUPanel
    Virtualmin GPL

    Adicionando o repositório rpmforge no CentOS 5.X

    Muitos pacotes não estão disponíveis nos repositórios oficiais do CentOS, entretanto existem diversos repositórios de terceiros que cobrem esta lacuna, um dos repositórios mais famosos é o rpmforge. Neste post explico como realizar a instalação deste repositório no CentOS 5.x.

    Instale o pacote yum priorities com o comando:
    # yum install yum-priorities
    O objetivo do priorities é priorizar pacotes dos repositórios oficiais do CentOS, ou seja, se um pacote existir no rpmforge e no repositório oficial será instalada a versão do repositório com maior prioridade (normalmente os oficiais), desta forma minimizando problemas gerados por pacotes externos substituindo pacotes oficiais.
    Você pode instalar o rpmforge sem esta proteção, mas para a sua saúde e pela estabilidade do seu servidor, recomendo seriamente a instalação deste plugin.

    Instalando o rpmforge:
    # wget rpmforge-i386 ou rpmforge-x86_64
    # rpm -ivh rpmforge*
    # rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

    Configurando o priorities:
    Edite o arquivo /etc/yum/pluginconf.d/priorities.conf, e verifique se o plugin priorities está habilitado
    Agora edite os seus repositórios dentro de /etc/yum.repos.d/ e ajuste a prioridade de cada um deles.
    É recomendável utilizar:
    [base], [addons], [updates], [extras] -> priority=1
    [centosplus],[contrib] -> priority=2
    Outros repositórios (ex: rpmforge) -> priority=10 (ou maior)

    Rode o yum e verifique se o plugin “priorities” foi carregado corretamente. ex:
    # yum check-update
    Loaded plugins: fastestmirror, priorities
    Loading mirror speeds from cached hostfile
    * rpmforge: apt.sw.be
    * base: ftp.cica.es
    * updates: ftp.cica.es
    * contrib: ftp.cica.es
    * centosplus: ftp.cica.es
    * addons: ftp.cica.es
    * extras: ftp.cica.es
    540 packages excluded due to repository priority protections

    Fonte: http://wiki.centos.org

    Howto: Filtro de emails usando Spamassassin + Postfix + ClamAV + MailScanner + MailWatch

    O MailWatch é uma interface Web para o gerenciamento do MailScanner + ClamAV + SpamAssassin + Postfix, existem diversas formas de implementar uma solução para filtragem de emails, mas a minha preferência é configurar um servidor (virtual ou não) separado para esta função, principalmente devido ao fato do processo de filtragem consumir uma boa parte de recursos do hardware em servidores mais movimentados. Outra grande vantagem deste método, é que ele é compatível com qualquer serviço de email (zimbra, exchange, groupwise, etc….).

    Neste post vou explicar como montar um servidor para filtrar todo o seu tráfego de emails, realizando a remoção do “lixo eletrônico” antes de entregar as mensagens para o seu servidor principal de emails.

    Partindo de uma instalação mínima do CentOS 5.3, remova o “sendmail”
    # yum remove sendmail
    Instale o postfix + serviços necessários
    # yum install postfix mysql-server php-mysql php-gd  httpd gcc spamassassin patch rpm-build

    Instalando o clamAV:
    Baixe os pacotes RPM do clamav em: http://packages.sw.be/clamav/ e instale com o comando:
    # rpm -ivh clam*
    Preparing...       ############ [100%]
    1:clamav-db        ############ [100%]
    2:clamav           ############ [100%]
    3:clamav-devel     ############ [100%]
    4:clamd            ############ [100%]

    Instalando o Mailscanner:
    Faça o download do tar.gz contendo os pacotes RPM
    # wget http://www.mailscanner.info/files/4/rpm/MailScanner-4.XX.XX-X.rpm.tar.gz
    # tar xvfz MailScanner-4.XX.XX-X.rpm.tar.gz
    # cd MailScanner-4.XX.XX-X
    # ./install.sh

    Agora edite o arquivo /etc/MailScanner/MailScanner.conf
    %org-name% = Nome da Empresa
    %org-long-name% = Nome completo da empresa
    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 = clamd
    Clamd Socket = /tmp/clamd.socket
    Use SpamAssassin = yes
    SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

    Instalando o Mailwatch:
    Faça o download da última versão “stable” do mailwatch em http://mailwatch.sourceforge.net
    Descompacte o pacote de instalação e entre no diretório mailwatch-1.0.X
    # mysql -u root < create.sql

    Crie o usuário mailwatch no mysql com permissões completas na base mailscanner
    # mysql -u root
    > GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'minhasupersenha';
    > GRANT FILE ON *.* TO mailwatch@localhost IDENTIFIED BY 'minhasupersenha';

    Edite o arquivo MailWatch.pm e ajuste os parâmetros db_user e db_pass de acordo com o usuário e senha criados.
    my($db_user) = 'mailwatch';
    my($db_pass) = 'minhasupersenha';

    Agora copie o arquivo MailWatch.pm para o CustomFunctions do MailScanner
    # cp MailWatch.pm /usr/lib/MailScanner/MailScanner/CustomFunctions

    Criando um usuário para o MailWatch (este é o usuário com permissões de administrador, após criar este usuário, os outros podem ser geridos através da interface Web):
    # mysql mailscanner -u mailwatch -p
    Enter password: ******
    > INSERT INTO users (username, password, fullname, type) VALUES ('admin',md5('senhasegura'),'Administrator','A');

    Movendo a interface web do Mailwatch para o root dir do apache:
    # mv mailscanner/ /var/www/html/

    Ajustando permissões:
    # cd /var/www/html/mailscanner/
    # chown root:apache images
    # chmod ug+rwx images
    # chown root:apache images/cache
    # chmod ug+rwx images/cache

    Crie o arquivo conf.php com base no conf.php.example
    # cp conf.php.example conf.php
    Agora edite o conf.php e ajuste os campos: DB_USER e DB_PASS.

    Integrando o MailScanner e o Mailwatch
    Pare o MailScanner
    # service MailScanner stop

    Edite o arquivo /etc/MailScanner/MailScanner.conf e verifique se estas opções estão ajustadas

    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 = root
    Quarantine Group = apache (this should be the same group as your web server)
    Quarantine Permissions = 0660

    Opcionalmente (para facilitar o debug)
    Always Include SpamAssassin Report = yes

    Para integrar Whitelist/Blacklist ao mailwatch:
    Edite o arquivo SQLBlackWhiteList.pm
    Procure pela função “CreateList” e nela defina as informações da sua base de dados.
    my($db_name) = 'mailscanner';
    my($db_host) = 'localhost';
    my($db_user) = 'mailwatch';
    my($db_pass) = 'minhasupersenha';

    # cp SQLBlackWhiteList.pm /usr/lib/MailScanner/MailScanner/CustomFunctions

    Agora vamos configurar o postfix para fazer relay das mensagens do domínio:

    Edite o arquivo /etc/postfix/main.cf
    relay_domains = exemplo.com.br

    Agora edite /etc/postfix/transport e insira
    exemplo.com.br       smtp:172.22.10.93
    Execute:
    # postmap /etc/postfix/transport

    Estas duas últimas configurações farão com que o postfix permita o relay de mensagens do domínio exemplo.com.br
    Já o Transport, irá informar para o postfix que as entregas para o domínio exemplo.com.br devem ser no ip 172.22.10.93

    Após realizar testes (muito importante para um ambiente de produção), edite a zona de DNS do seu domínio, e altere a sua entrada MX de forma que aponte para o filtro de emails (e não para o seu mailserver). Desta forma todas as mensagens enviadas para exemplo.com.br cairão no sistema de filtragem e se estiverem limpas serão encaminhadas para o seu servidor de emails.

    Para acessar o Mailwatch: http://ip_do_mailwatch/mailscanner

    Howto: OpenVZ no CentOS 5.x

    Este tutorial é dividido em 5 partes:
    1- Introdução ao OpenVZ
    2- Instalação do OpenVZ no CentOS 5.X
    3- Templates
    4- Operações básicas do OpenVZ
    5- Leitura recomendada
    Ao fim deste tutorial, você terá o OpenVZ instalado e rodando com pelo menos uma máquina virtual.

    1- Introdução ao OpenVZ

    OpenVZ utiliza virtualização em containers para Linux. OpenVZ cria múltiplos containers de forma segura e isolada (também conhecidos como VE ou VPS) no mesmo servidor físico, permitindo uma melhor utilização do servidor e assegurando-se que as aplicações não entrem em conflito. Cada container roda exatamente como um servidor individual; um container pode ser reiniciado, ter os seus próprio usuários, memória, processos, aplicativos, bibliotecas e arquivos de configuração.
    OpenVZ é um Software Livre, disponível na Licença GNU GPL
    OpenVZ é a base do Parallels Virtuozzo Containers, uma solução comercial de virtualização oferecida pela Parallels. O projeto OpenVZ é patrocinado por Parallels.
    Tradução Livre – OpenVZ Wiki

    Para maiores informações sobre esta e/ou outras formas de virtualização consulte os Links:
    Eduardo Silva – Introdução a Virtualização
    OpenVZ Wiki – Introduction to Virtualization
    OpenVZ – Virtualization in Linux
    Wikipedia – OpenVZ

    Video: A brief Introduction to OpenVZ – Scott Dowdle
    [video:google:3811575606473768400]

    2- Instalação do OpenVZ no CentOS 5.X
    Pré-requisitos:
    * Desabilitar o SELinux
    * Partição separada para /vz/private (Recomendável, caso contrário as Quotas não funcionarão para as máquinas virtuais)

    Instalando o repositório do OpenVZ

    # wget http://download.openvz.org/openvz.repo -P /etc/yum.repos.d/
    # rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ

    Instalando o Kernel:

    # yum install ovzkernel

    Teoricamente, após instalar o ovzkernel pelo yum, o grub já estará configurado para carregar o novo kernel no próximo boot, mesmo assim, verifique o arquivo /boot/grub/menu.lst e verifique se o novo kernel está na lista como default. Caso não esteja, a configuração deve ficar mais ou menos assim:

    title CentOS (2.6.18-128.1.1.el5.028stab062.3)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-128.1.1.el5.028stab062.3 ro root=LABEL=/
    initrd /initrd-2.6.18-128.1.1.el5.028stab062.3.img

    Edite o arquivo /etc/sysctl.conf e edite os parâmetros das opções listadas abaixo

    net.ipv4.ip_forward = 1
    net.ipv4.conf.default.proxy_arp = 0
    net.ipv4.conf.all.rp_filter = 1
    kernel.sysrq = 1
    net.ipv4.conf.default.send_redirects = 1
    net.ipv4.conf.all.send_redirects = 0

    Reinicie o servidor, e verifique se o kernel que foi instalado anteriormente está rodando:

    # uname -a
    Linux ovztest.exemplo.com.br 2.6.18-128.1.1.el5.028stab062.3 #1 SMP Tue May 5 17:31:34 MSD 2009 i686 i686 i386 GNU/Linux

    Agora instale as principais ferramentas de gerenciamento do OpenVZ utilizando o YUM:

    # yum install vzctl vzquota
    # yum install vzpkg vzyum vzrpm43-python vzrpm44-python vzctl-lib (Requer python 2.2, 2.3 ou 2.4. Não funciona com python 2.5 ou com o kernel de 64bits)

    Inicialize o serviço “vz” e observe se este carregou corretamente.

    # service vz start
    Starting OpenVZ: [ OK ]

    3- Templates
    O OpenVZ utiliza templates de sistemas operacionais para criar um novo container. Neste tutorial, iremos utilizar templates pré-criados disponíveis em: http://wiki.openvz.org/Download/template/precreated escolha a sua distribuição favorita e faça o download. Ex: centos-5-x86.tar.gz

    Caso queira criar o seu próprio template, visite a Wiki do OpenVZ e procure as intruções para criar um template da distribuição escolhida. Alguns exemplos:
    * Creating a CentOS 5.0 Template
    Gentoo template creation

    Observar que o OpenVZ permite rodar distribuições distintas de Linux no mesmo servidor.
    Coloque o(s) seu(s) template(s) escolhido(s) “SEM DESCOMPACTAR” em /vz/template/cache/

    4- Operações básicas do OpenVZ
    É importante observar que o OpenVZ utiliza números (CTID) para identificar as máquinas virtuais. A faixa de 0 a 100 é reservada para o OpenVZ e não deve ser utilizada (principalmente o ID 0). Uma recomendação para evitar conflitos na migração de VPSs entre servidores e facilitar a identificação (saber que o VPS XXXX está no servidor YY), seria utilizar “pre-fixos” para cada servidor. Exemplo
    Servidor 1 – CTID começa por 1. EX: 1101
    Servidor 2 – CTID começa por 2. EX: 2135

    Criando um VPS:

    # vzctl create 101 –ostemplate centos-5-x86 –hostname vps1.exemplo.com.br
    Unable to get full ostemplate name for centos-5-x86
    Creating container private area (centos-5-x86)
    Performing postcreate actions
    Container private area was created

    O Comando acima irá criar uma máquina virtual com o CTID 101 utilizando o template centos-5-x86 com o hostname vps1.exemplo.com.br

    Configurando a rede do container:

    # vzctl set 101 –ipadd 192.168.100.223 –save
    Saved parameters for CT 101
    # vzctl set 101 –nameserver 192.168.100.223 –save
    Saved parameters for CT 101

    Configurando o container para inicializar durante o boot

    # vzctl set 101 –onboot yes –save
    Saved parameters for VPS 101

    Inicializando o container:

    # vzctl start 101
    Starting container …
    Container is mounted
    Adding IP address(es): 192.168.100.223
    Setting CPU units: 1000
    Configure meminfo: 65536
    Set hostname: vps1.exemplo.com.br
    File resolv.conf was modified
    Container start in progress…

    Lista dos VPSs hospedados no servidor:

    # vzlist
    CTID NPROC STATUS IP_ADDR HOSTNAME
    101 12 running 192.168.100.223 vps1.exemplo.com.br

    Entrando no VPS:

    # vzctl enter 101
    entered into CT 101
    [root@vps1 /]# uname -a
    Linux vps1.exemplo.com.br 2.6.18-128.1.1.el5.028stab062.3 #1 SMP Tue May 5 17:31:34 MSD 2009 i686 i686 i386 GNU/Linux
    [root@vps1 /]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/simfs 1.0G 492M 533M 48% /
    none 505M 4.0K 505M 1% /dev

    Executando um comando de fora do VPS:

    # vzctl exec 101 service sshd start
    Starting sshd: [ OK ]

    Realizando um backup (dump) completo de todas as máquinas virtuais hospedadas no servidor (sem interromper os serviços):

    # vzdump –snapshot –compress –dumpdir /backup –all

    Parando o VPS

    # vzctl stop 101
    Stopping container …
    Container was stopped
    Container is unmounted

    Destruindo um VPS (preciso avisar que todos os arquivos que estão contidos no container serão perdidos para sempre?) :P
    # vzctl destroy 101
    Destroying container private area: /vz/private/101
    Container private area was destroyed

    Restaurando um backup:

    vzdump –restore vzdump-101.tgz 101

    5- Leitura recomendada
    Abaixo alguns links com leitura recomendada
    OpenVZ User’s guide (Completo, mas principalmente a o capítulo Managing Resources)
    OpenVZ Wiki
    MediaWiki – OpenVZ

    Qualquer dúvida, problema, correção elogio ou xingamento, utilize o campo de comentários logo abaixo :)

    Howto: Instalação e configuração do Zimbra no CentOS 5.X

    Documento atualizado em 22/10/2009 para refletir a instalação do Zimbra 6.
    Os passos de instalação do Zimbra 5 e do Zimbra 6 são praticamente iguais

    O que é o Zimbra?

    O Zimbra é uma ferramenta muito completa de emails e colaboração. Ele tem incorporado um rico webmail, calendário corporativo, instant messenger, gerenciador de tarefas(todo list), porta-arquivos, editor de documentos e planilhas em um sistema parecido com Wiki, permitindo contole de versões, entre outros recursos.

    Um dos pontos altos desta ferramenta, é que ela permite que os usuários compartilhem itens de sua conta entre si. Desta forma um utilizador, pode compartilhar com um gerente, um documento, a sua lista de tarefas ou até mesmo seu calendário e caixa de emails.

    Caso você não conheça o Zimbra, recomendo que assista o seu video-tour de 2 ou 3 minutos que faz um overview completo de todos os seus recursos. Este tour pode ser encontrado aqui.

    Sobre este tutorial
    O objetivo deste artigo, é orientar o leitor durante o processo de instalação do Zimbra 6 em um CentOS 5, mas sempre lembrando, que para outras distribuições, a maioria das dicas contidas aqui, podem ser reaproveitadas mediante pequenos ajustes.

    Passo 1: Preparando o sistema operacional

    O Zimbra tem builds específicas para algumas distribuições de Linux, são elas:
    * Red Hat Enterprise Linux 4 e 5
    * Fedora 7
    * Debian 4
    * MacOS 10.4 Tiger
    * MacOS 10.5 Leopard
    * openSUSE Linux 10.2
    * SUSE Linux Enterprise Server 10
    * Ubuntu 6.06 LTS
    * Ubuntu 8.04 LTS
    Download do Zimbra Community Edition

    Como o CentOS é derivado do Red Hat Enterprise Linux, apenas com o nome e os logotipos trocados, significa que podemos utilizar o Build do Zimbra para Red Hat 5 no CentOS 5. Caso o estejas utilizando outro sistema operacional, pode sempre compilar o Zimbra a partir do código fonte que também está disponível no site. As informações para compilar o zimbra, encontram-se aqui.

    Realize a instalação do CentOS 5 normalmente, prestando atenção em dois detalhes:
    * O Servidor que está sendo configurado, deve ter um FQDN (Full qualified domain name) configurado, quando o instalador solicitar um hostname, informe algo como zimbra.exemplo.com.br
    Observar que na sua zona DNS, zimbra.exemplo.com.br deve apontar para o endereço IP de seu servidor.
    * Durante a seleção de pacotes, desmarque o Gnome – Desktop, é totalmente desnecessário para o seu servidor, usando espaço em disco e desperdiçando recursos valiosos.

    Após a instalação do Sistema Operacional, edite o arquivo /etc/hosts da seguinte forma:
    127.0.0.1 localhost.localdomain localhost
    xx.xx.xx.x zimbra.exemplo.com.br zimbra

    Onde xx.xx.xx.x é o ip da interface de rede do servidor.
    Observar que o formato IP FQDN host deve ser mantido.

    Faça as atualizações do CentOS e instale os requisitos do zimbra.
    # yum update -y
    # yum install compat-db gmp compat-libstdc++-296 compat-libstdc++-33 libtool-ltdl sysstat

    Agora remova o sendmail e para evitar conflitos com o MTA do zimbra e instale o fetchmail.
    # yum remove sendmail
    # yum install fetchmail

    Ao instalar o fetchmail, uma de suas dependências será o Exim (que irá conflitar com o MTA do zimbra(postfix)), desabilite a inicialização deste com o comando:
    # chkconfig --level 0123456 exim off

    Edite o arquivo /etc/sudoers e comente a linha “defaults requiretty”
    Edite o arquivo /etc/sysconfig/i18n e deletar a linha LANG=”en_US.UTF-8”.

    Passo 2: Instalação do Zimbra 6.x.x
    Vá para /usr/src e descompacte o pacote do Zimbra
    # tar xvfz zcs-6.0.1_GA_1816.RHEL5.20090911181524.tgz
    # cd zcs-6.0.1_GA_1816.RHEL5.20090911181524

    Execute o script de instalação:
    # ./install.sh --platform-override
    O parâmetro –platform-override serve para dizer ao Zimbra que ele deve ignorar o fato de estar sendo instalado em um CentOS ao invés de RedHat.

    Uma outra alternativa (que eu não recomendo, apenas cito) é modificar o conteúdo do arquivo /etc/redhat-release
    de
    CentOS release 5 (Final)
    para
    Red Hat Enterprise Linux ES release 5
    Desta forma não é necessário utilizar o parâmetro –platform-override, entretanto, eu não tenho certeza de quais impactos esta alteração pode trazer para o sistema operacional e/ou para pacotes instalados no futuro.

    Durante a execução do script de instalação, ele fará uma série de verificações, se você instalou um CentOS5 e preparou o sistema operacional conforme eu sugeri, a princípio todas as verificações deverão ocorrer sem problemas, caso apareça algum problema, aborte a instalação, resolva e comece novamente o processo.

    Para uma instalação “StandAlone” do Zimbra, as configurações indicadas por default já servem para a maioria dos casos.

    Ao final da instalação, se você fez tudo correto, o zimbra apresentará uma mensagem de erro informando que zimbra.exemplo.com.br não possuí uma entrada MX válida. Neste momento você irá criar o domínio exemplo.com.br
    DNS ERROR resolving MX for zimbra.exemplo.com.br
    It is suggested that the domain name have an MX record configured in DNS
    Change domain name? [Yes]
    Create domain: [zimbra.exemplo.com.br] exemplo.com.br
    MX: mail.exemplo.com.br (xx.xx.xx.x)

    Interface: xx.xx.xx.x
    Interface: 127.0.0.1

    DNS ERROR - none of the MX records for exemplo.com.br
    resolve to this host
    It is suggested that the MX record resolve to this host
    Re-Enter domain name? [Yes] no
    done.

    Após ajustar o o domain, será apresentado um menu com várias configurações do zimbra, sugiro em um primeiro momento alterar algumas delas:
    No menu 3) Zimbra Store Recomendo alterar:
    4) Admin Password
    12) Web server mode – De http para redirect, assim todo o acesso http é automagicamente redirecionado para https, adicionando um pouco mais de segurança para o usuário final.

    No menu 1) Common configuration, ajustar o 6) TimeZone

    Recomendo passar nos outros menus para verificar se as outras configurações refletem o seu ambiente. Observar também se os endereços mostrados correspondem ao seu hostname e domínio.
    Após o término da configuração, use a opção “a” para salvar e aplicar as novas configurações. O instalador passará por mais alguns pontos e com sorte, o processo estará finalizado em alguns minutos.

    Passo 3: Configurando o Zimbra
    Agora que o Zimbra está instalado e rodando corretamente, acesse o painel administrativo do seu servidor de emails em https://zimbra.exemplo.com.br:7071 com o usuário admin e a senha que você criou durante a instalação.
    Antes de começar a criar as contas de email, sugiro criar, duplicar ou editar um “class of service” para os seus usuários.
    O “Class Of Service” é como um template de configurações, ao criar um novo usuário e associar ele a um COS, todas as configurações da nova conta, serão realizadas mediante os itens pré-definidos aqui. Se alterar um item no Class Of Service, este também será replicado para todas as contas associadas a ele. Em resumo, uma maneira simples de gerenciar as configurações dos usuários.

    De imediato, eu sugiro alguns itens a serem configurados no COS, como por exemplo:
    - Features, habilitar o Instant Messenger
    - Preferences – habilitar “Automatically login to instant messaging services”
    - Preferences – habilitar “Use the GAL when autocompleting addresses”
    - Advanced – Definir Quotas para os usuários
    - Advanced – Definir uma boa política de senhas, sempre lembrando que usuários tem mania de utilizar senhas espertas como “12345″ e este tipo de atitude pode trazer problemas em um servidor de emails. (Não esqueça de definir os itens mais interessantes como Max Password Age (obrigando o user a trocar sua senha) e Unique Password history (impedindo que ele fique repetindo senhas)

    Agora em Global Settings:
    Attachments – Proíba principalmente arquivos potencialmente perigosos como .bat .com .exe .scr etc…

    Agora você está pronto para começar a criar usuários, grupos e explorar todos os recursos Zimbra. :)

    Críticas, dúvidas, sugestões e comentários são sempre bem vindos e normalmente respondidos. Sinta-se a vontade para usar o formulário abaixo.

    Monitoramento fácil com Zabbix

    Post atualizado para a versão mais recente do zabbix 1.8.x

    Zabbix é uma poderosa ferramenta para monitoramento de servidores e dispositivos de rede.

    Além de ser poderosa e flexível, o Zabbix também é uma ferramenta com uma rápida curva de aprendizagem. Uma de suas grandes vantagens é que a sua gestão é toda através de uma interface via Web e a sua configuração permanece quase que inteiramente dentro do banco de dados escolhido.

    O grande foco desta ferramenta, é o monitoramento através de agentes, ou seja, um “coletor” de informações é instalado em um servidor a ser monitorado, e o Zabbix “conversa” diretamente com este coletor para receber informações como processos, espaço em disco, memória, rede, etc.. Entretanto, o Zabbix também permite a coleta de informações através de outras formas ex:
    - SNMP
    - IMPI
    - Teste de serviços (http, smtp, etc..)

    Este tutorial foi dividido em 3 partes, as duas primeiras, eu escrevi a 2 anos atrás, no meu primeiro blog, entretanto as datas dos artigos foram perdidas na minha migração do WordPress para o B2Evolution.

    A terceira e última parte, eu comecei a escrever no dia 15 deste mês e devido a problemas pessoais, só consegui terminar de escreve-la hoje.

    Parte I – Introdução
    Parte II – Instalando e Rodando o Zabbix
    Parte III – Instalando agentes e administrando o Zabbix

    Para qualquer dúvida, comentário ou sugestão, favor usar os comentários deste post.

    Parte III – Instalando agentes e administrando o Zabbix

    Post atualizado para a versão mais recente do zabbix 1.8.x

    Este post faz parte de uma série sobre Monitoramento utilizando o Zabbix disponível em:

    Monitoramento fácil com o Zabbix
    Parte I – Introdução
    Parte II – Instalando e Rodando o Zabbix
    Parte III – Instalando agentes e administrando o Zabbix

    Dúvidas, sugestões, críticas e outros comentários devem ser postados em: Monitoramento fácil com o Zabbix

    Depois de quase 2 anos do post inicial sobre o Zabbix, resolvi dar continuidade e o devido encerramento a esta matéria.

    Neste artigo vou abordar os temas:

    * Instalação do Agente (Linux e Windows)
    * Cadastrando um Host no Zabbix
    * Items, Triggers e Actions
    * Removendo um monitoramento
    * Definindo os tipos de media
    * Configurando Alertas
    * Configuração do serviço de Discovery
    * Montando um mapa de rede básico
    * Criando um gráfico customizado
    * Criando telas específicas
    * Executando Comandos remotamente
    * Troubleshooting

    Continue reading

    Howto: Estatísticas do Squid no Webalizer

    O proxy Squid possuí diversas ferramentas para análise de logs. Com toda a certeza, a mais popular delas é o SARG. Este apresenta um relatório de fácil entendimento, e que permite auditar em detalhes os locais onde os nossos usuários andam navegando.

    O meu principal objetivo, não é auditar as atividades dos usuários, e sim ter uma boa referência dos horários de maior tráfego para poder redimensionar adequadamente os serviços prestados. Para este fim, o Webalizer é mais do que ideal.

    Observar que não existe nenhum impedimento de ter o Webalizer e o SARG no mesmo servidor analisando os mesmos logs, cada um a sua maneira.

    Os passos a seguir são indicados para instalar, configurar e rodar um Webalizer no CentOS 5.1

    Instalando o pacote:
    # yum install webalizer

    O pacote do webalizer, da mesma forma que o do sarg, já instala o virtualhost no apache em /etc/httpd/conf.d/webalizer.conf e a rotina do cron em /etc/cron.daily/00webalizer
    Para a configuração que será utilizada neste exemplo, nenhum destes arquivos precisa ser alterado.

    Para “ativar” o novo virtualhost do apache, reinicialize o serviço
    # service httpd restart

    Agora vamos editar o arquivo de configuração principal do pacote.
    # vi /etc/webalizer.conf

    Ajustar o arquivo de log:
    LogFile /var/log/squid/access.log
    Informar ao webalizer que queremos reportar o squid:
    LogType squid

    Salve e feche o arquivo.

    Agora para testarmos, basta executar o script que será rodado diariamente
    # /etc/cron.daily/00webalizer

    Neste momento as suas estatísticas já foram geradas, para acessá-las basta abrir http://ip_do_servidor/usage (não esqueça de colocar algum método de autenticação ou proteção neste diretório).

    Dica: Caso também queira instalar o SARG, as funcionalidades básicas não requerem nenhuma configuração adicional. Basta instalar usando o rpm que ele irá funcionar “out of the box”.

    Howto: PBX In A Flash (PiaF)

    Resolvi escrever este guia para os que estão começando em telefonia IP agora, e não sabem bem por onde começar, ou para aqueles que já “fuçam” a algum tempo mas não sabem bem o que fazer com os seus laboratórios ou o que realmente estudar ou qual caminho seguir. Neste documento, eu procuro dar dicas e sugestões baseadas em experiências e situações pelas quais eu passei enquanto trabalhava exclusivamente como consultor de asterisk.
    Realizei diversas interligações e migrações entre pbx convencionais e servidores asterisk, depois de muito bater cabeça por ai fui definindo padrões e procedimentos que eu mesmo deveria seguir para facilitar a minha vida e é isto que venho compartilhar agora.

    Antes de começarmos, queria falar sobre instalações do asterisk x sistemas completos tipo trixbox, piaf e elastix.

    Para ficar competitivo no mercado, eu considero muito importante gastar o mínimo possível de horas técnicas e fazer um trabalho bem feito. Para a interligação ou substituição da maioria dos PBX convencionais, um FreePBX tira de letra a tarefa de forma estável e de fácil gerenciamento. Claro que em alguns casos é bem mais interessante montar um Asterisk limpo sem nada, para algumas tarefas bem mais específicas, como por exemplo um sistema de gravação interligado a outro pbx, um sistema de voicemail, etc..

    Porque o PiaF e não o Trixbox ou elastix?
    Bem, na outra empresa que eu trabalhava focado em asterisk, o carro chefe era o TrixBox (antigo asterisk@home), um fator que eu nunca gostei no tb, é que ele sempre foi muito “bleeding edge”, então por diversas vezes encontrei alguns features meio bugados. Outro motivo, seria uma grande invasão de privacidade por parte da Fonality (empresa que mantem o TB) para com os seus usuários, para saber mais sobre o assunto, pode procurar sobre “Trixbox Call Home” para ajudar, já selecionei algo aqui, aqui, aqui e aqui!
    E como terceiro ponto, a Fonality resolveu abandonar o FreePBX e passar para um gerenciador próprio, isto foi mais que o suficiente para procurar outra distro.
    Elastix… na época que saiu o asterisk 1.4 o freepbx demorou um pouco para lançar uma versão definitiva, e a elastix lançou uma versão do seu produto usando o freepbx beta para asterisk 1.4… Isto me fez perder credibilidade com a distro.
    E por fim encontrei o PiaF, na sua página inicial, vi algo que me agradou muito, pois bate 100% com a minha linha de pensamento “estamos comprometidos em lançar releases estáveis e não bleeding edge” Depois de passar um tempo pesquisando sobre a distro, observando a comunidade e depoimentos externos, percebi que valia a pena testar… De fato, a única coisa que eu posso reclamar é o fato de eles não terem o hudlite que era um produto muito interessante para as telefonistas, mas de resto a distribuição é muito estável e tendo me gerado pouquíssimos problemas.

    Instalando o PiAF
    Sem muito mistério, sem muito drama, botar o cd no drive iniciar com todas as opções default, ajustar as partições de acordo com o seu gosto e aguardar o primeiro reboot.
    Neste momento o PiAF oferece 2 opções, baixar os arquivos da internet ou usar do próprio CD. Na versão 1.2 era apenas baixar da internet ou cd para “reseller”. Vale a pena seguir sempre o recomendado pelo setup, que seria baixar os arquivos da internet, neste meio tempo, vá buscar o seu primeiro café e aguarde…
    Depois que ele faz todos os downloads e instala todos os programas/scripts, comece a fazer as atualizações, rode na respectiva ordem:
    update-scripts
    update-fixes
    update-source (leia as próximas linhas ANTES de rodar este comando)
    Observar que o piaf vai informar que o zaptel está rodando e que o sistema de telefonia ficara indisponível blá blá e precisará reinicializar o computador para desativar o zaptel. Após o reboot rode novamente o update-source.
    I M P O R T A N T E:
    NÃO atualize, o Kernel através do update-source nem permita que ele rode o yum update (obviamente também não rode estes comandos manualmente). Eu vi surgirem alguns problemas após estas atualizações, portanto tenho deixado elas de lado. A minha preocupação é manter o FreePBX e o Asterisk atualizados, não o sistema (estranho não? um dia explico o meu ponto de vista). Faça como quiser, o pbx é seu :P
    Agora enquanto roda o update-source, busque mais um pouco de café e mantenha-se longe do teclado :)
    Conforme recomendado pelo piaf, rode um novo update-scripts e em seguida update-fixes.

    Trocando a senha do usuário maint
    (Durante os updates do piaf, ele informa que foi descoberto um bug no sistema de autenticação do freepbx e desabilita o controle de usuários, a autenticação passa a ser feita pelo apache e voltamos a usar o usuário “maint”)

    root@pbx:~ $ passwd-maint
    -------------------------------------------
    Set password for AMP web GUI and maint GUI
    User: maint
    -------------------------------------------
    
    New password:
    Re-type new password:
    Updating password for user maint
    

    Instalando os módulos

    Ao invés de instalar apenas alguns módulos, eu recomendaria instalar todos por alguns motivos:
    * Não altera o resultado final para um pbx de 100 a 150 ramais. (Desconsiderando o caso de Callcenters onde o uso do pbx e dos extensions é muito intenso)
    * Frequentemente vejo colocarem “pbxizes” em redes isoladas ou localidades bizarras, sem acesso a internet, embaixo de escadas ou outros lugares nunca antes imaginados. Em alguns casos, pode acabar ficando difícil instalar um módulo em um pbx de produção, por isso sempre deixo todos os módulos instalados durante a implantação, se um dia precisar, “tá ali”.
    * Para quem está aprendendo também é interessante, pois com o módulo instalado fica mais fácil de “fuçar”

    Acesse o seu pbx através do endereço http://servidor/admin utilizando o usuário maint.

    Vá em “Module Admin”

    Check for updates online
    Download all/ upgrade all
    Process / Confirm

    Irão surgir alguns erros de dependências, apenas clique em confirmar e aguarde a instalação de todos os pacotes. Repita todo o processo até que não reste mais nenhum pacote por instalar.

    Instalando a placa TDM400 com 4 FXO

    root@pbx:~ $ genzaptelconf
    root@pbx:~ $ ztcfg -vvv
    
    Zaptel Version: 1.4.12.1
    Echo Canceller: MG2
    Configuration
    ======================
    
    Channel map:
    
    Channel 01: FXS Kewlstart (Default) (Slaves: 01)
    Channel 02: FXS Kewlstart (Default) (Slaves: 02)
    nullChannel 04: FXS Kewlstart (Default) (Slaves: 04)
    
    4 channels to configure.
    

    Observação: Neste momento deve ter rolado uma pequena confusão para quem está iniciando agora com Asterisk; No zaptel.conf para módulos FXO, usa-se fxsks, aparecendo de forma invertida, já li uma explicação sobre isso, fazia muito sentido, mas honestamente, não lembro mais o motivo real, é porque é, e não importa muito. Se alguem lembrar, comenta ai! Este é o único ponto onde isso vai acontecer.

    Agora edite o arquivo /etc/asterisk/zapata-channels.conf e separe os seus canais por grupos, exemplo de caso com duas linhas fixas e uma linha Cellfix:
    Canais 1 e 2 no grupo 0 (ligando nas linhas fixas)
    Canal 3 no grupo 1 (ligando no CellFix)
    Canal 4 no grupo 2 (sem ligar em nada)

    Salve o arquivo, conecte no asterisk e faça um reload da configuração.

    root@pbx:~ $ asterisk -vvvr
    Asterisk 1.4.21.2, Copyright (C) 1999 - 2008 Digium, Inc. and others.
    Created by Mark Spencer markster@digium.com
    Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
    This is free software, with components licensed under the GNU General Public
    License version 2 and other licenses; you are welcome to redistribute it under
    certain conditions. Type 'core show license' for details.
    =========================================================================
      == Parsing '/etc/asterisk/asterisk.conf': Found
    Connected to Asterisk 1.4.21.2 currently running on pbx (pid = 3346)
    Verbosity is at least 3
    pbx*CLI> reload
    ...
    pbx*CLI>
    

    Verificando os canais da placa TDM:

    pbx*CLI> zap show channels
       Chan Extension  Context         Language   MOH Interpret
     pseudo            default         en         default
          1            from-pstn       en         default
          2            from-pstn       en         default
          3            from-pstn       en         default
          4            from-pstn       en         default
    pbx*CLI>
    

    Ok, agora reinicialize seu PBX e verifique se tudo vai inicializar corretamente, zapata, asterisk, etc… Não havendo nenhuma surpresa após o reboot, a base do seu pbx está pronta! Agora basta configurar…

    Configuração Básica:
    Para termos um PBX básico operacional, precisamos do seguinte:
    * Trunks
    * Outbound routes
    * Ramais configurados
    * Inbound routes
    * Music on Hold ?
    * Desabilitando Features “perigosos”
    * Pickup Groups
    * Ajustes Finos

    Configurando o Trunk:
    Se clicar em Trunks, já vai haver um Trunk ZAP/g0 basta apenas adicionar o g1 (para o nosso Cellfix)
    Add Zap Trunk em “Zap identifier” coloque g1 e clique em “Submit Changes”

    Dialplan:
    Antes de criarmos as rotas de saída, devemos pensar no nosso Dialplan, eu gosto de adotar o seguinte critério:
    Ligações externas para a PSTN, sempre começam com Zero, ligações internas ou interligações com outras empresas do grupo, diretamente o número do ramal. Este por sua vez procuro manter sempre com 4 dígitos por questões de padronização, praticidade e facilidade na hora de montar um plano de numeração entre várias empresas. Exemplo:
    Empresa A: Faixa de numeração 1100 até 1199
    Empresa B: Faixa de numeração 1200 até 1399
    Empresa C: Faixa de numeração 1400 até 1499

    Assim podemos pensar da seguinte forma: Os dois primeiros dígitos são o “prefixo” da empresa e os dois últimos o número do ramal, ficando visualmente simples de entender.

    Rotas de Saída (Outbound Routes):
    Começamos deletando a rota 9_outside.
    Agora criaremos uma rota de saída para cada tipo de ligação, basta clicar em Add Route e preencher os campos “Route Name” com o nome da rota, Dial Patterns e o Trunk Sequence.
    O padrão que eu gosto de usar é o seguinte:

    Route Name: Especiais
    Dial Patterns:
    0|1XX
    0|0800XXXXX.
    Trunk Sequence: (grupo de linha fixa)
    1XX para policia, bombeiros, auxilio a lista, etc..
    0|0800XXXXX. para números 0800 (observar que estes possuem tamanhos variados)

    Route Name: Fixo_Local
    Dial Patterns:
    0|[2-6]XXXXXXX
    Trunk Sequence: (grupo de linha fixa)

    Route Name: Movel_Local
    Dial Patterns:
    0|[7-9]XXXXXXX
    Trunk Sequence: (grupo cellfix)

    Route Name: Fixo_DDD
    Dial Patterns:
    0|ZZ[2-6]XXXXXXX
    0ZZ|ZZ[2-6]XXXXXXX
    Trunk Sequence: (grupo de linha fixa)

    Route Name: Movel_DDD
    Dial Patterns:
    0|ZZ[7-9]XXXXXXX
    0ZZ|ZZ[7-9]XXXXXXX
    Trunk Sequence: (grupo cellfix)

    Route Name: Internacional
    Dial Patterns:
    0|00ZZXXXXX.
    Trunk Sequence: (grupo de linha fixa)

    Observar que no Dialplan, para as chamadas de longa distância, permitimos que o usuário disque sem a operadora (pode ser o padrão adotado pela empresa), mas caso o usuário seja teimoso e insista em usar operadora, também aceitamos, mas cortamos a operadora de forma transparente :)

    Agora voltamos aos Trunks e montamos o nosso Dial Rules para os dois troncos:

    XXXXXXXX
    024+ZZXXXXXXXX
    0800XX.
    000ZZ|0024+XXXX.
    1XX

    Estas regras permitirão todas as chamadas configuradas nas Outbound Routes sendo que para as chamadas de DDD usaremos a operadora que nos forneça o melhor desconto ou pacote de ligações (usei o exemplo de 24)

    Criação de Ramais (Extensions):
    Agora precisamos criar os nossos ramais.
    Vamos em “Add Extension” e depois Generic SIP Device

    Os campos básicos (com exemplos) são:
    User Extension: 1000
    Display Name: Telefonista (Isto é legal pois se usar telefones IP ou softphones, o Display name aparecerá nas ligações internas, e também aparecerá nos relatórios de chamadas) Obs: Sempre uso APENAS caracteres alfa-numéricos, sem nenhum tipo de caracter especial como ç ~ + * ‘ é á, etc… Não sei qual impacto isto pode ter no sistema, portanto procuro evitar problemas
    Secret: PARE! Coloque algo DECENTE, já existem vários tipos de bruteforce para asterisk (SIP principalmente) baseados em palavras de dicionário e coisas bobas como por exemplo Ext 1000 senha 1000. Um usuário malicioso interno ou externo, pode tranquilamente causar um grande prejuízo em um curto período de tempo, portanto, tome cuidado com este detalhe.

    Clique em Submit Changes e adicione mais alguns extensions.

    Rotas de entrada (Inbound routes):
    Agora que já temos quase tudo pronto, devemos definir o que fazer com as chamadas recebidas. Vamos adicionar algo bem genérico, para isto, clique em Add Incoming route, pule todos os campos e vá direto para “Set Destination”. Marque Extensions e procure o ramal da Telefonista
    clique em Submit e a sua rota de entrada está criada!

    Musica de espera (Music On Hold)
    Isto é básico? Sim, to de saco cheio de ligar para um PBX e ouvir sempre a mesma musica!
    O Asterisk vem por default com 3 músicas pré instaladas, entretanto o FreePBX toca estas musicas sempre na mesma ordem. Mesmo que não façamos o upload de novas músicas, podíamos ao menos habilitar o random play né? Basta clicar em Enable Random Play e Submit! Simples não?

    Desabilitando Features “Perigosos”
    Alguns Features deveriam vir desativados por default pois podem causar transtornos e um certo perigo. Por segurança estes devem ser desabilitados. Se quiser habilitar estes features, crie contextos customizados ou procure maneiras seguras para a sua ativação.
    Clique em Feature Codes e procure principalmente
    * Chanspy (permite ouvir chamadas ativas a partir de qualquer telefone) Muito útil se bem usado, por exemplo: Um cliente meu tinha um helpdesk, e queria que o gerente do helpdesk tivesse a possibilidade de “ouvir” as chamadas ativas e “Sussurrar” (Whisper) apenas para o atendente, sem que o cliente escute. Desta forma ele podia ajudar seus funcionários durante uma ligação. O chanspy possui este feature (se customizado corretamente), mas você não gostaria que um funcionário qualquer escutasse uma chamada da diretoria apenas digitando um código…

    * ZapBarge Semelhante ao chanspy mas ouve os canais das placas Zap.

    * Gabcast (como instalamos o modulo e nao usaremos, desabilitamos)

    * outros módulos que possam gerar confusão como Do not disturb, dictation, blacklist (dificilmente usado em um ambiente corporativo)

    Aplicando as configurações:
    O FreePBX não ativa as configurações no momento das alterações, evitando assim reloads desnecessários e que problemas apareçam entre uma configuração e outra.
    Para aplicar as configurações clique no botão laranja que deve estar aparecendo no topo “Apply Configuration Changes” e confirme.

    Ajustes Finos:
    Agora faltam apenas pequenos detalhes para o nosso pbx ficar pronto. São eles:

    No arquivo /etc/asterisk/zapata.conf
    na parte [channels] adicionar:
    busydetect=yes
    busycount=4

    Isto faz com que o asterisk “desconecte” uma linha quando esta ouvir o tom de “ocupado” (tú tú tú). No meu primeiro pbx fiquei quebrando cabeça quando as linhas ficavam penduradas por tempo indeterminado, este ajuste resolveu o problema

    No arquivo /etc/asterisk/features_general_custom.conf podemos facilitar a vida de nossas amigas telefonistas..

    transferdigittimeout => 5 ; tempo em segundos para esperar entre os digitos quando estiver transferindo uma chamada
    courtesytone = beep
    xfersound = beep ; beep que indica que uma transferência foi concluída
    xferfailsound = beeperr ; beep de erro que indica que uma transferência não foi concluída
    featuredigittimeout = 2000 ; Tempo máximo em ms para ativar um feature. o default é 500ms e NORMALMENTE as telefonistas tem problemas
    ; para digitar *2 em menos de 500ms, subindo isso para 1500 ou 2000 resolve o problema.

    Instalando prompts de voz em português
    A Intelbras http://www.intelbras.com.br mantém uma distribuição de SoftPBX baseada em Asterisk, esta chama-se DISC-OS http://www.disc-os.org e eles gentilmente cederam os prompts de voz em português (pt_BR) para a comunidade, através da licença Creative Commons http://creativecommons.org/licenses/by-nc-nd/2.5/br/

    Vá até o site do DISC-OS http://www.disc-os.org e na seção downloads, procure o pacote Disc-OS Sounds.
    Faça o download deste pacote dentro da pasta /var/lib/asterisk.
    Nesta mesma pasta descomprima o arquivo:
    # tar xvfz Disc-OS-Sounds-1.0-pt_BR.tar.gz
    E ajuste o proprietário da pasta sounds recursivamente.
    # chown asterisk:asterisk sounds -R

    Edite os arquivos:
    /etc/asterisk/sip_general_custom.conf
    /etc/asterisk/iax_general_custom.conf
    /etc/asterisk/zapata.conf

    Altere o parâmetro language para pt_BR. Exemplo:

    # vi /etc/asterisk/sip_general_custom.conf
    language=pt_BR

    Realize um reload do asterisk para que as novas configurações entrem em vigor.
    # asterisk -rx reload

    Pronto, agora o seu PBX Asterisk já fala Brasileirês (pt_BR)!

    Ajustando o Timezone do php.ini
    Não sei quanto a tua instalação, mas o meu freepbx sempre fica com o horário incorreto. Clique em Time groups e verifique se o tempo mostrado está correto, se estiver incorreto, você deve ajustar o /etc/php.ini
    Procure o parâmetro date.timezone e coloque a sua timezone correta ex:
    date.timezone = America/Sao_paulo
    Lista com todos os Timezones

    http://www.php.net/manual/en/timezones.php

    Reinicialize o httpd e recarregue a página para verificar o novo horário.

    Pickup groups
    Já ia esquecendo deste detalhe…. Se um telefone estiver tocando na mesa ao lado, você pode digitar *8 no seu telefone e capturar a ligação, mas para isto é preciso realizar um pequeno ajuste. Tentando evitar confusões em ambientes maiores de telefonia separamos os telefones por grupo, evitando assim, coisas do tipo, o Adão do almox capturando por acidente uma chamada para o refeitório enquanto tentava atender o telefone do seu colega de serviço que foi ao banheiro para concretizar o número 2.
    Geralmente eu divido os pickup groups por salas, todos os telefones de uma sala ficam no mesmo grupo. Basta editar o extension novamente e adicionar um número no campo Pickup Group, aproveite para adicionar o mesmo número no Callgroup, um dia será útil.
    Observação: Alguem me reportou a muito tempo atrás que valores altos no pickupgroup apresentavam problemas as vezes, acho que isso é meio que lenda urbana mas nunca testei efetivamente, até porquê eu começo do grupo 1 em diante, na real, o número em si não afeta em nada nem aparece, é apenas para o asterisk saber que o telefone 1001 pode capturar chamadas do 1029.

    e agora?
    Depois destes passos, você já deve ter em mãos um servidor básico de telefonia pronto para entrar em produção com um funcionamento básico. Mas é claro que não vai parar por aí, ainda tens muito o que fuçar e muitos recursos a implementar. A minha dica é foco no que é mais convencional, como IVR (URA – atendimento automático), anúncios, filas (queues), grupos de chamadas (ring groups – procuro usar sempre 3 dígitos no range de 600 a 699), condições de tempo (time conditions – para ter atendimento diferenciado durante o dia e durante a noite por exemplo.), VoiceMail, Conferencias (estes eu gosto de usar 5 dígitos começando em 8 ex 80001 80002 sem conflitar com o dial plan), PIN sets, Call Parking, Callback e DISA.
    Outros itens importantes para verificar são:
    * Interligação entre 2 ou mais servidores de telefonia (recomendo IAX2 e não SIP)
    * Uso de provedores VoIP para redução de custos em interurbanos

    Recomendo aprender a usar e implementar BEM estes recursos que citei acima, pois são os itens mais úteis e mais pedidos por clientes.

    Também é muito importante sentir-se a vontade com comandos básicos e o debug/verbose do console do asterisk. Isto vai ajudar e muito na solução de problemas.

    Apenas para finalizar, eu sempre blasfemei contra o FreePBX quando eu precisava criar um contexto customizado direto extensions_custom.conf. Pior é que esta é uma coisa bem normal de um cliente pedir, e na maioria esmagadora das migrações que eu fiz, foi o único feature que o FreePBX não atendeu. Entretanto encontrei um módulo que gerencia muito bem os contextos customizados praticamente acabando com a necessidade de editar arquivos que ficam difíceis de manter (pois a cada mudança nas outbounds routes, os contextos customizados que usavam estas rotas, quebravam).
    Este módulo está disponível aqui: http://www.freepbx.org/trac/ticket/1447
    Mas quando que é preciso criar um contexto custom? O motivo mais frequente é quando o cliente pede para ter alguns telefones que não podem realizar chamadas externas (exemplo o ramal da portaria, vigilância, etc..) ou telefones que podem realizar apenas chamadas para números locais fixos. Este tipo de solicitação é bem frequente.

    Leitura recomendada: http://dumbme.mbit.com.au/piaf/piaf_without_tears.pdf

    Novamente espero ter ajudado de alguma forma.
    Sugestões, dúvidas ou xingamentos, basta comentar.