quarta-feira, 19 de janeiro de 2011

Tutorial Squid

Segue a topologia real usada:










Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
A intenção desse artigo é mostrar como funciona a configuração básica de um servidor Mikrotik integrado à um proxy Squid rodando em um servidor Linux. A distribuição Linux usada aqui é o Ubuntu Server 10.04.

A solução mostrada é simples e pode ser modificada sem complicações, serve para provedores e empresas que queiram controlar o conteúdo acessado por seus funcionários.
O acesso dos usuários é monitorado e o Sarg se encarrega de montar os gráficos de acesso de cada usuário.

O que eu usei aqui para montar esse artigo:
Mikrotik 4.5
QoS, Firewall e Gateway de rede.

Ubuntu Server 10.04
Proxy Squid e geração de relatórios com Sarg.

Cliente Windows XP.

1. Configuração do Servidor Mikrotik

Interfaces
/ip address
add address=172.16.200.1/30 broadcast=172.16.200.3 comment=Proxy disabled=\
no interface=ether1 network=172.16.200.0
add address=187.50.250.248/29 broadcast=187.50.250.255 comment=Wan disabled=\
no interface=wlan1 network=187.50.246.248
add address=192.168.0.1/24 broadcast=192.168.0.255 comment=Clientes disabled=\
no interface=ether1 network=192.168.0.0

Cache DNS
/ip dns
set allow-remote-requests=yes cache-max-ttl=1w cache-size=2048KiB \
max-udp-packet-size=512 primary-dns=192.168.2.18 secondary-dns=\
200.153.0.68
/ip dns static
add address=172.16.200.1 disabled=no name=dns-cache ttl=1d
add address=192.168.0.1 disabled=no name=Clientes ttl=1d

Controle de banda
No exemplo estamos setando128k de upload e 256k de download para o Cliente do ip 192.168.0.100.

/queue simple
add burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s comment="" \
direction=both disabled=no dst-address=0.0.0.0/0 interface=all limit-at=\
0/0 max-limit=128k/256k name="Cliente teste" parent=none priority=8 \
queue=default-small/default-small target-addresses=192.168.0.100/32 time=\
0s-1d,sun,mon,tue,wed,thu,fri,sat total-queue=default-small

Firewall
Criar a lista de endereço dos clientes:
/ip firewall address-list
add address=192.168.0.0/24 comment="Clientes do Proxy" disabled=no list=\
clientes

Habilitar Connection tracking:
/ip firewall connection tracking
set enabled=yes generic-timeout=10m icmp-timeout=10s tcp-close-timeout=10s \
tcp-close-wait-timeout=10s tcp-established-timeout=1d \
tcp-fin-wait-timeout=10s tcp-last-ack-timeout=10s \
tcp-syn-received-timeout=5s tcp-syn-sent-timeout=5s tcp-syncookie=no \
tcp-time-wait-timeout=10s udp-stream-timeout=3m udp-timeout=10s

Nat para o servidor Linux:
/ip firewall nat
add action=masquerade chain=srcnat comment="Nat para Linux" disabled=no \
src-address=172.16.200.0/30

Regra da marcação de rota para os pacotes que irão para o Proxy:
/ip firewall mangle
add action=mark-routing chain=prerouting comment="Fluxo para o Proxy" \
disabled=no dst-port=80 new-routing-mark=Proxy passthrough=no protocol=\
tcp src-address-list=clientes

Rotas
/ip route
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\
172.16.200.2 routing-mark=Proxy scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\
187.50.250.249 scope=30 target-scope=10




2.
Configuração do Servidor Linux

Falta agora configurar o Ubuntu Server, vamos lá:
Estou partindo do princípio que você já instalou o Ubuntu Server, não vou abordar instalação de Sistema para simplificar o artigo.

Iremos instalar os aplicativos necessários
Configuração inicial:
Endereço ip e rota

# ifconfig eth0 172.16.200.2/30
# route del default
# route add default gw 172.16.200.1

DNS
# echo nameserver 172.16.200.1 > /etc/resolv.conf

Instalação do squid 3:
# aptitude update
# aptitude install squid3

Acesse o diretorio do squid3:
# cd /etc/squid3

Renomeie o seu squid.conf original:
# mv squid.conf squid.conf_original

Crie um novo squid.conf com o VI:
# vi squid.conf

Copie e cole o modelo abaixo:
------------------------------------------------------------------------------------------------------------------------------
http_port 3128 transparent
visible_hostname Brasil_Net

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object

# Caminho da pagina de erro em Portugues
error_directory /usr/share/squid3/errors/Portuguese

# Faixa de ip's da sua rede que serao permitidos:
acl clientes src 192.168.0.0/255.255.255.0

# Local dos arquivos de log
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log

# Tamanho do arquivo de cache:
maximum_object_size 80000 KB

# Diretorio onde sera armazenado o cache das paginas:
# 10000 e o numero em Megabytes
cache_dir ufs /var/spool/squid3/ 90000 16 256

# Usuario que executa o servidor Proxy
cache_effective_user proxy

# habilita permissao pra rede definida e bloqueia acessos vindos de
# outros enderecos
http_access allow clientes
http_access deny all

-------------------------------------------------------------------------------------------------------------------------

Salve com ESC, :wq!
Pronto o squid.conf está montado, você pode modificar como quiser.

Iptables

Limpar as tabelas de regras do iptables:
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t filter -F
# iptables -t filter -X
# iptables -t mangle -F
# iptables -t mangle -X

Habilitar o roteamento:
# echo 1 > /proc/sys/net/ipv4/ip_forward

Configurar o iptables no Linux para redirecionar as requisições http para o Squid:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


Criando o script que vai inicializar esses comandos quando o Servidor for reinicializado:
# vi nat.sh
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128


Salve com ESC, :wq!
Dê permissão de execução:
# chmod +x nat.sh


Coloque esse script no diretório /etc/init.d/
# mv nat.sh /etc/init.d


3. Configuração da estação cliente

Configuração da interface de rede
Endereço IP: 192.168.0.100
Máscara de sub-rede: 255.255.255.0
Gateway: 192.168.0.1
DNS Primário: 192.168.0.1

Faça o teste de navegação, enquanto a página carrega vamos monitorar o log do Squid.
No seu terminal do Ubuntu entre com o seguinte comando:
# tail -f /var/log/squid3/access.log

Repare onde eu marquei, é onde o Squid marca o seu IP, o tipo de requisição (GET) e a url acessada, que nesse caso é UOL - O melhor contedo, não se preocupe que o Sarg faz esse papel e gera os relatórios tudo bonitinho.

4. Instalando o SARG
# aptitude install sarg

Entre no diretório do Sarg e edite o arquivo de configuração:
O diretório pode ser /etc/sarg ou /etc/squid, para mudar isso somente se instalar na mão a partir dos fontes.

# vi sarg.conf

Alterei as seguintes linhas de acordo com minhas preferências:
Linha 29: language Portuguese
Linha 48: title "Relatorio de Acessos do Squid"
Linha 143: output_dir /var/www/squid-reports

Comando para gerar o relatório:
# sarg -f /etc/sarg/sarg.conf

Relatório gerado! Verificando:

# cd /var/www/squid-reports/
# ls
Ele me retornou isso:
2010Sep25-2010Sep26 images index.html

Ele cria um diretório para cada dia, no meu caso tenho somente o do dia 25/09 que criei agora.

Caso você queira um relatório para o mês todo pode usar a opção "-d".
# sarg -f /etc/sarg/sarg.conf -d 01/09/2010-30/09/2010


Vamos criar o script que vai gerar esse relatório todo dia, iremos coloca-lo no cron.daily:
# vi sarg_diario.sh
#!/bin/bash
# Gera relatórios diários para o SARG
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`
/usr/bin/sarg -f /etc/sarg/sarg.conf -d $DIA/$MES/$ANO

Salve com ESC, :wq!
Dê permissão de execução:
# chmod +x sarg_diario.sh

Salve esse script no diretório /etc/cron.daily.

Você consegue visualizar as páginas do Sarg pelo navegador de internet acessando da seguinte maneira:
http://172.16.200.2/squid-reports

Pronto o sistema está configurado, só executar os testes agora, se algo der errado por favor releia todos os passos.
E, por fim, segue um vídeo para download demonstrando o funcionamento disso:

Nenhum comentário:

;