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 |