Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução ao IP Tables 1) Introdução: O netfilter é um conjunto de mecanismos para filtragem e manipulação de pacotes implementados diretamente no kernel do linux a partir da versão 2.4.x. Os mecanismos do netfilter são selecionados através de três tabelas: FILTER: utilizada para filtrar pacotes MANGLE: utilizada para ações de marcação e manipulação de pacotes NAT: utilizada para as ações de tradução de endereços (NAT e NAPT) O iptables corresponde aos mecanismos utilizados para organizar as regras utilizadas pelo netfilter. O iptables utiliza o conceito de chains para indicar para quais pacotes uma determinada regra deve ser aplicada. As chains utilizadas pelo mecanismo de filtragem de pacotes são: INPUT: a regras se referem aos pacotes que entram por uma interface OUTPUT: as regras se referem ao que sai por uma interface FORWARD: as regras se aplicam aos pacotes que serão roteados, isto é, ao pacotes que não são destinados ao próprio computador. A sintaxe para manipulação das regras do iptables segue a estrutura. Se a tabela não for especificada, assumese a tabela FILTER: iptables AID CHAIN N t TABLE MATCH j TARGET A opção –A é usada para acrescentar uma regra ao fim da chain. A opção –I N é utilizada para inserir uma regra na posição N. E a opção –D N para apagar a regra da posição N. As seguintes opções complementam uma regra: opção (short) opção (long) parâmetro significado s src X.X.X.X/Y endereço de origem do pacote d dst X.X.X.X/Y endereço de destino do pacote i ininterface interface interface pela qual o pacote chegou o outinterface interface interface pela qual o pacote vai sair p protocol tcp, udp, icmp protocolo do pacote sport sourceport porta[:porta] porta ou intervalo de portas de origem dport destinationport porta[:porta] porta ou intervalo de portas de destino icmptype tipo/código pacote icmp (iptables p icmp h para info match habilita o modo de opções extendido Com a opção p PROTOCOL ou match, podese usar adicionalmente as seguintes opções: opção parâmetro significado limit X/time limita a média de matchs. Time pode ser /second,/minute, /hour ou /day limit X Número máximo inicial de matchs. Esse valor é "recarregado" em 1 a cada intervalo de tempo em que burst X o limite não foi alcançado, até o valor especificado. Utilize essa opção para permitir rajadas. mask X casa com um pacote "marcado" com o valor X. state NEW,ESTABLISHED,RELATED, INVALID casa com o estado de uma conexão. tcpflags MASK FLAGS Examina as flags "MASK" e casa com FLAGS. Exemplo: SYN,ACK ACK = examina SYN e ACK e casa com pacotes com SYN desligado e ACK ligado. tos name casa com o campo Type of Service. User iptables mtos h para ver os nomes/valores ttl valor casa com o valor do campo ttl do pacote Para negar uma opção, utilizase !. Por exemplo: s !192.168.0.1/32 As seguintes ações podem ser executadas na tabela FILTER: Alvo opções significado ACCEPT Aceita um pacote REJECT Rejeita um pacote REJECT rejectwithtype Rejeita um pacote e envia um pacote ICMP type para a origem DROP Descarta silencionsamente o pacote LOG Loga os headers do pacote LOG loglevel X Loga utilizando o nível X (veja o arquivo syslog.conf) LOG logprefix permite acrescentar um prefixo de 29 letras. É útil paraidentificar o tipo pacote/regra Ambiente para Execução da Prática Para realizar esta prática utilize a imagem VMWare "especLAB" disponível no HD dos computadores do laboratório de Redes I. Para usar esta imagem, faça uma cópia do da pasta "especLAB" do diretório Matrix para o discente (caso ainda não exista). Na pasta, clique no icone "especlab". Caso questionado, responda que a imagem foi copiada (e não movida). Certifiquese que o ambiente VMWare está no modo Bridge (e não NAT). Para simplificar a execução dos comandos, abra um terminal (Console) e coloque o ambiente de interpretação de comandos em modo "root": rss@espec: sudo bash A senha é "pucpos". Exercício 1: Crie regras bloqueando o envio de mensagem ICMP Echo (ping) para o seu computador (VM Ubuntu). a) Verifique as regras instaladas no iptables iptables L b) Se houver alguma regra, remova (flush). iptables F [chain] c) Caso não estejam, mude a política default de todas as chain para ACCEPT iptables P INPUT ACCEPT iptables P OUTPUT ACCEPT iptables P FORWARD ACCEPT d) Crie uma regra bloqueando o recebimento de ICMP, e em seguida efetue um ping do ambiente windows para o endereço IP da máquina virtual. Identifique o endereço IP da máquina virtual digitando ifconfig. iptables A INPUT p ICMP j DROP iptables L (copie o conteudo da tabela para um arquivo texto que irá compor o relatório) e) Limpe a regra anterior, e crie uma nova regra de bloqueio, mas agora usando ao ação REJECT ao invés de DROP. Repita o ping do windows para máquina virtual e observe o resultado. iptables F iptables A INPUT p ICMP j REJECT iptables L(copie o conteudo da tabela para um arquivo texto que irá compor o relatório) f) Verfique se a máquina virtual consegue pingar o abiente Windows. Em seguida, substitua a regra do iptables da máquina virtual pela regra abaixo, e verifique a possibilidade de enviar ping nos dois sentidos (do Ubuntu para o Windows e do Windows para o Ubuntu). iptables F iptables A INPUT p ICMP icmptype echorequest j REJECT iptables L(copie o conteudo da tabela para um arquivo texto que irá compor o relatório) RELATÓRIO PARTE 1: Inclua as tabelas do IP tables obtidas nos passos d), e) e f). E responda: A) Qual a diferença entre as ações DROP e REJECT B) Por que o Ubuntu não foi capaz de pingar o Windows com a regra e), mas foi capaz de pingálo com a regra f). Exercício 2: Crie regras para que seu computador possa acessar apenas sites HTTP pela Internet. Para este exercicio, crie um "script shell" para facilitar a execução e manutenção dos comandos. O script é um arquivo texto, que deve ser modificado para ter a opção de execução. Para esta prática anote o endereço IP do primeiro DNS que será consultado pelo seu computador para acessar a internet digitando o comando abaixo: more /etc/resolv.conf Você precisará substituir a variável ip_dns_server do script abaixo pelo endereço IP encontrado no resolv.conf. Modelo para o script (exercicio2.sh) #!/bin/bash x # a) Remover regras anteriores (flush). iptables –F [chain] # b) Alterar a política default de todas as chain para DROP iptables –P INPUT DROP iptables –P OUTPUT DROP iptables –P FORWARD DROP # c) Criar regras permitindo que seu computador consulte servidores DNS iptables A INPUT p UDP s ip_dns_server sport 53 j ACCEPT iptables A OUTPUT p UDP d ip_dns_server dport 53 j ACCEPT Feche o arquivo exercicio2.sh. Após criar o script conforme as instruções acima, digite o comando abaixo para tornálo exercutável: chmod +x exercicio2.sh ./exercicio2.sh Verifique se consegue consultar o DNS da PUCPR. Para isso, digite: dig www.pucpr.br Crie as regras permitindo que seu computador consulte qualquer servidor HTTP na internet, incluindoas no script exercicio2.sh. iptables A INPUT p TCP s 0.0.0.0/0 sport 80 j ACCEPT iptables A OUTPUT p TCP d 0.0.0.0/0 dport 80 j ACCEPT Execute o script novamente, e verifique se consegue acessar o servidor www.pucpr.br através do browser. Inclua as regras para acessar o proxy da PUCPR no script. iptables A INPUT p TCP s virtualproxy.cwbdis.pucpr.br sport 3128 j ACCEPT iptables A OUTPUT p TCP d virtualproxy.cwbdis.pucpr.br dport 3128 j ACCEPT Verifique se consegue acessar servidores http na INTERNET RELATÓRIO PARTE 2: Incluaem seu relatório: A) O Script completo para geração das regras B) O resultado do comando iptables L com as regras já configuradas Exercício 3 Avaliação do Spoofing de porta: Baixe e compile os programas encontrados no seguinte endereço. gcc stcp.c o stcp gcc ctcp.c o ctcp gcc sudp.c o sudp gcc cudp.c o cudp Execute o programa TCP em seu computador (porta 9090) e verifique se é possível acessalo de outra maquina: no seu computador: execute ./stcp (porta local 9090) em outro computador (solicite auxilio a um colega): execute ./ctcp (porta local (qualquer valor acima de 1024, por exemplo 5678), porta destino 9090, endereço IP do computador que executa o stcp). Repita o procedimento, mas agora faça com que o computdor cliente utilize a porta 80: em outro computador (solicite auxilio a um colega): execute ./ctcp (porta local 80, porta destino 9090, endereço IP do computador que executa o stcp). RELATÓRIO PARTE 3: Responda: Identifique qual regra do seu script foi explorada para fazer o spoofing de porta. 2) Usando os flags TCP A sintaxe para utilizar os flags TCP é a seguinte: iptables –A CHAIN –p tcp –tcpflags FLAGS_EXAMINADOS FLAGS_SETADOS Exemplo 1: a seguinte regra se aplica a pacotes com os flag SYS setado e os flags ACK,FIN e RST restados iptables A FORWARD p tcp tcpflags SYN,ACK,FIN,RST SYN Exemplo 2: a seguinte regra se aplica a pacotes que não tem nenhum flag setado. iptables A FORWARD p tcp tcpflags ALL NONE Exercício 4: Modifique as regras dos exercícios 2 e 3 de maneira a evitar o problema de spoofing de portas TCP iptables –A INPUT–p tcp sport 80 tcpflags ACK ACK –j ACCEPT Verifique a nova configuração: no seu computador: execute ./stcp (porta local 9090) em outro computador (solicite auxilio a um colega): execute ./ctcp (porta local 80, porta destino 9090, endereço IP do computador que executa o stcp). RELATÓRIO PARTE 4: Inclua em seu relatório: A) O Script completo para geração das regras B) O resultado do comando iptables L com as regras já configuradas 3) Recursos de firewall stateful: O iptables utiliza possui alguns recursos limitados para criação de regras com estado. As regras com controle de estado permitem estabelecer critérios semelhantes ao TCP para protocolos que não suportam conexão como o UDP e o ICMP. As regras com controle de estado são habilitadas através da opção –m state. Os seguintes estados podem ser controlados: NEW: referese a pacotes que criam uma nova conexão ESTABLISHED: referese aos pacotes trocados uma conexão já estabelecida RELATED: referese a pacotes relacionados a uma comunicação, mas que não fazem parte diretamente do fluxo de dados da comunicação. Por exemplo, mensagens de erro ICMP ou pacotes de criação de conexão FTP. INVALID: referese a pacotes que não se encaixam a nenhum dos casos anteriores, como pacotes ICMP com opções inválidas. Exercício 5: a) Modifique as regras de maneira a evitar o ataque por spoofing de porta TCP iptables –A INPUT –m state –p tcp sport 80 state ESTABLISHED,RELATED –j ACCEPT iptables –A OUTPUT –m state –p tcp port 80 state NEW,ESTABLISHED,RELATED –j ACCEPT b) Repita o procedimento de teste, e veja se é possível acessar ao servidor, mesmo fazendo spoofing de porta. c) Tente executar o mesmo comando para UDP, corrigindo possíveis problemas de ataque utilizando as regras de DNS. Para testar as regras UDP: no seu computador: execute ./sudp (porta local 9090) em outro computador (solicite auxilio a um colega): execute ./cudp (porta local 53, porta destino 9090, endereço IP do computador que executa o sudp). RELATÓRIO PARTE 5: Inclua em seu relatório: A) O Script completo para geração das regras B) O resultado do comando iptables L com as regras já configuradas
Compartilhar