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.
Segue a topologia real usada:
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
A saída deve ser parecida com essa:
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
Se o ip do seu servidor for diferente é só trocar.
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: mk_squid.wmv - 4shared.com - file sharing - download movie file
Por enquanto é só pessoal, abraço!
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Amigo muito bom, mais me tira uma duvida, com as URL grandes o sarg da problema ? Pois eu utilizei o sarg e com o tempo começou a da erro, pois a url era muito grande.
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Citação:
Postado originalmente por
mktguaruja
Amigo muito bom, mais me tira uma duvida, com as URL grandes o sarg da problema ? Pois eu utilizei o sarg e com o tempo começou a da erro, pois a url era muito grande.
Boa pergunta, nunca tive esse problema.. vou dar fazer uns testes!
Valeu abraço!
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
ok, o meu começa a da erro aparti do 5 dia. Pois as url era grande d+ e começa a da pau no sarg. Quando fazer uns teste ai nos da um feedback e me manda um MP. vlw
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Amigo com hotspot , vc teria a configuração ?
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Amigo é so você criar o hotspot, e no NAT você redireciona a porta 80 para a 3128, para disviar o trafego para o proxy.
Citação:
Postado originalmente por
jmathayde
Amigo com hotspot , vc teria a configuração ?
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Citação:
Postado originalmente por
jmathayde
Amigo com hotspot , vc teria a configuração ?
Não tenho nenhum tutorial que aborda o hotspot junto mas não tem segredo nenhum, se vc der uma olhada no fórum com certeza vc encontra!
Abraço.
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
To um bom tempo olhando , mais nadinha nao acho um que realmente funcione sempre da algum tipo de problema , quando ativo para a rede hotspot ir pro cache , pufts depois de logar o cliente nao sai dolugar a tela fica branca , branca mesmo nao aparece erro nenhum so fica branca.
Estava tentado fazer LB com o Hotspot ja desisti comprei um RB so pra LB funcionando por enquanto , mais estou com uma maquina parada para proxy pois nao consigo fazer osdois trabalharem bem
Uso versao do MK 4.11
Mesmo assim vou ficar procurando .
Citação:
Postado originalmente por
jacksonezidio
Não tenho nenhum tutorial que aborda o hotspot junto mas não tem segredo nenhum, se vc der uma olhada no fórum com certeza vc encontra!
Abraço.
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Isso mesmo amigo, você tem que ter uma rb para loadbalance, outro para hotspot e paralelo ao hotspot você ter o proxy.
Para você desviar o trafego para o proxy você faz um dst-nat. Na aba extra você vai em hotspot e deixa auth, e na aba action você joga o ip do servidor e a porta do proxy.
Citação:
Postado originalmente por
jmathayde
To um bom tempo olhando , mais nadinha nao acho um que realmente funcione sempre da algum tipo de problema , quando ativo para a rede hotspot ir pro cache , pufts depois de logar o cliente nao sai dolugar a tela fica branca , branca mesmo nao aparece erro nenhum so fica branca.
Estava tentado fazer LB com o Hotspot ja desisti comprei um RB so pra LB funcionando por enquanto , mais estou com uma maquina parada para proxy pois nao consigo fazer osdois trabalharem bem
Uso versao do MK 4.11
Mesmo assim vou ficar procurando .
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
to ate com medo de fazer isso kkk , mais vamos la , este forma nao tentei ainda .depois posto os resultados .
so mais uma coisa ,e as regras criadas automaticamente pelo MK , nao influencia ? regras dinamicas que sao criadas pelo hotspot
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
bom tarde estou com um problema aqui na minha configuracao gostaria que os amigos se pudece me ajudace nessa caminhada , quando o mikrotik vai buscar as paginas no squid o navegador retorna
ERROR
The requested URL could not be retrieved
gostaria de saber o que estou errando.
tenho um mikrotik 3.30 com 3placas 1para o link , 1 para o proxy squid e 1 para os clientes de redes e um serve squid com uma placa de rede,
o modelo do meu squid ta assim
http_port 172.1.1.2:2608 transparent
#hierarchy_stoplist cgi-bin ?
#acl QUERY urlpath_regex cgi-bin \?
#cache deny QUERY
#acl apache rep_header Server ^Apache
#broken_vary_encoding allow apache
cache_mem 512 MB
cache_swap_low 80
cache_swap_high 85
maximum_object_size 50 MB
maximum_object_size_in_memory 256 KB
cache_dir ufs /var/spool/squid 20000 16 256
#access_log /var/log/squid/access.log squid
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 172.1.1.2/26 # RFC1918 possible internal network
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
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 allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
#http_port 3128
#hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
coredump_dir /var/spool/squid
so que dar erro quando busco o cache no linux
minhas regras no mikr
nat
chain =srcnat
action= masquerade
general
chain = srcnat
src.address= 10.1.1.0/26
action=masquerade
general
chain=dstnat
protocol=6 tcp
dst port =80
action=dst-nat
to addresses=172.1.1.2
to ports = 2608
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Bom dia meus amigos, fiz tudo a risca e funcionou!! :)
Só tem um problema, ele me mostra que só existe um usuariário que é o IP do Mk que vai para o Proxy.
Tem como fazer o log mas mostrando os IPs da rede Interna?
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Os erros que dao neste sistema . sobre as url grandes. e basicamento . nas pastas de log do squid. dentro da pasta var..... eles e que dao problema. .. tenho o sistema implantado aqui a 1 ano. e enquanto nao limitei o tamanho destes logs tive que muitas vezes refazer os servidores. vai uma dica. para quem usar o sistema. limite o cache em 1000 16 256 no seu squid para ele nao ficar lerdo. e tambem . a limpesa do cache ser mais rapida. e nao proporcionar muito relatorio o que fara que o squid pare por algumas vezes..
Re: Mikrotik com Proxy Squid em Linux paralelo com geração de relatórios por IP
Alou pessoal estou iniciando nesta conectividade do Mikrotik com o Squid, fiz todos os passos e navega normalmente, agora sites com https ele não abre dá erro o que pode ser???
Valeu!!!