Projeto e Configura¸c˜
ao de Firewalls
Squid ProxyProf. Emerson Ribeiro de Mello, Dr. [email protected]
P´os-Gradua¸c˜ao em Redes de Computadores e Seguran¸ca de Sistemas UNIDAVI
Squid
Trata-se de um proxy e cache para navega¸c˜ao web, atendendo
protocolos como HTTP, HTTPS e FTP
proxy == procurador. Aquele que atua em favor de um outro
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
Armazena uma c´opia em disco do conte´udo transferido e faz uso
Requisitos de hardware
Disco r´ıgido
Velocidade de acesso – SAS ou SATA (taxa at´e 6Gb/s)
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
Mem´oria RAM
Squid guarda em mem´oria a tabela com os objetos armazenados no cache
Obter tais informa¸c˜oes no swap em disco resulta em uma maior demora
Poder de processamento
Squid quando usado somente como cache, sem controle de acesso, n˜ao exige muito CPU
Instalando o Squid – Ubuntu 10.10
Instala¸c˜ao
1 sudo apt-get install squid3 apache2-utils
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/squid3 4000 16 256
8 # tamanho maximo de um unico objeto no cache em disco
9 maximum_object_size 16384 KB
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
Laborat´
orio 1 – Squid b´
asico
Edite o arquivo /etc/squid3/squid.conf e configure as diretivas apresentadas na lˆamina anterior
Reinicie o servi¸co (sudo /etc/init.d/squid3 restart)
Configure o seu navegador web para apontar para a m´aquina onde
est´a rodando o Squid
Monitore o log do Squid enquanto navega pela web
Listas de Controle de Acesso – ACLs
Usadas para indicar quais m´aquinas poder˜ao fazer uso do servi¸co de cache
Ex: Evitar que usu´arios maliciosos fa¸cam uso do seu servi¸co para atacar um terceiro
Usadas para indicar quais s´ıtios web poder˜ao ser acessados
Ex: N˜ao ´e permitido acessar redes sociais
Usadas para indicar palavras proibidas nos s´ıtios web
Ex: N˜ao ´e permitido acessar p´aginas que contenham a palavra ‘sexo’
Usadas para indicar hor´arios permitidos ou proibidos para navegar na
web
Ex: As redes sociais podem ser acessadas somente no hor´ario do almo¸co
Listas de Controle de Acesso – ACLs
Usadas para indicar quais m´aquinas poder˜ao fazer uso do servi¸co de cache
Ex: Evitar que usu´arios maliciosos fa¸cam uso do seu servi¸co para atacar um terceiro
Usadas para indicar quais s´ıtios web poder˜ao ser acessados
Ex: N˜ao ´e permitido acessar redes sociais
Usadas para indicar palavras proibidas nos s´ıtios web
Ex: N˜ao ´e permitido acessar p´aginas que contenham a palavra ‘sexo’
Usadas para indicar hor´arios permitidos ou proibidos para navegar na
web
Ex: As redes sociais podem ser acessadas somente no hor´ario do almo¸co
Listas de Controle de Acesso – ACLs
Usadas para indicar quais m´aquinas poder˜ao fazer uso do servi¸co de cache
Ex: Evitar que usu´arios maliciosos fa¸cam uso do seu servi¸co para atacar um terceiro
Usadas para indicar quais s´ıtios web poder˜ao ser acessados
Ex: N˜ao ´e permitido acessar redes sociais
Usadas para indicar palavras proibidas nos s´ıtios web
Ex: N˜ao ´e permitido acessar p´aginas que contenham a palavra ‘sexo’
Usadas para indicar hor´arios permitidos ou proibidos para navegar na
web
Ex: As redes sociais podem ser acessadas somente no hor´ario do almo¸co
Listas de Controle de Acesso – ACLs
Usadas para indicar quais m´aquinas poder˜ao fazer uso do servi¸co de cache
Ex: Evitar que usu´arios maliciosos fa¸cam uso do seu servi¸co para atacar um terceiro
Usadas para indicar quais s´ıtios web poder˜ao ser acessados
Ex: N˜ao ´e permitido acessar redes sociais
Usadas para indicar palavras proibidas nos s´ıtios web
Ex: N˜ao ´e permitido acessar p´aginas que contenham a palavra ‘sexo’
Usadas para indicar hor´arios permitidos ou proibidos para navegar na
web
Ex: As redes sociais podem ser acessadas somente no hor´ario do almo¸co
Sintaxe das ACLs no Squid
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
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”
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 autenticar
acl unico max user ip 1
rep_mime_type Tipo do conte´udo da resposta 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
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
As restri¸c˜oes s´o devem ser aplicadas de 2ª a 6ª das 08:00-12:00 e das 14:00-18:00
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
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 [email protected]
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 matutino time 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
ACL – Exemplo 2
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.conf
44 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
Bloqueando conte´
udo
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
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 40 MB
72 # Garantindo que o conteudo do dominio sera' guardado em cache
73 acl youtube dstdomain .youtube.com
Personaliza¸c˜
ao das p´
aginas de erro
O pacote squid-langpack apresenta um conjunto de p´aginas de
aviso em diversas l´ınguas
/usr/share/squid3/errors/pt-br /etc/squid3/errorpage.css
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
Autentica¸c˜
ao de usu´
arios
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)
Autentica¸c˜
ao de usu´
arios – NCSA
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
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
Relat´
orios de acesso – SARG
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
O SARG apresenta as seguintes informa¸c˜oes
Quais usu´arios acessaram quais s´ıtios web O hor´ario do acesso
Quantos bytes foram baixados
Quais s˜ao os s´ıtios web mais acessados
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
Relat´
orios de acesso – SARG
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
O SARG apresenta as seguintes informa¸c˜oes
Quais usu´arios acessaram quais s´ıtios web O hor´ario do acesso
Quantos bytes foram baixados
Quais s˜ao os s´ıtios web mais acessados
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
SARG – Configura¸c˜
ao /etc/sarg/sarg.conf
92 # Linguagem da pagina HTML
93 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 lastlog 10
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
Executando o sarg
Shell Script para Relat´
orios di´
arios ou semanais
111 #!/bin/bash
112 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
SARG – Configura¸c˜
ao
Aplicativo /usr/sbin/sarg-reports e CRONTAB
/etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly
/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
Controle de acesso ao relat´
orio do SARG
O pr´oprio servidor Apache HTTP permite realizar controle de acesso
em um diret´orio espec´ıfico
Pode-se colocar na configura¸c˜ao do diret´orio em /etc/apache2 ou ainda adicionando um arquivo .htaccess no diret´orio que se deseja proteger
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
Munin ´e uma ferramenta para monitoramento de recursos
disponibilizados em uma rede ´
E poss´ıvel monitorar diversas m´aquinas atrav´es de gr´aficos em uma ´
unica p´agina web
A m´aquina master conecta em todas as demais m´aquinas definidas como node
Faz uso da ferramenta RRDTool1
Baseado no conceito de instala¸c˜ao simplificada e modular
Plugins podem ser adicionados e removidos para monitorar os mais diferentes servi¸cos
Plugins podem ser escritos em qualquer linguagem
1
Munin – Configura¸c˜
ao
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 address 192.168.1.10 # Coloque o IP da maquina node
165 use_node_name yes
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
Gr´
aficos Munin – Espa¸co em Disco (dia)
Gr´
aficos Munin – Espa¸co em Disco (ano)
/var 60% ocupado n˜ao ´e t˜ao preocupante (Em junho houve uma
Conclus˜
oes
O Squid atuando como cache consegue diminuir o tr´afego externo
Bem ´util para arquivos grandes e que s˜ao baixados por diversas m´aquinas da rede local
Atualiza¸c˜oes de antiv´ırus, de softwares e dos sistemas operacionais
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
Aplicativos como o SquidGuard e Dansguardian apresentam filtros ainda mais poderosos
´
E poss´ıvel combinar o Squid com Antiv´ırus (Ex: Clamav)
Ferramentas de monitoramento e de registro de acessos s˜ao ´uteis para
verificar a sa´ude do Squid, auxiliando no aprimoramento dos filtros
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)
Conclus˜
oes
O Squid atuando como cache consegue diminuir o tr´afego externo
Bem ´util para arquivos grandes e que s˜ao baixados por diversas m´aquinas da rede local
Atualiza¸c˜oes de antiv´ırus, de softwares e dos sistemas operacionais
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
Aplicativos como o SquidGuard e Dansguardian apresentam filtros ainda mais poderosos
´
E poss´ıvel combinar o Squid com Antiv´ırus (Ex: Clamav)
Ferramentas de monitoramento e de registro de acessos s˜ao ´uteis para
verificar a sa´ude do Squid, auxiliando no aprimoramento dos filtros
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)
Conclus˜
oes
O Squid atuando como cache consegue diminuir o tr´afego externo
Bem ´util para arquivos grandes e que s˜ao baixados por diversas m´aquinas da rede local
Atualiza¸c˜oes de antiv´ırus, de softwares e dos sistemas operacionais
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
Aplicativos como o SquidGuard e Dansguardian apresentam filtros ainda mais poderosos
´
E poss´ıvel combinar o Squid com Antiv´ırus (Ex: Clamav)
Ferramentas de monitoramento e de registro de acessos s˜ao ´uteis para
verificar a sa´ude do Squid, auxiliando no aprimoramento dos filtros
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)