Tutorial: log da porta de origem para IPv4 compartilhado
Com o esgotamento do IPv4 e a utilização do CGNAT nas operadoras, o compartilhamento de endereços IPv4 entre diversos clientes é, infelizmente, algo inevitável durante algum tempo, na transição para o IPv6.
Imagine que o seu website foi atacado ou teve um acesso indevido. Hoje em dia, utilizando o IP de origem e o instante do acesso é possível identificar o dispositivo que originou este ataque.
Entretanto, com a utilização do CGNAT nos provedores de acesso, esta consulta pode resultar em até centenas de suspeitos, dificultando, e talvez até impossibilitando, a identificação do originador do ataque. Para fazer a identificação única do usuário atrás de um CGNAT é necessário saber também qual a porta de origem utilizada na comunicação, mas esta informação não é salva por padrão nos logs dos servidores. Este tutorial vai ensinar como adicionar aos logs dos principais servidores web (Apache, Microsoft IIS e Nginx) a porta de origem.
No Apache o arquivo de configuração, cuja localização depende do sistema operacional e distribuição utilizada, é o local onde se define o formato do log. Um formato típico é para a parte de definição dos logs é:
ErrorLog /var/log/httpd/error_log LogLevel warn LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedEste formato típico não inclui a porta de origem, para fazer isto é preciso adicionar “%{remote}p” ao log. Isto adiciona a porta de origem. Com isso o log do Apache ficaria assim:
ErrorLog /var/log/httpd/error_log LogLevel warn LogFormat "[%h]:%{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Note que foi colocado [ ] no %h que é o endereço de origem. Isto tem o objetivo de separar o endereço de origem da porta garantindo que um IPv6 que seja armazenado não gere confusão entre os “:” do IPv6 e o “:” da porta. O endereço IPv4 ficará [200.0.113.1]:54321 e o endereço IPv6 ficará [2001:db8:9:8:1:2:3:4]:54321.
O Microsoft IIS não possui a possibilidade de log de porta de origem na configuração padrão, mas é possível instalar uma extensão chamada “Advanced Logging” que possuí esta funcionalidade.
Após a instalação desta extensão é necessário habilitá-la no IIS Manager pois ela fica desativada por padrão. Essa ativação pode ser feita no servidor e será válida para todos os sites, ou pode ser feita em cada um dos sites desejados que estão presentes no servidor.
O Advanced Logging permite que uma série de dados que por padrão não são armazenados possam fazer parte do log, entretanto este novo log não é integrado com o log padrão do IIS. Assim, para que o log das portas seja utilizável é necessário que o log adicional seja correlacionado com o log padrão ou que este log possua as informações relevantes para independer do log padrão. Uma boa opção é criar este log no formato recomendado pelo W3C e adicionar a porta de origem: (https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/676400bc-8969-4aa7-851a-9319490a9bbb.mspx?mfr=true)
As capturas de tela abaixo mostram um exemplo de como criar o campo “Client Port” e como adicionar este campo ao log gerado:
Mais detalhes sobre como habilitar o “Advanced Logging” no IIS podem ser encontrados em: https://technet.microsoft.com/en-us/library/ee791852(v=WS.10).aspx
https://www.iis.net/learn/extensions/advanced-logging-module/advanced-logging-for-iis-custom-logging
No Nginx, o local do arquivo de configuração depende, assim como no Apache, do sistema operacional e distribuição utilizada, mas uma vez encontrado este arquivo, basta procurar pela configuração dos logs, por exemplo:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Para que este log para a ter a porta de origem basta adicionar “$remote_port” na linha de configuração do log. A configuração fica da seguinte forma:
log_format combined '$remote_addr $remote_port - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Lembre que a mudança no formato dos logs gera alguns impactos como:
- Aumento no tamanho do log
- Se você usa algum parser ou programa para analisar os log automaticamente, o novo log pode ser incompatível ou o analisador pode precisar ser modificado ou reconfigurado
Apesar do trabalho adicional para a verificação dos demais sistemas, quando da alteração dos logs, é importante que ela seja feita. Caso contrário. você está correndo o risco de não ser capaz de identificar a origem de um acesso, se isso for necessário, por exemplo, na hipótese de uma fraude usando seu sistema. Contudo, é bom reforçar: não deixe de lado a ativação do IPv6 no website. O compartilhamento de IPs versão 4 é só um paliativo, a ser usado por pouco tempo. Caso tenha alguma dúvida ou comentário sobre assunto, faça um comentário abaixo ou envie para nós uma mensagem.