Logando conexões HTTPS e gerando logs para o Sarg

Publicado por Paulo Sérgio Correia em 17/12/2014

[ Hits: 5.402 ]

 


Logando conexões HTTPS e gerando logs para o Sarg



Após perceber que o Squid não guarda o log de conexões HTTPS, a não ser que ele esteja configurado no navegador e que o Squid no modo "Squid-in-the-middle", pode ser um tormento.

Tive uma ideia que pode ser útil a todos: criar uma regra no IPtables que gera um log das conexões HTTPS (porta 43).

Se a máquina for um Firewall, use a seguinte regra:

iptables -t nat -A PREROUTING -i -p tcp -m tcp --dport 443 -j LOG  --log-level 4 --log-prefix "log_https "

Se não for:
  • Substitua -t nat por nada.
  • E PREROUTING por OUTPUT.

A regra de IPtables vai gerar no /var/log/messages uma linha por conexão a porta 443, algo como:

  Dec 16 17:00:14 server kernel: log_https IN=eth0 OUT=
  MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=XXXX.XXX.XXXX.XXX DST=XXX.XXX.XXXX.XXXX
  LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=397 DF PROTO=TCP SPT=52045 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0


Só para não lotar o messages, separarei ele editando o /etc/rsyslog.conf e colocando uma linha assim:

kern.*                                                 /var/log/iptables.log

salve o rsyslog e reinicie o serviço com o comando: /etc/init.d/rsyslog restart

A próxima conexão já deve ir para este log separado.

Agora, para gerar um log para o Sarg, será preciso criar um script que vai ler os dados do /var/log/iptables.log e converter ele para o formato do /var/log/squid/access.log.

Chamei este script de sshlog.sh, com o seguinte conteúdo

#!/bin/bash

exec < /var/log/iptables.log

year=`date +"%Y"`

dia=`date +"%d"`

c=0
d=0

while read data

do

let c=$c+1
let d=$d+1
#c=`expr $c + 1`
#d=`expr $d + 1`

lmounth=`echo $data | awk '{ print $1 }'`
day=`echo $data | awk '{ print $2 }'`
hour=`echo $data | awk '{ print $3 }'`

if [ "$dia" == "$day" ]; then

case $lmounth in
Jan)
out="01"
;;
Fev)
out="02"
;;
Mar)
out="03"
;;
Abr)
out="04"
;;
Apr)
out="04"
;;
Mai)
out="05"
;;
May)
out="05"
;;
Jun)
out="06"
;;
Jul)
out="07"
;;
Ago)
out="08"
;;
Aug)
out="08"
;;
Set)
out="09"
;;
Out)
out="10"
;;
Oct)
out="10"
;;
Nov)
out="11"
;;
Dec)
out="12"
;;
Dez)
out="12"
;;

esac

fdate=`echo $year"/"$out"/"$day" "$hour`
tdate=`date -d "$fdate" "+%s"`

iporg=`echo $data | awk '{ print $10 }' | awk -F"=" '{ print $2 }'`
ipdet=`echo $data | awk '{ print $11 }' | awk -F"=" '{ print $2 }'`

if [ "$c" -gt "9" ]; then
c=1
fi

echo $tdate.00$c"    "$d" "$iporg" TCP_MISS/200 0 GET http://"$ipdet" - DIRECT/"$ipdet" text/html" >> /var/log/squid/sshlog.log

fi

done

#fim do script

Obs. 1: o comando let, às vezes, não é interpretado corretamente por alguns sistemas Linux, por isto logo abaixo temos expr comentados. Se for o caso, comente o let e descomente os expr.

Obs. 2: não é possível pegar a quantidade de bytes trafegados e no relatório do sarg, vai sair o tempo zerado.

Após gerar, basta concatenar o sshlog.log com o acess.log, pode ser necessário dar um sort para concatenar, conforme a linha do tempo e após isto rodar o Sarg.

Já coloquei em produção.


Abraços a todos,
Paulo.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

SRWare Iron - Uma alternativa à dupla Chrome e Chromium

Docky sem âncora

Email POP: endereços de alguns servidores

Instalando e configurando o script Bandlimit no Debian

Bloquear acesso não autorizado ao Facebook com iptables

  

Comentários
[1] Comentário enviado por mzambretti em 17/12/2014 - 15:27h

Consegui fazer funcionar! Percebi que ele apenas coloca os IP externos e não resolve para nome. Seria possível?

[2] Comentário enviado por psctec em 17/12/2014 - 20:05h

Mauricio,

Sim ele pega apenas os IP's externos.
Teria que criar uma variavel site que pega o host $ipdet | awk '{ print $5 }' mas isto pode ser muito lento.
E usar esta variável para a saida no lugar da $ipdet.
Pois imagine um acesso de 50 usuários a sites https, fora que nem o host pode pegar o "site" de forma correta.
Mas ao clicar nos IP's, por exemplo do facebook, ele abre o facebook.

Paulo

[3] Comentário enviado por felipeassuncaoj em 27/01/2017 - 20:14h

Show, muito obrigado. Fiz umas pequenas modificacoes e ta 100%.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts