quarta-feira, 9 de junho de 2010

Personalize as páginas internas do Squid

O servidor Proxy Squid possui páginas em html que geralmente contém mensagens de erros que são enviados aos hosts clientes quando ocorrem os diversos eventos inesperados pelo Squid. A minha proposta é melhorar essas páginas tornado-as mais compreensíveis aos leigos e com um visual melhorado e atraente, com a finalidade de ser facilmente compreendido aos usuários dos computadores.
O Squid guarda em geral na pasta /usr/share/squid/errors/ paginas em formato de html de todos os eventos internos do servidor, por causa da colaboração de diversos desenvolvedores é possível encontrar neste diretório, outros subdiretórios que contém as páginas de erros no idioma oficial de vários países, inclusive o português. Mas para que o Squid direcione as mensagens de erros para o português ao invés do inglês (padrão) é necessário simplesmente indicar no arquivo “squid.conf” o diretórios que contém as páginas de erros no idioma local, a seguinte linha exemplifica como deve ser adicionada no arquivo de configuração do proxy a opção da língua portuguesa nas mensagens de erros do servidor:
No final do arquivo adicione
error_directory /usr/share/squid/errors/Portuguese
Outra questão importante para que o Squid exiba estas mensagens de erros, é que o proxy deve ser configurado diretamente nos navegadores web da rede, isto é, se for usado proxy transparente a maioria do eventos não ocorrerão no Squid e assim ele não detectará a maioria dos erros. Um exemplo bem típico: Quando é ativado o proxy transparente somente a porta 80 é redirecionada ao proxy e não a 53(DNS), neste contexto se um host cliente requisitar um site www.estesitenaoexiste.com.br (o erro mais comum é na digitação correta do site) na intenção de acessar outro qualquer, o servidor DNS que está configurado no host cliente será o requisitado e ele não apresentará nenhuma resposta positiva, já que ninguém possui aquele domínio registrado, mas vamos supor agora que o site esteja registrado então o site existirá, porém vamos dizer que por algum motivo o servidor do site esteja fora do ar. Na resolução DNS irá retornar o ip do servidor que a página, neste momento o navegador possui o ip do site, então requisitará ao gateway na porta 80 através do protocolo de aplicação http o site em questão, mas lembrando que o gateway possui uma regra no iptables (iptables –t nat –A) que ao entrar um pacote no host antes mesmo que seja definido o destino do fragmento, ou seja, antes do seu roteamento (PREROUTING) e que este pacote seja tcp (-p tcp) destinado na porta do protocolo http (--dport 80) seja redirecionado (-j REDIRECT) na porta padrão do servidor proxy Squid (--to-port 3128), portanto somente a requisição do protocolo web http ficará a cargo do squid, caso ocorra algum erro o squid exibira como uma página em html relatado o erro, isto não acontece como já foi dito somente acima, quando o proxy é setado diretamente nos navegadores web da rede interna.
Então fica quase esclarecido por que é melhor setar diretamente a configuração do proxy nos navegadores, mas eu disse quase, outra questão muito importante e tem sido uma dúvida constante de quem estar configurando um proxy transparente pela primeira vez, é quando alguém requisita algum site que por sua vez se auto redireciona para https como por exemplo, o gmail e o orkut, neste caso o protocolo https usa a porta tcp 443 e este não passará pelo proxy já que não foi configurado no browser quem seria o proxy e também (até eu sei) não existe como fazer um dns ser repassado para o squid muito menos para o https, já que eles funcionam respectivamente na porta 53 e 443 e o squid não trabalha desta forma. O squid é um servidor proxy e um cliente DNS, porém ele armazena em cache a resolução DNS. Para que ele funcione é necessário colocar a seguinte regra no iptables posteriormente ao do proxy transparente:
#WAN=interface_rede_externa
iptables –t nat –A POSROUTING –o $WAN –j MASQUERADE
Se usar proxy tansparente deve colocar a regra acima, mas se você quiser as requisições plenas pelo squid não a coloque, porque se um usuário mais esperto pode retirar a configuração do proxy e navegar diretamente sem passar pelas restrições do squid. Além do mais o squid só aceita conexões de ssl, ftp, gopher e socks quando as configurações de proxy são feitas diretamente nos navegadores e no escopo desta dica, o squid só exibi as mensagens de erros nesta mesma situação. Mas se preferir usar o proxy transparente é necessário colocar a regra acima no iptables para os outros protocolos funcionem. Lembrando que as mensagens não aparecerão.
Já ia esquecendo outro assunto muito abordado no site www.vivaolinux.com.br é o porquê o squid não autentica com proxy transparente, bom é só pensar o squid com proxy transparente está setado pelo firewall que em toda conexão com destino a PORTA 80 será redirecionada, mas somente a porta 80 e as outras, como fica? Então não tem como fazer
Voltando ao assunto principal
Na pasta “/usr/share/squid/errors/” possui todas as linguagens suportadas pelas mensagens de erro no squid as linguagens das mensagens são representadas pelos diretórios a seguir:
hostname:/usr/share/squid/errors# ls
Azerbaijani
Bulgarian
Catalan
Czech
Danish
Dutch
English
Estonian
Finnish
French
German
Greek
Hebrew
Hungarian
Italian
Japanese
Korean
Lithuanian
Polish
Portuguese (<= aqui)

Romanian
Russian-1251
Russian-koi8-r
Serbian
Simplify_Chinese
Slovak
Spanish
Swedish
Traditional_Chinese
Turkish
No nosso caso será a ser pasta “/usr/share/squid/errors/Portuguese” que terá seus arquivos personalizados ao nosso gosto. Todas as pastas de idioma possui a mesma quantidade de arquivos e com mesmos nomes indicando o tipo de evento interno do proxy, a estrutura desta pasta é a seguinte:
ERR_ACCESS_DENIED
ERR_CACHE_ACCESS_DENIED
ERR_CACHE_MGR_ACCESS_DENIED
ERR_CANNOT_FORWARD
ERR_CONNECT_FAIL
ERR_DNS_FAIL
ERR_FORWARDING_DENIED
ERR_FTP_DISABLED
ERR_FTP_FAILURE
ERR_FTP_FORBIDDEN
ERR_FTP_NOT_FOUND
ERR_FTP_PUT_CREATED
ERR_FTP_PUT_ERROR
ERR_FTP_PUT_MODIFIED
ERR_FTP_UNAVAILABLE
ERR_INVALID_REQ
ERR_INVALID_RESP
ERR_INVALID_URL
ERR_LIFETIME_EXP
ERR_NO_RELAY
ERR_ONLY_IF_CACHED_MISS
ERR_READ_ERROR
ERR_READ_TIMEOUT
ERR_SHUTTING_DOWN
ERR_SOCKET_FAILURE
ERR_TOO_BIG
ERR_UNSUP_REQ
ERR_URN_RESOLVE
ERR_WRITE_ERROR
ERR_ZERO_SIZE_OBJECT
README
Podemos observar que apesar de serem escritos em html eles não possui esta extensão, isto por que o squid quando exibe a mensagem de erro, ele apresenta-o ao browser como um arquivo comum de texto em html, já que o squid não é um servidor web e quando os erros ocorrem o squid não redireciona para um, com exceção de paginas negadas que podem ser redirecionadas a uma página comum. E agora como podemos personalizá-los como queríamos, já que estamos numa empresa e era interessante mostrar elementos gráficos como exemplo o logotipo da empresa, para conceber uma página mais elegante e mais entendível a nível comum de usuários. Mas temos a solução, ao colocar imagens no tags html basta colocar imagens que estão disponíveis via web pelos computadores da rede atendida pelo squid, isto é, se colocarmos imagens diretamente na mesma pasta onde está o idioma português o navegador não conseguirá acessar as imagens, mas podemos colocar tags referenciando imagens existentes no site da empresa ou mesmo criar um pequeno servidor web no próprio computador onde está proxy apenas para referenciar as imagens, exemplificando:

Vamos modificar o arquivo ERR_DNS_FAIL que representa o erro mais comum “a falha de resolução de dns”.

Conteúdo padrão do arquivo /usr/share/squid/errors/Portuguese/ERR_DNS_FAIL
Ficando Assim:
Clique aqui ou na imagem para ampliar

Personalizando


Clique aqui ou na imagem para ampliar
E agora ficou bem melhor, né” na página padrão os usuários leigos “a maioria tenha certeza” vão pensar que a rede não presta e tudo mais de ruim que venha na cabeça deles, principalmente em lan houses na qual tive a experiência de ouvir uma pessoa dizendo que a interner tinha caído quando a figura rara tentou acessar www.youtube.com.br, mas isso antes do domínio ser registrado pelos mesmos, aí tive a idéia de personalizar as mensagens tornando-as mais visíveis a estas pessoas. Lembrando que vocês devem trocar o endereço da imagem na tag por um endereço acessível pela web. Ok! E também troque o nome FIRENET lan house pelo nome fantasia de sua empresa.
As páginas estão nos seguintes endereços para download como exemplo e estão compactadas em forma de rar e zip. O arquivo traz as modificações de forma semelhante ao que foi apresentado na imagem acima.
Download:
Obs.: Altere de acordos com suas necessidades, mas lembre-se que o endereço da imagem deverá estar disponível em um servidor web e não dentro do squid. Preferencialmente altere os arquivos no Dreamweaver ou qualquer outro editor de páginas HTML, se quiser pode alterar manualmente em editores simples de texto como bloco de notas do Windows e vi ou mcedit para Linux.

5 comentários:

telecomenginer disse...

Parabéns pelo artigo! muito bom mesmo! eu tenho 1 pergunta! tenho aqui 1 webserver (lamp com wordpress) ip 192.168.0.1 ligado num router via wan ipfixo 192.168.0.2 e distribuindo (wireless) 192.168.0.3-192.168.0.254, pra acessar o lamp tem que digitar http://192.168.0.1 tem um jeito de usar o iptables e redirecionar tudo (tipo http ou https://google.com ou http://qualqersite.com) para http://192.168.0.1 ???? grato!

telecomenginer disse...
Este comentário foi removido pelo autor.
Alexandre (Alex Starr) disse...

Ótimo arquivo, foi-me muito útil, especialmente os arquivos compactados. Usando o endian firewall.
Obrigado!

Dudu Tavares disse...
Este comentário foi removido pelo autor.
Dudu Tavares disse...

Boa tarde!
Obrigado pela ajuda!
Estou com um problema, como encaminho as paginas já personalizadas para o squid?