segunda-feira, 14 de maio de 2018

Repassar IP de Acesso do Proxy Reverso para o Servidor Web - Nginx + Apache

Introdução:

Quando um cliente solicita acesso a determinado site, ele na realidade acessa o Proxy reverso, que redireciona a conexão para o Servidor Web, porém o IP da requisição que consta nos logs do Servidor Web é o do Proxy Reverso.

Em algumas situações esse cenário não é adequado, como por exemplo, quando queremos liberar acesso à determinado endereço apenas para alguns IPs, ou em casos de auditoria. Para resolver a situação precisamos realizar as configurações no Nginx e no Apache.

Configurações no Nginx

Vou me ater apenas as opções que importam para o cenário proposto:
     location / {
     proxy_pass  http://<IP_Servidor_Web>;
     .
     .
     .
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

     }

 

Configurações no Apache

Para que o Apache entenda esses parâmetros ele precisa do módulo mod_remoteip.so, no caso do CentOS isso já é nativo:
# yum provides /etc/httpd/modules/mod_remoteip.so
Plugins carregados: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.unicamp.br
 * epel: mirror.globo.com
 * extras: ftp.unicamp.br
 * remi: remi.xpg.com.br
 * remi-safe: remi.xpg.com.br
 * updates: ftp.unicamp.br
httpd-2.4.6-67.el7.centos.6.x86_64 : Apache HTTP Server
Repo        : @updates
Resultado a partir de:
Nome de arquivo    : /etc/httpd/modules/mod_remoteip.so


O módulo já vai estar configurado para ser carregado automaticamente:
# grep remote * /etc/httpd/conf.modules.d/
00-base.conf:LoadModule remoteip_module modules/mod_remoteip.so


Mas precisamos realizar uma pequena alteração, acrescentando duas linhas:
# vi /etc/httpd/conf.modules.d/00-base.conf
LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy <IP_Proxy/Máscara>


Precisamos também alterar o padrão de logs do Apache (%a):
# vi /etc/httpd/conf/httpd.conf
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


E reiniciar o Apache:
# systemctl restart httpd

Segue abaixo um exemplo do log gerado:
<Site_Solicitado> <IP_Origem> - - [14/May/2018:07:54:17 -0300] "GET ..." "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
 
É isso, espero que seja útil.

Referências:

Alpha Computer and Web Services
Server Fault - Apache mod_remoteip and access logs

terça-feira, 3 de abril de 2018

Instalação do SNMP Builder no Zabbix 3.4.6

Introdução

O SNMP Builder é um projeto do giapnguyen, que sofreu um fork pelo mickvav, que o atualizou para a versão 3.2. Esse projeto também já fez parte, e tenho esperanças que um dia volte a fazer, do EveryZ.

Eu resolvi testar ele no Zabbix 3.4.6, e obtive sucesso, sendo necessário apenas uma alteração à mais do que o tutorial inicial.

Como muitas pessoas perguntam sobre esse projeto, mas tem dificuldades com o inglês, eu resolvi fazer um tutorial em Português sobre o assunto.

Instalação

Por questão de organização eu sempre crio um diretório /install na máquina, e deixo todas as instalações lá. No meu caso o Zabbix está instalado no /var/www/html/zabbix/. Então faça as adaptações necessárias ao seu cenário.

# cd /install

# wget https://github.com/mickvav/snmpbuilder/archive/master.zip

# cd /var/www/html/zabbix/

# unzip /install/master.zip

# mv snmpbuilder-master/snmp_builder* .

# rm -rf snmpbuilder-master


Ajustes

O importante nesse arquivo é definir o path das MIBs:

# vi snmp_builder.php
define('MIBS_ALL_PATH', '/var/www/html/zabbix/snmp_builder/mibs:/usr/share/snmp/mibs');


No arquivo menu.inc.php, iremos criar a entrada do SNMP Builder no Zabbix:
# vi include/menu.inc.php
Na linha 220:

[
        'url' => 'snmp_builder.php',
        'label' => 'SNMP Builder'
],

Seu Código vai ficar assim:


                'popup_httpstep.php'
        ]
],
[        'url' => 'snmp_builder.php', 
        'label' => 'SNMP Builder'
],
[        'url' => 'maintenance.php',
        'label' => _('Maintenance')
],  

# vi jsLoader.php

Na linha 51:
        // snmp_builder
        '../snmp_builder/Tree.js' => '',
        '../snmp_builder/snmp_builder.js' => '',
        '../snmp_builder/DynTable.js' => '',
        // /snmp_builder


Ao acessar o menu Configuração, você vai ver o menu SNMP Builder. Ao tentar gravar o item no template surge o erro referente ao valor do campo history.
Erro ao adicionar item ao template

Para solucionar o problema, vamos editar o arquivo snmp_builder.php, essa foi a única alteração adicional que eu precisei fazer. Nesse caso eu configurei retenção de um dia (86400 segundos).

# vi snmp_builder.php
Na linha 240:

'history'               => 86400,


E agora é possível criar o item normalmente.
Item adicionado ao template