Logando conexões HTTPS e gerando logs para o Sarg

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

[ Hits: 5.379 ]

 


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

Configuração total do Mozilla

HTB, uma alternativa para quem deseja limitar banda

Instalar Firefox 3.5 no Ubuntu ou qualquer distro Debian like

Compartilhando Internet com Centos 5.X

Bloqueando acesso ao servidor a utilizadores do TOR

  

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