Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
- Módulo 6 -
FIREWALL E PROXY
1
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
1. SERVIDOR PROXY
2
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
O Squid é 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 requisições
freqüentes de páginas web numa rede de computadores.
Ele suporta SSL, listas de acesso complexas e logging completo. Por utilizar o Internet
Cache Protocol, o Squid pode ser configurado para trabalhar de forma hierárquica ou mista
para melhor aproveitamento da banda.
O Squid consiste em um programa principal, squid, um sistema de busca e resolução de
nomes, dnsserver , e alguns programas adicionais para reescrever requests, fazer autenticação
e gerenciar ferramentas de clientes.
O Squid foi escrito originalmente para rodar em sistema operacional tipo Unix, mas ele
também funciona em sistemas Windows desde sua versão 2.6.STABLE4.
O Squid busca por comunicação TCP (Transmission Control Protocol) e ICP (Internet
Cache Protocol) em portas específicas. O TCP é usado para comunicação entre Web Servers e
clientes, e o ICP para conversa entre servidores de cache. Para cada servidor (ou cliente), a
configuração do Squid precisa fornecer uma única porta sobre a qual o Squid irá enviar as
requisições (TCP ou ICP) e ouvir as respostas.
Assim ele trabalha apenas com FTP, gopher e http. Existe uma confusão em achar que é
possível, através do Squid, configurar acesso a e-mails, ICQ, IRC, etc. Isso é totalmente
equivocado, visto que não faz sentido criar caches de e-mails pessoais, mensagens do ICQ, etc.
1.1.2. REQUISITOS
1.1.3. INSTALAÇÃO
3
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Fontes das versões mais atuais do Squid podem ser encontradas no site
http://www.squid-cache.org/Versions/
1.1.4. CONFIGURAÇÕES
# cd /etc/squid
# cp squid.conf squid.conf.original
http_port 3128
visible_hostname servidor
cache_mgr webmaster@localhost
error_directory /usr/share/squid3/errors/Portuguese
1.1.4.1. Cache
hierarchy_stoplist cgi-bin ?
cache_mem 32 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 100 MB
hierarchy_stoplist: define palavras que se forem encontradas na URL, a página irá ser
carregada direto do cache.
4
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
cache_mem: define a quantidade de memória que o servidor irá usar para o cache.
maximum_object_size_in_memory: define o tamanho máximo do objeto que poderá ser
armazenado na memória, senão será armazenado no disco rígido.
maximum_object_size: define o tamanho máximo do objeto que poderá ser armazenado
no disco rígido, senão o objeto será descartado.
Isto significa que será criada uma estrutura com 1024MB, 16 diretórios e 256
subdiretórios.
c) Para definir o tempo de vida dos objetos no cache, para que quando o Squid for
verificá-los, saber se é necessário atualizá-los ou não, adicionar a seguinte configuração:
1ª coluna: defina o tempo em minutos, em cada acesso, quando deve verificar se houve
modificação no objeto.
2ª coluna: defina a porcentagem mínima da modificação do objeto que deve ter para
ser atualizado.
3ª coluna: defina o tempo em minutos, quando deve efetuar uma atualização mesmo
não ter sido modificado.
d) Por medida de segurança é importante não permitir que seja feito cache de páginas
seguras:
access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
5
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
As ACL’s são listas que fazem o agrupamento dos objetos que serão negados ou
liberados de acordo com as regras determinadas pelo administrador.
Sintaxe:
acl nome_da_acl tipo tipo_de_agrupamento
Exemplo:
acl almoco time 12:00-14:00
Para uma rede corporativa é necessários definir o que é ou não permitido acessar. Para
tanto o Squid define um poderoso mecanismo para atribuir permissões aos acessos baseados
nas ACS’s criadas.
Sintaxe:
http_access allow|deny nome_da_acl
Exemplo:
acl maq1 src 10.0.0.1
acl maq2 src 10.0.0.2
acl maq3 src 10.0.0.3
acl diurno time 08:00-18:00
acl almoco time 12:00-14:00
6
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Isso significa que quando liberamos por primeiro a ACL “diretoria”, essa ACL terá acesso
total mesmo tendo abaixo uma ACL bloqueando sites. Já a ACL “usuários” não conseguirá
acessar os sites contidos na ACL “sites_bloqueados”, porque o bloqueio vem primeiro.
Vamos supor que precisamos bloquear uma palavra que esteja no meio de outra, como
por exemplo, deputados, a qual contém uma string não permitida.
Uma maneira de trabalhar com essa situação é criando duas listas de palavras: uma
com as palavras permitidas e outra com as palavras não permitidas:
- lista_negra
- lista_branca
Observação:
A url_regex trata a string dentro de uma URL completa. Por exemplo, se dentro do
arquivo lista_negra conter a palavra boy e qualquer parte da URL contiver a palavra boy, como
http://www.playboy.com.br o acesso será bloqueado.
O parâmetro –i diz que qualquer palavra dentro do arquivo sofrerá tratamento de case
sensitive.
7
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Para construção do servidor Proxy serão aplicadas as seguintes ACL’s e seus respectivos
permissionamentos:
a) Criar 2 (duas) ACL’s com o tipo SRC (IP de origem) e adicionar o IP do servidor e o IP
da rede:
b) Crie uma ACL com o tipo proto (protocolo) e adicione o protocolo "cache_object":
d) Crie uma ACL do tipo method (método de requisição) e adicione o método PURGE:
d) Para permitir que apenas o servidor possa exclua objetos, adicione a seguinte regra:
e) Crie uma ACL do tipo port (porta) e adicione as portas que serão liberadas:
acl Safe_ports port 21 70 80 210 280 443 488 563 591 631 777 873
901 1025-65535
f) Para bloquear o acesso em portas que não foram liberadas, adicione a seguinte regra:
O sinal de “!” significa negação. No caso acima, serão negadas todas as portas
diferentes das listadas na ACL Safe_ports
8
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
g) Crie uma ACL do tipo method (método de requisição) e adicione o método CONNECT,
que permite fazer conexão direta:
h) Crie uma ACL do tipo port (porta) e adicione as portas dos protocolos com SSL que
foram adicionadas na ACL "Safe_ports" e devem ser liberadas para conexão direta:
i) Para bloquear o acesso em portas que não foram liberadas para conexão direta,
adicione a seguinte regra:
j) Crie uma ACL do tipo dstdomain (domínio de destino) e adicione um domínio iniciando
com o ponto:
k) Se no caso forem vários domínios de destino, definir o caminho do arquivo que serão
adicionados os domínios:
Para tanto é necessário criar o arquivo domínios como definido na ACL. Para tanto, crie
o arquivo usando o seguinte comando
# nano /etc/squid/dominios
.twitter.com
.youtube.com
.vimeo.com
m) Crie uma ACL do tipo url_regex (expressão regular na URL) e adicione uma
expressão regular:
9
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
A ACL do tipo url_regex percorre url em busca de expressões regulares. A ACL é case-
sensitive, se no caso estiver procurando a expressão "sexo" e tiver "Sexo", serão consideradas
diferentes.
n) Para adicionar várias expressões, definir o caminho do arquivo que serão adicionadas
às expressões. Usar a opção "-i" para tornar a ACL em case-insensitive:
jogo
blog
msn
# nano /etc/squid/extensoes
\.bat($|\?|\&)
\.exe($|\?|\&)
\.scr($|\?|\&)
q) Para bloquear o acesso em URL’s path com expressões regulares, adicione a seguinte
regra:
10
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
r) Sem mais ACL para criar, adicione a seguinte regra para permitir que apenas as
máquinas da rede e o servidor sejam liberados para acessar a Internet:
s) Com as ACL definidas, a sequência das regras deverá estar na ordenação correta,
independente da ACL ser criada junto com a regra. É importante que a ACL seja criada antes de
definir a regra.
Aqui vai uma amostra de como deve está ordenado às regras:
# /etc/init.d/squid3 reload
ou
# /etc/init.d/squid3 stop
# /etc/init.d/squid3 start
b) Configurar o navegador para acessar web via Proxy, apontando para o endereço do
servidor Proxy pela porta 3128.
11
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
2. FIREWALL
Firewall é o nome dado ao dispositivo de uma rede de computadores que tem por
objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Sua
função consiste em regular o tráfego de dados entre redes distintas e impedir a transmissão
e/ou recepção de acessos nocivos ou não autorizados de uma rede para outra. Este conceito
inclui os equipamentos de filtros de pacotes e de proxy de aplicações, comumente associados a
redes TCP/IP.
a) Nível de Aplicação - Este tipo de firewall analisam o conteúdo do pacote para tomar
suas decisões de filtragem. Firewalls deste tipo são mais intrusivos (pois analisam o conteúdo
de tudo que passa por ele) e permitem um controle relacionado com o conteúdo do tráfego.
Alguns firewalls em nível de aplicação combinam recursos básicos existentes em firewalls em
nível de pacotes combinando as funcionalidade de controle de tráfego/controle de acesso em
uma só ferramenta. Servidores proxy, como o Squid, são um exemplo deste tipo de firewall.
b) Nível de Pacotes - Este tipo de firewall toma as decisões baseadas nos parâmetros do
pacote, como porta/endereço de origem/destino, estado da conexão, e outros parâmetros do
12
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
pacote. O firewall então pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O
iptables é um excelente firewall que se encaixa nesta categoria.
Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada
dupla de segurança no acesso as suas máquinas/máquinas clientes.
O firewall vem com a finalidade de oferecer proteção a serviços que devem ter acesso
garantido a usuários externos e serviços os quais serão bloqueados a todas/determinadas
máquinas.
É recomendável bloquear o acesso a todas as portas menores que 1024 por executarem
serviços que rodam com privilégio de usuário root, e autorizar somente o acesso as portas que
realmente deseja (configuração restritiva nesta faixa de portas).
É também função do firewall analisar que tipo de conexões podem passar e quais
bloquear. Serviços com autenticação em texto plano e potencialmente inseguros como rlogin,
telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window são serviços que devem ser ter acesso
garantido somente para máquinas/redes que você confia. Estes serviços podem não ser só
usados para tentativa de acesso ao seu sistema, mas também como forma de atacar outras
pessoas aproveitando-se de problemas de configuração.
Outra tarefa do firewall é analisar e controlar quais máquinas terão acesso livre e quais
serão restritas:
- Que serviços deverão ter prioridade no processamento.
- Que máquinas/redes nunca deverão ter acesso a certas/todas máquinas.
- O volume de tráfego que o servidor manipulará. Através disso é possível balancear o
tráfego entre outras máquinas, configurar proteções contra DoS, syn flood, etc.
- O que tem permissão de passar de uma rede para outra (em máquinas que atuam
como roteadores/gateways de uma rede interna).
Como firewall físico podemos citar roteadores que comutam protocolos, portanto,
fazem o vinculo entre duas redes podendo ser elas diferente uma de outra.
Para fazer o roteamento, o micro roteador deve possuir uma placa de rede em cada
sub-rede. Também é necessário informar em cada máquina quem será o micro responsável
pelo roteamento. O nome técnico desse micro é gateway.
13
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 3 – Gateway
Como firewall por pacotes refere-se ao que se restringe a trabalhar nas camadas
TCP/IP, decidindo quais pacotes de dados podem passar e quais não. Tais escolhas são regras
baseadas nas informações endereço IP remoto, endereço IP do destinatário, além da porta TCP
usada. Quando devidamente configurado, esse tipo de firewall permite que somente
"computadores conhecidos troquem determinadas informações entre si e tenham acesso a
determinados recursos". Um firewall assim, também é capaz de analisar informações sobre a
conexão e notar alterações suspeitas, além de ter a capacidade de analisar o conteúdo dos
pacotes, o que permite um controle ainda maior do que pode ou não ser acessível.
Em linux, até a versão de kernel 2.2.x o firewall embutido era o IPChains. Em Versões
de kernel maiores foi substituído pelo IPTables.
Tanto um como outro trata endereços de IP, Serviços e portas com relação ao que deve
ser “trancado” e ao que pode ser liberado.
2.2. IPTABLES
No kernel do Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter)
que substitui o ipchains dos kernels da série 2.2. Este firewall tem como vantagem ser muito
estável (assim como o ipchains e ipfwadm), confiável, permitir muita flexibilidade na
programação de regras pelo administrador do sistema, mais opções disponíveis ao
administrador para controle de tráfego, controle independente do tráfego da rede local/entre
redes/interfaces devido à nova organização das etapas de roteamento de pacotes.
O iptables é um firewall em nível de pacotes e funciona baseado no endereço/porta de
origem/destino do pacote, prioridade, etc. Funciona através da comparação de regras para
14
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é
bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que
está acontecendo em seu sistema.
Ele também pode ser usado para modificar e monitorar o tráfego da rede, fazer NAT
(masquerading, source nat, destination nat), redirecionamento de pacotes, marcação de
pacotes, modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de
bytes, dividir tráfego entre máquinas, criar proteções anti-spoofing, contra syn flood, DoS, etc.
O tráfego vindo de máquinas desconhecidas da rede pode também ser bloqueado/registrado
através do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem
iptables como todas as ferramentas UNIX maduras dependem de sua imaginação, pois ele
garante uma grande flexibilidade na manipulação das regras de acesso ao sistema, precisando
apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso
garantido, quais serviços devem estar acessíveis para cada rede, e iniciar a construção de seu
firewall.
O iptables ainda tem a vantagem de ser modularizável, funções podem ser adicionadas
ao firewall ampliando as possibilidades oferecidas.
Um firewall não funciona de forma automática (instalando e esperar que ele faça as
coisas automaticamente), é necessário pelo menos conhecimentos básicos de rede TCP/IP,
roteamento e portas para criar as regras que farão a segurança de seu sistema. A segurança do
sistema depende do controle das regras que serão criadas.
2.2.1. INSTALAÇÃO
Em sistemas Linux derivados do Debian a instalação pode ser feita pelo comando apt-
get, como se segue:
É importante lembrar que é necessário que o kernel tenha sido compilado com suporte
ao iptables. O requerimento mínimo de memória necessária para a execução do iptables é o
mesmo do kernel 2.4 (4MB). Dependendo do tráfego que será manipulado pela(s) interface(s)
do firewall ele poderá ser executado com folga em uma máquina 386 SX com 4MB de RAM.
Como as configurações residem no kernel não é necessário espaço extra em disco
rígido para a execução deste utilitário.
Para certificar-se que o iptables está instalado execute o seguinte comando:
# modprobe iptables
O pacote iptables contém o utilitário iptables (e ip6tables para redes ipv6) necessários
para inserir as regras no kernel.
15
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
2.2.3. REGRAS
As regras no iptables são como comandos passados para que ele realize uma
determinada ação (como bloquear ou deixar passar um pacote) de acordo com o
endereço/porta de origem/destino, interface de origem/destino, etc. As regras são armazenadas
dentro dos chains e processadas na ordem que são inseridas.
As regras são armazenadas no kernel, o que significa que quando o computador for
reiniciado tudo o que fez será perdido. Por este motivo elas deverão ser gravadas em um
arquivo para serem carregadas a cada inicialização.
Exemplo:
iptables -A INPUT -s 123.123.123.1 -j DROP.
2.2.4. CHAINS
Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas
para operação do firewall. Existem dois tipos de chains:
- Os embutidos (como os chains INPUT, OUTPUT eFORWARD)
- Os criados pelo usuário.
Os nomes dos chains embutidos devem ser especificados sempre em maiúsculas (note
que os nomes dos chains são case-sensitive, ou seja, o chain input é completamente diferente
de INPUT).
2.2.5. TABELAS
Tabelas são os locais usados para armazenar os chains e conjunto de regras com uma
determinada característica em comum. As tabelas podem ser referenciadas com a opção -t
tabela e existem três tabelas disponíveis no iptables:
2.2.5.1. Filter
16
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Os chains INPUT e OUTPUT somente são atravessados por conexões indo/se originando
de localhost.
Observação:
Para conexões locais, somente os chains INPUT e OUTPUT são consultados na tabela
filter.
2.2.5.2. Nat
Usada para dados que gera outra conexão (masquerading, source nat, destination nat,
port forwarding, proxy transparente são alguns exemplos).
Possui três chains padrões:
- PREROUTING: Consultado quando os pacotes precisam ser modificados logo que
chegam. É o chain ideal para realização de DNAT e redirecionamento de portas.
- OUTPUT : Consultado quando os pacotes gerados localmente precisam ser modificados
antes de serem roteados. Este chain somente é consultado para conexões que se originam de
IPs de interfaces locais.
- POSTROUTING: Consultado quando os pacotes precisam ser modificados após o
tratamento de roteamento. É o chain ideal para realização de SNAT e IP Masquerading.
2.2.5.3. Mangle
Utilizada para alterações especiais de pacotes (como modificar o tipo de serviço (TOS)
ou outros detalhes que serão explicados a frente.
Possui dois chains padrões:
- INPUT: Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain INPUT da tabela filter.
- FORWARD: Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain FORWARD da tabela filter.
- PREROUTING: Consultado quando os pacotes precisam ser modificados antes de ser
enviados para o chain PREROUTING da tabela nat.
- POSTROUTING: Consultado quando os pacotes precisam ser modificados antes de
serem enviados para o chain POSTROUTING da tabela nat.
- OUTPUT: Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain OUTPUT da tabela nat.
2.2.6. CONFIGURAÇÃO
17
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Para agilizar esta tarefa, o arquivo firewall pode ser baixado no link downloads do site.
Sendo assim, ignorar o primeiro e o último comando:
#cd /etc/init.d
#wget www.ricardobarcelar.com/arquivos/firewall
#chmod +x /etc/init.d/firewall (Permissão de execução)
Layer7
É um excelente plugin para o netfilter/iptables que trabalha na camada de aplicação,
dando maior flexibilidade ao firewall.
SARG
SARG - Squid Analysis Report Generator é uma ferramenta que permite ver o que o
usuário faz na Internet. Provê muitas informações sobre as atividades, tais como: tempos,
bytes trafegados, sites acessados, etc.
MRTG
O MRTG é um programa feito em perl muito útil para analisar o tráfego utilizado em sua
rede/link. Ele gera gráficos que te mostram o uso da banda em termos de velocidade.
Firewall Admin
Solução web que permite o gerenciamento do IPTables através de uma página web.
Pode ser obtido através do comando:
#cd /var/www
#wget http://ovh.dl.sourceforge.net/sourceforge/ firewalladmin/
firewalladmin-0.3.tar.gz
#chmod a+w config.php
18
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Outras configurações muito interessantes para aprendizado podem ser encontradas em:
http://wiki.ubuntu-br.org/ConfigurandoFirewall
http://wiki.ubuntu-br.org/Iptables
http://www.guiaubuntupt.org/wiki/index.php?title=Iptables#Iptables_How_to_B.C3.A1sico
REFERÊNCIAS
Básica
http://www.guiafoca.org/
http://www.squid-cache.org/
http://www.squid-cache.org.br/
Complementar
SILVA, Cesar Augustus - Instalando o Servidor Squid no Linux
http://www.linuxman.pro.br/squid/
UBUNTU Documentation
https://help.ubuntu.com/community/IptablesHowTo
19