Como identificar o IP real de um usuário do meu site

Quando seu site está usando os serviços da GoCache, todos os acessos ao seu servidor de hospedagem ocorrem através dos nossos IPs.

Para identificar o endereço IP dos seus usuários, a GoCache envia o cabeçalho "X-Forwarded-For". 

 

Qual Funcionalidade do Cabeçalho XFF?

O Cabeçalho X-Forwarded-For (XFF) é o cabeçalho padrão para identificar o IP real do visitante em sua hospedagem.

Como a GoCache realiza a busca de conteúdos na hospedagem, o IP real dos usuários são registrados no cabeçalho "X-Forwarded-For" e não pelo "REMOTE_ADDR".

 

Como Ativar XFF na Hospedagem Usando Apache?

Se está sendo utilizado o Apache 2.4, siga os seguintes passos:

CentOS

O arquivo de configuração é o httpd.conf. Nele é necessário fazer as seguintes alterações:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy

SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded

CustomLog "logs/access_log" combined env=!forwarded

CustomLog "logs/access_log" proxy env=forwarded
Copy

Em sequência é necessário reiniciar o serviço.

systemctl restart httpd

Ubuntu / Debian

O arquivo de configuração é o /etc/apache2/sites-available/000-default.conf.

É necessário ativar alguns módulos do Apache:

a2enmod remoteip && a2enmod headers

Em sequência fazer as modificações no arquivo de configuração:

SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" forwarded

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined env=!forwarded

CustomLog ${APACHE_LOG_DIR}/access.log forwarded env=forwarded
Copy

Depois, basta reiniciar o serviço:

systemctl restart apache2

Se você usa o Apache 2.2, é necessário fazer a seguinte modificação:

A configuração padrão do logformat é:

LogFormat "%h %l %u %t "%r" %>s %b" common

É necessário modificar para a seguinte maneira:

LogFormat "%h %l %u %t "%r" %>s %b %{X-Forwarded-For}i" common

ou

LogFormat ""%h" "%l" "%u" "%t" "%r" "%>s" "%b" "%{X-Forwarded-For}i"" common

Em sequência é necessário reiniciar o serviço.

 

Como Ativar XFF na Hospedagem Usando Nginx?

Você tem duas opções de como fazer isso.

Opção 1 - Alterando o formato do Log.

No arquivo /etc/nginx/nginx.conf você precisa fazer a mudança de algumas entradas, o arquivo deve estar dessa forma:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;
Copy

Mudar para aparecer o cabeçalho X-Forwarded-For:

log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent"';
access_log  /var/log/nginx/access.log  main;
Copy

Depois disso é necessário reiniciar o serviço do Nginx

systemctl restart nginx

Opção 2 - Usando o módulo "real_ip"

Caso o seu Nginx tenha sido compilado com a opção --with-http-realip_module, é possivel editar o arquivo /etc/nginx/nginx.conf com as diretivas set_real_ip_from e real_ip_header informando os IPs da GoCache (lista de IPS da GoCache: https://gocache.com.br/ips)

# Diretivas para configurar o real_ip/XFF nos arquivos de Log.
    set_real_ip_from    IP1-Gocache;
    set_real_ip_from    IP2-Gocache;
    ...
    real_ip_header      X-Forwarded-For;
Copy

Depois disso é necessário reiniciar o serviço do Nginx

systemctl restart nginx

 

Coletando XFF com PHP

É possível verificar esse cabeçalho utilizando o PHP.

Para isso é necessário verificar a variável _SERVER da requisição buscando nesse dicionário o cabeçalho que deseja, no caso HTTP_X_FORWARDED_FOR:

$_SERVER["HTTP_X_FORWARDED_FOR"]

 

Atenção

Caso os logs estejam customizados, será necessário editar o Log Format correspondente.

 

Exemplo: Se GoCache se comunica pela porta 443, pode ser que a requisição seja registrada nos logs ssl_request_log, dessa forma é necessário editar o arquivo que define o Log Format correspondente.

 

IMPORTANTE

Reiniciar o serviço significa que você irá reiniciar a sua aplicação, ou seja, pode causar indisponibilidade temporária até toda a reinicialização for feita

Tem mais dúvidas? Envie uma solicitação

0 Comentários

Artigo fechado para comentários.