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