Guia Foca GNU_Linux - Firewall Iptables

download Guia Foca GNU_Linux - Firewall Iptables

of 28

Transcript of Guia Foca GNU_Linux - Firewall Iptables

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 1/28

    [ anterior ] [ Contedo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ prximo ]

    Guia Foca GNU/Linux Captulo 10 - Firewall iptables

    Este captulo documenta o funcionamento do firewall iptables que acompanha a srie do kernel 2.4, opes usadas, e aponta alguns pontos fundamentais para iniciar a

    configurao e construo de bons sistemas de firewall.

    10.1 Introduo

    O Firewall um programa que como objetivo proteger a mquina contra acessos indesejados, trfego indesejado, proteger servios que estejam rodando na mquina e

    bloquear a passagem de coisas que voc no deseja receber (como conexes vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de umaempresa ou a seus dados pessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (tambm chamado de netfilter) que substitui o ipchains dos kernels da srie

    2.2. Este novo firewall tem como vantagem ser muito estvel (assim como o ipchains e ipfwadm), confivel, permitir muita flexibilidade na programao de regras pelo

    administrador do sistema, mais opes disponveis ao administrador para controle de trfego, controle independente do trfego da rede local/entre redes/interfaces devido a

    nova organizao das etapas de roteamento de pacotes.

    O iptables um firewall em nvel de pacotes e funciona baseado no endereo/porta de origem/destino do pacote, prioridade, etc. Ele funciona atravs da comparao de

    regras para saber se um pacote tem ou no permisso 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 tambm pode ser usado para modificar e monitorar o trfego da rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento de pacotes, marcao de

    pacotes, modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de bytes, dividir trfego entre mquinas, criar protees anti-spoofing, contra syn flood,DoS, etc. O trfego vindo de mquinas desconhecidas da rede pode tambm ser bloqueado/registrado atravs do uso de simples regras. As possibilidades oferecidas pelos

    recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginao, pois ele garante uma grande flexibilidade na manipulao das regras

    de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso garantido, quais servios devem estar acessveis

    para cada rede, e iniciar a construo de seu firewall.

    O iptables ainda tem a vantagem de ser modularizvel, funes podem ser adicionadas ao firewall ampliando as possibilidades oferecidas. Usei por 2 anos o ipchains e

    afirmo que este um firewall que tem possibilidades de gerenciar tanto a segurana em mquinas isoladas como roteamento em grandes organizaes, onde a passagem detrfego entre redes deve ser minuciosamente controlada.

    Um firewall no funciona de forma automtica (instalando e esperar que ele faa as coisas por voc), necessrio pelo menos conhecimentos bsicos de rede tcp/ip,

    roteamento e portas para criar as regras que faro a segurana de seu sistema. A segurana do sistema depende do controle das regras que sero criadas por voc, as falhas

    humanas so garantia de mais de 95% de sucesso nas invases.

    Enfim o iptables um firewall que agradar tanto a pessoas que desejam uma segurana bsica em seu sistema, quando administradores de grandes redes que querem ter um

    controle minucioso sobre o trfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra), controlar o uso de trfego,

    monitorao, etc.

    10.1.1 Verso

    assumido que esteja usando a verso 1.2.3 do iptables e baseadas nas opes do kernel 2.4.16 (sem o uso de mdulos experimentais). As explicaes contidas aqui

    podem funcionar para verses posteriores, mas recomendvel que leia a documentao sobre modificaes no programa (changelog) em busca de mudanas que alterem o

    sentido das explicaes fornecidas aqui.

    10.1.2 Um resumo da histria do iptables

    O iptables um cdigo de firewall das verses 2.4 do kernel, que substituiu o ipchains (presente nas sries 2.2 do kernel). Ele foi includo no kernel da srie 2.4 emmeados de Junho/Julho de 1999.

    A histria do desenvolvimento (desde o porte do ipfw do BSD para o Linux at o iptables (que a quarta gerao de firewalls do kernel) est disponvel no documento,

    Netfilter-howto.

    10.1.3 Caractersticas do firewall iptables

    Especificao de portas/endereo de origem/destino

    Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp)

    Suporte a interfaces de origem/destino de pacotes

    Manipula servios de proxy na rede

    Tratamento de trfego dividido em chains (para melhor controle do trfego que entra/sai da mquina e trfego redirecionado.

    Permite um nmero ilimitado de regras por chain

    Muito rpido, estvel e seguro

    Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 2/28

    Suporte a mdulos externos para expanso das funcionalidades padres oferecidas pelo cdigo de firewall

    Suporte completo a roteamento de pacotes, tratadas em uma rea diferente de trfegos padres.

    Suporte a especificao de tipo de servio para priorizar o trfego de determinados tipos de pacotes.

    Permite especificar excees para as regras ou parte das regras

    Suporte a deteco de fragmentos

    Permite enviar alertas personalizados ao syslog sobre o trfego aceito/bloqueado.

    Redirecionamento de portas

    Masquerading

    Suporte a SNAT (modificao do endereo de origem das mquinas para um nico IP ou faixa de IP's).

    Suporte a DNAT (modificao do endereo de destino das mquinas para um nico IP ou fixa de IP's)

    Contagem de pacotes que atravessaram uma interface/regra

    Limitao de passagem de pacotes/conferncia de regra (muito til para criar protees contra, syn flood, ping flood, DoS, etc).

    10.1.4 Ficha tcnica

    Pacote: iptables

    iptables - Sistema de controle principal para protocolos ipv4

    ip6tables - Sistema de controle principal para protocolos ipv6

    iptables-save - Salva as regras atuais em um arquivo especificado como argumento. Este utilitrio pode ser dispensado por um shell script contendo as regrasexecutado na inicializao da mquina.

    iptables-restore - Restaura regras salvas pelo utilitrio iptables-save.

    10.1.5 Requerimentos

    necessrio que o seu kernel tenha sido compilado com suporte ao iptables (veja Habilitando o suporte ao iptables no kernel, Seo 10.1.15. O requerimento mnimo de

    memria necessria para a execuo do iptables o mesmo do kernel 2.4 (4MB). Dependendo do trfego que ser manipulado pela(s) interface(s) do firewall ele poderser executado com folga em uma mquina 386 SX com 4MB de RAM.

    Como as configuraes residem no kernel no necessrio espao extra em disco rgido para a execuo deste utilitrio.

    10.1.6 Arquivos de logs criados pelo iptables

    Todo trfego que for registrado pelo iptables registrado por padro no arquivo /var/log/kern.log.

    10.1.7 Instalao

    apt-get install iptables

    O pacote iptables contm o utilitrio iptables (e ip6tables para redes ipv6) necessrios para inserir suas regras no kernel. Se voc no sabe o que ipv6, no precisarse preocupar com o utilitrio ip6tables por enquanto.

    10.1.8 Enviando Correes/Contribuindo com o projeto

    A pgina principal do projeto http://netfilter.filewatcher.org. Sugestes podem ser enviadas para a lista de desenvolvimento oficial do iptables:

    http://lists.samba.org.

    10.1.9 O que aconteceu com o ipchains e ipfwadm?

    O iptables faz parte da nova gerao de firewalls que acompanha o kernel 2.4, mas o suporte ao ipchains e ipfwadm ainda ser mantido atravs de mdulos decompatibilidade do kernel at 2004. Seria uma grande falta de considerao retirar o suporte a estes firewalls do kernel como forma de obrigar a "aprenderem" o iptables

    (mesmo o suporte sendo removido aps este perodo, acredito que criaro patches "externos" para futuros kernels que no traro mais este suporte). Se precisa do suporte aestes firewalls antes de passar em definitivo para o iptables leia Habilitando o suporte ao iptables no kernel, Seo 10.1.15.

    Se voc um administrador que gosta de explorar todos os recursos de um firewall, usa todos os recursos que ele oferece ou mantm uma complexa rede corporativa, tenhocerteza que gostar do iptables.

    10.1.10 Tipos de firewalls

    Existem basicamente dois tipos de firewalls:

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 3/28

    nvel de aplicao - Este tipo de firewall analisam o contedo do pacote para tomar suas decises de filtragem. Firewalls deste tipo so mais intrusivos (pois

    analisam o contedo de tudo que passa por ele) e permitem um controle relacionado com o contedo do trfego. Alguns firewalls em nvel de aplicao combinamrecursos bsicos existentes em firewalls em nvel de pacotes combinando as funcionalidade de controle de trfego/controle de acesso em uma s ferramenta. Servidores

    proxy, como o squid, so um exemplo deste tipo de firewall.

    nvel de pacotes - Este tipo de firewall toma as decises baseadas nos parmetros do pacote, como porta/endereo de origem/destino, estado da conexo, e outrosparmetros do pacote. O firewall ento pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O iptables um excelente firewall que se encaixa nesta

    categoria.

    Firewall em nvel de pacotes o assunto explicado nesta seo do guia mas ser apresentada uma explicao breve sobre o funcionamento de anlise de strings do

    iptables.

    Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de segurana no acesso as suas mquinas/mquinas clientes.

    10.1.11 O que proteger?

    Antes de iniciar a construo do firewall bom pensar nos seguintes pontos:

    Quais servios precisa proteger. Servios que devem ter acesso garantido a usurios externos e quais sero bloqueados a todas/determinadas mquinas. recomendvel

    bloquear o acesso a todas portas menores que 1024 por executarem servios que rodam com privilgio de usurio root, e autorizar somente o acesso as portas querealmente deseja (configurao restritiva nesta faixa de portas).

    Que tipo de conexes eu posso deixar passar e quais bloquear. Servios com autenticao em texto plano e potencialmente inseguros como rlogin, telnet, ftp, NFS,

    DNS, LDAP, SMTP RCP, X-Window so servios que devem ser ter acesso garantido somente para mquinas/redes que voc confia. Estes servios podem no sers usados para tentativa de acesso ao seu sistema, mas tambm como forma de atacar outras pessoas aproveitando-se de problemas de configurao.

    A configurao do firewall ajuda a prevenir isso, mesmo se um servio estiver mal configurado e tentando enviar seus pacotes para fora, ser impedido. Da mesma formase uma mquina Windows de sua rede for infectada por um trojan no haver pnico: o firewall poder estar configurado para bloquear qualquer tentativa de conexo

    vinda da internet (cracker) para as mquinas de sua rede.

    Para cpia de arquivos via rede insegura (como atravs da Internet), recomendado o uso de servios que utilizam criptografia para login e transferncia de arquivos(veja Servidor ssh, Captulo 15) ou a configurao de uma VPN.

    Que mquinas tero acesso livre e quais sero restritas.

    Que servios devero ter prioridade no processamento.

    Que mquinas/redes NUNCA devero ter acesso a certas/todas mquinas.

    O volume de trfego que o servidor manipular. Atravs disso voc pode ter que balancear o trfego entre outras mquinas, configurar protees contra DoS, syn flood,

    etc.

    O que tem permisso de passar de uma rede para outra (em mquinas que atuam como roteadores/gateways de uma rede interna).

    Etc.

    A anlise destes pontos pode determinar a complexidade do firewall, custos de implementao, prazo de desenvolvimento e tempo de maturidade do cdigo paraimplementao. Existem muitos outros pontos que podem entrar na questo de desenvolvimento de um sistema de firewall, eles dependem do tipo de firewall que est

    desenvolvendo e das polticas de segurana de sua rede.

    10.1.12 O que so regras?

    As regras so como comandos passados ao iptables para que ele realize uma determinada ao (como bloquear ou deixar passar um pacote) de acordo com o

    endereo/porta de origem/destino, interface de origem/destino, etc. As regras so armazenadas dentro dos chains e processadas na ordem que so inseridas.

    As regras so armazenadas no kernel, o que significa que quando o computador for reiniciado tudo o que fez ser perdido. Por este motivo elas devero ser gravadas em um

    arquivo para serem carregadas a cada inicializao.

    Um exemplo de regra: iptables -A INPUT -s 123.123.123.1 -j DROP.

    10.1.13 O que so chains?

    Os Chains so locais onde as regras do firewall definidas pelo usurio so armazenadas para operao do firewall. Existem dois tipos de chains: os embutidos (como os chains

    INPUT, OUTPUT e FORWARD) e os criados pelo usurio. Os nomes dos chains embutidos devem ser especificados sempre em maisculas (note que os nomes dos chainsso case-sensitive, ou seja, o chain input completamente diferente de INPUT).

    10.1.14 O que so tabelas?

    Tabelas so os locais usados para armazenar os chains e conjunto de regras com uma determinada caracterstica em comum. As tabelas podem ser referenciadas com a opo

    -t tabela e existem 3 tabelas disponveis no iptables:

    filter - Esta a tabela padro, contm 3 chains padres:

    INPUT - Consultado para dados que chegam a mquina

    OUTPUT - Consultado para dados que saem da mquina

    FORWARD - Consultado para dados que so redirecionados para outra interface de rede ou outra mquina.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 4/28

    Os chains INPUT e OUTPUT somente so atravessados por conexes indo/se originando de localhost.

    OBS: Para conexes locais, somente os chains INPUT e OUTPUT so consultados na tabela filter.

    nat - Usada para dados que gera outra conexo (masquerading, source nat, destination nat, port forwarding, proxy transparente so alguns exemplos). Possui 3 chains

    padres:

    PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. o chain ideal para realizao de DNAT e redirecionamento de

    portas (Fazendo DNAT, Seo 10.4.4).

    OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente consultado para conexesque se originam de IPs de interfaces locais.

    POSTROUTING - Consultado quando os pacotes precisam ser modificados aps o tratamento de roteamento. o chain ideal para realizao de SNAT e IP

    Masquerading (Fazendo SNAT, Seo 10.4.3).

    mangle - Utilizada para alteraes especiais de pacotes (como modificar o tipo de servio (TOS) ou outros detalhes que sero explicados no decorrer do captulo.Possui 2 chains padres:

    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.

    Veja A tabela mangle, Seo 10.5 para mais detalhes sobre a tabela mangle.

    10.1.15 Habilitando o suporte ao iptables no kernel

    Para usar toda a funcionalidade do firewall iptables, permitindo fazer o controle do que tem ou no permisso de acessar sua mquina, fazer Masquerading/NAT em sua

    rede, etc., voc precisar dos seguintes componentes compilados em seu kernel (os mdulos experimentais fora ignorados intencionalmente):

    * * Network Options: * Network packet filtering (replaces ipchains) [Y/m/n/?] Network packet filtering debugging [Y/m/n/?] e na Subseo: * * IP: Netfilter Configuration * Connection tracking (required for masq/NAT) (CONFIG_IP_NF_CONNTRACK) [M/n/y/?] FTP protocol support (CONFIG_IP_NF_FTP) [M/n/?] IRC protocol support (CONFIG_IP_NF_IRC) [M/n/?] IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES) [Y/m/n/?] limit match support (CONFIG_IP_NF_MATCH_LIMIT) [Y/m/n/?] MAC address match support (CONFIG_IP_NF_MATCH_MAC) [M/n/y/?] netfilter MARK match support (CONFIG_IP_NF_MATCH_MARK) [M/n/y/?] Multiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT) [M/n/y/?] TOS match support (CONFIG_IP_NF_MATCH_TOS) [M/n/y/?] LENGTH match support (CONFIG_IP_NF_MATCH_LENGTH) [M/n/y/?] TTL match support (CONFIG_IP_NF_TTL) [M/n/y/?] tcpmss match support (CONFIG_IP_NF_MATCH_TCPMSS) [M/n/y/?] Connection state match support (CONFIG_IP_NF_MATCH_STATE) [M/n/?] Packet filtering (CONFIG_IP_NF_FILTER) [M/n/y/?] REJECT target support (CONFIG_IP_NF_TARGET_REJECT) [M/n/?] Full NAT (CONFIG_IP_NF_NAT) [M/n/?] MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE) [M/n/?] REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT) [M/n/?] Packet mangling (CONFIG_IP_NF_MANGLE) [M/n/y/?] TOS target support (CONFIG_IP_NF_TARGET_TOS) [M/n/?] MARK target support (CONFIG_IP_NF_TARGET_MARK) [M/n/?] LOG target support (CONFIG_IP_NF_TARGET_LOG) [M/n/y/?] TCPMSS target support (CONFIG_IP_NF_TARGET_TCPMSS) [M/n/y/?]

    Esta configurao permite que voc no tenha problemas para iniciar o uso e configurao do seu firewall iptables, ela ativa os mdulos necessrios para utilizao de todos osrecursos do firewall iptables. Quando conhecer a funo de cada um dos parmetros acima (durante o decorrer do texto), voc poder eliminar muitas das opes

    desnecessrias para seu estilo de firewall ou continuar fazendo uso de todas ;-)

    OBS1: A configurao acima leva em considerao que voc NO executar os cdigos antigos de firewall ipfwadm e ipchains. Caso deseje utilizar o ipchains ou oipfwadm, ser preciso responder com "M" a questo "IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)". Ser necessrio carregar

    manualmente o mdulo correspondente ao firewall que deseja utilizar (modprobe iptables_filter.o no caso do iptables).

    No execute mais de um tipo de firewall ao mesmo tempo!!!

    OBS2: recomendvel ativar o daemon kmod para carga automtica de mdulos, caso contrrio ser necessrio compilar todas as partes necessrias embutidas no kernel,carregar os mdulos necessrios manualmente ou pelo iptables (atravs da opo --modprobe=mdulo).

    10.1.16 Ligando sua rede interna a Internet

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 5/28

    Se a sua inteno (como da maioria dos usurios) conectar sua rede interna a Internet de forma rpida e simples, leia Fazendo IP masquerading (para os apressados), Seo

    10.4.2 ou Fazendo SNAT, Seo 10.4.3. Um exemplo prtico de configurao de Masquerading deste tipo encontrado em Conectando sua rede interna a Internet, Seo10.8.3.

    Aps configurar o masquerading, voc s precisar especificar o endereo IP da mquina masquerading (servidor) como Gateway da rede. No Windows 9x/NT/2000 isto

    feito no Painel de Controle/Rede/Propriedades de Tcp/IP. No Linux pode ser feito com route add default gw IP_do_Servidor.

    10.2 Manipulando chains

    O iptables trabalha com uma tabela de regras que analisada uma a uma at que a ltima seja processada. Por padro, se uma regra tiver qualquer erro, uma mensagem

    ser mostrada e ela descartada. O pacote no conferir e a ao final (se ele vai ser aceito ou rejeitado) depender das regras seguintes.

    As opes passadas ao iptables usadas para manipular os chains so SEMPRE em maisculas. As seguintes operaes podem ser realizadas:

    10.2.1 Adicionando regras - A

    Como exemplo vamos criar uma regra que bloqueia o acesso a nosso prpria mquina (127.0.0.1 - loopback). Primeiro daremos um ping para verificar seu funcionamento:

    #ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.5 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.5/0.5/0.6 ms

    Ok, a mquina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereo 127.0.0.1 (-d 127.0.0.1):

    iptables -t filter -A INPUT -d 127.0.0.1 -j DROP

    Agora verificamos um novo ping:

    #ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes --- 127.0.0.1 ping statistics --- 2 packets transmitted, 0 packets received, 100% packet loss

    Desta vez a mquina 127.0.0.1 no respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d 127.0.0.1) so rejeitados (-j DROP). A opo -A usada para adicionar

    novas regras no final do chain. Alm de -j DROP que serve para rejeitar os pacotes, podemos tambm usar -j ACCEPT para aceitar pacotes. A opo -j chamada de alvo

    da regra ou somente alvo pois define o destino do pacote que atravessa a regra (veja Especificando um alvo, Seo 10.3.6). Bem vindo a base de um sistema de firewall :-)

    OBS1: - O acesso a interface loopback no deve ser de forma alguma bloqueado, pois muitos aplicativos utilizam soquetes tcp para realizarem conexes, mesmo que voc no

    possua uma rede interna.

    OBS2: - A tabela filter ser usada como padro caso nenhuma tabela seja especificada atravs da opo -t.

    10.2.2 Listando regras - L

    A seguinte sintaxe usada para listar as regras criadas:

    iptables [-t tabela] -L [chain] [opes]

    Onde:

    tabela

    uma das tabelas usadas pelo iptables. Se a tabela no for especificada, a tabela filter ser usada como padro. Veja O que so tabelas?, Seo 10.1.14 para

    detalhes.

    chain

    Um dos chains disponveis na tabela acima (veja O que so tabelas?, Seo 10.1.14) ou criado pelo usurio (Criando um novo chain - N, Seo 10.2.6). Caso o chainno seja especificado, todos os chains da tabela sero mostrados.

    opes

    As seguintes opes podem ser usadas para listar o contedo de chains:

    -v - Exibe mais detalhes sobre as regras criadas nos chains.

    -n - Exibe endereos de mquinas/portas como nmeros ao invs de tentar a resoluo DNS e consulta ao /etc/services. A resoluo de nomes pode tomar

    muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de sua conexo.

    -x - Exibe nmeros exatos ao invs de nmeros redondos. Tambm mostra a faixa de portas de uma regra de firewall.

    --line-numbers - Exibe o nmero da posio da regra na primeira coluna da listagem.

    Para listar a regra criada anteriormente usamos o comando:

    #iptables -t filter -L INPUT

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 6/28

    Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- anywhere localhost

    O comando iptables -L INPUT -n tem o mesmo efeito, a diferena que so mostrados nmeros ao invs de nomes:

    #iptables -L INPUT -n Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 0.0.0.0/0 127.0.0.1 #iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP all -- 0.0.0.0/0 127.0.0.1 #iptables -L INPUT -n -v Chain INPUT (policy ACCEPT 78 packets, 5820 bytes) pkts bytes target prot opt in out source destination 2 194 DROP icmp -- * * 0.0.0.0/0 127.0.0.1

    Os campos assim possuem o seguinte significado:

    Chain INPUT

    Nome do chain listado

    (policy ACCEPT 78 packets, 5820 bytes)

    poltica padro do chain (veja Especificando a poltica padro de um chain - P, Seo 10.2.12).

    pkts

    Quantidade de pacotes que atravessaram a regra (veja Zerando contador de bytes dos chains - Z, Seo 10.2.11).

    bytes

    Quantidade de bytes que atravessaram a regra. Pode ser referenciado com K (Kilobytes), M (Megabytes), G (Gigabytes).

    target

    O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP ou outro chain. Veja Especificando um alvo, Seo 10.3.6 para detalhes sobre a especificao de um

    alvo.

    prot

    Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. Veja Especificando um protocolo, Seo 10.3.3 para detalhes.

    opt

    Opes extras passadas a regra. Normalmente "!" (veja Especificando uma exceo, Seo 10.3.5) ou "f" (veja Especificando fragmentos, Seo 10.3.4).

    in

    Interface de entrada (de onde os dados chegam). Veja Especificando a interface de origem/destino, Seo 10.3.2.

    out

    Interface de sada (para onde os dados vo). Veja Especificando a interface de origem/destino, Seo 10.3.2.

    source

    Endereo de origem. Veja Especificando um endereo de origem/destino, Seo 10.3.1.

    destination

    Endereo de destino. Veja Especificando um endereo de origem/destino, Seo 10.3.1.

    outras opes

    Estas opes normalmente aparecem quando so usadas a opo -x:

    dpt ou dpts - Especifica a porta ou faixa de portas de destino.

    reject-with icmp-port-unreachable - Significa que foi usado o alvo REJECT naquela regra (veja Alvo REJECT, Seo 10.3.6.1).

    10.2.3 Apagando uma regra - D

    Para apagar um chain, existem duas alternativas:

    Quando sabemos qual o nmero da regra no chain (listado com a opo -L) podemos referenciar o nmero diretamente. Por exemplo, para apagar a regra criada acima:

    iptables -t filter -D INPUT 1

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 7/28

    Esta opo no boa quando temos um firewall complexo com um grande nmero de regras por chains, neste caso a segunda opo a mais apropriada.

    Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -A por -D:

    iptables -t filter -D INPUT -d 127.0.0.1 -j DROP

    Ento a regra correspondentes no chain INPUT ser automaticamente apagada (confira listando o chain com a opo "-L"). Caso o chain possua vrias regras semelhantes,

    somente a primeira ser apagada.

    OBS: No possvel apagar os chains defaults do iptables (INPUT, OUTPUT...).

    10.2.4 Inserindo uma regra - I

    Precisamos que o trfego vindo de 192.168.1.15 no seja rejeitado pelo nosso firewall. No podemos adicionar uma nova regra (-A) pois esta seria includa no final do chain

    e o trfego seria rejeitado pela primeira regra (nunca atingindo a segunda). A soluo inserir a nova regra antes da regra que bloqueia todo o trfego ao endereo 127.0.0.1na posio 1:

    iptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j ACCEPT

    Aps este comando, temos a regra inserida na primeira posio do chain (repare no nmero 1 aps INPUT) e a antiga regra nmero 1 passa a ser a nmero 2. Desta forma a

    regra acima ser consultada, se a mquina de origem for 192.168.1.15 ento o trfego estar garantido, caso contrrio o trfego com o destino 127.0.0.1 ser bloqueado na

    regra seguinte.

    10.2.5 Substituindo uma regra - R

    Aps criar nossa regra, percebemos que a nossa inteno era somente bloquear os pings com o destino 127.0.0.1 (pacotes ICMP) e no havia necessidade de bloquear

    todo o trfego da mquina. Existem duas alternativas: apagar a regra e inserir uma nova no lugar ou modificar diretamente a regra j criada sem afetar outras regras existentes e

    mantendo a sua ordem no chain (isso muito importante). Use o seguinte comando:

    iptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROP

    O nmero 2 o nmero da regra que ser substituda no chain INPUT, e deve ser especificado. O comando acima substituir a regra 2 do chain INPUT (-R INPUT 2)

    bloqueando (-j DROP) qualquer pacote icmp (-p icmp) com o destino 127.0.0.1 (-d 127.0.0.1).

    10.2.6 Criando um novo chain - N

    Em firewalls organizados com um grande nmero de regras, interessante criar chains individuais para organizar regras de um mesmo tipo ou que tenha por objetivo analisar um

    trfego de uma mesma categoria (interface, endereo de origem, destino, protocolo, etc) pois podem consumir muitas linhas e tornar o gerenciamento do firewall confuso (e

    conseqentemente causar srios riscos de segurana). O tamanho mximo de um nome de chain de 31 caracteres e podem conter tanto letras maisculas quanto minsculas.

    iptables [-t tabela] [-N novochain]

    Para criar o chain internet (que pode ser usado para agrupar as regras de internet) usamos o seguinte comando:

    iptables -t filter -N internet

    Para inserir regras no chain internet basta especifica-lo aps a opo -A:

    iptables -t filter -A internet -s 200.200.200.200 -j DROP

    E ento criamos um pulo (-j) do chain INPUT para o chain internet:

    iptables -t filter -A INPUT -j internet

    OBS: O chain criando pelo usurio pode ter seu nome tanto em maisculas como minsculas.

    Se uma mquina do endereo 200.200.200.200 tentar acessar sua mquina, o iptables consultar as seguintes regras:

    `INPUT' `internet' ---------------------------- ----------------------------- | Regra1: -s 192.168.1.15 | | Regra1: -s 200.200.200.200| |--------------------------| |---------------------------| | Regra2: -s 192.168.1.1 | | Regra2: -d 192.168.1.1 | |--------------------------| ----------------------------- | Regra3: -j DROP | ---------------------------- O pacote tem o endereo de origem 200.200.200.200, ele passa pela primeira e segunda regras do chain INPUT, a terceira regra direciona para o chain internet _______________________________________ v / v /-------------------------|-\ / /-------------------------------------|-\ | Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP \_____\ |-------------------------|-| / |---------------------------------------| / | Regra2: -s 192.168.1.1 | | / | Regra2: -d 200.200.200.202 -j DROP | |-------------------------|-|/ \---------------------------------------/ | Regra3: -j internet /| |---------------------------| No chain internet, a primeira regra confere | Regra4: -j DROP | com o endereo de origem 200.200.200.200 e \---------------------------/ o pacote bloqueado.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 8/28

    Se uma mquina com o endereo de origem 200.200.200.201 tentar acessar a mquina, ento as regra consultadas sero as seguintes: O pacote tem o endereo de origem 200.200.200.201, ele passa pela primeira e segunda regras do chain INPUT, a terceira regra direciona para o chain internet ______________________________________ v / v /-------------------------|-\ / /-------------------------------------|-\ | Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP | | |-------------------------|-| / |-------------------------------------|-| | Regra2: -s 192.168.1.1 | | / | Regra2: -s 200.200.200.202 -j DROP | | |-------------------------|-|/ \-------------------------------------|-/ | Regra3: -j internet /| v |---------------------------| / | Regra4: -j DROP --+------------------------------------------- \------------------------/-/ O pacote passa pelas regras 1 e 2 do chain | internet, como ele no confere com nenhuma v das 2 regras ele retorna ao chain INPUT e Esta regra a nmero 4 analisado pela regra seguinte. que diz para rejeitar o pacote.

    10.2.7 Renomeando um chain criado pelo usurio - E

    Se por algum motivo precisar renomear um chain criado por voc na tabela filter, nat ou mangle, isto poder ser feito usando a opo -E do iptables:

    iptables -t filter -E chain-antigo novo-chain

    Note que no possvel renomear os chains defaults do iptables.

    10.2.8 Listando os nomes de todas as tabelas atuais

    Use o comando cat /proc/net/ip_tables_names para fazer isto. interessante dar uma olhada nos arquivos dentro do diretrio /proc/net, pois os arquivos existentes

    podem lhe interessar para outras finalidades.

    10.2.9 Limpando as regras de um chain - F

    Para limpar todas as regras de um chain, use a seguinte sintaxe:

    iptables [-t tabela] [-F chain]

    Onde:

    tabela

    Tabela que contm o chain que desejamos zerar.

    chain

    Chain que desejamos limpar. Caso um chain no seja especificado, todos os chains da tabela sero limpos.

    iptables -t filter -F INPUT iptables -t filter -F

    10.2.10 Apagando um chain criado pelo usurio - X

    Para apagarmos um chain criado pelo usurio, usamos a seguinte sintaxe:

    iptables [-t tabela] [-X chain]

    Onde:

    tabela

    Nome da tabela que contm o chain que desejamos excluir.

    chain

    Nome do chain que desejamos apagar. Caso no seja especificado, todos os chains definidos pelo usurio na tabela especificada sero excludos.

    OBS: - Chains embutidos nas tabelas no podem ser apagados pelo usurio. Veja os nomes destes chains em O que so tabelas?, Seo 10.1.14.

    iptables -t filter -X internet iptables -X

    10.2.11 Zerando contador de bytes dos chains - Z

    Este comando zera o campo pkts e bytes de uma regra do iptables. Estes campos podem ser visualizados com o comando iptables -L -v. A seguinte sintaxe usada:

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 9/28

    iptables [-t tabela] [-Z chain] [-L]

    Onde:

    tabela

    Nome da tabela que contm o chain que queremos zerar os contadores de bytes e pacotes.

    chain

    Chain que deve ter os contadores zerados. Caso no seja especificado, todos os chains da tabela tero os contadores zerados. Note que as opes -Z e -L podem ser

    usadas juntas, assim o chain ser listado e imediatamente zerado. Isto evita a passagem de pacotes durante a listagem de um chain.

    iptables -t filter -Z INPUT

    10.2.12 Especificando a poltica padro de um chain - P

    A poltica padro determina o que acontecer com um pacote quando ele chegar ao final das regras contidas em um chain. A poltica padro do iptables "ACCEPT" mas

    isto pode ser alterado com o comando:

    iptables [-t tabela] [-P chain] [ACCEPT/DROP]

    Onde:

    tabela

    Tabela que contm o chain que desejamos modificar a poltica padro.

    chain

    Define o chain que ter a poltica modificada. O chain deve ser especificado.

    ACCEPT/DROP

    ACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em regras permissivas). DROP rejeita os pacotes caso nenhuma regra do chain conferir (usado

    em regras restritivas).

    A poltica padro de um chain mostrada com o comando iptables -L:

    # iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- anywhere localhost

    No exemplo acima, a poltica padro de INPUT ACCEPT (policy ACCEPT), o que significa que qualquer pacote que no seja rejeitado pela regra do chain, ser aceito.

    Para alterar a poltica padro deste chain usamos o comando:

    iptables -t filter -P INPUT DROP

    NOTA: As polticas de acesso PERMISSIVASS (ACCEPT) normalmente so usadas em conjunto com regras restritivas no chain correspondentes (tudo bloqueado e o que

    sobrar liberado) e polticas RESTRITIVAS (DROP) so usadas em conjunto com regras permissivas no chain correspondente (tudo liberado e o que sobrar bloqueado

    pela poltica padro).

    10.3 Outras opes do iptables

    10.3.1 Especificando um endereo de origem/destino

    As opes -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereos de origem e destino respectivamente. permitido usar um endereo IP

    completo (como 192.168.1.1), um hostname (debian), um endereo fqdn (www.debian.org) ou um par rede/mscara (como 200.200.200.0/255.255.255.0 ou200.200.200.0/24).

    Caso um endereo/mscara no sejam especificados, assumido 0/0 como padro (todos as mquinas de todas as redes). A interpretao dos endereos de origem/destino

    dependem do chain que est sendo especificado (como INPUT e OUTPUT por exemplo).

    OBS: Caso seja especificado um endereo fqdn e este resolver mais de um endereo IP, sero criadas vrias regras, cada uma se aplicando a este endereo IP especfico.

    recomendvel sempre que possvel a especificao de endereos IP's nas regras, pois alm de serem muito rpidos (pois no precisar de resoluo DNS) so mais seguros

    para evitar que nosso firewall seja enganado por um ataque de IP spoofing.

    # Bloqueia o trfego vindo da rede 200.200.200.*: iptables -A INPUT -s 200.200.200.0/24 -j DROP # Bloqueia conexes com o destino 10.1.2.3: iptables -A OUTPUT -d 10.1.2.3 -j DROP # Bloqueia o trfego da mquina www.dominio.teste.org a rede 210.21.1.3 # nossa mquina possui o endereo 210.21.1.3 iptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP

    10.3.2 Especificando a interface de origem/destino

    As opes -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes. Nem todos as chains aceitam as interfaces de origem/destino

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 10/28

    simultaneamente, a interface de entrada (-i) nunca poder ser especificada em um chain OUTPUT e a interface de sada (-o) nunca poder ser especificada em um chain

    INPUT. Abaixo uma rpida referncia:

    +---------------------+--------------------------------+ TABELA | CHAIN | INTERFACE | | +----------------+---------------+ | | ENTRADA (-i) | SADA (-o) | +---------+---------------------+----------------+---------------+ | | INPUT | SIM | NO | | filter | OUTPUT | NO | SIM | | | FORWARD | SIM | SIM | +---------+---------------------+----------------+---------------+ | | PREROUTING | SIM | NO | | nat | OUTPUT | NO | SIM | | | POSTROUTING | NO | SIM | +---------+---------------------+----------------+---------------+ | | PREROUTING | SIM | NO | | mangle | | | | | | OUTPUT | NO | SIM | +---------+---------------------+----------------+---------------+

    O caminho do pacote na interface ser determinado pelo tipo da interface e pela posio dos chains nas etapas de seu roteamento. O chain OUTPUT da tabela filter somente

    poder conter a interface de sada (veja a tabela acima). O chain FORWARD da tabela filter o nico que aceita a especificao de ambas as interfaces, este um timo chain

    para controlar o trfego que passa entre interfaces do firewall.

    Por exemplo para bloquear o acesso do trfego de qualquer mquina com o endereo 200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):

    iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP

    A mesma regra pode ser especificada como

    iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP

    O sinal de "+" funciona como um coringa, assim a regra ter efeito em qualquer interface de ppp0 a ppp9. As interfaces ativas no momento podem ser listadas com o comando

    ifconfig, mas permitido especificar uma regra que faz referncia a uma interface que ainda no existe, isto interessante para conexes intermitentes como o PPP. Parabloquear qualquer trfego local para a Internet:

    iptables -A OUTPUT -o ppp+ -j DROP

    Para bloquear a passagem de trfego da interface ppp0 para a interface eth1 (de uma de nossas redes internas):

    iptables -A FORWARD -i ppp0 -o eth1 -j DROP

    10.3.3 Especificando um protocolo

    A opo -p (ou --protocol) usada para especificar protocolos no iptables. Podem ser especificados os protocolos tcp, udp e icmp. Por exemplo, para rejeitar todos os

    pacotes UDP vindos de 200.200.200.200:

    iptables -A INPUT -s 200.200.200.200 -p udp -j DROP

    OBS1: Tanto faz especificar os nomes de protocolos em maisculas ou minsculas.

    10.3.3.1 Especificando portas de origem/destino

    As portas de origem/destino devem ser especificadas aps o protocolo e podem ser precedidas por uma das seguintes opes:

    --source-port ou --sport - Especifica uma porta ou faixa de portas de origem.

    --destination-port ou --dport - Especifica uma porta ou faixa de portas de destino.

    Uma faixa de portas pode ser especificada atravs de PortaOrigem:PortaDestino:

    # Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de # portas 0 a 1023 iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP

    Caso a PortaOrigem de uma faixa de portas no seja especificada, 0 assumida como padro, caso a Porta Destino no seja especificada, 65535 assumida como padro.Caso precise especificar diversas regras que envolvam o tratamento de portas diferentes, recomendo da uma olhada em Especificando mltiplas portas de origem/destino,

    Seo 10.6.6, antes de criar um grande nmero de regras.

    10.3.3.2 Especificando mensagens do protocolo ICMP

    O protocolo ICMP no possui portas, mas possvel fazer um controle maior sobre o trfego ICMP que entra/sai da rede atravs da especificao dos tipos de mensagens

    ICMP. Os tipos de mensagens devem ser especificados com a opo "--icmp-type CdigoICMP" logo aps a especificao do protocolo icmp:

    iptables -A INPUT -s 200.123.123.10 -p icmp --icmp-type time-exceeded -i ppp+ -j DROP

    A regra acima rejeitar mensagens ICMP do tipo "time-exceeded" (tempo de requisio excedido) que venham do endereo 200.123.123.10 atravs da interface ppp+.

    Alguns tipos de mensagens ICMP so classificados por categoria (como o prprio "time-exceeded"), caso a categoria "time-exceeded" seja especificada, todas as mensagens

    daquela categoria (como "ttl-zero-during-transit", "ttl-zero-during-reassembly") conferiro na regra especificada.Os tipos de mensagens ICMP podem ser obtidos com o

    comando iptables -p icmp -h:

    echo-reply (pong)

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 11/28

    destination-unreachable

    network-unreachable host-unreachable protocol-unreachable port-unreachable fragmentation-needed source-route-failed network-unknown host-unknown network-prohibited host-prohibited TOS-network-unreachable TOS-host-unreachable communication-prohibited host-precedence-violation precedence-cutoff source-quench redirect network-redirect host-redirect TOS-network-redirect TOS-host-redirect echo-request (ping) router-advertisement router-solicitation time-exceeded (ttl-exceeded) ttl-zero-during-transit ttl-zero-during-reassembly parameter-problem ip-header-bad required-option-missing timestamp-request timestamp-reply address-mask-request address-mask-reply

    OBS1: No bloqueie mensagens do tipo "host-unreachable" e "source-quench", pois ter srios problemas no controle de suas conexes. A primeira diz que o destino est

    inalcanavel e a segunda que o host est sobrecarregado, assim os pacotes devem ser enviados mais lentamente.

    10.3.3.3 Especificando pacotes syn

    Pacotes syn so usados para iniciarem uma conexo, o uso da opo --syn serve para especificar estes tipos de pacotes. Desta maneira possvel bloquear somente os

    pacotes que iniciam uma conexo, sem afetar os pacotes restantes. Para que uma conexo ocorra necessrio que a mquina obtenha a resposta a pacotes syn enviados, casoele seja bloqueado a resposta nunca ser retornada e a conexo no ser estabelecida.

    iptables -A INPUT -p tcp --syn --dport 23 -i ppp+ -j DROP

    A regra acima bloqueia (-j DROP) qualquer tentativa de conexo (--syn) vindas da interface ppp+ ao telnet (--dport 23) da mquina local, conexes j efetuadas o soafetadas por esta regra. A opo --syn somente pode ser especificada para o protocolo tcp.

    ATENO: - A situao de passagem de pacotes durante deve ser levada em conta durante a inicializao do firewall, bloqueando a passagem de pacotes durante o

    processo de configurao, criando regras que bloqueiam a passagem de pacotes (exceto para a interface loopback) at que a configurao do firewall esteja completa, podeser uma soluo eficiente.

    Outra alternativa segura configurar as regras de firewall antes das interfaces de rede se tornarem ativas (usando a opo "pre-up comando_firewall" no arquivo de

    configurao /etc/network/interfaces em sistemas Debian.

    10.3.4 Especificando fragmentos

    A opo "-f" (ou --fragment) permite especificar regras que confiram com fragmentos. Fragmentos so simplesmente um pacote maior dividido em pedaos para poder ser

    transmitido via rede TCP/IP para remontagem do pacote pela mquina de destino.

    Somente o primeiro fragmento possui detalhes de cabealho para ser processado, os segundos e seguintes somente possuem alguns cabealhos necessrios para darcontinuidade ao processo de remontagem do pacote no destino.

    Uma regra como

    iptables -A INPUT -s 200.200.200.1 -f -j DROP

    derrubar os fragmentos de 200.200.200.1 derrubar o segundo pacote e pacotes seguintes enviados por 200.200.200.1 at ns.

    OBS1: Note que se o cabealho do pacote no tiver detalhes suficientes para checagem de regras no iptables, a regra simplesmente no ira conferir.

    OBS2: No preciso especificar a opo "-f" para conexes NAT, pois os pacotes so remontados antes de entrarem no cdigo de filtragem.

    OBS3: A opo "-f" tambm pode ser usada para evitar o flood por fragmentos (bomba de fragmentos) que, dependendo da intensidade, podem at travar a mquina.

    10.3.5 Especificando uma exceo

    Muitos parmetros (como o endereo de origem/destino, protocolo, porta, mensagens ICMP, fragmentos, etc) podem ser precedidos pelo sinal "!" que significa exceo. Porexemplo:

    iptables -t filter -A INPUT ! -s 200.200.200.10 -j DROP

    Diz para rejeitar todos os pacotes EXCETO os que vem do endereo 200.200.200.10.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 12/28

    iptables -A INPUT -p tcp ! --syn -s 200.200.200.10 ! -i eth0 -j DROP

    Diz para bloquear todos os pacotes EXCETO os que iniciam conexes (! --syn), EXCETO para pacotes vindos pela interface eth0 (! -i eth0).

    iptables -A INPUT -s 200.200.200.10 ! -p tcp -j DROP

    Bloqueia todos os pacotes vindos de 200.200.200.10, EXCETO os do protocolo tcp.

    10.3.6 Especificando um alvo

    O alvo (-j) o destino que um pacote ter quando conferir com as condies de uma regra, um alvo pode dizer para bloquear a passagem do pacote (-j DROP), aceitar a

    passagem do pacote (-j ACCEPT), registrar o pacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT), redirecionar um pacote -j REDIRECT, retornar ao chainanterior sem completar o processamento no chain atual (-j RETURN), passar para processamento de programas externos (-j QUEUE), fazer source nat (-j SNAT), destination

    nat (-j DNAT), etc. Podem existir mais alvos, pois o iptables modularizvel, e mdulos que acrescentam mais funes podem ser carregados em adio aos j existentesno kernel.

    Nos exemplos anteriores vimos o uso de diversos alvos como o DROP e o ACCEPT. Apenas farei uma breve referncia sobre os alvos mais usados em operaes comuns

    dos chains. Os alvos REDIRECT, SNAT e DNAT sero explicados em uma seo seguinte:

    ACCEPT

    O pacote ACEITO e o processamento das regras daquele chains concludo. Pode ser usado como alvo em todos os chains de todas as tabelas do iptables e

    tambm pode ser especificado na poltica padro das regras do firewall (veja Especificando a poltica padro de um chain - P, Seo 10.2.12).

    DROP

    Rejeita o pacote e o processamento das regras daquele chain concludo. Pode ser usado como alvo em todos os chains de todas as tabelas do iptables e tambmpode ser especificado na poltica padro das regras do firewall (veja Especificando a poltica padro de um chain - P, Seo 10.2.12).

    REJECT

    Este um mdulo opcional que faz a mesma funo do alvo DROP com a diferena de que uma mensagem ICMP do tipo "icmp-port-unreachable" (TCP/UDP) ou"host-unreachable" (ICMP) retornada para a mquina de origem. Pode ser usado como alvo somente nos chains da tabela (no como poltica padro).

    LOG

    Este mdulo envia uma mensagem ao syslog caso a regra confira, o processamento continua normalmente para a prxima regra (o pacote no nem considerado

    ACEITO ou REJEITADO).

    RETURN

    Retorna o processamento do chain anterior sem processar o resto do chain atual.

    QUEUE

    Passa o processamento para um programa a nvel de usurio.

    10.3.6.1 Alvo REJECT

    Para ser usado, o mdulo ipt_REJECT deve ser compilado no kernel ou como mdulo. Este alvo rejeita o pacote (como o DROP) e envia uma mensagem ICMP do tipo"icmp-port-unreachable" como padro para a mquina de origem.

    um alvo interessante para bloqueio de portas TCP, pois em alguns casos da a impresso que a mquina no dispe de um sistema de firewall (o alvo DROP causa uma

    parada de muito tempo em alguns portscanners e tentativas de conexo de servios, revelando imediatamente o uso de um sistema de firewall pela mquina). O alvo REJECTvem dos tempos do ipchains e somente pode ser usado na tabela filter. Quando um pacote confere, ele rejeitado com a mensagem ICMP do tipo "port unreachable",

    possvel especificar outro tipo de mensagem ICMP com a opo --reject-with tipo_icmp.

    OBS: REJECT pode ser usado somente como alvo na tabela filter e no possvel especifica-lo como poltica padro do chain filter (como acontecia no ipchains. Umaforma alternativa inserir como ltima regra uma que pegue todos os pacotes restantes daquele chain e tenha como alvo REJECT (como iptables -A INPUT -j REJECT),

    desta forma ele nunca atingir a poltica padro do chain.

    # Rejeita pacotes vindos de 200.200.200.1 pela interface ppp0: iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

    10.3.6.2 Especificando LOG como alvo

    Este alvo usado para registrar a passagem de pacotes no syslog do sistema. um alvo muito interessante para ser usado para regras que bloqueiam determinados trfegos

    no sistema (para que o administrador tome conhecimento sobre tais tentativas), para regras de fim de chain (quando voc tem um grande conjunto de regras em um firewallrestritivo e no sabe onde suas regras esto sendo bloqueadas), para satisfazer sua curiosidade, etc.

    # Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0 iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG # Para efetuar o bloqueio iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

    Note que no exemplo anterior a regra que registra o pacote (-j LOG) deve aparecer antes da regra que REJEITA (-j REJECT), caso contrrio a regra de LOG nuncafuncionar. A regra que REJEITA poderia tambm ser trocada por uma regra que ACEITA, caso queira registrar um pacote que deve ser aceito (se a poltica padro do seu

    firewall for restritiva (-P DROP). A nica coisa que muda nas regras de log o alvo da regra, isto facilita a implementao de grandes conjuntos de regras de firewall.

    A regra acima mostrar a seguinte sada no syslog do sistema:

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 13/28

    Aug 25 10:08:01 debian kernel: IN=ppp0 OUT= MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41

    Os campos possuem o seguinte significado:

    Aug 25 10:08:01

    Ms, dia e hora do registro do pacote.

    debian

    Nome do computador que registrou o pacote.

    kernel:

    Daemon que registrou a mensagem, no caso o iptables faz parte do prprio kernel.

    IN=ppp0

    Especifica a interface de entrada (de onde o pacote veio).

    OUT=

    Especifica a interface de sada (para onde o pacote foi).

    MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00

    Endereo mac da interface de rede (pode ser obtido com arp interface).

    SRC=200.200.200.1

    Endereo de origem do pacote.

    DST=200.210.10.10

    Endereo de destino do pacote.

    SEQ=234234343

    Nmero de seqncia da recepo. ativado com a opo --log-tcp-sequence.

    LEN=61

    Tamanho em bytes do pacote IP.

    TOS=0x00

    Prioridade do cabealho TOS (Tipo). Veja a seo Especificando o tipo de servio, Seo 10.5.1 para mais detalhes.

    PREC=0x00

    Prioridade do cabealho TOS (Precedncia). Veja a seo Especificando o tipo de servio, Seo 10.5.1 para mais detalhes.

    TTL=64

    Tempo de vida do pacote. No exemplo, 64 roteadores (hops).

    ID=0

    Identificao nica destes datagrama. Esta identificao tambm usada pelos fragmentos seguintes deste pacote.

    DF

    Opo "Don't fragment" (no fragmentar) do pacote. Usada quando o pacote pequeno o bastante para no precisar ser fragmentado.

    MF

    Opo "More Fragments" (mais fragmentos) esto para ser recebidos.

    FRAG=100

    Tamanho do fragmento especificado em pacotes de 8 bits. No exemplo acima, o pacote tem o tamanho de 800 bytes (100*8).

    PROTO=UDP

    Nome do protocolo. Pode ser TCP, UDP ou ICMP

    SPT=1031

    Porta de origem da requisio.

    DPT=53

    Porta de destino da requisio.

    LEN=41

    Tamanho do pacote.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 14/28

    O log acima mostra uma consulta DNS (porta destino 53) para nossa mquina (INPUT) de 200.200.200.1 para 200.210.10.10.

    O problema que em um grande nmero de regras ser difcil saber qual regra conferiu (pois teramos que analisar o endereo/porta origem/destino) e o destino do pacote (se

    ele foi ACEITO ou BLOQUEADO) pois voc pode ter regras para ambas as situaes. Por este motivo existem algumas opes teis que podemos usar com o alvo LOG:

    --log-prefix "descrio"

    Permite especificar uma descrio para a regra do firewall de at 29 caracteres. Caso tiver espaos, devem ser usadas "aspas".

    --log-level nvel

    Especifica o nvel da mensagem no syslog.

    --log-tcp-options

    Registra campos do cabealho TCP nos logs do sistema.

    --log-ip-options

    Registra campos do cabealho IP nos logs do sistema

    --log-tcp-sequence

    Registra os nmeros de seqencia TCP. Evite ao mximo o uso desta opo, pois a seqencia de nmeros TCP pode ser a chave para um seqestro de seo ou IP

    spoofing em seu sistema caso algum usurio tenha acesso a estes logs. Caso utilize tcp/ip em servidores pblicos, o uso desta opo ajudar a entender bem os ataquesDoS causados por syn-flood e porque ativar os SynCookies (veja Proteo contra syn flood, Seo 10.6.4).

    OBS1:Lembre-se que estas opes so referentes ao alvo LOG e devem ser usadas aps este, caso contrrio voc ter um pouco de trabalho para analisar e consertar errosem suas regras do firewall.

    OBS2:Caso esteja usando o firewall em um servidor pblico, recomendo associar um limite a regra de log, pois um ataque poderia causar um DoS enchendo sua partio. Leia

    mais sobre isso em Limitando o nmero de vezes que a regra confere, Seo 10.6.2.

    # Complementando o exemplo anterior: # Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0 iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Derrubado " # Para efetuar o bloqueio iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

    Retornar a seguinte mensagem no syslog:

    Aug 25 10:08:01 debian kernel: FIREWALL: Derrubado IN=ppp0 OUT= MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41

    Agora voc sabe o que aconteceu com o pacote (Rejeitado). A padronizao de mensagens de firewall tambm importante para a criao de scripts de anlise que poderofazer a anlise dos logs do seu firewall (para criao de estatsticas que podem servir como base para a criao de novas regras de firewall ou eliminao de outras).

    OBS: Se voc sente falta da funo "-l" do ipchains que combina o alvo e log na mesma regra voc pode criar um alvo como o seguinte:

    iptables -N log-drop iptables -A log-drop -j LOG iptables -A log-drop -j DROP

    E usar "log-drop" como alvo em suas regras. Mesmo assim esta soluo "limitada" em relao a "-l" do ipchains porque o iptables no inclui detalhes de qual chainbloqueou o pacote/qual pacote foi bloqueado, assim necessrio a especificao da opo --log-prefix para as mensagens se tornarem mais compreensveis. Esta limitao

    pode ser contornada utilizando um firewall feito em linguagem shell script, desta forma voc ter um controle maior sobre o seu programa usando funes e integrao comoutros utilitrios.

    10.3.6.3 Especificando RETURN como alvo

    O alvo RETURN diz ao iptables interromper o processamento no chain atual e retornar o processamento ao chain anterior. Ele til quando criamos um chain que faz umdeterminado tratamento de pacotes, por exemplo bloquear conexes vindas da internet para portas baixas, exceto para um endereo IP especfico. Como segue:

    1-) iptables -t filter -A INPUT -i ppp0 -j internet 2-) iptables -t filter -j ACCEPT 3-) iptables -t filter -N internet 4-) iptables -t filter -A internet -s www.debian.org -p tcp --dport 80 -j RETURN 5-) iptables -t filter -A internet -p tcp --dport 21 -j DROP 6-) iptables -t filter -A internet -p tcp --dport 23 -j DROP 7-) iptables -t filter -A internet -p tcp --dport 25 -j DROP 8-) iptables -t filter -A internet -p tcp --dport 80 -j DROP

    Quando um pacote com o endereo www.debian.org tentando acessar a porta www (80) de nossa mquina atravs da internet (via interface ppp0), o chain nmero 1

    confere, ento o processamento continua no chain nmero 4, o chain nmero 4 confere ento o processamento volta para a regra nmero 2, que diz para aceitar o pacote.

    Agora se um pacote vem com o endereo www.dominio.com.br tentando acessar a porta www *80) de nossa mquina atravs da internet (via interface ppp0), o chainnmero 1 confere, ento o processamento continua no chain nmero 4, que no confere. O mesmo acontece com os chains 5, 6 e 7. O chain nmero 8 confere, ento o acesso

    bloqueado.

    Como pode notou, o alvo RETURN facilita bastante a construo das regras do seu firewall, caso existam mquinas/redes que sejam excees as suas regras. Se ela noexistisse, seria necessrio especificar diversas opes -s, -d, etc para poder garantir o acesso livre a determinadas mquinas.

    10.3.7 Salvando e Restaurando regras

    As regras que voc est trabalhosamente criando e testando manualmente enquanto manipula o iptables podem ser salvas de 2 formas; uma delas escrevendo um shell

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 15/28

    script que tenha todos os comandos, um por linha. Isto recomendado quando tem um firewall grande e que exige uma boa padronizao de regras, bem como sua leitura,comentrios. O script shell tambm permite o uso de funes presente no interpretador de comando, portanto se voc uma pessoa que gosta de interagir com as funes doshell e deixar as coisas mais flexveis, prefira esta opo.

    A outra forma usando as ferramentas iptables-save e iptables-restore baseada na idia do ipchains-save e ipchains-restore. O iptables-save deve ser

    usado sempre que modificar regras no firewall iptables da seguinte forma:

    iptables-save >/dir/iptables-regras

    Uma das vantagens do uso do iptables-save ele tambm salvar os contadores de chains, ou seja, a quantidade de pacotes que conferiram com a regra. Isto tambm pode

    ser feito com algumas regras adicionais em seu shell script, caso tenha interesse nesses contadores para estatsticas ou outros tipos de relatrios.

    Para restaurar as regras salvas, utilize o comando:

    iptables-restore /proc/sys/net/ipv4/ip_forward

    A configurao do servidor Linux est completa, agora os clientes da rede precisaro ser configurados para usar o endereo IP do servidor Linux como gateway.

    recomendvel instalar um servidor proxy e DNS na mquina Linux para acelerar o desempenho das requisies/resoluo de nomes das mquinas em rede. A utilizao debits TOS tambm pode trazer um grande aumento de velocidade para os diferentes servios da rede (veja Especificando o tipo de servio, Seo 10.5.1).

    10.4.3 Fazendo SNAT

    SNAT (source nat - nat no endereo de origem) consiste em modificar o endereo de origem das mquinas clientes antes dos pacotes serem enviados. A mquina roteadora inteligente o bastante para lembrar dos pacotes modificados e reescrever os endereos assim que obter a resposta da mquina de destino, direcionando os pacotes ao destinocorreto. Toda operao de SNAT feita no chain POSTROUTING.

    permitido especificar endereos de origem/destino, protocolos, portas de origem/destino, interface de entrada/sada (dependendo do chain), alvos, etc. desnecessrioespecificar fragmentos na tabela nat, pois eles sero remontados antes de entrar no cdigo de roteamento.

    O SNAT a soluo quando voc tem acesso a internet atravs de um nico IP e deseja fazer que sua rede tenha acesso a Internet atravs da mquina Linux. Nenhuma

    mquina da Internet poder ter acesso direto as mquinas de sua rede interna via SNAT.

    OBS: A observao acima no leva em conta o controle de acesso externo configurado na mquina que estiver configurando o iptables, uma configurao mau realizadapode expor sua mquina a acessos externos indesejados e comprometer sua rede interna caso algum consiga acesso direto ao servidor.

    necessrio especificar SNAT como alvo (-j SNAT) quando desejar que as mquinas de sua rede interna tenha acesso a Internet atravs do IP fixo da mquina Linux (para

    conexes intermitentes como PPP, veja Fazendo IP Masquerading, Seo 10.4.3.1). O parmetro --to IP:portas deve ser usado aps o alvo SNAT. Ele serve paraespecificar um endereo IP, faixa de endereos e opcionalmente uma porta ou faixa de portas que ser substituda. Toda a operao de SNAT realizada atravs do chain

    POSTROUTING:

    # Modifica o endereo IP dos pacotes vindos da mquina 192.168.1.2 da rede interna # que tem como destino a interface eth1 para 200.200.217.40 (que o nosso endereo # IP da interface ligada a Internet). iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to 200.200.217.40

    Os pacotes indo para a Internet (nossa conexo feita via eth1, nossa interface externa) vindo do endereo 192.168.1.2, so substitudos por 200.241.200.40 e enviados parafora. Quando a resposta a requisio retornada, a mquina com iptables recebe os pacotes e faz a operao inversa, modificando o endereo 200.241.200.40 novamente

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 16/28

    para 192.168.1.2 e enviando a resposta a mquina de nossa rede interna. Aps definir suas regras de NAT, execute o comando echo "1"

    >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento de pacotes no kernel.

    Tambm possvel especificar faixas de endereos e portas que sero substitudas:

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.217.40-200.200.217.50

    Modifica o endereo IP de origem de todas as mquinas da rede 192.168.1.0/24 que tem o destino a interface eth0 para 200.241.200.40 a 200.241.200.50. O endereo IPselecionado escolhido de acordo com o ltimo IP alocado.

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.217.40-200.200.217.50:1-1023

    Idntico ao anterior, mas faz somente substituies na faixa de portas de origem de 1 a 1023.

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.217.40-200.200.217.50 --to 200.200.217.70-200.200.217.73

    Faz o mapeamento para a faixa de portas 200.200.217.40 a 200.200.217.50 e de 200.200.217.70 a 200.200.217.73.

    OBS1: Se por algum motivo no for possvel mapear uma conexo NAT, ela ser derrubada.

    OBS2: Tenha certeza que as respostas podem chegar at a mquina que fez o NAT. Se estiver fazendo SNAT em um endereo livre em sua rede (como 200.200.217.73).

    OBS3: Como notou acima, o SNAT usado quando temos uma conexo externa com um ou mais IP's fixos. O Masquerading uma forma especial de SNAT usada parafuncionar em conexes que recebem endereos IP aleatrios (PPP).

    OBS4: No se esquea de habilitar o redirecionamento de pacotes aps fazer suas regra de NAT com o comando: echo "1" >/proc/sys/net/ipv4/ip_forward, caso

    contrrio o redirecionamento de pacotes no funcionar.

    10.4.3.1 Fazendo IP Masquerading

    O IP Masquerading um tipo especial de SNAT usado para conectar a sua rede interna a internet quando voc recebe um IP dinmico de seu provedor (como em conexesppp). Todas as operaes de IP Masquerading so realizadas no chain POSTROUTING. Se voc tem um IP fixo, deve ler Fazendo SNAT, Seo 10.4.3.

    Para fazer IP Masquerading de uma mquina com o IP 192.168.1.2 para ter acesso a Internet, use o comando:

    iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -o ppp0 -j MASQUERADE

    A diferena que o alvo -j MASQUERADE. O comando acima faz IP Masquerading de todo o trfego de 192.168.1.2 indo para a interface ppp0: O endereo IP dos

    pacotes vindos de 192.168.1.2 so substitudos pelo IP oferecido pelo seu provedor de acesso no momento da conexo, quando a resposta retornada a operao inversa realizada para garantir que a resposta chegue ao destino. Nenhuma mquina da internet poder ter acesso direto a sua mquina conectava via Masquerading.

    Para fazer o IP Masquerading de todas as mquinas da rede 192.168.1.*:

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

    Aps definir a regra para fazer Masquerading (SNAT), execute o comando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento depacotes no kernel.

    10.4.4 Fazendo DNAT

    DNAT (Destination nat - nat no endereo de destino) consiste em modificar o endereo de destino das mquinas clientes. O destination nat muito usado para fazerredirecionamento de pacotes, proxyes transparentes e balanceamento de carga.

    Toda operao de DNAT feita no chain PREROUTING. As demais opes e observaes do SNAT so tambm vlidas para DNAT (com exceo que somente

    permitido especificar a interface de origem no chain PREROUTING).

    # Modifica o endereo IP destino dos pacotes de 200.200.217.40 vindo da interface eth0 # para 192.168.1.2. iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT --to 192.168.1.2

    Tambm possvel especificar faixas de endereos e portas que sero substitudas no DNAT:

    iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT --to 200.200.217.40-200.200.217.50

    Modifica o endereo IP de destino do trfego vindos da interface 192.168.1.0/24 para um IP de 200.241.200.40 a 200.241.200.50. Este um excelente mtodo para fazer obalanceamento de carga entre servidores. O endereo IP selecionado escolhido de acordo com o ltimo IP alocado.

    iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT --to 200.200.217.40-200.200.217.50:1024:5000

    Idntico ao anterior, mas faz somente substituies na faixa de portas de destino de 1024 a 5000. A operao acima a mesma realizada pelo ipmasqadm dos kernels da srie2.2.

    OBS1: Se por algum motivo no for possvel mapear uma conexo NAT, ela ser derrubada.

    OBS2: No se esquea de conferir se o ip_forward est ajustado para 1: echo "1" >/proc/sys/net/ipv4/ip_forward.

    10.4.4.1 Redirecionamento de portas

    O redirecionamento de portas permite a voc repassar conexes com destino a uma porta para outra porta na mesma mquina. O alvo REDIRECT usado para fazer estaoperao, junto com o argumento --to-port especificando a porta que ser redirecionada. Este o mtodo DNAT especfico para se para fazer proxy transparente (pararedirecionamento de endereos/portas, veja Fazendo DNAT, Seo 10.4.4). Todas as operaes de redirecionamento de portas realizada no chain PREROUTING e

    OUTPUT da tabela nat.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 17/28

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 81

    Redireciona as conexes indo para a porta 80 para a porta 81 (rodando squid) no firewall.

    ATENO: O squid possui suporte a proxy transparente, e poder atender as requisies acima da regra acima.

    10.4.5 Monitorando conexes feitas na tabela nat

    Use o comando cat /proc/net/ip_conntrack para listar todas as conexes atuais tratadas pelo mdulo nat.

    10.5 A tabela mangle

    A tabela mangle serve para especificar aes especiais para o tratamento do trfego que atravessa os chains. Nesta tabela existem cincos chains: PREROUTING,

    POSTROUTING, INPUT, OUTPUT e FORWARD (veja O que so tabelas?, Seo 10.1.14 para maiores detalhes).

    Em geral, cada um deste chain processado antes do chain correspondente na tabela filter e nat para definir opes especiais para o trfego (por exemplo, o chainPREROUTING da tabela mangle processado antes do PREROUTING da tabela nat). O chain OUTPUT da tablea mangle corresponde ao OUTPUT da tabela nat.

    Opes como o Tipo de Servio (TOS) especificado nesta tabela para classificar e aumentar consideravelmente a velocidade de trfego considerados em tempo real. Mesmoaps o trfego ser estabelecido, os chains da tabela mangle continuam ativos para garantir que as opes especiais relacionadas com a conexo continuem fazendo efeito (veja

    os exemplos de Caminho percorrido pelos pacotes nas tabelas e chains, Seo 10.7).

    10.5.1 Especificando o tipo de servio

    O tipo de servio um campo existente no cabealho de pacotes do protocolo ipv4 que tem a funo especificar qual a prioridade daquele pacote. A prioridade definidausando o algoritmo FIFO do prprio kernel, sendo uma das alternativas de controle/priorizao de trfego das mais simples e rpidas.

    Uma das vantagens da utilizao do tipo de servio dar prioridade ao trfego de pacotes interativos (como os do ICQ, IRC, servidores de chat), etc. Com o TOS

    especificado, mesmo que esteja fazendo um download consumindo toda a banda de sua interface de rede, o trfego com prioridade interativa ser enviado antes, aumentando aeficincia do uso de servios em sua mquina.

    Em testes realizados em minha conexo de 56K, o uso de regras TOS aumentou bastante o desempenho em trfego interativo (em torno de 300%), durante o uso total da

    banda da interface ppp em grande consumo de banda.

    Usamos o alvo TOS (-j TOS) para especificar a modificao do tipo de servio nos pacotes que atravessam as regras do firewall, acompanhada do argumento --set-tos TOSque define a nova prioridade dos pacotes. Os valores aceitos so os seguintes:

    Espera Mnima

    especificado atravs de Minimize-Delay, 16 ou 0x10

    Mximo Processamento

    especificado atravs de Maximize-Throughput, 8, ou 0x08.

    Mxima Confiana

    especificado atravs de Maximize-Reliability, 4 ou 0x04.

    Custo mnimo

    Especificado atravs de Minimize-Cost, 2 ou 0x02.

    Prioridade Normal

    Especificado atravs de Normal-Service, 0 ou 0x00.

    Os pacotes vem por padro com o valor TOS ajustado como prioridade normal (bits tos ajustados para 0x00). O tipo Mnima Espera o de maior prioridade,

    recomendado para trfego interativo.

    10.5.1.1 Especificando o TOS para trfego de sada

    Este o mais usado, pois prioriza o trfego que sai da mquina (com destino a Internet, por exemplo). Sua operao realizada atravs do chain OUTPUT ouPOSTROUTING.

    Para priorizar todo o trfego de IRC de nossa rede interna indo para a interface ppp0:

    iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 6666-6668 -j TOS --set-tos 16

    O bit TOS ajustado para Espera mnima e ser enviado antes dos pacotes com prioridade normal para fora. Para priorizar a transmisso de dados ftp saindo da rede:

    iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 20 -j TOS --set-tos 8

    Para priorizar o trfego de ICQ da rede:

    iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 5190 -j TOS --set-tos 16

    Existem muitas outras otimizaes que podem ser feitas, s depende dos requerimentos e anlise de cada servio da rede pelo administrador.

    OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servio modificados, eles no sero de qualquer forma rejeitados.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 18/28

    10.5.1.2 Especificando o TOS para o trfego de entrada

    Este prioriza o trfego que entra da mquina. Sua operao realizada no chain INPUT ou PREROUTING. No faz muito sentido o uso deste chain dentro de uma rede

    pequena/mdia, pois o trfego que recebermos ser priorizado pelo chain de sada de outras mquinas da internet/outras redes antes de chegar a nossa (desde que elas tambmestejam usando TOS).

    Para priorizar o processamento do trfego interativo vindo de servidores IRC para nossa rede:

    iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 6666-6668 -j TOS --set-tos 0x10

    Modifica o tipo de servio para mnima espera de todo o trfego enviado por servidores de IRC vindo da interface eth0.

    OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servio modificados, eles no sero de qualquer forma rejeitados. \

    10.6 Outros mdulos do iptables

    Os mdulos do iptables so especificados com a opo -m mdulo ou --match mdulo e permitem expandir a funcionalidade do firewall atravs de novas conferncias erecursos de filtragem adicionais, como limitar a conferncia de regras do firewall (um mtodo til de limitar ping floods, syn floods, etc).

    10.6.1 Conferindo de acordo com o estado da conexo

    Este mdulo permite especificar regras de acordo com o estado da conexo do pacote, isto feito atravs da interpretao da sada do mdulo ip_conntrack. O parmetro--state OPES deve acompanhar este mdulo. As opes permitidas so as seguintes:

    NEW - Confere com pacotes que criam novas conexes

    ESTABLISHED - Confere com conexes j estabelecidas

    RELATED - Confere com pacotes relacionados indiretamente a uma conexo, como mensagens de erro icmp, etc.

    INVALID - Confere com pacotes que no puderam ser identificados por algum motivo. Como respostas de conexes desconhecidas.

    Caso seja necessrio especificar mais de uma opes estas devem ser separadas por vrgulas.

    iptables -A INPUT -m state --state NEW -i ppp0 -j DROP

    Bloqueia qualquer tentativa de nova conexo vindo da interface ppp0.

    iptables -A INPUT -m state --state NEW,INVALID -i ppp0 -j LOG

    Permite registrar novas conexes e pacotes invlidos vindos da interface ppp0.

    10.6.2 Limitando o nmero de vezes que a regra confere

    A opo -m limit permite especificar o nmero de vezes que uma regra conferir quando todas as outras condies forem satisfeitas. O nmero padro de conferncia de 3por hora, a no ser que seja modificado atravs dos argumentos aceitos pelo limit:

    --limit num/tempo - Permite especificar a taxa de conferncias do limit. O parmetro num especifica um nmero e tempo pode ser

    s - Segundo

    m - Minuto

    h - Hora

    d - Dia

    Assim uma regra como iptables -A INPUT -m limit --limit 5/m -j ACCEPT permitir que a regra acima confira apenas 5 vezes por minuto (--limit 2/s). Este

    limite pode ser facilmente adaptado para uma regra de log que confere constantemente no causar uma avalanche em seus logs. O valor padro 3/h.

    --limit-burst num - Especifica o nmero inicial mximo de pacotes que iro conferir, este nmero aumentado por 1 a cada vez que o parmetro --limit acima nofor atingido. O valor padro 5.

    10.6.3 Proteo contra ping da morte

    A regra abaixo pode tomada como base para proteo contra ping flood:

    iptables -t filter -A ping-chain -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -t filter -A ping-chain -j DROP

    A regra acima limita em 1 vez por segundo (--limit 1/s) a passagem de pings (echo requests) para a mquina Linux.

    iptables -t filter -A ping-chain -i ppp0 -p icmp --icmp-type echo-reply -m limit --limit 1/s -j RETURN iptables -t filter -A ping-chain -j DROP

    Limita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a 1 por segundo.

    ATENO: O exemplo acima somente para a criao de suas prprias regras com limitaes, caso um pacote no confira ele ser bloqueado pela prxima regra. Se uma

    regra como esta for colocada no chain INPUT sem modificaes, ela no ter o efeito desejado, podendo colocar em risco a sua instalao pela falsa impresso de segurana.Portanto, recomendvel sempre testar as modificaes para ter certeza que elas tem efeito.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 19/28

    10.6.4 Proteo contra syn flood

    A regra abaixo uma boa proteo para os ataques syn floods:

    iptables -t filter -A syn-chain -p tcp --syn -m limit --limit 2/s -j ACCEPT iptables -t filter -A syn-chain -j DROP

    Esta regra limita o atendimento de requisies de conexes a 2 por segundo. Outra forma de aumentar a segurana contra syn-floods atravs do prprio kernel ativando a

    opo "TCP Synflood" na compilao e depois executando: echo "1" >/proc/sys/net/ipv4/tcp_synflood. No entanto, utilize estas opes com cautela em servidoresque possuem um grande nmero de acessos para no ter problemas que afetem seu clientes.

    ATENO: Os exemplos acima devem so somente exemplos para criao de suas prprias regras com limitaes, caso um pacote no confira com a regra ele ser

    bloqueado pela prxima regra. Se uma regra como esta for colocada no chain INPUT sem modificaes, ela no ter o efeito desejado, podendo colocar em risco a suainstalao pela falsa impresso de segurana. Portanto, recomendvel sempre testar as modificaes para ter certeza que elas tem efeito.

    10.6.5 Proteo contra IP spoofing

    A especificao de endereos de origem/destino junto com a interface de rede pode ser usado como um detector de ataques spoofing. A lgica que todos os endereos que

    NUNCA devem vir da interface X devem ser negados imediatamente. As regras abaixo so colocadas no inicio do chain INPUT para detectar tais ataques:

    iptables -A INPUT -s 192.168.1.0/24 -i ! eth0 -j DROP iptables -A INPUT ! -s 192.168.1.0/24 -i eth0 -j DROP

    A primeira regra diz para bloquear todos os endereos da faixa de rede 192.168.1.* que NO vem da interface eth0, a segunda regra diz para bloquear todos os endereos

    que no sejam 192.168.1.* vindos da interface eth0. O smbolo "!" serve para especificar excees (veja Especificando uma exceo, Seo 10.3.5. O kernel do Linuxautomaticamente bloqueia a passagem de pacotes que dizem ser de 127.0.0.1 e no est vindo da interface loopback.

    O mtodo preferido para controlar o ip spoofing atravs do cdigo de roteamento do kernel (a no ser que esteja usando algum tipo de roteamento de origem assimtrico

    necessrio por alguns programas especiais):

    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 >$i done

    Desta forma qualquer endereo dizendo ser 192.168.1.5 vindo de ppp0 ser imediatamente rejeitado. Uma checagem adicional contra IP spoofing pode ser feita no arquivo/etc/host.conf (veja /etc/host.conf, Seo 4.6.2.2).

    10.6.6 Especificando mltiplas portas de origem/destino

    O mdulo multiport permite que seja especificado mltiplas portas para um alvo. Podem ser especificadas at 15 portas em um nico parmetro e basta que uma portaconfira para que a regra entre em ao, pois a comparao feita usando condies "or". O parmetro multiport deve ser acompanhado de um dos argumentos abaixo:

    --source-port [porta1, porta2...] - Faz a regra conferir se a porta de origem estiver presente entre as portas especificadas.

    --destination-port [porta1, porta2...] - Faz a regra conferir se a porta de destino estiver presente entre as portas especificadas.

    --port [porta1, porta2...] - Faz a regra conferir caso a porta de origem ou destino esteja presente no parmetro.

    Este mdulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pacotes para diversas portas diferentes.

    iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 21,23,25,80,110,113,6667 -j DROP

    Bloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp), 23 (telnet), 25 (smtp), 80 (www), 110 (pop3), 113 (ident), 6667 (irc).

    10.6.7 Especificando o endereo MAC da interface

    O mdulo mac serve para conferir com o endereo Ethernet dos pacotes de origem. Somente faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (databela filter). Aceita como argumento a opo --mac-source endereo. O smbolo "!" pode ser usado para especificar uma exceo.

    iptables -t filter -A INPUT -m mac --mac-source 00:80:AD:B2:60:0B -j DROP

    Confere com a mquina com endereo ethernet igual a 00:80:AD:B2:60:0B.

    10.6.8 Conferindo com quem criou o pacote

    Este mdulo confere com o usurio que iniciou a conexo. somente vlido no chain OUTPUT da tabela filter. Os seguintes argumentos so vlidas para este mdulo:

    --uid-owner UID - Confere se o pacote foi criado por um processo com o UID especificado. At o momento somente UID numricos so aceitos.

    --gid-owner GID - Confere se o pacote foi criado por um usurio pertencente ao grupo GID. At o momento somente GID numricos so aceitos.

    --pid-owner PID - Confere se o pacote foi criado por um processo com o PID especificado.

    --sid-owner ID - Confere se o pacote foi criado por um processo no grupo de seo especificado.

    OBS: - Lembre-se que pacotes que no possuem detalhes suficientes de cabealho nunca conferiro!

    iptables -A OUTPUT -m owner --gid-owner 100 -p udp -j DROP

    Rejeita um conexes indo para portas UDP de pacotes criados pelo usurios pertencentes ao grupo 100.

  • 27/06/13 Guia Foca GNU/Linux - Firewall iptables

    www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html 20/28

    10.6.9 Conferindo com o contedo do pacote

    O mdulo string do iptables permite a inspeo de contedo de um pacote e tomar uma ao se determinado tipo de trfego for encontrado em um pacote. Esta tcnicapode ser usada tanto para segurana como para economia de banda dentro da rede. Esta opo *NO* torna o iptables como um firewall proxy, pois o proxy tem a

    habilidade de inspecionar o contedo, protocolo, comandos do pacote e decidir se o seu contedo nocivo ou no. O firewall em nvel de pacotes fazendo inspeo decontedo, chega a ser 3 a 10 vezes mais rpido do que um proxy, assim seu uso deve ser analisado dependendo do trfego que circula pelo link e da segurana dos dados que

    trafegam atravs dele.

    Uma boa prtica aliar esta opo a um IDS externo usando o alvo QUEUE e deixando o trabalho de espeo de contedo para ele. Um exemplo de restrio direta obloqueio do envio de qualquer informao confidencial sigilosa para fora da rede interna (nmero de contas, tudo que conferir com CPF, CGC, endereos de e-mail,

    memorandos, etc). De qualquer forma, analise o trfego de sua rede antes de querer implementar qualquer soluo baseada neste mtodo sob o risco de afetar trfego legtimo.

    Outra utilidade eficiente a diminuio de trfego, pois podemos barrar programas que sobrecarregam o link em uma rede com muitos usurios como, por exemplo, usando oKazaa ou qualquer outro programa para cpia de arquivos via Internet. Veja alguns exemplos:

    # Bloqueia qualquer tentativa de acesso ao programa Kazaa iptables -A INPUT -m string --string "X-Kazaa" -j DROP # No permite que dados confidenciais sejam enviados para fora da empresa # e registra o ocorrido. iptables -A OUTPUT -m string --string "conta" -j LOG --log-prefix "ALERTA: dados confidencial " iptables -A OUTPUT -m string --string "conta" -j DROP # Somente permite a passagem de pacotes que no contm ".exe" em seu contedo iptables -A INPUT -m string --string ! ".exe" -j ACCEPT

    10.6.10 Conferindo com o tempo de vida do pacote

    O mdulo ttl pode ser usado junto com as seguintes opes para conferir com o tempo de vida (TTL) de um pacote:

    --ttl-eq [num]

    --ttl-lt [num]

    --ttl-gq [num]

    Veja alguns exemplos:

    # Confere com todos os pacotes que tem o TTL maior que 100 iptables -A INPUT -m ttl --ttl-gt 100 -j LOG --log-prefix "TTL alto" # Confere com todos os pacotes que tem o TTL igual a 1 iptables -A INPUT -m ttl --ttl-eq 1 -j DROP

    OBS: Tenha um especial cuidado durante a programao de regras que usem TTL, como elas esto especialmente associadas com o estado da comunicao estabelecida

    entre as duas pontas e o tipo de protocolo, cuidados especiais devem ser tomados para que seu firewall no manipule de forma incorreta trfego vlido.

    10.6.11 Conferindo com nmeros RPC

    O mdulo rpc permite um controle especial sobre o trfego RPC que chega at a sua mquina. Um uso til restringir a chamada a determinados nmeros RPC e permitiroutros (por exemplo, permitindo somente o servio keyserv e bloqueando outros como o ypserv ou portmapper). As seguintes opes podem ser usadas com o mdulo nfs:

    --rpcs [procedimentos] - Confere com a lista de chamadas RPC especificadas. Mais de um procedimento RPC pode ser especificado como nome ou nmeroseparando-os com vrgulas. Um arquivo til que contm esta lista o /etc/rpc.

    --strict - Ignora servios RPC que no contenham a chamada get do portmapper. Em situaes normais, o inicio de qualquer solicitao RPC.

    Veja alguns exemplos:

    # Para conferir com todas as chamadas RPC referentes a conexes iniciadas # para o portmapper iptables -A INPUT -m rpc --rpcs portmapper --strict -j DROP # Para permitir que somente as chamadas para status e statmon sejam # aceitas iptables -A INPU