Projeto e Configura¸c˜ao de Firewalls
Squid ProxyProf. Emerson Ribeiro de Mello, Dr. mello@ifsc.edu.br
P´os-Gradua¸c˜ao em Redes de Computadores e Seguran¸ca de Sistemas UNIDAVI
Dezembro de 2010
Squid
I Trata-se de um proxy e cache para navega¸c˜ao web, atendendo protocolos como HTTP, HTTPS e FTP
I proxy == procurador. Aquele que atua em favor de um outro
I cache == esconder. Local de armazenamento que cont´em
dados que o computador precisar´a usar em curto tempo ou usa com mais frequˆencia
Funcionamento
Squid atua como um agente, recebendo pedidos dos clientes e repassando estes para os servidores na Internet
I Armazena uma c´opia em disco do conte´udo transferido e faz uso desta c´opia em pedidos subsequentes para um mesmo conte´udo
Requisitos de hardware
I Disco r´ıgido
I Velocidade de acesso – SAS ou SATA (taxa at´e 6Gb/s) I Espa¸co de armazenamento – Ex: dez usu´arios com consumo
m´edio di´ario de 10Mb ir´a consumir um espa¸co no cache de 1 Gb em apenas 10 dias
I Mem´oria RAM
I Squid guarda em mem´oria a tabela com os objetos armazenados no cache
I Obter tais informa¸c˜oes no swap em disco resulta em uma maior demora
I Poder de processamento
I Squid quando usado somente como cache, sem controle de acesso, n˜ao exige muito CPU
I Ferramentas de relat´orios de acesso consomem intensivamente
Instalando o Squid – Ubuntu 10.10
I Instala¸c˜ao
1 sudo apt-get install squid3 apache2-utils
I Configura¸c˜ao b´asica: /etc/squid3/squid.conf
2 # Nome da maquina
3 visible_hostname webproxy.empresa.com.br
4 # Ouvira nas portas 3128
5 http_port 3128
6 # Local onde armazenara o cache (tamanhoMb Level1_dir Level2_dir)
7 cache_dir ufs /var/spool/squid34000 16 256
8 # tamanho maximo de um unico objeto no cache em disco
9 maximum_object_size 16384KB
10 # Registro de acessos
11 access_log /var/log/squid3/access.log squid
12 # Inclua a linha abaixo antes de'http_acess deny all' ja' presente no arquivo padrao
13 http_access allow localnet
Laborat´orio 1 – Squid b´asico
I Edite o arquivo /etc/squid3/squid.conf e configure as diretivas apresentadas na lˆamina anterior
I Reinicie o servi¸co (sudo /etc/init.d/squid3 restart) I Configure o seu navegador web para apontar para a m´aquina
onde est´a rodando o Squid
I Monitore o log do Squid enquanto navega pela web
I tail -f /var/log/squid3/access.log
Listas de Controle de Acesso – ACLs
I Usadas para indicar quais m´aquinas poder˜ao fazer uso do servi¸co de cache
I Ex: Evitar que usu´arios maliciosos fa¸cam uso do seu servi¸co para atacar um terceiro
I Usadas para indicar quais s´ıtios web poder˜ao ser acessados
I Ex: N˜ao ´e permitido acessar redes sociais
I Usadas para indicar palavras proibidas nos s´ıtios web
I Ex: N˜ao ´e permitido acessar p´aginas que contenham a palavra ‘sexo’
I Usadas para indicar hor´arios permitidos ou proibidos para navegar na web
I Ex: As redes sociais podem ser acessadas somente no hor´ario do almo¸co
Sintaxe das ACLs no Squid
I O controle de acesso ´e feito atrav´es da combina¸c˜ao dos elementos classes e operadores determinando se o acesso dever´a ser permitido ou negado
I As classes indicam as caracter´ısticas da tentativa de acesso e o
operador (Ex: http_access) realiza o bloqueio ou a libera¸c˜ao
14 # classificando a origem 192.168.1.0/24 com o nome rede_local
15 # acl nome tipo (valor|"arquivo") [valor2] [valor3] ["arquivo2"]
16 acl rede_local src 192.168.1.0/24
17 # liberando o acesso para a rede_local
18 http_access allow rede_local
19 # bloqueando para o restante
20 http_access deny all
Pol´ıtica padr˜ao: NEGAR
Quando o Squid recebe uma tentativa de acesso, este analisa as regras sequencialmente. ´E desejado que a linha “http_access deny all” sempre esteja presente e ap´os as demais regras
Alguns tipos de ACL no Squid
Tipo Descri¸c˜ao Exemplo
src Endere¸co IP de origem acl rede local src 192.168.1.0/24 dst Endere¸co IP de destino acl ifsc dst 200.135.37.64/26 port Porta contida na URL acl portas port 80 443 maxconn N´umero m´aximo de conex˜oes
de um mesmo IP
acl conexoes maxconn 5
proxy_auth Usu´ario autenticado acl usuarios proxy auth REQUIRED max_user_ip N´umero m´aximo de IPs que
um usu´ario pode se autenti-car
acl unico max user ip 1
rep_mime_type Tipo do conte´udo da res-posta
acl video rep mime type video/mpeg video time Hor´ario do acesso acl almoco time MTWHF 12:00-14:00 url_regex Express˜ao regular aplicada `a
URL
acl orkut url regex .*orkut.* urlpath_regex Express˜ao regular aplicada `a
URI
acl fig urlpath regex -i (gif|jpg|png) srcdomain Dom´ınio de origem acl contabil srcdomain .cont.empresa.br dstdom_regex Express˜ao regular ao dom´ınio
de destino
acl ifsc dstdom regex (ifsc|cefetsc)\.edu\.br
I http://www.squid-cache.org/Doc/config/acl/
ACL – Exemplo 1
Nota
Fa¸ca uma c´opia de seguran¸ca do arquivo squid.conf antes de iniciar este exemplo.
1. Somente m´aquinas da rede 192.168.1.0/24 podem usar o proxy
2. N˜ao ´e poss´ıvel acessar conte´udos hospedados nos servidores do Youtube
I As restri¸c˜oes s´o devem ser aplicadas de 2ª a 6ª das
08:00-12:00 e das 14:00-18:00
I A m´aquina do gerente (192.168.1.100) pode acessar o Youtube
a qualquer momento
3. Configure como proxy transparente
21 iptables -t nat -A PREROUTING-i $DEV_LAN -p TCP --dport 80 -j REDIRECT --to-port 3128
ACL – Exemplo 1 (c´odigo)
22 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
24 http_port 3128 transparent# procure por essa linha no arquivo
25 visible_hostname ubuntu-squid-proxy
26 cache_mgr sysadmin@empresa.com.br
28 acl rede_local src 192.168.1.0/24
29 acl maquina_gerente src 192.168.1.100
30 # Sunday, Monday, Tuesday, Wednesday, tHursday, Friday, sAturday
31 acl matutinotime MTWHF 8:00-12:00
32 acl vespertino time MTWHF 14:00-18:00
33 acl youtube dstdomain.youtube.com .googlevideo.com .ytimg.com
35 http_access allow redelocal!matutino !vespertino youtube
36 http_access allow redelocal!youtube
37 http_access deny all
ACL – Exemplo 2
I N˜ao permita o acesso a s´ıtios de pornografia,
compartilhamento de arquivos, v´ıdeos e garanta o acesso a s´ıtios confi´aveis
Arquivo texto deve conter uma URL ou uma palavra por linha
bloqueados.txt 38 megaupload.com 39 sexo 40 batepapo liberados.txt 41 .uol.com.br 42 www.folha.com.br 43 www.g1.com.br /etc/squid3/squid.conf44 acl bloqueados url_regex -i"/etc/squid3/bloqueados.txt"
45 acl liberados url_regex -i"/etc/squid3/liberados.txt"
46 acl flash_video url_regex \.flv$
47 http_access deny flash_video
48 http_access deny bloqueados!liberados
Bloqueando conte´udo
I Fluxos de m´ıdia
49 # Detectando o tipo do conteudo que esta' sendo baixado 50 # rep_mime_type deve ser usada com http_reply_access
51 acl media rep_mime_type x-ms-asf # Windows Media Player
52 acl media rep_mime_type video/flv video/x-flv # Flash Video
53 acl media rep_mime_type application/x-shockwave-flash
54 # Barrando pela extensao do conteudo
55 acl mediapr urlpath_regex\.(afx|asf|flv|swf)(\?.*)?$
57 http_access deny mediapr
58 http_reply_access deny media # resposta ao pedido do cliente
I MSN Messenger
59 acl msn urlpath_regex-i gateway.dll
60 acl msnd dstdomain messenger.msn.com gateway.messenger. hotmail.com
61 acl msn1 req_mime_type application/x-msn-messenger
63 http_access deny msnd
64 http_access deny msn
Fazendo cache de conte´udo dinˆamico: Youtube
66 # Mantendo arquivos .flv em cache
67 refresh_pattern -i \.flv$ 10080 90% 999999
69 # Videos tendem a ser grandes. Aumentando o tamanho maximo dos objetos em cache
70 maximum_object_size 40MB
72 # Garantindo que o conteudo do dominio sera' guardado em cache 73 acl youtube dstdomain.youtube.com
74 cache allow youtube
Personaliza¸c˜ao das p´aginas de erro
I O pacote squid-langpack apresenta um conjunto de p´aginas de aviso em diversas l´ınguas
I /usr/share/squid3/errors/pt-br
I /etc/squid3/errorpage.css
I No arquivo /etc/squid3/squid.conf
76 # Diretorio com os arquivos de erros
77 error_directory /usr/share/squid3/errors/pt-br
Exerc´ıcio: Personalizando uma p´agina de erro
Edite a p´agina de erro ERR_ACCESS_DENIED e deixe um aviso bem destacado de acesso negado, inclusive com uma figura.
Autentica¸c˜ao de usu´arios
I O Squid permite que somente usu´arios autenticados fa¸cam uso do servi¸co
M´etodo Descri¸c˜ao
LDAP Lightweight Directory Access Protocol
NCSA Arquivo com usu´ario e senha no formato do NCSA MSNT Dom´ınio Windows NT
PAM M´odulos PAM do Unix
SMB Servidor SMB (Windows ou Samba) http:
Autentica¸c˜ao de usu´arios – NCSA
I Configura¸c˜ao no squid.conf
78 # Nao deixe como proxy transparente
79 http_port 3128
81 auth_param basic program /usr/lib/squid3/ncsa_auth
82 /etc/squid3/usuarios
83 acl usuarios proxy_auth REQUIRED
84 # exigindo autenticacao somente para alguns sitios
85 # acl usuarios proxy_auth REQUIRED /etc/squid3/sitios-autenticados
87 http_access allow usuarios
I Cria¸c˜ao de usu´arios com o aplicativo htpasswd
88 # criando a base e adicionando usuario 'aluno'
89 htpasswd -c usuarios aluno
90 # adicionando outro usuario
91 htpasswd usuarios professor
Relat´orios de acesso – SARG
I Squid Analysis Report Generator ´e uma ferramenta
desenvolvida por um brasileiro que consolida as informa¸c˜oes de acesso geradas pelo Squid em uma p´agina HTML I O SARG apresenta as seguintes informa¸c˜oes
I Quais usu´arios acessaram quais s´ıtios web
I O hor´ario do acesso
I Quantos bytes foram baixados
I Quais s˜ao os s´ıtios web mais acessados
I Quais os usu´arios que mais navegam, bem como os hor´arios de
mais acesso
NOTA
Se optar por usar o SARG em uma empresa/universidade ´e imprescind´ıvel que os usu´arios sejam avisados que o acesso deles a web est´a sendo monitorado
SARG – Configura¸c˜ao /etc/sarg/sarg.conf
92 # Linguagem da pagina HTML93 language Portuguese
94 # Local do access_log gerado pelo Squid
95 access_log /var/log/squid3/access.log
96 # Titulo da pagina HTML com os relatorios
97 title "Relatorio de Acesso"
98 # Local onde serao geradas as paginas
99 output_dir /var/www/relatorio
100 # Usuarios que nao terao seus dados de acesso publicados
101 exclude_users /etc/sarg/exclude_users
102 # Maquinas que nao terao seus dados de acesso publicados
103 exclude_hosts /etc/sarg/exclude_hosts
104 # Quantos relatorios antigos devem ser mantidos no diretorio
105 lastlog10
106 # Formato da data (dd/mm/yy - e )
107 date_format e
108 # Tabela de mapeamento de IPs em nomes de usuario. Ex: 192.168.1.10 joao
109 usertab/etc/sarg/usertab
I Executando o sarg
110 sarg [-f arquivo-conf] [-d dd/mm/yyyy-dd/mm/yyyy] [-o dir-destino]
Shell Script para Relat´orios di´arios ou semanais
111 #!/bin/bash112 SAIDA=/var/www/relatorio
113 SARG=`which sarg`
114 if [ $# -ne 1 ]; then
115 echo -e "Sintaxe errada.\n Informe d para diario e s para semanal" 116 echo "Exemplo: $0 d" 117 exit 1 118 fi 119 case $1 in 120 d) 121 DIR=$SAIDA/diario
122 PERIODO=$(date --date"1 day ago" +%d/%m/%Y)
123 PERIODO=$PERIODO-$PERIODO
124 ;;
125 s)
126 DIR=$SAIDA/semanal
127 HOJE=$(date --date "1 day ago" +%d/%m/%Y)
128 PERIODO=$(date --date"1 week ago" +%d/%m/%Y)`echo "-$HOJE"`
129 ;;
130 esac
132 mkdir -p $DIR
133 $SARG -d $PERIODO -o $DIR
SARG – Configura¸c˜ao
I Aplicativo /usr/sbin/sarg-reports e CRONTAB
I /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly I /etc/sarg/sarg-reports.conf 134 SARG=/usr/bin/sarg 135 CONFIG=/etc/sarg/sarg.conf 136 HTMLOUT=/var/www/relatorio
137 PAGETITLE="Relatorio de acesso"
138 LOGOIMG=/relatorio/images/sarg.png
139 LOGOLINK="http://$(hostname)/"
140 DAILY=Diario
141 WEEKLY=Semanal
142 MONTHLY=Mensal
143 EXCLUDELOG1="SARG: No records found"
144 EXCLUDELOG2="SARG: End"
NOTA
Os relat´orios s˜ao compostos de muitos arquivos html e mantˆe-los por grandes per´ıodos pode esgotar o espa¸co em disco ou ainda o n´umero de inodes da parti¸c˜ao. (Para verificar inodes: df -i)
Controle de acesso ao relat´orio do SARG
I O pr´oprio servidor Apache HTTP permite realizar controle de acesso em um diret´orio espec´ıfico
I Pode-se colocar na configura¸c˜ao do diret´orio em
/etc/apache2ou ainda adicionando um arquivo .htaccess no diret´orio que se deseja proteger
I Para usar o .htaccess ´e necess´ario deixar as configura¸c˜oes globais do diret´orio no Apache como AllowOverride All
145 <Files .htaccess>
146 order allow,deny
147 deny from all
148 </Files>
150 # Arquivo de senhas NCSA (gerado com aplicativo htpasswd)
151 AuthUserFile/var/www/usuarios-sarg
152 AuthName "Acesso Restrito"
153 AuthType Basic
Monitorando a sa´ude do servidor com o Munin
I Munin ´e uma ferramenta para monitoramento de recursos disponibilizados em uma rede
I E poss´ıvel monitorar diversas m´aquinas atrav´es de gr´aficos em´ uma ´unica p´agina web
I A m´aquina master conecta em todas as demais m´aquinas definidas como node
I Faz uso da ferramenta RRDTool1
I Baseado no conceito de instala¸c˜ao simplificada e modular
I Plugins podem ser adicionados e removidos para monitorar os mais diferentes servi¸cos
I Plugins podem ser escritos em qualquer linguagem
1http://oss.oetiker.ch/rrdtool
Munin – Configura¸c˜ao
I Master
155 apt-get install munin apache2
156 # Arquivo: /etc/munin/apache2.conf
157 # Trocar a linha Allow from localhost 127.0.0.0/8 ::1 por
158 Allow from all
159 # Arquivo: /etc/munin/munin.conf
160 # Trocar a linha: [localhost.localdomain] por
161 [nome-da-tua-maquina]
162 # Acrescentar as seguintes linhas para cada maquina que deseje monitorar
163 [nome-da-outra-maquina]
164 address192.168.1.10# Coloque o IP da maquina node
165 use_node_name yes
I Node
166 apt-get install munin-node
167 # Arquivo: /etc/munin/munin-node
168 # Permitindo que a maquina master (192.168.1.1) acesse o munin
169 allow ^192\.168\.1\.1$
Gr´aficos Munin – Espa¸co em Disco (dia)
Gr´aficos Munin – Espa¸co em Disco (ano)
/var60% ocupado n˜ao ´e t˜ao preocupante (Em junho houve uma interven¸c˜ao do administrador)
Gr´aficos Munin – Uso de inodes (dia)
Gr´aficos Munin – Squid pedidos
Gr´aficos Munin – Squid tr´afego
Conclus˜oes
I O Squid atuando como cache consegue diminuir o tr´afego externo
I Bem ´util para arquivos grandes e que s˜ao baixados por diversas m´aquinas da rede local
I Atualiza¸c˜oes de antiv´ırus, de softwares e dos sistemas
operacionais
I O Squid combinado com um firewall (camada 3 e 4) consegue evitar acesso a s´ıtios web indesejados, indicar o tipo de acesso para cada usu´ario e a restri¸c˜ao temporal para o acesso
I Aplicativos como o SquidGuard e Dansguardian apresentam filtros ainda mais poderosos
I E poss´ıvel combinar o Squid com Antiv´ırus (Ex: Clamav)´ I Ferramentas de monitoramento e de registro de acessos s˜ao
´
uteis para verificar a sa´ude do Squid, auxiliando no aprimoramento dos filtros
I A mente ociosa do usu´ario ´e ferramenta contra o
administrador, feche uma porta e ele achar´a mais 10 para burlar o sistema (Ex: OpenProxy)