O documento fornece instruções para configurar um servidor proxy Squid em uma rede local, incluindo como configurar as placas de rede, iptables para roteamento, cache no Squid e regras de acesso para permitir ou bloquear sites.
2. Configurar as placas de rede
◦ Eth0 (ppp0 caso speedy) – internet
DHCP rede do senac
◦ Eth1 – rede local
192.168.0.0 / 255.255.255.0
Configurar pelo ifconfig, prog. Gráfico ou
pelo arquivo interfaces.
3. Configurar o iptables para rotear os pacotes
◦ mmmmooooddddpppprrrroooobbbbeeee iiiippppttttaaaabbbblllleeee____nnnnaaaatttt
◦ eeeecccchhhhoooo 1111 ////pppprrrroooocccc/ssssyyyyssss////nnnneeeetttt////iiiippppvvvv4444////iiiipppp____ffffoooorrrrwwwwaaaarrrrdddd
◦ iiiippppttttaaaabbbblllleeeessss -tttt nnnnaaaatttt -AAAA PPPPOOOOSSSSTTTTRRRROOOOUUUUTTTTIIIINNNNGGGG -oooo eeeetttthhhh0000 -j MASQUERADE
O primeiro comando ativa o iiiippppttttaaaabbbblllleeee____nnnnaaaatttt, o módulo do
Iptables responsável por oferecer suporte ao roteamento
ddee ppaaccootteess vviiaa NNAATT..
O segundo ativa o iiiipppp____ffffoooorrrrwwwwaaaarrrrdddd, o módulo responsável
pelo encaminhamento de pacotes, utilizado pelo módulo
iptable_nat.
O terceiro cria uma regra de roteamento, que orienta o
servidor a direcionar para a internet todos os pacotes
(recebidos dos clientes) que se destinarem a endereços
que não façam parte da rede local. {eth0 internet}
4. Script para compartilhamento
#!/bin/sh
# Compartilha a conexão
modprobe iptable_nat
echo 1 /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eeeetttthhhh0000 -j MASQUERADE
# Bloqueia pings e protege contra IP spoofing e pacotes inválidos
iippttaabblleess --AA IINNPPUUTT --pp iiccmmpp ----iiccmmpp--ttyyppee eecchhoo--rreeqquueesstt --jj DDRROOPP
echo 1 /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback e para a interface de rede local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eeeetttthhhh1111 -j ACCEPT
# Abre para as portas especificadas
iptables -A INPUT -p tcp --dport 22222222 -j ACCEPT
# Bloqueia as demais conexões, deixando passar apenas pacotes de
resposta
iptables -A INPUT -p tcp --syn -j DROP
5. O SSSSqqqquuuuiiiidddd é 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
rreeqquuiissiiççõõeess ffrreeqqüüeenntteess ddee ppáággiinnaass
web numa rede de computadores.
6. As ACLs (Access Control List) são regras para
navegação via proxy.
As ACLs são dispostas de seguinte forma:
◦ acl NOME_DA_ACL TIPO_DA_ACL parâmetro
7. Tipos de acls
◦ Src:ACL do tipo src (origem) ela trata o IP ou uma
faixa de IP com que o cliente chega no Proxy.
◦ Dst:ACL do tipo dst (destino) ela trata o IP de
destino da navegação.
◦ Dstdomain:ACL do tipo dstdomain ((ddoommíínniioo ddee
destino) ela trata o domínio de destino da
navegação.
◦ Time:ACL do tipo time (tempo) ela trata um
determinado momento baseado em dia da semana
e hora.
◦ url_regex: ACL do tipo url_regex (expressão regular
na URL) uma determinada entrada na URL
8. Tipos de acls
◦ Port: ACL do tipo port (porta) ela trata a porta de
destino da navegação.
◦ proxy_auth: ACL do tipo proxy_auth (autenticação
no Proxy) ela trata o Login com que o cliente se
autentica no Proxy. Requer uma ccoonnffiigguurraaççããoo ddee
autenticação.
9. Regras das acls
◦ http_access:Permite ou nega acessos baseados
nas ACLs pré definidas.
É utilizado seguido de allow ou deny
Se a ACL for precedida de um ponto de exclamação
significa que sseerráá aa nneeggaaççããoo ddaa AACCLL..
Após qualquer modificação no arquivo de
configuração do SSSSQQQQUUUUIIIIDDDD faz-se necessário
digitar o comando abaixo para que entrem
em vigor.
◦ squid -k reconfigure
10. Instalação
◦ aaaapppptttt-ggggeeeetttt iiiinnnnssssttttaaaallllllll ssssqqqquuuuiiiidddd
Configuração
◦ Altere i nome do arquivo /eeeettttcccc/ssssqqqquuuuiiiidddd/ssssqqqquuuuiiiidddd.ccccoooonnnnffff“
ppaarraa //eeeeeeeettttttttcccccccc//ssssssssqqqqqqqquuuuuuuuiiiiiiiidddddddd//ssssssssqqqqqqqquuuuuuuuiiiiiiiidddddddd........bbbbbbbbaaaaaaaacccccccckkkkkkkkuuuuuuuupppppppp““
◦ Crie um novo arquivo squid.conf e insira os
seguintes itens no original.
11. http_port 3128 transparent {conf proxy transparente na porta 3128}
visible_hostname ggggddddhhhh {nome do proxy}
cache_mem 66664444 MMMMBBBB {cache na ram}
maximum_object_size_in_memory 128 KB {tamanho max dos objs na men}
maximum_object_size 512 MB {tamanho max dos obj na HD}
cache_dir ufs /var/spool/squid 4444000099996666 16 256 {cache no disco, n pastas }
ccaacchhee__aacccceessss__lloogg //vvaarr//lloogg//ssqquuiidd//aacccceessss..lloogg {{llooccaall ddoo lloogg ddee aacceessssoo}}
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 22 443 563 280 488 591 777 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
13. A primeira linha indica a porta utilizada pelo Squid (3128) e que ele deve
operar em modo transparente (transparent).
A segunda indica o nome do servidor (gdh), que você deve substituir
pelo nome do seu. (uname –a)
As quatro linhas seguintes indicam a configuração do cache. O Squid
trabalha com dois caches distintos, um cache mais rápido, feito na
memória RAM, e outro mais lento (porém maior) feito usando espaço do
HD.
◦ O cache_mem 64 MB indica o tamanho do cache na mmeemmóórriiaa RRAAMM,, eennqquuaannttoo oo
4096 na linha cache_dir ufs /var/spool/squid 4096 16 256 indica o tamanho do
cache que será feito no HD, em megabytes. (16 indica número de pastas e 256
número de subpastas)
◦ A linha maximum_object_size 512 MB indica o tamanho máximo de arquivo que será
armazenado no cache (arquivos maiores do que isso serão ignorados), o que evita
que arquivos muito grandes, (como imagens ISO) que você vai baixar apenas uma
vez, desperdicem espaço no cache.
A linha acl redelocal src 192.168.1.0/24 indica a faixa de endereços e
a máscara utilizada na sua rede local (o /24 equivale à mascara
255.255.255.0). Faz com que apenas micros da rede local possam
utilizar o proxy, afastando qualquer possibilidade de que ele fique
aberto para a Internet, independentemente da configuração do firewall.
14. Depois de terminar, reinicie o Squid para que a
configuração entre em vigor:
◦ /eeeettttcccc/iiiinnnniiiitttt....dddd////ssssqqqquuuuiiiidddd rrrreeeessssttttaaaarrrrtttt
Com isso, a configuração do servidor proxy está
pronta, mas falta um passo igualmente
iimmppoorrttaannttee,, qquuee éé aattiivvaarr aa rreeggrraa ddee ffiirreewwaallll qquuee
faz com que os acessos destinados à porta 80,
provenientes da rede local sejam encaminhados
para o Squid. Sem isso, as requisições continuam
sendo roteadas diretamente, sem passarem pelo
proxy:
◦ iiiippppttttaaaabbbblllleeeessss -tttt nnnnaaaatttt -AAAA PPPPRRRREEEERRRROOOOUUUUTTTTIIIINNNNGGGG -iiii eeeetttthhhh0000 -pppp ttttccccpppp --------ddddppppoooorrrrtttt 88880000
-jjjj RRRREEEEDDDDIIIIRRRREEEECCCCTTTT --------ttttoooo-ppppoooorrrrtttt 3333111122228888
15. Script para compartilhamento
#!/bin/sh
# Compartilha a conexão
modprobe iptable_nat
echo 1 /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eeeetttthhhh0000 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port
3128
## BBllooqquueeiiaa ppiinnggss ee pprrootteeggee ccoonnttrraa IIPP ssppooooffiinngg ee ppaaccootteess iinnvváálliiddooss
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback e para a interface de rede local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eeeetttthhhh1111 -j ACCEPT
# Abre para as portas especificadas
iptables -A INPUT -p tcp --dport 22222222 -j ACCEPT
# Bloqueia as demais conexões, deixando passar apenas pacotes de resposta
iptables -A INPUT -p tcp --syn -j DROP
16. O Squid permite bloquear sites indesejados
de forma relativamente simples, onde você
inclui na configuração uma acl contendo os
sites não permitidos e cria uma política de
acesso que bloqueia oo aacceessssoo aa eelleess..
Isso é feito usando o parâmetro dstdomain
(destination domain). Veja um exemplo:
◦ aaaaccccllll bbbbllllooooqqqquuuueeeeaaaaddddoooossss ddddssssttttddddoooommmmaaaaiiiinnnn oooorrrrkkkkuuuutttt....ccccoooommmm
◦ hhhhttttttttpppp____aaaacccccccceeeessssssss ddddeeeennnnyyyy bbbbllllooooqqqquuuueeeeaaaaddddoooossss
17. Se a regra começar a ficar muito grande, você
tem a opção de transferir as entradas para
um arquivo.
Neste caso, crie um arquivo de texto simples,
com todos os domínios desejados (um por
linha) e use a regra aabbaaiixxoo nnaa ccoonnffiigguurraaççããoo
do Squid.
No exemplo, estou usando o arquivo
/etc/squid/bloqueados:
◦ aaaaccccllll bbbbllllooooqqqquuuueeeeaaaaddddoooossss uuuurrrrllll____rrrreeeeggggeeeexxxx -i ////eeeettttcccc/ssssqqqquuuuiiiidddd////bbbbllllooooqqqquuuueeeeaaaaddddoooossss““““
◦ hhhhttttttttpppp____aaaacccccccceeeessssssss ddddeeeennnnyyyy bbbbllllooooqqqquuuueeeeaaaaddddoooossss
18. Em alguns ambientes, pode ser mais fácil
bloquear inicialmente o acesso a todos os sites e
ir abrindo o acesso a apenas alguns sites
específicos, conforme a necessidade. Neste caso,
invertemos a lógica da regra. Criamos um
arquivo com sites permitidos, aaddiicciioonnaammooss aa
regra que permite o acesso a eles e em seguida
bloqueamos o acesso a todos os demais, como
neste exemplo:
◦ aaaaccccllll ppppeeeerrrrmmmmiiiittttiiiiddddoooossss uuuurrrrllll____rrrreeeeggggeeeexxxx -iiii ////eeeettttcccc/ssssqqqquuuuiiiidddd////ppppeeeerrrrmmmmiiiittttiiiiddddoooossss““““
◦ hhhhttttttttpppp____aaaacccccccceeeessssssss aaaalllllllloooowwww ppppeeeerrrrmmmmiiiittttiiiiddddoooossss
◦ hhhhttttttttpppp____aaaacccccccceeeessssssss ddddeeeennnnyyyy aaaallllllll
19. Uma segunda possibilidade é usar o parâmetro
dstdom_regex, que permite bloquear sites de uma
forma mais geral, com base em palavras incluídas na
URL de acesso. Você pode bloquear todas as páginas
cujo endereço inclua a palavra sexo, por exemplo.
Ao usar esta regra, o Squid verifica a existência das
palavras na URL do site e não nnoo ccoonntteeúúddoo ddaa ppáággiinnaa..
Crie mais um arquivo de texto, contendo as palavras
que devem ser bloqueadas (uma por linha) e adicione
a regra abaixo, contendo a localização do arquivo:
◦ aaaaccccllll nnnnoooommmmeeeesssspppprrrrooooiiiibbbbiiiiddddoooossss ddddssssttttddddoooommmm____rrrreeeeggggeeeexxxx ////eeeettttcccc/ssssqqqquuuuiiiidddd/nnnnoooommmmeeeesssspppprrrrooooiiiibbbbiiiiddddoooossss“
◦ hhhhttttttttpppp____aaaacccccccceeeessssssss ddddeeeennnnyyyy nnnnoooommmmeeeesssspppprrrrooooiiiibbbbiiiiddddoooossss
20. Não existe problema em combinar o bloqueio de
domínios e de palavras dentro da URL, você pode
lançar mão de uma combinação das duas coisas,
de acordo com a situação. Basta usar as duas
regras simultaneamente, como em:
◦ acl bloqueados url_regex -i /etc/squid/bloqueados“
◦ http_access deny bloqueados
◦ acl nomesproibidos dstdom_regex /etc/squid/nomesproibidos”
◦ http_access deny nomesproibidos
◦ acl redelocal src 192.168.1.0/24
◦ http_access allow localhost
◦ http_access allow redelocal
◦ http_access deny all