Log de Portas de Origem em Servidores Web

De Wiki BPF
Ir para: navegação, pesquisa

Introdução

Logs em Servidores Web são necessários não apenas para gerar estatísticas e realizar trobleshooting mas também para identificação dos usuários. Por muito tempo o registro do IP de origem foi suficiente para identificar um usuário que tenha acessado determinado site hospedado no servidor, porém com a escassez dos endereços IPv4 e o aumento da utilização de CGNAT por Provedores de Acesso torna-se necessário que Provedores de Aplicações, Hospedagem, Cloud, etc registrem também em seus logs além do endereço de origem a porta de origem da conexão.

Em especial no Brasil por disposição da Lei Nº 12.965, de 23 de Abril de 2014, o Marco Civil da Internet dispõe em seu Art. 15 que os Provedores de Aplicações devem "manter os respectivos registros de acesso a aplicações de internet, sob sigilo, em ambiente controlado e de segurança, pelo prazo de 6 (seis) meses".

Independente de qualquer disposição legal na eventualidade de um incidente de segurança é sempre necessário possuir todas as informações que auxiliem na identificação do usuário e além das opções configuradas por padrão na maioria dos servidores Web é necessário ajustar o formato do Log para incluir também a porta de origem, condição obrigatória para identificação de usuários atrás de CGNAT.

Mesmo para Provedores de Acesso que possuem poucos servidores hospedados em sua infraestrutura voltados apenas ao apoio de atividades administrativas ou operacionais (ERP, CRM, Monitoramento, Sistemas de Ticket, etc) que não são acessadas pelo público em geral é igualmente necessário que esses ajustes sejam feitos para resguardar a empresa de qualquer demanda legal ou ainda servir de apoio à uma investigação em um incidente de segurança. Considerando que hoje em dia é crescente o número de funcionários que trabalham em regime de home-office o registro de portas de origem torna-se algo ainda mais importante de se ter em todos os servidores que hospedam aplicações.

Servidores Web

Os servidores Web em geral não vêm configurados por padrão para registrar nos logs a porta de origem e é portanto necessário ajustar o formato do log para que isso ocorra. Este ajuste é bastante simples e não demanda recursos extras significativos tao pouco independe de mudanças na aplicação web hospedada por aquele servidor, ou seja, pode e deve ser realizado na configuração dos servidores Web independente dos possíveis ajustes à serem feitos também no código da aplicação hospedada. A mudança apenas acrescenta um campo extra após o IP de origem no log.

Note que na eventualidade da utilização de aplicações de análise e estatística de logs (ex: AWStats, Splunk, Graylog, ELK (Elasticsearch, Logstach and Kibana), Solarwinds Event & Log Manager, ManageEngine EventLog Analyser, e outros) pode ser necessário ajustar o formato de recebimento dos dados para incluir este campo extra. Este assunto é tratado mais abaixo na seção sobre Analisadores de Log.

Apache

Apache-logo.png

O servidor web Apache por padrão vem com diferentes formatos de log prontos para serem utilizados nas diferentes configurações de Vitual Hosts. O mais comum utilizado é o combined. Ele é definido no arquivo /etc/apache2/apache2.conf. Para ajustá-lo siga o procedimento abaixo:

  • Edite o arquivo /etc/apache2/apache2.conf
  • Busque pelo termo combined
  • A linha encontrada deverá conter: LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined"
  • Adicione o parâmetro %{remote}p após o parâmetro %h
  • A configuração deverá então ficar da seguinte maneira: LogFormat "%h %{remote}p %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined"
  • Salve o arquivo, verifique se a configuração do Apache não contém erros (apachectl configtest). O resultado deverá ser: Syntax OK
  • Aplique um Reload no Apache (systemctl reload apache2)

Resultado - Exemplo do output no log:

203.0.113.10 50181 - bpf [16/Dez/2018:08:30:44 -0300] "GET /index.html HTTP/1.1" 201 1126 "-" ""Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"

NGINX

Nginx-logo.png

No NGINX o formato do log predefinido encontra-se no arquivo /etc/nginx/nginx.conf e é chamado de mycombined. O procedimento abaixo exemplifica como ajustá-lo:

  • Edite o arquivo /etc/nginx/nginx.conf
  • Busque pelo termo mycombined
  • A linha encontrada deverá conter: log_format mycombined '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
  • Adicione o parâmetro $remote_port após o parâmetro $remote_addr
  • A configuração deverá então conter: log_format mycombined '$remote_addr $remote_port - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

Uso - Para utilizar este formato de log o parâmetro de configuração do vhost deverá conter:

access_log /var/log/nginx/access.log mycombined;

IIS Logo.png

IIS (Internet Information Services)

8.5 em diante

É necessário adicionar a variável REMOTE_PORT correspondente à porta de origem ao formato do log produzido pelo IIS seguindo o procedimento abaixo:

  • Abra o IIS 8.5 Manager e escolha o site/fqdn para modificar o formato do log. É possível fazer isso também de maneira global para que todos os sites passem a ter o mesmo formato.
  • Abra Logging e escolha Select Fields.
  • Na seção Custom Fields clique em Add Field.
  • Dê um nome para aquela Field (sem espaços ex:CLIENT_PORT).
  • Escolha Server Variables em Source Type.
  • Digite REMOTE_PORT na caixa Source.
  • Clique em OK.

Após realizado o procedimento será possível ver algo como o exemplo abaixo:

IIS Remote Port Logging.png

Dai em diante será possível ver a porta TCP de origem do cliente nos logs do IIS. Na imagem abaixo é possível ver um exemplo do output dos logs produzidos após a mudança com o destaque para a porta de origem.

IIS Remote Port Logging Example.png

8.0, 7.5 e 7.0

Para realizar este procedimento em versões anteriores do IIS é necessário instalar o Advanced Logging module disponível para download em: http://www.iis.net/downloads/microsoft/advanced-logging

Após instalado siga o seguinte procedimento:

  • Abra o IIS Manager e clique em Advanced Logging para o servidor ou para um website individualmente.
  • Por padrão o IIS Advanced Logging mantêm-se desativado após a instalação. Clique em "Enable Advanced Logging" no painel Actions.
  • Por padrão o Client Logging mantem-se desativado após a instalação. Clique em "Enable Client Logging" no painel Actions.
  • Clique em Edit Logging Fields no painel Actions. Isso permitirá adicionar variáveis extras ao formato padrão do log.
  • Dentro do Edit Logging Field clique em Add Field, preencha o Field ID com um nome (ex: Remote-Port) e em Source type selecione "Server variables", em Source name digite REMOTE_PORT e clique em OK
  • Retorne para a janela principal que exibe o formato do log normalmente definido como %COMPUTERNAME%-Server e dê um duplo clique para abrir os detalhes.
  • Em Selected Fields clique em Select Fields para adicionar o novo Field ID adicionado acima. É possível posicionar a nova Field na posição correta em que o output do log é esperado utilizando os botões Move Up e Move Down.
  • Clique em Apply no painel Actions

Referências

https://blogs.msdn.microsoft.com/amb/2015/11/12/iis-8-5-how-to-log-client-port-number/

https://docs.microsoft.com/en-us/iis/extensions/advanced-logging-module/advanced-logging-for-iis-custom-logging

https://blog.pierky.com/iis-7-5-client-source-port-logging/

Analisadores de Log

Os principais analisadores de log (ex: AWStats, Splunk, Graylog, ELK (Elasticsearch, Logstach and Kibana), Solarwinds Event & Log Manager, ManageEngine EventLog Analyser, e outros) normalmente levam em conta o formato padrão de log utilizado pelos principais servidores web. Quando existe qualquer mudança deste padrão é necessário ajustar a configuração do analisador de log para que não ocorra erro na interpretação dos dados do arquivo de log. Neste caso em questão apenas informar ao analisador que existe um parâmetro a mais além do endereço IP de origem para ser levado em conta. No caso do AWStats ele irá saber que deve ignorar aquele parâmetro após o endereço de origem pois ele não faz parte das estatísticas geradas.

AWStats

Awstats-logo.png

A configuração de um virtual host de AWStats para Apache combined logs normalmente contém os parâmetros: LogType=W e LogFormat=1. O formato padrão do LogFormat (que é equivalente à opção =1) é: "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

O procedimento para ajustar a configuração para levar em conta o parâmetro extra adicionado para registrar a porta de origem é o seguinte:

  • Edite o arquivo de configuração do awstats (normalmente no diretório /etc/awstats): ex: /etc/awstats/awstats.fqdn.exemplo.com.conf
  • Busque pela parâmetro LogFormat=1 e comente a linha insderindo um # no início dela
  • Adicione um formato customizado para este parâmetro logo abaixo forme o exemplo abaixo:
    • LogFormat = "%host %other %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
  • Salve o arquivo. Na próxima execução agenda o AWStats levará em conta o novo formato de log para gerar as estatísticas.

Para NGINX como o ouput fo log é equivalente ao do Apache portanto a mesma configuração para AWStats se aplica.

Autor: Fernando Frediani