http://www.zago.eti.br/squid/squid-por-user-ip.txt Tutorial com modelo de squid.conf e acl pra controlar o acesso à internet, controle por usuário, por IP, permite configuração diferenciada entre os usuários, por exemplo, um usuário acessa somente dois sites, outro usuários acessa outros sites, o chefe e eu acessamos qualquer site, tudo isto controlado pelo IP da estação. Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux ******************************************************** Neste tutorial as ACL estão controlando os acessos por IP das estações e sites que elas podem acessar, os usuários podem descobrir como trocar o IP, isto vai gerar conflito de IP na rede e outros problemas de controle, uma solução seria configurar também um servidor de IP (DHCPD) pra fornecer IP amarrado ao MAC address da placa de rede, assim as estações sempre pegam o mesmo IP. Outra alternativa é controlar diretamente pelo MAC da placa placa de rede, pra isto o squid precisa ser compilado com suporte a MAC, veja como foi compilado o squid. /usr/sbin/squid -v ******************************************************** RESUMO GERAL, comandos utilizados nesta intalação. apt-get install squid.* mkdir /var/spool/squid chmod 777 /var/spool/squid chmod 777 /var/log/squid touch /var/log/squid/access.log chmod 777 /var/log/squid/access.log cd /etc/squid mv squid.conf squid-default.conf #comando pra importar este squid.conf pro "vi" (veja cp.txt) # :r !lynx -dump http://www.zago.eti.br/squid/acl/squid-conf-por-ip-site Precisa criar os arquivos das respectivas ACL, ou baixe via wget wget 200.204.198.164/zago/squid/acl/squid-conf-por-ip-site wget 200.204.198.164/zago/squid/acl/direto.txt wget 200.204.198.164/zago/squid/acl/negasites.txt wget 200.204.198.164/zago/squid/acl/negapalavra.txt wget 200.204.198.164/zago/squid/acl/liberapalavra.txt wget 200.204.198.164/zago/squid/acl/ip_liberados.txt wget 200.204.198.164/zago/squid/acl/ip_restrito.txt wget 200.204.198.164/zago/squid/acl/ip_restrito_sites.txt wget 200.204.198.164/zago/squid/acl/ip_bancos.txt wget 200.204.198.164/zago/squid/acl/ip_bancos_sites.txt service squid start chkconfig --level 35 squid on squid -z squid -k reconfigure veja a seguir explicação mais detalhanda sobre cada comando. Exemplos dos arquivos acima: ****************************************************************** Este tutorial foi enviado por:                          .-.                          /v\                         // \\                        /(   )\                         ^^-^^                         LINUX Busque soluções em linux e sai na frente você e sua empresa. Serviços em Servidores,Samba,Squid,Firewall,Internet.                         Email:               andersonmsp@click21.com.br Agradecimento especial ao amigo anderson@realdoctor.com.br que enviou o squid.conf utilizado nesta configuração. # Instalar apt-get install squid.* ##Criar diretório squid e liberar todas as permissões: mkdir /var/spool/squid chmod 777 /var/spool/squid ##Criar e liberar o arquivo de log: chmod 777 /var/log/squid touch /var/log/squid/access.log chmod 777 /var/log/squid/access.log #copiar modelo de configuração e acl, entre no diretório onde estão os arquivos de configuração do squid. cd /etc/squid renomeie o arquivo de configuração mv squid.conf squid-default.conf copie pro diretório /etc/squid e renomeie pra squid.conf o arquivo: http://www.zago.eti.br/squid/acl/squid-conf-por-user-ip #comando pra importar este squid.conf pro "vi" (veja cp.txt) # :r !lynx -dump http://www.zago.eti.br/squid/acl/squid-conf-por-user-ip Precisa criar em seus respectivos diretórios, os seguintes arquivos: /etc/squid/squid.conf ACL precisa criar os arquivos de ACL conforme estão definidas no arquivo de configuração do squid.conf, pra esta configuração precisa criar o arquivo com os IP e sites pra tua rede, as ACL são: direto.txt negasites.txt negapalavra.txt liberapalavra.txt ip_liberados.txt ip_restrito.txt ip_restrito_sites.txt ip_bancos.txt ip_bancos_sites.txt Tem modelos destes arquivos em: http://www.zago.eti.br/squid/acl/ fazer copia destes arquivos não vai ajudar muita coisa, voce precisa ajustar IP, sites e outros detalhes peculiares a tua rede, eles estão lá pra modelos, como exemplos, mas podem ser livremente copiados e modificados a seu modo. Pra refinar a configuração destes arquivos, acompanhe os resultados nos logs, em outro terminal, como root, execute: tail -f /var/log/squid/access.log Acompanhe os resultados, faça testes de acesso nas estações e acompanhe os resultados nos logs, qualquer problema é só fazer o ajuste no arquivo corresspondente, seja pra liberar ou bloquear acesso. Tomemos como exemplo a ACL pra controlar bancos, neste exemplo ela foi elaborada inicialmente pra enjaular uma estação pra acessar somente o Bradesco empresas, iniciei com esta configuração: [root@faqcl10 squid]# cat ip_bancos_sites.txt www.bradesco.com.br Quando o usuário tentou acessar os serviços do Bradesco empresa, varias páginas do bradesco eram negadas, pra solucionar o problema, solicitei que o funcionariio continuasse tentando enquanto eu acompanhava os logs em um terminal, pra cada pagina negada, fazia copia do dominio, incluia no arquivo ip_bancos_sites.txt, salvava, em seguida recarregava o squid com o comando: squid -k reconfigure Em um minuto resolveu o problema, o arquivo final pra enjaular as estações com IP listados no arquivo ip_bancos.txt pra acessarem somente o site do bradesco ficou assim: [root@faqcl10 squid]# cat ip_bancos_sites.txt www.bradesco.com.br officebanking.bradesco.com.br bradesconetempresa.com.br www.ne.bradesco.com.br Pra criar estas ACL, vá no diretório /etc/squid cd /etc/squid use o editor vi ou seu editor preferido pra criar os seguintes arquivos como no exemplo abaixo: direto.txt -> tem a relação dos dominios que estão liberados pra não passar pelo cache do squid, um exemplo de site que não pode fazer cache é o site da Caixa Econominca, o serviço de enviar arquivos pra Conectividade Social negapalavra.txt -> contém a lista de palavras que o squid consulta na URL pra negar acesso ao site, veja no arquivo exemplo a lista de palavras, voce pode acrescentar palavras ou subtituir por outro mais completo. liberapalavra.txt -> neste arquivo deve colocar as excessões de sites que são bloqueados pelas palavras contidas no arquivo negapalavra.txt, por exemplo, o site sextocartorio.com.br será bloqueado porque tem sex na URL, sex está listado em negapalavra.txt, pra liberar este site acrescente ele neste arquivo liberapalavra.txt IP das estações liberadas, os IP listados neste arquivo cai na regra geral, estão sujeitas às restrições das palavras em negapalavra.txt e negasites.txt, não cae nas regras das estações com restrições especificas. [root@faqcl10 squid]# cat ip_liberados.txt 192.168.1.53 192.168.1.80 Arquivo com IP dos funcionarios que acessam somente os sites relacionados em ip_restrito_sites.txt, pra enjaular o cara, amarra as regras, quem tem IP aqui acessa somente sites relacionados no arquivo ip_restrito_sites.txt, ignora todas as demais regras e ACL. [root@faqcl10 squid]# cat ip_restrito.txt 192.168.1.209 192.168.1.119 sites que podem ser acessados pelas estações com IP listados no arquivo ip_restrito.txt [root@faqcl10 squid]# cat ip_restrito_sites.txt www.dominioquequeiraliberar.com.br www.zago.eti.br www.sintegra.gov.br Arquivo contendo IP das estações que acessam somente os bancos listados no arquivo ip_bancos_sites.txt [root@faqcl10 squid]# cat ip_bancos.txt 192.168.1.190 192.168.1.143 Sites de bancos liberados para os usuarios das estações com IP listados no arquivo ip_bancos.txt [root@faqcl10 squid]# cat ip_bancos_sites.txt www.bradesco.com.br www.bb.com.br Os arquivos sobre restrito e bancos são semelhantes, o arquivo bancos é um exemplo, pode ser outro site qualquer, tanto as regras pra restrito e bancos tem a finalidade de limitar os sites que a estação pode acessar. ACL pra liberar acesso ao Apache que roda na rede interna e ao serviço de webmail interno. Com as regras acima o Squid nega o acesso ao servidor web interno e ao webmail, nega somente para as estações que estão na ACL sobre IP restrito e sites restrito, ou seja, as enjauladas que podem acessar somente os sites cadastrados na ACL. Pra solucionar o problema, crie um ACL pra liberar o acesso de toda a rede interna. No squid.conf indicado neste tutorial, já está com a ACL pronta pra liberar o acesso ao IP 192.168.1.3, na tua instalação, altere este IP para o em uso na tua rede e descomente no squid.conf as linhas: #acl ipinterno dst 192.168.1.3/32 #http_access allow ipinterno all ##Iniciar Squid somente pra este boot: service squid start # configurar pra iniciar Squid automaticamente em todo boot. chkconfig --level 35 squid on MENSAGENS ERROS As mensagens de sites negados por padrão serão exibidas em ingles, o Squid exibe a pagina em html que está em: /usr/share/squid/errors/English/ERR_ACCESS_DENIED pra exibi-las em Portugues, e faciliar esta configuração, troque este arquivo pelo que está em portugues no diretório: /usr/share/squid/errors/Portuguese/ERR_ACCESS_DENIED mv /usr/share/squid/errors/English/ERR_ACCESS_DENIED /usr/share/squid/errors/English/ERR_ACCESS_DENIED-ingles cp /usr/share/squid/errors/Portuguese/ERR_ACCESS_DENIED /usr/share/squid/errors/English/ERR_ACCESS_DENIED Pra criar arquivos de cache e swap squid -z carregar ou recarregar as configurações do squid. squid -k reconfigure Redirecionar todo o trafego da porta 80 (navegação) pro Squid, acrescente nas regras do firewall (no servidor) esta linha: iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 Esta regra não pode ser colocada em qualquer lugar do firewall, no Iptables a ordem das regras tem influencia no resultado, pra testar o Squid, use somente regras pra compartilhar a conexão e redirecionar o trafego pro Squid, como exemplo pode utilizar estas regras: modprobe iptable_nat iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward Altere a interface ppp0 para o correto da tua rede, cuidado com a quebra de linhas, no exemplo acima são 4 linhas, a primeira carraga o modulo do Iptables, a segunda linha faz o redirecionamento de todo o trafego da porta 80 pro Squid na porta 3128, a terceira e quarta linha faz NAT para os demais serviços não controlados pelo Squid, como e-mail, conexões por ssh, ftp e etc.., depois que tudo funcinar, implante as suas regras de firewall, veja mais sobre firewall em: http://www.zago.eti.br/firewall Pra quem já tem um firewall rodando, precisa reiniciar este serviço, ou reiniciar a maquina com o novo script. Na estação windows, botão auxiliar no icone do IE -> propriedades -> conexão -> em servidor proxy informe o IP do servidor squid e na porta informe 3128 Sempre que fizer qualquer alteração nos arquivos de configurações ou nos arquivos das acl, precisa recarregar (reconfigurar) o squid com: squid -k reconfigure Parabéns voce conseguiu!!!, caso ocorra alguma mensagem de erro ou não funcione, veja dicas e mais mais detalhes nos proximos tópicos deste texto. ****************************************************************** squid.conf squid.conf que deverá salvar em /etc/squid/squid.conf http_port 3128 cache_mem  60 MB maximum_object_size 4096 KB minimum_object_size 0 KB cache_dir ufs /var/spool/squid 100 16 256 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log mime_table /etc/squid/mime.conf client_netmask 255.255.255.255 #Default: refresh_pattern         ^ftp:           1440    20%     10080 refresh_pattern         ^gopher:        1440    0%      1440 refresh_pattern         .               0       20%     4320 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 to_localhost dst 127.0.0.0/8 acl CADASTRO_SITES dstdomain "/etc/squid/cadastro_sites.txt" # sites restritos ao cadastro acl SSL_ports port 443 563 acl Safe_ports port 80          # http acl Safe_ports port 21          # ftp acl Safe_ports port 443 563     # https, snews 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 rede_interna src 192.168.25.0/24 -> # Comentei, pois rede_interna englobava tod mundo acl funcionarios src "/etc/squid/funcionarios.txt" # IP's dos funcionários q tem acesso total acl cadastro src "/etc/squid/cadastro.txt" #-> Arquivo c/ IP's dos funcionários do cadastro acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow funcionarios http_access allow cadastro CADASTRO_SITES http_access deny all ******************************************************** ******************************************************** ********************************************************