Depois de um bom tempo usando o time_quota sem problemas tive um ligeiro contratempo: a atualização do pacote squid3-dev.
Ao atualizar o squid notei que o squid não subia o serviço. Fui iniciar ele via linha de comando e foi apresentado o seguinte erro:
[2.1-RELEASE][root@megazord.ntu0]/root(2): squid start
2014/01/15 13:34:48| Can't use proxy auth because no authentication schemes are fully configured.
FATAL: ERROR: Invalid ACL: acl time_quota external time_quota
Squid Cache (Version 3.3.10): Terminated abnormally.
CPU Usage: 0.037 seconds = 0.037 user + 0.000 sys
Maximum Resident Size: 40448 KB
Page faults with physical i/o: 0
Deu pra perceber logo que estava havendo algum problema com a acl do time_quota! Logo fui verificar se com a atualização algum caminho para o time_quota havia sido mudado ou se foi retirado do pacote, no entanto estava tudo ok.
Fui então ver o arquivo de configuração do squid e notei que a configuração que eu havia feito estava alterada. Na atualização do pacote o arquivo de configuração volta para o padrão (as configurações ficam, mas a posição em que elas estavam voltaram para o padrão).
Logo tive que fazer novamente a alteração do arquivo squid.inc e mover a declaração do custom options para exatamente antes da declaração Default block all to be sure, ficando assim:
// Allow the other ACLs as long as they authenticate
foreach ($password as $acl)
$conf .= "http_access allow password $acl\n";
}
}
// Custom User Options
$conf .= "# Custom options\n".sq_text_area_decode($settingsconfig['custom_options_squid3'])."\n\n";
$conf .= "# Default block all to be sure\n";
$conf .= "http_access deny allsrc\n";
return $conf;
}
Essa configuração eu já tinha feito antes e postado aqui, mas com a atualização do pacote ela se fez necessária novamente
@UnDr3aD:
a primeira coisa que tive que fazer foi mudar a posição do custom options no squid.inc. Isso porque uso o custom option para configurar o time_quota e ele precisa ficar depois das declarações de autenticação do proxy. No local padrão onde o custom options fica, o time_quota sempre dará erro.
coloquei o custom options depois das declarações de configuração para autenticação externa e antes da declaração de bloqueio de tudo. veja o trecho:
// Onto the ACLs
$password = array('localnet', 'allowed_subnets');
$passwordless = array('unrestricted_hosts');
if ($settings['unrestricted_auth'] == 'on') {
// Even the unrestricted hosts should authenticate
$password = array_merge($password, $passwordless);
$passwordless = array();
}
$passwordless[] = 'noauth';
$password = array_filter($password, 'squid_is_valid_acl');
$passwordless = array_filter($passwordless, 'squid_is_valid_acl');
// Allow the ACLs that don't need to authenticate
foreach ($passwordless as $acl)
$conf .= "http_access allow $acl\n";
if ($auth_method != 'cp'){
// Include squidguard denied acl log in squid
if ($settingsconfig['log_sqd'])
$conf .="http_access deny password sglog\n";
// Allow the other ACLs as long as they authenticate
foreach ($password as $acl)
$conf .= "http_access allow password $acl\n";
}
}
// Custom User Options
$conf .= "\n# Custom options\n".sq_text_area_decode($settingsconfig['custom_options_squid3'])."\n\n";
$conf .= "# Default block all to be sure\n";
$conf .= "http_access deny allsrc\n";
O custom option deve estar imediatamente antes do http_access deny allsrc
após o procedimento acima a configuração do time_quota pode ser feita pelo campo custom options do squid que vai funfar ok!
Mesmo depois de fazer essa alteração o squid não estava querendo subir. Tive que limpar o campo custom options na interface (recortei tudo que tinha lá e colei em um bloco de notas) e salvar a configuração para ele subir. Depois dele funcionando e verificado que as configurações estavam nos lugares corretos eu voltei as configurações existentes no custom options.
Está funcionando ok.
Pois é, essa foi mais uma experiência que tive com o time_quota. Espero que ajude a comunidade.