iptables

Transcrição

iptables
UNIVERSIDADE PARA O DESENVOLVIMENTO DO ALTO VALE DO ITAJAÍ
Pró-reitoria de Pós-Graduação, Pesquisa e Extensão
Latu Sensu – Redes de Computadores e Segurança de Sistemas
Projeto e Configuração de Firewalls
Prof. Dr. Emerson Ribeiro de Mello
Data: 11/12/2010.
Acadêmicos:
Diego Adriano Sieves
Joel Schafer
Paulo Luis Steinhauser
Thiago Branco Meurer
O Iptables consiste em um módulo do kernel
do Linux utilizado como front-end para
configurar o Netfilter;
É o Netfilter que realiza toda a filtragem de
pacotes no Linux;
O Iptables nada mais é que uma ferramenta
que nos permite adicionar e remover regras a
cada uma das chains (filas onde os pacotes
são processados).
Exemplos:
Bloquear qualquer pacote TCP destinado à porta
80 de sua máquina. Bastaria que fosse utilizado o
seguinte comando:
# iptables -A OUTPUT -p tcp --dport
--dport 80 -j DROP
Descartar qualquer pacote enviado à máquina
local pela máquina de endereço 200.156.12.3,
por exemplo. O comando neste caso seria
# iptables -A INPUT -s 200.156.12.3 -j DROP
Uma característica que confere muito poder
ao Iptables é a expansibilidade, ou seja,
podem ser criados módulos que lhe
acrescentem funcionalidades, como filtragem
por protocolo de camada de aplicação.
Como bloquear o uso de MSN na minha rede?
E para bloquear serviço Web?
É inquestionável a utilidade de um
mecanismo de filtragem que atue diretamente
na camada de aplicação, bloqueando
diretamente o protocolo http, por exemplo,
ou o protocolo usado por messengers. É
exatamente isso que faz o Layer 7.
História
• O desenvolvimento do Layer 7 começou em
2003 em resposta a constatação de que
quase todas as aplicações de controle de
largura de banda e Qos em uso eram
proprietárias, muito caras e de difícil
adaptação. Buscava-se então uma solução de
código-aberto.
História
• Em maio de 2003 foi lançada a primeira
versão do l7, um patch adicionando um
"filtro" (classificador) no kernel do Linux . Até
outubro 2003, nada havia sido feito de
funcional com relação a QoS, sendo lançada
então uma versão para Netfilter.
História
• Esta versão foi a 1.0, de janeiro de 2005. Até
dezembro de 2006, percebeu-se que
trabalhar em nível de kernel não era uma boa
idéia, então foi lançada uma versão que
funcionava no nível do usuário e obtinha seus
dados através do Netfilter QUEUE .
As formas tradicionais de classificação de pacotes,
baseadas geralmente no tipo de protocolo de
transporte, na camada 4 do modelo de rede OSI e
nas portas de origem e/ou destino, são suficientes
na maioria dos casos.
Porém ela pode ser ineficaz em alguns casos
específicos, como por exemplo, no caso de
programas de P2P, como o Kazaa, que utilizam
portas aleatórias ou em caso de serviços rodando
em uma porta não padrão (por exemplo um
servidor HTTP rodando na porta 1111).
Assim surge o Projeto l7 filtering <http://l7filter.sourceforge.net>, e como o próprio nome diz, ele
trabalhou com filtro para a camada 7 do modelo OSI, ou
seja, a camada de aplicação. Normalmente o kernel do
Linux trabalhando na camada 4 acaba por não observar
o conteúdo de um pacote, podendo por isso passar
muito tráfego sem ser percebido. O Layer7 olha dentro
dos pacotes, a procura de expressões regulares para
achar determinados tipos de conteúdo, sendo
considerado uma grande solução para procura de
aplicações em uma rede.
Mas como nada é perfeito, o Layer 7 também tem suas
desvantagens, pois ele pode trazer prejuízos para a
empresa dependendo da situação em que é utilizado. O
fato de haver a análise do conteúdo pode acarretar em
grande uso de CPU, o que não é recomendado, por
exemplo, a sua utilização em um roteador Linux com
alto tráfego, podendo haver perda de informações e
aplicações como o VOIP.
Como já sabemos, o iptables pode atuar nas camadas
de enlace, rede e transporte:
Enlace: iptables -A CHAIN -m mac -mac-source;
Rede: iptables -A CHAIN -s IP_ADDRESS;
Transporte: iptables -A CHAIN -p tcp -dport xxx.
No entanto, combinando o Layer 7 serão aplicados
novas features para o netfilter filtrar alguma aplicação
que normalmente pertenceria apenas a camada 4.
Apesar da utilização do l7 não ser muito complexa, a
sua instalação é um tanto quanto trabalhosa, pois
devemos baixar vários pacotes, entre eles o próprio
kernel do Sistema Operacional, que pode ser
encontrado no seguinte endereço:
http://www.kernel.org.
Para o trabalho foi utilizado o kernel linux-2.6.31.14,
utilizado no Ubuntu 9.10
Além da versão do kernel utilizada pelo sistema
operacional, houve a necessidade de baixar outros
arquivos correspondentes ao Layer 7, bem como a
instalação de pacotes para compilar o novo kernel, já
com o iptables Layer7 instalado.
A instalação foi feita dentro de um ambiente virtual,
uma vez que um problema na compilação poderia
ocasionar problemas maiores se fosse numa máquina
real.
Após baixar todos os arquivos, foi criado um link
chamado linux que apontava para o kernel recém
baixado;
Entrando no kernel através do link linux foram
aplicados os seguintes comandos:
# patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.252.6.28-layer7-2.22.patch
# cp /boot/config-2.6.31-14-generic /usr/src/linux-2.6.3114/.config
O próximo passo foi entrar dentro do menu de
configuração do kernel e ativar o módulo l7.
# make menuconfig
Saindo da configuração do kernel, foi dado o
comando para a compilação do mesmo:
# make-kpkg –initrd kernel-image
Depois desta etapa, foi utilizado o comando
abaixo para instalar o novo kernel:
Após todos os procedimentos anteriores, resta
acessar a pasta dos fontes do iptables e compilálos para posteriormente instalar o iptables (já
com o layer7).
Para finalizar, foram instalados os protocolos que
foram baixados e descompactados no início da
instalação.
Podemos bloquear, por exemplo, o uso do msn
(e de aplicativos que utilizem o mesmo
protocolo) com os comandos:
# iptables -A OUTPUT -m layer7 --l7proto
--l7proto
msnmessenger -j DROP
# iptables -A INPUT -m layer7 --l7proto
--l7proto
msnmessenger -j DROP
Repare que utilizamos a opção -m para
especificar que utilizaremos o módulo layer7 e,
com isso, habilitamos a opção --l7proto que vai
especificar qual protocolo iremos bloquear.
Podemos bloquear, por exemplo, vídeo pela
Web (youtube, por exemplo):
# iptables -A INPUT -m layer7 --l7proto
--l7proto
httpvideo -j DROP
Bloqueando DNS:
# iptables -A INPUT -m layer7 --l7proto
--l7proto dns
-j DROP
Estes são alguns exemplos de protocolos que
podem ser bloqueados, mas podemos
bloquear vários outros programas como
doom3, skype, edonkey, etc. Para uma lista
dos protocolos disponíveis nesta versão no
Layer 7 basta acessar os diretórios /etc/l7protocols/extra e /etc/l7protocols/protocols.
Protocolos
• São vários os protocolos, aplicações e
arquivos que o Layer 7 consegue verificar,
como softwares P2P, VoIP, Chat, Games, Mail,
Remote Acess, File, Networking, Audio e
Video Streaming, entre outros. Abaixo
apresentamos apenas alguns dos protocolos
mais conhecidos.
Protocolo
Qualidade
Descrição
Bittorrent
OK
P2P Torrent
Dhcp
Bom
Protocolo DHCP
Dns
Ótimo
Protocolo DNS
Edonkey
Bom
P2P Edonkey (Emule, entre outros)
Fasttrack
Bom
P2P (Kazaa, Morpheus, Imesh, etc.)
ftp
Ótimo
Protocolo FTP
http
Ótimo
Protocolo HTTP
Imap
Ótimo
Protocolo IMAP
Msnmessenger
Bom
MSN Messenger
Pop3
Ótimo
Protocolo POP3
skypeout
OK
Skype para telefone
skypetoskype
OK
Skype para Skype
Protocolo
Qualidade
Descrição
Smtp
Ótimo
Simple Mail Transport Protocol
Ssh
Ótimo
Secure Shell
Vnc
Ótimo
Acesso Remoto
Counterstrike-source
Bom
Game
Gtalk
Bom
Google Talk
Httpvideo
Bom
Vídeo sobre HTTP (Youtube)
Legenda Qualidade:
• Ótimo: Funciona;
• Bom: Funciona até onde sabemos;
• OK: Provavelmente Funciona.
A seguir serão apresentados alguns testes
primeiramente sem aplicar as regras do
iptables layer7 e posteriormente utilizando as
regras para barrar o acesso ao msn, skype e a
um site de vídeos.
http://l7-filter.sourceforge.net
https://help.ubuntu.com/community/Kernel/Com
pile
http://www.howtoforge.com/kernel_compilation_
ubuntu
http://receitasdebolo.wordpress.com/2009/09/05
/layer7/
http://www.howtoforge.com/how-to-set-up-alinux-layer-7-packet-classifier-on-centos5.1

Documentos relacionados