terça-feira, 30 de dezembro de 2014

Envio de e-mail criptografado pelo Zabbix usando Postix


Introdução


Prezados colaboradores,

Em primeiro lugar gostaria de dizer que estou muito feliz por contribuir com o meu primeiro artigo. Sempre quis contribuir, mas toda vez que descobria algo novo, alguém já o tinha descoberto antes ou já tinha contribuído com algo similar. Desta vez, acredito que minha contribuição será no mínimo inovadora.

Recentemente instalei e configurei o ZABBIX 2.4 no ambiente que trabalho. Desde a versão antiga que trabalhara, versão 2.0, verifiquei que o ZABBIX, mesmo na sua versão mais recente, só envia alertas utilizado o protocolo SMTP (porta 25). O problema é que foi determinado pela CGI no Brasil o bloqueio da porta 25 (SMTP) pelos provedores de internet, e mesmo desconsiderando essa decisão, os grandes provedores de e-mails não mais utilizam esse protocolo, passando utilizar o SMTPS portas 587 ou 465 para envio de e-mails por medidas de segurança e redução de SPAM (Gmail, Hotmail, Yahoo).

Desta forma não temos como fugir, tivemos que fazer a alteração de todos os nossos serviços que utilizavam a porta 25 para a porta 587, porém há aplicativos como o ZABBIX que não possui suporte para isso, pois não se trata simplesmente de alterar a porta. O SMTPS exige autenticação e trabalha com parâmetros diferentes do SMTP, por isso é necessário que a aplicação tenha suporte.

Busquei várias alternativas na internet, mas nenhuma solução funcionou. Existem diversos tutorias do ZABBIX utilizando SendEmail para enviar e-mails, mas não consegui fazê-lo funcionar de jeito nenhum. Até consegui fazê-lo funcionar, mas de uma forma bem rústica. O alerta enviava apenas "SERVIDOR COM PROBLEMA", mas isso não basta. Tenho vários servidores, preciso saber qual deles deu problema e qual o tipo de problema. Então comecei a levantar soluções.

Hipótese 1

Armazenar as variáveis das TRIGGERs do ZABBIX em um arquivo e encaminhar em anexo via SendEmail.

Pareceu a solução mais eficaz no momento, mas não imagino como capturar as variáveis das TRIGGERs do ZABBIX, tentei de diversas formas mas sem sucesso.

Hipótese 2

Alterar o código fonte do ZABBIX para incluir a função de encaminhar e-mails via SMTPS.

Pelo pouco que entendi analisando o código do ZABBIX, ele armazena tudo que é configuração no banco de dados MYSQL, e conforme as funções vão sendo chamadas ele vai montando a informação fazendo consultas nas tabelas do banco e combinando com as variáveis PHP. É um código bem complexo para mim, se eu tivesse muito familiaridade com PHP, talvez seria mais fácil, mas mesmo assim eu levaria muito tempo para entender o código, além disso, alterar o código fonte de uma aplicação tão componenizada como essa é sempre um grande risco de interferir em alguma outra função.

Hipótese 3

Configurar um servidor POSTFIX escutando a porta 25 e que redirecione e-mails para a porta 587. Sem dúvidas a solução mais eficiente que pensei. Tão óbvia, que não sei porque pensei nas outras duas soluções primeiros. As outras duas soluções resolveriam apenas o problema no ZABBIX, já esta terceira solução resolverá o problema de todas as aplicação que não possuem suporte ao SMTPS.
 

Cenário


É interessante explicar o cenário da minha rede para que entendam como configurei o serviço e possam adaptá-lo a realidade de vocês. Tenho um servidor dedicado rodando o sistema operacional VMWARE ESXI 5.5, e o ZABBIX e o POSTFIX estão instalados cada um em uma máquina virtual diferente:

ZABBIX (MÁQUINA VIRTUAL):
  • HD: 5GB
  • S.O: Debian 7.0 (Wheezy)
  • ETH0 10.1.1.1/24 (INTERNO)
  • ETH1 192.168.1.1/24 (INTERNET)

POSTFIX (MÁQUINA VIRTUAL):
  • Processador: 4 Núcleos
  • HD: 5GB
  • S.O: Debian 7.0 (Wheezy)
  • ETH0 10.1.1.2/24 (INTERNO)
  • ETH1 192.168.1.2/24 (INTERNET)

No meu caso as duas máquinas estão atrás de um firewall com conexão a internet. O POSTFIX precisa, obviamente, de conexão a internet para se conectar ao servidor SMTPS, a não ser que vocês tenham um servidor interno que escute a porta 587. No meu ambiente o ZABBIX está conectado à internet porque monitoro alguns serviços na nuvem, além dos meu servidores internos.

Incialmente configurei o POSTFIX no mesmo servidor do ZABBIX, mas o redirecionamento não funcionava de jeito nenhum e analisando os LOGs percebi que o servidor recusava conexões do localhost. Pesquisei um pouco e vi relatos que realmente não é recomendável fazer redirecionamentos usando o locahost, por isso decidi criar dois servidores separados, e depois disso não tive problemas de pacotes rejeitados.

Porém, pelo o que pesquisei, não chegaram a falar que não funciona, mas disseram que se precisa alterar algumas coisas e fazer testes. Portanto, recomendo que separem os servidores, mas fica um desafio para quem quiser configurar os dois serviços no mesmo servidor.

Instalação do POSTFIX


Não vou abordar a instalação e configuraçao do ZABBIX porque foge o objetivo desse artigo cujo objetivo é resolver o problema de envio de e-mails via SMTPS. Caso não tenha o ZABBIX instalado, recomendo a instalação da versão 2.4 no DEBIAN 7.

Instalação do POSTFIX:

# apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules

Após a instalação aparecerá um WIZARD pedindo algumas configurações. Esse WIZARD é responsável pela criação do arquivo abaixo. Portanto, pode preencher as informações aleatoriamente, pois o que valerá será a configuração conforme exemplo abaixo.

Não se esqueça de substituir os parâmetros entre aspas pelos IPs e Hostnames do seu servidor ZABBIX e POSTFIX respectivamente. A configuração está definida para usar o GMAIL. Se desejar utilizar outro provedor, terá que alterar os parâmetros obviamente. Recomendo dar uma lida nas configurações do main.cf para ter uma noção.

# vi /etc/postifix/main.cf

#See /usr/share/postfix/main.cf.dist for a commented, more complete version
#Debian specific: Specifying a file name will cause the first
#line of that file to be used as the name. The Debian default
#is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

#appending .domain is the MUA's job.
#append_dot_mydomain = no
#Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no

#TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
#information on enabling SSL in the smtp client.
myhostname = "HOSTNAME POSTFIX"
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = HOSTNAME POSTFIX, localhost.localdomain,"IP DO ZABBIX", localhost

#gmail
relayhost =
mynetworks ="IP DO ZABBIX" [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
 

Configuração da senha e certificados


Senha a configuração da senha e certificados, é indispensável para o funcionamento do POSTFIX:

# vi /etc/postfix/sasl_passwd

Adicione a linha abaixo:

[smtp.gmail.com]:587 seuemail@gmail.com:SENHA

Obs.: troque a SENHA pela senha da conta do e-mail.

Salve o arquivo e altere as permissões:

# chmod 400 /etc/postfix/sasl_passwd

Em seguida execute:

# postmap /etc/postfix/sasl_passwd
# cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | tee -a /etc/postfix/cacert.pem
# /etc/init.d/postfix reload


Testando o funcionamento

O comando abaixo testa a configuração, logicamente, deve-se substituir o e-mail final pelo e-mail que receberá o teste. Caso o teste esteja OK, deve-se configurar os serviços para utilizar o SMTP com o IP do servidor POSTFIX, porta 25, e o e-mail de destino:

# echo "Test mail from postfix" | mail -s "Test Postfix" you@example.com

Caso o teste acima tenha sucessso, configure o serviço de e-mail no ZABBIX e simule o acionamento de uma TRIGGER. Lembrando que o servidor SMTP vai ser o IP do POSTFIX.

Espero que este tutorial seja útil. Apesar de ser algo simples, não achei nenhuma solução similar na internet que funcione tão bem.

Fonte:

Nenhum comentário:

Postar um comentário