sexta-feira, 3 de setembro de 2010

Firewall com Ubuntu Server 10.04 (pt 3) - Squid, proxy transparente

Dando continuidade à configuração do meu firewall utilizando Ubuntu Server, agora é a parte de citar o SQUID, o nosso conhecido servidor de Proxy.
A última parte do tutorial será exclusiva ao iptables.

Veja aqui:
Parte 01 - GUI, VNC e FTP
Parte 02 - Compartilhando a conexão
Parte 04 - Firewall com IPTables


SQUID - Servidor Proxy

O Squid é um servidor proxy que suporta HTTP, HTTPS, FTP e outros.
Ele reduz a utilização da conexão e melhora os tempos de resposta fazendo cache de requisições freqüentes de páginas web numa lan.

Um dos principais problemas de usar um proxy é que você precisa configurar manualmente cada micro da rede para utilizá-lo, o que é um trabalho cansativo e tedioso, sobretudo em grandes redes.

O Squid responde a este desafio com a possibilidade de criar um proxy transparente, onde o proxy se integra a uma rede já existente, acelerando a conexão, mas sem precisar de qualquer configuração nos clientes.

No meu caso, foi instalado apenas para cuidar da agilidade na conexão com a internet, já que terei poucas restrições na minha rede.

Para maiores detalhes, consulte o site da criança: www.squid-cache.org


Instalação

Vamos começar a instalação com os principais pacotes, digitando no terminal:

sudo apt-get install squid squidclient squid-cgi logcheck-database resolvconf

Agora vem o principal: a edição do arquivo de configuração.
Este arquivo é o /etc/squid/squid.conf. Entrando no terminal como root digite:

gedit /etc/squid/squid.conf 

Ao abrir o arquivo, você poderá se assustar com a quantidade de linhas. Calma, a maioria delas é comentário.
O arquivo é auto-explicativo e funciona como um manual.

Aqui é a parte em que você pode fazer uma cópia de segurança desse arquivo, para consultas futuras e tals, e utilizar minhas configurações.

Minhas configurações são mínimas e garantem um cache para otimização da navegação à internet e bloqueia alguns sites, tirando assim esse trabalho do iptables.

http_port 3128 transparent
visible_hostname fire
mail_from felipe@colmeiasis.com.br
cache_mem 64 MB
maximum_object_size 160 MB
maximum_object_size_in_memory 128 KB
cache_swap_low 85
cache_swap_high 95
cache_dir ufs /home/squid_files 2048 16 256
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 280 443 488 563 591 777 1000 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
acl server src 10.10.16.242
acl bloqueados url_regex -i "/etc/squid/proibidos/sites_proibidos"

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny bloqueados
http_access allow server
http_access deny all

Vamos às explicações pertinentes:

A primeira linha indica a porta utilizada pelo Squid (por padrão, 3128) e que ele deve operar em modo transparente (transparent).
A segunda linha indica o nome do servidor (fire) que você deve substituir pelo nome do seu.
A terceira linha indica o email que será mostrado no caso do bloqueio de uma página.

As próximas linhas cuidam das configurações do cache.
O "cache_mem 64 MB" indica o tamanho do cache na memória RAM (é recomendável que você utilize no máximo 1/3 da memória total instalada).

A linha "cache_dir ufs /home/squid_files 2048 16 256" merece uma atenção especial:
/home/squid_files - indica o local que será armazenado o cache,
2048 - indica o tamanho do cache que será feito no HD, em megabytes,
16 - quantos diretórios serão armazenados
256 - quantos arquivos serão aceitos por diretório

Notas:
Se você alterar o diretorio padrão do swapp, não esquecer de dar permissao de leitura e escrita com o comando:
sudo chmod 777 /home/squid_files
Onde "/home/squid_files" é o diretório à ser alterado.

Após a alteração das permissões, você precisa "ativar" a pasta de swapp com o comando:
sudo squid -z

As duas linhas subsequentes cuidam dos logs.

Todas as linhas que começam com ACL (Listas de Controle de Acesso) são regras de bloqueio/permissão.
Todas são regras padrões, menos:

acl server src 10.10.16.242
acl bloqueados url_regex -i "/etc/squid/proibidos/sites_proibidos"

Note que nessa primeira linha, eu criei uma regra chamada "SERVER" e estipulei o endereco 10.10.16.242 à ela.
Aqui você pode criar uma regra com os endereços de sua rede local para aplicá-los às suas regras.
Por exemplo, se você não estará ligado diretamente a uma máquina e sim à sua rede local, pode criar uma acl da seguinte forma:

acl redelocal src 192.168.1.0/24

Note que o /24 equivale à mascara 255.255.255.0.

Na segunda linha, foi criada uma regra chamada "BLOQUEADOS" e teve como parâmetro o arquivo "sites_proibidos".
Esse é o arquivo que indicaremos palavras e/ou endereços que não serão permitidos.

A estrutura desse arquivo é muito importante para que ele seja um arquivo válido para o Squid. Ele só pode conter um site ou nome por linha, jamais coloque mais de um site por linha ou nome.

Basta criar um arquivo vazio, com o conteudo que siga esse exeplo:
sexo
playboy
pornografia
www.youtube.com

Quando você coloca palavras, ele bloqueará toda url que a contenha, inclusive quando é passada como parâmetro a uma requisição (pesquisa no google por exemplo).

Esta regra pode ser vista, em sua aplicação, nas linhas:
http_access deny bloqueados
http_access allow server
http_access deny all

O Squid resolve as linhas ordenadamente. Portanto, nessa primeira linha ele aplica a regra "bloqueados" a todas as requisições que passarem por ele.
Logo após, ele permite o acesso à minha regra "server" (ou redelocal, no exemplo acima) e com a última linha, ele bloqueia tudo que não foi citado anteriormente.

Cuidado com essa última linha, ela precisa necessariamente ser a última.

Nesse ponto, seu Squid já deve estar configurado e operante! Simples assim!

Para maiores explicações sobre ACLS e HTTP_ACCESS consulte os links indicados nas minhas referências.
Existem muitas coisas legais que podem ser feitas com o Squid, incluindo balanceamento de carga e regras aplicadas em determinados horários.

Existem interfaces graficas para configuração do squid, que podem ajudar (ou atrapalhar) um pouco esse trabalho.
Uma delas, que já foi citada anteriormente, é o GADMIN.

Pode ser baixado aqui: http://debian.cs.binghamton.edu/debian/pool/main/g/gadmin-squid/
Link direto: http://debian.cs.binghamton.edu/debian/pool/main/g/gadmin-squid/gadmin-squid_0.1.3-1_i386.deb


Dicas:

Para verificar o log do squid, digite no terminal:
sudo tail -f /var/log/squid/cache.log

Para encerrar o servico do squid:
sudo squid -k shutdown

Para iniciar o servico:
sudo squid start

Para carregar alterações no squid.conf:
sudo squid -k reconfigure


PROXY TRANSPARENTE

Agora precisamos adicionar a seguinte regra no Iptables, isso irá redirecionar todo tráfego da porta 80 para a porta 3128 automaticamente, sem precisarmos setar manualmente em todas as máquinas clientes:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 

Para testar, você pode rodar essa linha de comando através do terminal, caso não aguente esperar a última parte do tutorial, que tratará do iptables. ;)
Apenas não se esqueça de rodar como root, com o comando "sudo" antes.

Pretendo postar a última parte depois do feriado.
Até lá!

Veja também:

Parte 01 - GUI, VNC e FTP
Parte 02 - Compartilhando a conexão
Parte 04 - Firewall com IPTables

Nenhum comentário:

BuscaPé, líder em comparação de preços na América Latina
 
BlogBlogs.Com.Br