[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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 <interface de rede> -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="" 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: O comando let as vezes não é interpretado corretamente por alguns linux por isto logo abaixo tem os expr comentados, se for o caso comente o let e descomente os expr.

Obs2: 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

Reply to: