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