segunda-feira, 2 de julho de 2012

Linux - Servidor proxy

Eae pessoal!!

Se você está precisando compartilhar a conexão de internet entre vários computadores e ainda assim manter um controle de acesso, você está precisando de um servidor proxy. Além de fazer o controle dos acessos por horário, login, ip da estação, etc, podemos usá-lo para gerar um cache das páginas, acelerando o acesso aos endereços. Por exemplo: O computador X solicita um site na internet, se o mesmo já estiver em cache no servidor o site será entregue sem que precise consumir banda do seu link.


Então, vamos instalar e configurar o "Squid" que é o serviço no linux mais utilizado para fazer o trabalho de "Proxy".

#Instale o serviço:
yum install squid.x86_64


#Após instalado configure para iniciar automaticamente
chkconfig squid on


#Caminho do arquivo de configuração
/etc/squid/squid.conf


Renomeie este arquivo para "squid.conf.ori", assim você mantém o arquivo original. Use o editor de sua preferência e crie um novo arquivo "squid.conf" que é onde faremos toda a configuração do servidor proxy.


Adicione no arquivo os seguintes comandos:

http_port 3128
visible_hostname Servidor_Proxy


cache_mem 256 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 1024 MB
minimum_object_size 0 KB
cache_swap_low 80
cache_swap_high 90
cache_dir ufs /var/spool/squid 20480 16 256
cache_access_log /var/log/squid/access.log



acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl hostlocal src 127.0.0.1/255.255.255.255
acl SSL_Ports port 443 #Https
acl Safe_Ports port 80 #Http
acl Safe_Ports port 21 #Ftp
acl Safe_Ports 443 #Https
acl Safe_Ports port 1025-65535 #Portas Altas
acl purge method PURGE
acl connect method CONNECT


http_access allow manager hostlocal
http_access deny manager


http_access allow purge hostlocal
http_access deny purge


http_access deny !Safe_Ports
http_access deny connect !SSL_Ports


acl redeinterna src 192.168.0.0/24


acl SitesProblematicos dstdomain caixa.gov.br
always_direct allow site


http_access allow hostlocal
http_acces allow redeinterna


http_access deny all




Detalhando:

#Porta onde o servidor vai ficar disponível. (Essa porta você vai configurar no navegador).
http_port 3128

#Aqui você deve colocar o nome do seu servidor
visible_hostname Servidor_Proxy


Ao configurar o Cache podemos utilizar Cache em Memoria e Cache em Disco, a difereça é que o cache em memória é mais rápido de ser acessado, porém é mais limitado. O cache em disco é mais lento para ser acessado, porém tem muito mais espaço.



#Define a quantidade de memória que será usada para o cache de memória.
cache_mem 256 MB


#Determina o tamanho máximo dos arquivos que serão guardados em cache de memória, os arquivos maiores serão guardados no cache de disco.
maximum_object_size_in_memory 128 KB


#Agora a configuração do cache em disco, nas duas linhas abaixo diz que faremos cache de arquivos com tamanho máximo de 1Gb e tamanho mínimo de 0Kb.
maximum_object_size 1024 MB
minimum_object_size 0 KB


#Aqui definimos que faremos cache em disco usando até 90% do tamanho definido para ser usado o cache, quando isto ocorrer automaticamente o sistema deleta os arquivos mais antigos deixando o tamanho máximo ocupado em 80%.
cache_swap_low 80
cache_swap_high 90


#Agora definimos que o tamanho máximo que separamos do HD para os arquivos de cache é de 20Gb e que serão utilizados no máximo 16 diretórios com 256 subdiretórios cada uma.
cache_dir ufs /var/spool/squid 20480 16 256


#Definição de onde serão guardados os log's de acesso do Squid. Este arquivo normalmente pode ser consultado para ver o que está sendo bloqueado por exemplo no squid usando o comando "tail -f /var/log/squid/access.log |grep IP_da_Maquina"
cache_access_log /var/log/squid/access.log



#Cria uma politica de acesso que se chama "all" contendo todos os endereços de IP possíveis.
acl all src 0.0.0.0/0.0.0.0


#Política para você utilizar o proxy no próprio servidor
acl hostlocal src 127.0.0.1/255.255.255.255


#Politicas com portas permitidas pelo proxy, as portas dessas politicas serão aceitas pelo proxy.

acl SSL_Ports port 443 #Https
acl Safe_Ports port 80 #Http
acl Safe_Ports port 21 #Ftp
....



#Política para as maquinas da rede
acl redeinterna src 192.168.0.0/24


#Politica com site problemático (Que não está funcionando o acesso pelo proxy)
acl SitesProblematicos dstdomain caixa.gov.br


#Libera o acesso direto para a política SitesProblematicos
always_direct allow site


#Libera acesso à internet para o próprio servidor
http_access allow hostlocal


#Libera acesso à internet para a rede interna
http_acces allow redeinterna


#Nega o acesso à internet para a política "all"
http_access deny all


Existem outras opções de regras que você pode utilizar para incrementar seu Squid, uma delas pode ser para bloquear ou liberar um site por domínios ou palavras, para tal usamos o "dstdomain". Primeiro você cria a ACL com os domínios ou palavras e depois bloqueia ou libera o acesso. Ao criar a ACL deixe os domínios separados por espaço.
Por exemplo:
acl bloqueados dstdomain facebook.com orkut.com
http_access deny bloqueados


Se o site tiver acesso com "www" ou sem "www" por exemplo, você deve incluir os dois na lista, pois caso contrário o squid interpreta que são sites diferentes e deixa passar o acesso pelo que não está na ACL.

O ideal é usar um arquivo de texto com todos os domínios que deseja bloquear ou liberar e criar uma regra no squid que lê este arquivo, vamos dizer que você criou um arquivo chamado "permitidos" e adicionou todos os sites liberados. Ficaria assim:
acl permitidos url_regex -i "/etc/squid/permitidos"
http_access allow permitidos


#Para bloquear ou liberar o acesso a endereços IP você pode fazer assim:
acl ipsliberados dst 8.8.8.8
http_access allow ipsliberados

Para fazer o bloqueio por palavras chave você pode criar outro arquivo de texto com todas palavras dentro, lembre-se que todos os arquivos de texto criados devem conter as palavras, ip's, domínios,etc um abaixo do outro. A regra ficaria assim:
acl bloqueioporpalavras dstdom_regex "/etc/squid/palavras"
http_access deny bloqueioporpalavras

Para bloquear acessos por extensões crie uma lista com o seguinte formato:
\.exe
\.mp3
\.divx
Ficaria assim:
acl extensoes url_regex -i "/etc/squid/extensoes"
http_access deny extensoes

Para fazer o bloqueio/liberacao por horarios use o seguinte:
acl meiodia time 12:00-13:30
http_access allow meiodia




Obs: O squid lê o arquivo linha por linha, então a ordem em que os comandos estão é muito importante. Se você liberar o acesso para uma rede e mais abaixo colocar um comando bloqueando esse acesso, a rede continuará tendo o acesso pois você o liberou primeiro.

Obs2: A cada alteração no arquivo squid.conf não esqueça de dar um "Reload" ou "Restart" no serviço do "Squid", lembrando que o "Reload" apenas relê e aplica para novas conexões o novo arquivo de configuração enquanto que o "Restart" derruba os serviço do Squid e inicia novamente lendo o arquivo de configuração.

Nenhum comentário:

Postar um comentário