pfSense + Squid + Mysql (RESOLVIDO)
- 
 This post is deleted!
- 
 Problema resolvido... Favor fechar o tópico. 
- 
 Olá como resolveu? também tenho essa dúvida 
- 
 @amaica said in pfSense + Squid + Mysql (RESOLVIDO): Olá como resolveu? também tenho essa dúvida Na verdade como não tive muito tempo para resolver o problema de uma forma mais simples e eficaz, eu fiz um recurso técnico onde eu tenho a seguinte estrutura: 01 - pfSense (ip fixo dedicado 0.0.0.0) 
 02 - Servidor IIS (ip fixo dedicado 1.1.1.1)
 03 - Servidor MySQL (ip fixo dedicado 1.1.1.1)Hoje eu captura toda informação gerada pelo Squid utilizando uma conexão SFTP executada por um script PHP, com o qual eu efetuo o download do arquivo de log, importo ele para um banco de dados MySQL e efetuo a compactação do arquivo baixado, para mante-lo guardado mesmo este já estando no banco de dados. Ao término da importação e compactação eu ainda excluo o LOG antigo do pfSense para mante-lo sempre limpo. Fiz algumas alterações no LOG do Squid para um ajuste nas informações capturadas, apenas as necessárias, como data/hora/usuário/mac/ip/url Atualmente fiz um formulário de cadastro no Captive Portal onde todos os cadatros são registrados no MySQL junto com o log do Squid. Ainda não tive tempo para reduzir este processo. Até o momento tudo funciona 100%, mas com tempo e um pouco de paciência eu consigo fazer este processo "Do jeito certo". 
- 
 Vou passar minha solução: 
 primeiro:- 
pkg install mysql57-client-5.7.29 
- 
em outro host criei uma base de dados chamada squid e uma tabela chamada logs: 
 CREATE TABLElogs(
 IDint(11) NOT NULL AUTO_INCREMENT,
 DIA_SEMANAvarchar(200) DEFAULT NULL,
 MESvarchar(200) DEFAULT NULL,
 DIAvarchar(200) DEFAULT NULL,
 HORA_DATAvarchar(100) DEFAULT NULL,
 ANOvarchar(100) DEFAULT NULL,
 TAMANHO_BYTESvarchar(100) DEFAULT NULL,
 IPvarchar(100) DEFAULT NULL,
 METODOvarchar(200) DEFAULT NULL,
 METODO1varchar(100) DEFAULT NULL,
 METODO2varchar(100) DEFAULT NULL,
 URLvarchar(200) DEFAULT NULL,
 METODO3varchar(100) DEFAULT NULL,
 METODO4varchar(200) DEFAULT NULL,
 MIMEvarchar(200) DEFAULT NULL,
 PRIMARY KEY (ID)
 ) ENGINE=InnoDB AUTO_INCREMENT=1245166 DEFAULT CHARSET=latin1;
- 
no pfsense rodo o seguinte script agendado: 
 #!/bin/bash -x
 perl -pe 's/^\d+.\d+/localtime($&)/e;' /var/squid/logs/access.log | awk '{print$1"|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10"|"$11"|"$12"|"$13"|"$14}' > /var/squid/logs/accessOK
 mysql -h192.168.XX.XX -uXXX -pXXXX squid --local-infile=1 -e "load data local infile '/var/squid/logs/accessOK' into table logs FIELDS TERMINATED BY '|';"
 Não é uma solução "gloriosa" mas funciona. 
 Valeu
- 
- 
 @amaica said in pfSense + Squid + Mysql (RESOLVIDO): Vou passar minha solução: 
 primeiro:- 
pkg install mysql57-client-5.7.29 
- 
em outro host criei uma base de dados chamada squid e uma tabela chamada logs: 
 CREATE TABLElogs(
 IDint(11) NOT NULL AUTO_INCREMENT,
 DIA_SEMANAvarchar(200) DEFAULT NULL,
 MESvarchar(200) DEFAULT NULL,
 DIAvarchar(200) DEFAULT NULL,
 HORA_DATAvarchar(100) DEFAULT NULL,
 ANOvarchar(100) DEFAULT NULL,
 TAMANHO_BYTESvarchar(100) DEFAULT NULL,
 IPvarchar(100) DEFAULT NULL,
 METODOvarchar(200) DEFAULT NULL,
 METODO1varchar(100) DEFAULT NULL,
 METODO2varchar(100) DEFAULT NULL,
 URLvarchar(200) DEFAULT NULL,
 METODO3varchar(100) DEFAULT NULL,
 METODO4varchar(200) DEFAULT NULL,
 MIMEvarchar(200) DEFAULT NULL,
 PRIMARY KEY (ID)
 ) ENGINE=InnoDB AUTO_INCREMENT=1245166 DEFAULT CHARSET=latin1;
- 
no pfsense rodo o seguinte script agendado: 
 #!/bin/bash -x
 perl -pe 's/^\d+.\d+/localtime($&)/e;' /var/squid/logs/access.log | awk '{print$1"|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10"|"$11"|"$12"|"$13"|"$14}' > /var/squid/logs/accessOK
 mysql -h192.168.XX.XX -uXXX -pXXXX squid --local-infile=1 -e "load data local infile '/var/squid/logs/accessOK' into table logs FIELDS TERMINATED BY '|';"
 Não é uma solução "gloriosa" mas funciona. 
 ValeuEntão... A minha é basicamente a mesma coisa... Única diferença é que eu reajusto o log do squid apenas com as informações necessárias e depois efetuo o download do arquivo de log para um servidor windows onde eu efetuo a importação dele no mysql e ainda guardo o original. 
- 
- 
 O arquivo de rotação do SQUID está configurado para ser executando todos os dias às 00:00 e às 01:00 eu executo este script abaixo em um servidor IIS. Essa é a parte do script que eu uso para fazer a conexão SSH no pfSense e efetuar o download do arquivo access.log.0 gerado às 00:00 e efetuo a importação dos dados para o MySQL. Depois deste script eu efetuo a compactação do arquivo original e envio um e-mail em caso de erros no processo. <?php $host = "PFSENSE_IP"; $port = PFSENSE_SSH_PORT; $username = "USUARIO_SSH_PFSENSE"; $password = "SENHA_ROOT_PFSENSE"; $connection = NULL; $remote_file = "/var/squid/logs/access.log.0"; $local_file = "pfSense/access_".date("d-m-Y").".log"; try { $connection = ssh2_connect($host, $port); if(!$connection){ throw new \Exception("Não foi possível localizar $host:$port.<br/>"); } $auth = ssh2_auth_password($connection, $username, $password); if(!$auth){ throw new \Exception("Não foi possível autenticar-se com o usuário $username.<br/>"); } $sftp = ssh2_sftp($connection); if(!$sftp){ throw new \Exception("Não foi possível iniciar o SFTP.<br/>"); } if (file_exists("ssh2.sftp://".$sftp .$remote_file)) { echo "Arquivo access.log.0 encontrado com sucesso no SFTP"; if(ssh2_scp_recv($connection, $remote_file, $local_file)) { echo "O download do arquivo foi efetuado com sucesso.<br/>"; $conexao = conexao::getInstance(); $sql = "LOAD DATA LOCAL INFILE '$local_file' INTO TABLE logs FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n'"; $stm = $conexao->prepare($sql); $retorno = $stm->execute(); if ($retorno): echo "Informações importadas com sucesso.<br/>"; else: echo "Não foi possível importar as informações.<br/>"; endif; } else { echo "Não foi possível efetuar o download do arquivo.<br/>"; } if($echo_ssh2_scp_recv === "true") { if(ssh2_sftp_unlink($sftp, $remote_file)) { echo "Arquivo excluído com sucesso do SFTP.<br/>"; } else { echo "Não foi possível excluir o arquivo do SFTP.<br/>"; } } } else { echo "Arquivo access.log.0 não encontrado no SFTP"; } $connection = NULL; } catch (Exception $e) { echo "Erro devido a: ".$e->getMessage(); } ?>
- 
 Sua solução está muito boa, além de inserir na base tu gerencia este arquivo log. No meu caso só mando o conteúdo "tratado" para o banco. Parabéns