{"id":294,"date":"2012-08-07T14:57:17","date_gmt":"2012-08-07T17:57:17","guid":{"rendered":"http:\/\/linuxrs.com.br\/?p=294"},"modified":"2012-08-07T14:57:17","modified_gmt":"2012-08-07T17:57:17","slug":"iptables","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=294","title":{"rendered":"Iptables"},"content":{"rendered":"<p>Introdu\u00e7\u00e3o<br \/>\nO Firewall \u00e9 um programa que como objetivo proteger a m\u00e1quina contra acessos indesejados,<br \/>\ntr\u00e1fego indesejado, proteger servi\u00e7os que estejam rodando na m\u00e1quina e bloquear a passagem de<br \/>\ncoisas que voc\u00ea n\u00e3o deseja receber (como conex\u00f5es vindas da Internet para sua segura rede local,<br \/>\nevitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). No kernel do<br \/>\nLinux 2.4, foi introduzido o firewall iptables (tamb\u00e9m chamado de netfilter) que substitui o<br \/>\nipchains dos kernels da s\u00e9rie 2.2. Este novo firewall tem como vantagem ser muito est\u00e1vel<br \/>\n(assim como o ipchains e ipfwadm), confi\u00e1vel, permitir muita flexibilidade na programa\u00e7\u00e3o de<br \/>\nregras pelo administrador do sistema, mais op\u00e7\u00f5es dispon\u00edveis ao administrador para controle de<br \/>\ntr\u00e1fego, controle independente do tr\u00e1fego da rede local\/entre redes\/interfaces devido a nova<br \/>\norganiza\u00e7\u00e3o das etapas de roteamento de pacotes.<br \/>\nO iptables \u00e9 um firewall em n\u00edvel de pacotes e funciona baseado no endere\u00e7o\/porta de<br \/>\norigem\/destino do pacote, prioridade, etc. Ele funciona atrav\u00e9s da compara\u00e7\u00e3o de regras para saber<br \/>\nse um pacote tem ou n\u00e3o permiss\u00e3o para passar. Em firewalls mais restritivos, o pacote \u00e9 bloqueado<br \/>\ne registrado para que o administrador do sistema tenha conhecimento sobre o que est\u00e1 acontecendo<br \/>\nem seu sistema.<br \/>\nEle tamb\u00e9m pode ser usado para modificar e monitorar o tr\u00e1fego da rede, fazer NAT (masquerading,<br \/>\nsource nat, destination nat), redirecionamento de pacotes, marca\u00e7\u00e3o de pacotes, modificar a<br \/>\nprioridade de pacotes que chegam\/saem do seu sistema, contagem de bytes, dividir tr\u00e1fego entre<br \/>\nm\u00e1quinas, criar prote\u00e7\u00f5es anti-spoofing, contra syn flood, DoS, etc. O tr\u00e1fego vindo de m\u00e1quinas<br \/>\ndesconhecidas da rede pode tamb\u00e9m ser bloqueado\/registrado atrav\u00e9s do uso de simples regras. As<br \/>\npossibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX<br \/>\nmaduras dependem de sua imagina\u00e7\u00e3o, pois ele garante uma grande flexibilidade na manipula\u00e7\u00e3o<br \/>\ndas regras de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o<br \/>\nque deseja bloquear, o que tem acesso garantido, quais servi\u00e7os devem estar acess\u00edveis para cada<br \/>\nrede, e iniciar a constru\u00e7\u00e3o de seu firewall.<br \/>\nO iptables ainda tem a vantagem de ser modulariz\u00e1vel, fun\u00e7\u00f5es podem ser adicionadas ao<br \/>\nfirewall ampliando as possibilidades oferecidas. Usei por 2 anos o ipchains e afirmo que este \u00e9<br \/>\num firewall que tem possibilidades de gerenciar tanto a seguran\u00e7a em m\u00e1quinas isoladas como<br \/>\nroteamento em grandes organiza\u00e7\u00f5es, onde a passagem de tr\u00e1fego entre redes deve ser<br \/>\nminuciosamente controlada.<br \/>\nUm firewall n\u00e3o funciona de forma autom\u00e1tica (instalando e esperar que ele fa\u00e7a as coisas por<br \/>\nvoc\u00ea), \u00e9 necess\u00e1rio pelo menos conhecimentos b\u00e1sicos de rede tcp\/ip, roteamento e portas para criar<br \/>\nas regras que far\u00e3o a seguran\u00e7a de seu sistema. A seguran\u00e7a do sistema depende do controle das<br \/>\nregras que ser\u00e3o criadas por voc\u00ea, as falhas humanas s\u00e3o garantia de mais de 95% de sucesso nas<br \/>\ninvas\u00f5es.<br \/>\nEnfim o iptables \u00e9 um firewall que agradar\u00e1 tanto a pessoas que desejam uma seguran\u00e7a b\u00e1sica<br \/>\nem seu sistema, quando administradores de grandes redes que querem ter um controle minucioso<br \/>\nsobre o tr\u00e1fego que passam entre suas interfaces de rede (controlando tudo o que pode passar de<br \/>\numa rede a outra), controlar o uso de tr\u00e1fego, monitora\u00e7\u00e3o, etc.<br \/>\n10.1.1 Vers\u00e3o<br \/>\n\u00c9 assumido que esteja usando a vers\u00e3o 1.2.3 do iptables e baseadas nas op\u00e7\u00f5es do kernel 2.4.16<br \/>\n(sem o uso de m\u00f3dulos experimentais). As explica\u00e7\u00f5es contidas aqui podem funcionar para vers\u00f5es<br \/>\nposteriores, mas \u00e9 recomend\u00e1vel que leia a documenta\u00e7\u00e3o sobre modifica\u00e7\u00f5es no programa<br \/>\n(changelog) em busca de mudan\u00e7as que alterem o sentido das explica\u00e7\u00f5es fornecidas aqui.<br \/>\n10.1.2 Um resumo da hist\u00f3ria do iptables<br \/>\nO iptables \u00e9 um c\u00f3digo de firewall das vers\u00f5es 2.4 do kernel, que substituiu o ipchains<br \/>\n(presente nas s\u00e9ries 2.2 do kernel). Ele foi inclu\u00eddo no kernel da s\u00e9rie 2.4 em meados de<br \/>\nJunho\/Julho de 1999.<br \/>\nA hist\u00f3ria do desenvolvimento (desde o porte do ipfw do BSD para o Linux at\u00e9 o iptables<br \/>\n(que \u00e9 a quarta gera\u00e7\u00e3o de firewalls do kernel) est\u00e1 dispon\u00edvel no documento, Netfilterhowto.<br \/>\n10.1.3 Caracter\u00edsticas do firewall iptables<br \/>\n\u2022 Especifica\u00e7\u00e3o de portas\/endere\u00e7o de origem\/destino<br \/>\n\u2022 Suporte a protocolos TCP\/UDP\/ICMP (incluindo tipos de mensagens icmp)<br \/>\n\u2022 Suporte a interfaces de origem\/destino de pacotes<br \/>\n\u2022 Manipula servi\u00e7os de proxy na rede<br \/>\n\u2022 Tratamento de tr\u00e1fego dividido em chains (para melhor controle do tr\u00e1fego que entra\/sai da<br \/>\nm\u00e1quina e tr\u00e1fego redirecionado.<br \/>\n\u2022 Permite um n\u00famero ilimitado de regras por chain<br \/>\n\u2022 Muito r\u00e1pido, est\u00e1vel e seguro<br \/>\n\u2022 Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal<br \/>\nformados.<br \/>\n\u2022 Suporte a m\u00f3dulos externos para expans\u00e3o das funcionalidades padr\u00f5es oferecidas pelo<br \/>\nc\u00f3digo de firewall<br \/>\n\u2022 Suporte completo a roteamento de pacotes, tratadas em uma \u00e1rea diferente de tr\u00e1fegos<br \/>\npadr\u00f5es.<br \/>\n\u2022 Suporte a especifica\u00e7\u00e3o de tipo de servi\u00e7o para priorizar o tr\u00e1fego de determinados tipos de<br \/>\npacotes.<br \/>\n\u2022 Permite especificar exce\u00e7\u00f5es para as regras ou parte das regras<br \/>\n\u2022 Suporte a detec\u00e7\u00e3o de fragmentos<br \/>\n\u2022 Permite enviar alertas personalizados ao syslog sobre o tr\u00e1fego aceito\/bloqueado.<br \/>\n\u2022 Redirecionamento de portas<br \/>\n\u2022 Masquerading<br \/>\n\u2022 Suporte a SNAT (modifica\u00e7\u00e3o do endere\u00e7o de origem das m\u00e1quinas para um \u00fanico IP ou<br \/>\nfaixa de IP&#8217;s).<br \/>\n\u2022 Suporte a DNAT (modifica\u00e7\u00e3o do endere\u00e7o de destino das m\u00e1quinas para um \u00fanico IP ou<br \/>\nfixa de IP&#8217;s)<br \/>\n\u2022 Contagem de pacotes que atravessaram uma interface\/regra<br \/>\n\u2022 Limita\u00e7\u00e3o de passagem de pacotes\/confer\u00eancia de regra (muito \u00fatil para criar prote\u00e7\u00f5es<br \/>\ncontra, syn flood, ping flood, DoS, etc).<br \/>\n10.1.4 Ficha t\u00e9cnica<br \/>\nPacote: iptables<br \/>\n\u2022 iptables &#8211; Sistema de controle principal para protocolos ipv4<br \/>\n\u2022 ip6tables &#8211; Sistema de controle principal para protocolos ipv6<br \/>\n\u2022 iptables-save &#8211; Salva as regras atuais em um arquivo especificado como argumento.<br \/>\nEste utilit\u00e1rio pode ser dispensado por um shell script contendo as regras executado na<br \/>\ninicializa\u00e7\u00e3o da m\u00e1quina.<br \/>\n\u2022 iptables-restore &#8211; Restaura regras salvas pelo utilit\u00e1rio iptables-save.<br \/>\n10.1.5 Requerimentos<br \/>\n\u00c9 necess\u00e1rio que o seu kernel tenha sido compilado com suporte ao iptables (veja Habilitando o<br \/>\nsuporte ao iptables no kernel, Se\u00e7\u00e3o 10.1.15. O requerimento m\u00ednimo de mem\u00f3ria necess\u00e1ria para a<br \/>\nexecu\u00e7\u00e3o do iptables \u00e9 o mesmo do kernel 2.4 (4MB). Dependendo do tr\u00e1fego que ser\u00e1<br \/>\nmanipulado pela(s) interface(s) do firewall ele poder\u00e1 ser executado com folga em uma m\u00e1quina<br \/>\n386 SX com 4MB de RAM.<br \/>\nComo as configura\u00e7\u00f5es residem no kernel n\u00e3o \u00e9 necess\u00e1rio espa\u00e7o extra em disco r\u00edgido para a<br \/>\nexecu\u00e7\u00e3o deste utilit\u00e1rio.<br \/>\n10.1.6 Arquivos de logs criados pelo iptables<br \/>\nTodo tr\u00e1fego que for registrado pelo iptables \u00e9 registrado por padr\u00e3o no arquivo<br \/>\n\/var\/log\/kern.log.<br \/>\n10.1.7 Instala\u00e7\u00e3o<br \/>\napt-get install iptables<br \/>\nO pacote iptables cont\u00e9m o utilit\u00e1rio iptables (e ip6tables para redes ipv6) necess\u00e1rios<br \/>\npara inserir suas regras no kernel. Se voc\u00ea n\u00e3o sabe o que \u00e9 ipv6, n\u00e3o precisar\u00e1 se preocupar com o<br \/>\nutilit\u00e1rio ip6tables por enquanto.<br \/>\n10.1.8 Enviando Corre\u00e7\u00f5es\/Contribuindo com o projeto<br \/>\nA p\u00e1gina principal do projeto \u00e9 http:\/\/netfilter.filewatcher.org. Sugest\u00f5es podem<br \/>\nser enviadas para a lista de desenvolvimento oficial do iptables:<br \/>\nhttp:\/\/lists.samba.org.<br \/>\n10.1.9 O que aconteceu com o ipchains e ipfwadm?<br \/>\nO iptables faz parte da nova gera\u00e7\u00e3o de firewalls que acompanha o kernel 2.4, mas o suporte ao<br \/>\nipchains e ipfwadm ainda ser\u00e1 mantido atrav\u00e9s de m\u00f3dulos de compatibilidade do kernel at\u00e9<br \/>\n2004. Seria uma grande falta de considera\u00e7\u00e3o retirar o suporte a estes firewalls do kernel como<br \/>\nforma de obrigar a &#8220;aprenderem&#8221; o iptables (mesmo o suporte sendo removido ap\u00f3s este<br \/>\nper\u00edodo, acredito que criar\u00e3o patches &#8220;externos&#8221; para futuros kernels que n\u00e3o trar\u00e3o mais este<br \/>\nsuporte). Se precisa do suporte a estes firewalls antes de passar em definitivo para o iptables<br \/>\nleia Habilitando o suporte ao iptables no kernel, Se\u00e7\u00e3o 10.1.15.<br \/>\nSe voc\u00ea \u00e9 um administrador que gosta de explorar todos os recursos de um firewall, usa todos os<br \/>\nrecursos que ele oferece ou mant\u00e9m uma complexa rede corporativa, tenho certeza que gostar\u00e1 do<br \/>\niptables.<br \/>\n10.1.10 Tipos de firewalls<br \/>\nExistem basicamente dois tipos de firewalls:<br \/>\n\u2022 n\u00edvel de aplica\u00e7\u00e3o &#8211; Este tipo de firewall analisam o conte\u00fado do pacote para tomar<br \/>\nsuas decis\u00f5es de filtragem. Firewalls deste tipo s\u00e3o mais intrusivos (pois analisam o<br \/>\nconte\u00fado de tudo que passa por ele) e permitem um controle relacionado com o conte\u00fado do<br \/>\ntr\u00e1fego. Alguns firewalls em n\u00edvel de aplica\u00e7\u00e3o combinam recursos b\u00e1sicos existentes em<br \/>\nfirewalls em n\u00edvel de pacotes combinando as funcionalidade de controle de tr\u00e1fego\/controle<br \/>\nde acesso em uma s\u00f3 ferramenta. Servidores proxy, como o squid, s\u00e3o um exemplo deste<br \/>\ntipo de firewall.<br \/>\n\u2022 n\u00edvel de pacotes &#8211; Este tipo de firewall toma as decis\u00f5es baseadas nos par\u00e2metros do<br \/>\npacote, como porta\/endere\u00e7o de origem\/destino, estado da conex\u00e3o, e outros par\u00e2metros do<br \/>\npacote. O firewall ent\u00e3o pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT).<br \/>\nO iptables \u00e9 um excelente firewall que se encaixa nesta categoria.<br \/>\nFirewall em n\u00edvel de pacotes \u00e9 o assunto explicado nesta se\u00e7\u00e3o do guia mas ser\u00e1 apresentada<br \/>\numa explica\u00e7\u00e3o breve sobre o funcionamento de an\u00e1lise de strings do iptables.<br \/>\nOs dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de<br \/>\nseguran\u00e7a no acesso as suas m\u00e1quinas\/m\u00e1quinas clientes.<br \/>\n10.1.11 O que proteger?<br \/>\nAntes de iniciar a constru\u00e7\u00e3o do firewall \u00e9 bom pensar nos seguintes pontos:<br \/>\n\u2022 Quais servi\u00e7os precisa proteger. Servi\u00e7os que devem ter acesso garantido a usu\u00e1rios externos<br \/>\ne quais ser\u00e3o bloqueados a todas\/determinadas m\u00e1quinas. \u00c9 recomend\u00e1vel bloquear o acesso<br \/>\na todas portas menores que 1024 por executarem servi\u00e7os que rodam com privil\u00e9gio de<br \/>\nusu\u00e1rio root, e autorizar somente o acesso as portas que realmente deseja (configura\u00e7\u00e3o<br \/>\nrestritiva nesta faixa de portas).<br \/>\n\u2022 Que tipo de conex\u00f5es eu posso deixar passar e quais bloquear. Servi\u00e7os com autentica\u00e7\u00e3o<br \/>\nem texto plano e potencialmente inseguros como rlogin, telnet, ftp, NFS, DNS, LDAP,<br \/>\nSMTP RCP, X-Window s\u00e3o servi\u00e7os que devem ser ter acesso garantido somente para<br \/>\nm\u00e1quinas\/redes que voc\u00ea confia. Estes servi\u00e7os podem n\u00e3o ser s\u00f3 usados para tentativa de<br \/>\nacesso ao seu sistema, mas tamb\u00e9m como forma de atacar outras pessoas aproveitando-se de<br \/>\nproblemas de configura\u00e7\u00e3o.<br \/>\nA configura\u00e7\u00e3o do firewall ajuda a prevenir isso, mesmo se um servi\u00e7o estiver mal<br \/>\nconfigurado e tentando enviar seus pacotes para fora, ser\u00e1 impedido. Da mesma forma se<br \/>\numa m\u00e1quina Windows de sua rede for infectada por um trojan n\u00e3o haver\u00e1 p\u00e2nico: o firewall<br \/>\npoder\u00e1 estar configurado para bloquear qualquer tentativa de conex\u00e3o vinda da internet<br \/>\n(cracker) para as m\u00e1quinas de sua rede.<br \/>\nPara c\u00f3pia de arquivos via rede insegura (como atrav\u00e9s da Internet), \u00e9 recomendado o uso de<br \/>\nservi\u00e7os que utilizam criptografia para login e transfer\u00eancia de arquivos (veja Servidor ssh,<br \/>\nCap\u00edtulo 15) ou a configura\u00e7\u00e3o de uma VPN.<br \/>\n\u2022 Que m\u00e1quinas ter\u00e3o acesso livre e quais ser\u00e3o restritas.<br \/>\n\u2022 Que servi\u00e7os dever\u00e3o ter prioridade no processamento.<br \/>\n\u2022 Que m\u00e1quinas\/redes NUNCA dever\u00e3o ter acesso a certas\/todas m\u00e1quinas.<br \/>\n\u2022 O volume de tr\u00e1fego que o servidor manipular\u00e1. Atrav\u00e9s disso voc\u00ea pode ter que balancear o<br \/>\ntr\u00e1fego entre outras m\u00e1quinas, configurar prote\u00e7\u00f5es contra DoS, syn flood, etc.<br \/>\n\u2022 O que tem permiss\u00e3o de passar de uma rede para outra (em m\u00e1quinas que atuam como<br \/>\nroteadores\/gateways de uma rede interna).<br \/>\n\u2022 Etc.<br \/>\nA an\u00e1lise destes pontos pode determinar a complexidade do firewall, custos de implementa\u00e7\u00e3o,<br \/>\nprazo de desenvolvimento e tempo de maturidade do c\u00f3digo para implementa\u00e7\u00e3o. Existem muitos<br \/>\noutros pontos que podem entrar na quest\u00e3o de desenvolvimento de um sistema de firewall, eles<br \/>\ndependem do tipo de firewall que est\u00e1 desenvolvendo e das pol\u00edticas de seguran\u00e7a de sua rede.<br \/>\n10.1.12 O que s\u00e3o regras?<br \/>\nAs regras s\u00e3o como comandos passados ao iptables para que ele realize uma determinada a\u00e7\u00e3o<br \/>\n(como bloquear ou deixar passar um pacote) de acordo com o endere\u00e7o\/porta de origem\/destino,<br \/>\ninterface de origem\/destino, etc. As regras s\u00e3o armazenadas dentro dos chains e processadas na<br \/>\nordem que s\u00e3o inseridas.<br \/>\nAs regras s\u00e3o armazenadas no kernel, o que significa que quando o computador for reiniciado tudo<br \/>\no que fez ser\u00e1 perdido. Por este motivo elas dever\u00e3o ser gravadas em um arquivo para serem<br \/>\ncarregadas a cada inicializa\u00e7\u00e3o.<br \/>\nUm exemplo de regra: iptables -A INPUT -s 123.123.123.1 -j DROP.<br \/>\n10.1.13 O que s\u00e3o chains?<br \/>\nOs Chains s\u00e3o locais onde as regras do firewall definidas pelo usu\u00e1rio s\u00e3o armazenadas para<br \/>\nopera\u00e7\u00e3o do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT,<br \/>\nOUTPUT e FORWARD) e os criados pelo usu\u00e1rio. Os nomes dos chains embutidos devem ser<br \/>\nespecificados sempre em mai\u00fasculas (note que os nomes dos chains s\u00e3o case-sensitive, ou seja, o<br \/>\nchain input \u00e9 completamente diferente de INPUT).<br \/>\n10.1.14 O que s\u00e3o tabelas?<br \/>\nTabelas s\u00e3o os locais usados para armazenar os chains e conjunto de regras com uma determinada<br \/>\ncaracter\u00edstica em comum. As tabelas podem ser referenciadas com a op\u00e7\u00e3o -t tabela e existem 3<br \/>\ntabelas dispon\u00edveis no iptables:<br \/>\n\u2022 filter &#8211; Esta \u00e9 a tabela padr\u00e3o, cont\u00e9m 3 chains padr\u00f5es:<br \/>\n\u2022 INPUT &#8211; Consultado para dados que chegam a m\u00e1quina<br \/>\n\u2022 OUTPUT &#8211; Consultado para dados que saem da m\u00e1quina<br \/>\n\u2022 FORWARD &#8211; Consultado para dados que s\u00e3o redirecionados para outra interface de<br \/>\nrede ou outra m\u00e1quina.<br \/>\nOs chains INPUT e OUTPUT somente s\u00e3o atravessados por conex\u00f5es indo\/se originando de<br \/>\nlocalhost.<br \/>\nOBS: Para conex\u00f5es locais, somente os chains INPUT e OUTPUT s\u00e3o consultados na tabela<br \/>\nfilter.<br \/>\n\u2022 nat &#8211; Usada para dados que gera outra conex\u00e3o (masquerading, source nat, destination nat,<br \/>\nport forwarding, proxy transparente s\u00e3o alguns exemplos). Possui 3 chains padr\u00f5es:<br \/>\n\u2022 PREROUTING &#8211; Consultado quando os pacotes precisam ser modificados logo que<br \/>\nchegam. \u00c9 o chain ideal para realiza\u00e7\u00e3o de DNAT e redirecionamento de portas<br \/>\n(Fazendo DNAT, Se\u00e7\u00e3o 10.4.4).<br \/>\n\u2022 OUTPUT &#8211; Consultado quando os pacotes gerados localmente precisam ser<br \/>\nmodificados antes de serem roteados. Este chain somente \u00e9 consultado para conex\u00f5es<br \/>\nque se originam de IPs de interfaces locais.<br \/>\n\u2022 POSTROUTING &#8211; Consultado quando os pacotes precisam ser modificados ap\u00f3s o<br \/>\ntratamento de roteamento. \u00c9 o chain ideal para realiza\u00e7\u00e3o de SNAT e IP<br \/>\nMasquerading (Fazendo SNAT, Se\u00e7\u00e3o 10.4.3).<br \/>\n\u2022 mangle &#8211; Utilizada para altera\u00e7\u00f5es especiais de pacotes (como modificar o tipo de servi\u00e7o<br \/>\n(TOS) ou outros detalhes que ser\u00e3o explicados no decorrer do cap\u00edtulo. Possui 2 chains<br \/>\npadr\u00f5es:<br \/>\n\u2022 INPUT &#8211; Consultado quando os pacotes precisam ser modificados antes de serem<br \/>\nenviados para o chain INPUT da tabela filter.<br \/>\n\u2022 FORWARD &#8211; Consultado quando os pacotes precisam ser modificados antes de serem<br \/>\nenviados para o chain FORWARD da tabela filter.<br \/>\n\u2022 PREROUTING &#8211; Consultado quando os pacotes precisam ser modificados antes de<br \/>\nser enviados para o chain PREROUTING da tabela nat.<br \/>\n\u2022 POSTROUTING &#8211; Consultado quando os pacotes precisam ser modificados antes de<br \/>\nserem enviados para o chain POSTROUTING da tabela nat.<br \/>\n\u2022 OUTPUT &#8211; Consultado quando os pacotes precisam ser modificados antes de serem<br \/>\nenviados para o chain OUTPUT da tabela nat.<br \/>\nVeja A tabela mangle, Se\u00e7\u00e3o 10.5 para mais detalhes sobre a tabela mangle.<br \/>\n10.1.15 Habilitando o suporte ao iptables no kernel<br \/>\nPara usar toda a funcionalidade do firewall iptables, permitindo fazer o controle do que tem ou<br \/>\nn\u00e3o permiss\u00e3o de acessar sua m\u00e1quina, fazer Masquerading\/NAT em sua rede, etc., voc\u00ea precisar\u00e1<br \/>\ndos seguintes componentes compilados em seu kernel (os m\u00f3dulos experimentais fora ignorados<br \/>\nintencionalmente):<br \/>\n*<br \/>\n* Network Options:<br \/>\n*<br \/>\nNetwork packet filtering (replaces ipchains) [Y\/m\/n\/?]<br \/>\nNetwork packet filtering debugging [Y\/m\/n\/?]<br \/>\ne na Subse\u00e7\u00e3o:<br \/>\n*<br \/>\n* IP: Netfilter Configuration<br \/>\n*<br \/>\nConnection tracking (required for masq\/NAT) (CONFIG_IP_NF_CONNTRACK)<br \/>\n[M\/n\/y\/?]<br \/>\nFTP protocol support (CONFIG_IP_NF_FTP) [M\/n\/?]<br \/>\nIRC protocol support (CONFIG_IP_NF_IRC) [M\/n\/?]<br \/>\nIP tables support (required for filtering\/masq\/NAT) (CONFIG_IP_NF_IPTABLES)<br \/>\n[Y\/m\/n\/?]<br \/>\nlimit match support (CONFIG_IP_NF_MATCH_LIMIT) [Y\/m\/n\/?]<br \/>\nMAC address match support (CONFIG_IP_NF_MATCH_MAC) [M\/n\/y\/?]<br \/>\nnetfilter MARK match support (CONFIG_IP_NF_MATCH_MARK) [M\/n\/y\/?]<br \/>\nMultiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT) [M\/n\/y\/?]<br \/>\nTOS match support (CONFIG_IP_NF_MATCH_TOS) [M\/n\/y\/?]<br \/>\nLENGTH match support (CONFIG_IP_NF_MATCH_LENGTH) [M\/n\/y\/?]<br \/>\nTTL match support (CONFIG_IP_NF_TTL) [M\/n\/y\/?]<br \/>\ntcpmss match support (CONFIG_IP_NF_MATCH_TCPMSS) [M\/n\/y\/?]<br \/>\nConnection state match support (CONFIG_IP_NF_MATCH_STATE) [M\/n\/?]<br \/>\nPacket filtering (CONFIG_IP_NF_FILTER) [M\/n\/y\/?]<br \/>\nREJECT target support (CONFIG_IP_NF_TARGET_REJECT) [M\/n\/?]<br \/>\nFull NAT (CONFIG_IP_NF_NAT) [M\/n\/?]<br \/>\nMASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE) [M\/n\/?]<br \/>\nREDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT) [M\/n\/?]<br \/>\nPacket mangling (CONFIG_IP_NF_MANGLE) [M\/n\/y\/?]<br \/>\nTOS target support (CONFIG_IP_NF_TARGET_TOS) [M\/n\/?]<br \/>\nMARK target support (CONFIG_IP_NF_TARGET_MARK) [M\/n\/?]<br \/>\nLOG target support (CONFIG_IP_NF_TARGET_LOG) [M\/n\/y\/?]<br \/>\nTCPMSS target support (CONFIG_IP_NF_TARGET_TCPMSS) [M\/n\/y\/?]<br \/>\nEsta configura\u00e7\u00e3o permite que voc\u00ea n\u00e3o tenha problemas para iniciar o uso e configura\u00e7\u00e3o do seu<br \/>\nfirewall iptables, ela ativa os m\u00f3dulos necess\u00e1rios para utiliza\u00e7\u00e3o de todos os recursos do firewall<br \/>\niptables. Quando conhecer a fun\u00e7\u00e3o de cada um dos par\u00e2metros acima (durante o decorrer do<br \/>\ntexto), voc\u00ea poder\u00e1 eliminar muitas das op\u00e7\u00f5es desnecess\u00e1rias para seu estilo de firewall ou<br \/>\ncontinuar fazendo uso de todas \ud83d\ude09<br \/>\nOBS1: A configura\u00e7\u00e3o acima leva em considera\u00e7\u00e3o que voc\u00ea N\u00c3O executar\u00e1 os c\u00f3digos antigos de<br \/>\nfirewall ipfwadm e ipchains. Caso deseje utilizar o ipchains ou o ipfwadm, ser\u00e1 preciso<br \/>\nresponder com &#8220;M&#8221; a quest\u00e3o &#8220;IP tables support (required for filtering\/masq\/NAT)<br \/>\n(CONFIG_IP_NF_IPTABLES)&#8221;. Ser\u00e1 necess\u00e1rio carregar manualmente o m\u00f3dulo correspondente<br \/>\nao firewall que deseja utilizar (modprobe iptables_filter.o no caso do iptables).<br \/>\nN\u00e3o execute mais de um tipo de firewall ao mesmo tempo!!!<br \/>\nOBS2: \u00c9 recomend\u00e1vel ativar o daemon kmod para carga autom\u00e1tica de m\u00f3dulos, caso contr\u00e1rio<br \/>\nser\u00e1 necess\u00e1rio compilar todas as partes necess\u00e1rias embutidas no kernel, carregar os m\u00f3dulos<br \/>\nnecess\u00e1rios manualmente ou pelo iptables (atrav\u00e9s da op\u00e7\u00e3o &#8211;modprobe=m\u00f3dulo).<br \/>\n10.1.16 Ligando sua rede interna a Internet<br \/>\nSe a sua inten\u00e7\u00e3o (como da maioria dos usu\u00e1rios) \u00e9 conectar sua rede interna a Internet de forma<br \/>\nr\u00e1pida e simples, leia Fazendo IP masquerading (para os apressados), Se\u00e7\u00e3o 10.4.2 ou Fazendo<br \/>\nSNAT, Se\u00e7\u00e3o 10.4.3. Um exemplo pr\u00e1tico de configura\u00e7\u00e3o de Masquerading deste tipo \u00e9 encontrado<br \/>\nem Conectando sua rede interna a Internet, Se\u00e7\u00e3o 10.8.3.<br \/>\nAp\u00f3s configurar o masquerading, voc\u00ea s\u00f3 precisar\u00e1 especificar o endere\u00e7o IP da m\u00e1quina<br \/>\nmasquerading (servidor) como Gateway da rede. No Windows 9x\/NT\/2000 isto \u00e9 feito no<br \/>\nPainel de Controle\/Rede\/Propriedades de Tcp\/IP. No Linux pode ser feito com route add<br \/>\ndefault gw IP_do_Servidor.<br \/>\n10.2 Manipulando chains<br \/>\nO iptables trabalha com uma tabela de regras que \u00e9 analisada uma a uma at\u00e9 que a \u00faltima seja<br \/>\nprocessada. Por padr\u00e3o, se uma regra tiver qualquer erro, uma mensagem ser\u00e1 mostrada e ela<br \/>\ndescartada. O pacote n\u00e3o conferir\u00e1 e a a\u00e7\u00e3o final (se ele vai ser aceito ou rejeitado) depender\u00e1 das<br \/>\nregras seguintes.<br \/>\nAs op\u00e7\u00f5es passadas ao iptables usadas para manipular os chains s\u00e3o SEMPRE em mai\u00fasculas.<br \/>\nAs seguintes opera\u00e7\u00f5es podem ser realizadas:<br \/>\n10.2.1 Adicionando regras &#8211; A<br \/>\nComo exemplo vamos criar uma regra que bloqueia o acesso a nosso pr\u00f3pria m\u00e1quina (127.0.0.1 &#8211;<br \/>\nloopback). Primeiro daremos um ping para verificar seu funcionamento:<br \/>\n#ping 127.0.0.1<br \/>\nPING 127.0.0.1 (127.0.0.1): 56 data bytes<br \/>\n64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms<br \/>\n64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.5 ms<br \/>\n&#8212; 127.0.0.1 ping statistics &#8212;<br \/>\n2 packets transmitted, 2 packets received, 0% packet loss<br \/>\nround-trip min\/avg\/max = 0.5\/0.5\/0.6 ms<br \/>\nOk, a m\u00e1quina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie<br \/>\n(-j DROP) qualquer acesso indo ao endere\u00e7o 127.0.0.1 (-d 127.0.0.1):<br \/>\niptables -t filter -A INPUT -d 127.0.0.1 -j DROP<br \/>\nAgora verificamos um novo ping:<br \/>\n#ping 127.0.0.1<br \/>\nPING 127.0.0.1 (127.0.0.1): 56 data bytes<br \/>\n&#8212; 127.0.0.1 ping statistics &#8212;<br \/>\n2 packets transmitted, 0 packets received, 100% packet loss<br \/>\nDesta vez a m\u00e1quina 127.0.0.1 n\u00e3o respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d<br \/>\n127.0.0.1) s\u00e3o rejeitados (-j DROP). A op\u00e7\u00e3o -A \u00e9 usada para adicionar novas regras no final do<br \/>\nchain. Al\u00e9m de -j DROP que serve para rejeitar os pacotes, podemos tamb\u00e9m usar -j ACCEPT para<br \/>\naceitar pacotes. A op\u00e7\u00e3o -j \u00e9 chamada de alvo da regra ou somente alvo pois define o destino do<br \/>\npacote que atravessa a regra (veja Especificando um alvo, Se\u00e7\u00e3o 10.3.6). Bem vindo a base de um<br \/>\nsistema de firewall \ud83d\ude42<br \/>\nOBS1: &#8211; O acesso a interface loopback n\u00e3o deve ser de forma alguma bloqueado, pois muitos<br \/>\naplicativos utilizam soquetes tcp para realizarem conex\u00f5es, mesmo que voc\u00ea n\u00e3o possua uma rede<br \/>\ninterna.<br \/>\nOBS2: &#8211; A tabela filter ser\u00e1 usada como padr\u00e3o caso nenhuma tabela seja especificada atrav\u00e9s da<br \/>\nop\u00e7\u00e3o -t.<br \/>\n10.2.2 Listando regras &#8211; L<br \/>\nA seguinte sintaxe \u00e9 usada para listar as regras criadas:<br \/>\niptables [-t tabela] -L [chain] [op\u00e7\u00f5es]<br \/>\nOnde:<br \/>\ntabela<br \/>\n\u00c9 uma das tabelas usadas pelo iptables. Se a tabela n\u00e3o for especificada, a tabela filter<br \/>\nser\u00e1 usada como padr\u00e3o. Veja O que s\u00e3o tabelas?, Se\u00e7\u00e3o 10.1.14 para detalhes.<br \/>\nchain<br \/>\nUm dos chains dispon\u00edveis na tabela acima (veja O que s\u00e3o tabelas?, Se\u00e7\u00e3o 10.1.14) ou criado<br \/>\npelo usu\u00e1rio (Criando um novo chain &#8211; N, Se\u00e7\u00e3o 10.2.6). Caso o chain n\u00e3o seja especificado,<br \/>\ntodos os chains da tabela ser\u00e3o mostrados.<br \/>\nop\u00e7\u00f5es<br \/>\nAs seguintes op\u00e7\u00f5es podem ser usadas para listar o conte\u00fado de chains:<br \/>\n\u2022 -v &#8211; Exibe mais detalhes sobre as regras criadas nos chains.<br \/>\n\u2022 -n &#8211; Exibe endere\u00e7os de m\u00e1quinas\/portas como n\u00fameros ao inv\u00e9s de tentar a resolu\u00e7\u00e3o<br \/>\nDNS e consulta ao \/etc\/services. A resolu\u00e7\u00e3o de nomes pode tomar muito<br \/>\ntempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de<br \/>\nsua conex\u00e3o.<br \/>\n\u2022 -x &#8211; Exibe n\u00fameros exatos ao inv\u00e9s de n\u00fameros redondos. Tamb\u00e9m mostra a faixa de<br \/>\nportas de uma regra de firewall.<br \/>\n\u2022 &#8211;line-numbers &#8211; Exibe o n\u00famero da posi\u00e7\u00e3o da regra na primeira coluna da<br \/>\nlistagem.<br \/>\nPara listar a regra criada anteriormente usamos o comando:<br \/>\n#iptables -t filter -L INPUT<br \/>\nChain INPUT (policy ACCEPT)<br \/>\ntarget prot opt source destination<br \/>\nDROP all &#8212; anywhere localhost<br \/>\nO comando iptables -L INPUT -n tem o mesmo efeito, a diferen\u00e7a \u00e9 que s\u00e3o mostrados<br \/>\nn\u00fameros ao inv\u00e9s de nomes:<br \/>\n#iptables -L INPUT -n<br \/>\nChain INPUT (policy ACCEPT)<br \/>\ntarget prot opt source destination<br \/>\nDROP all &#8212; 0.0.0.0\/0 127.0.0.1<br \/>\n#iptables -L INPUT -n &#8211;line-numbers<br \/>\nChain INPUT (policy ACCEPT)<br \/>\nnum target prot opt source destination<br \/>\n1 DROP all &#8212; 0.0.0.0\/0 127.0.0.1<br \/>\n#iptables -L INPUT -n -v<br \/>\nChain INPUT (policy ACCEPT 78 packets, 5820 bytes)<br \/>\npkts bytes target prot opt in out source<br \/>\ndestination<br \/>\n2 194 DROP icmp &#8212; * * 0.0.0.0\/0<br \/>\n127.0.0.1<br \/>\nOs campos assim possuem o seguinte significado:<br \/>\nChain INPUT<br \/>\nNome do chain listado<br \/>\n(policy ACCEPT 78 packets, 5820 bytes)<br \/>\nPoliciamento padr\u00e3o do chain (veja Especificando o policiamento padr\u00e3o de um chain &#8211; P,<br \/>\nSe\u00e7\u00e3o 10.2.12).<br \/>\npkts<br \/>\nQuantidade de pacotes que atravessaram a regra (veja Zerando contador de bytes dos chains &#8211;<br \/>\nZ, Se\u00e7\u00e3o 10.2.11).<br \/>\nbytes<br \/>\nQuantidade de bytes que atravessaram a regra. Pode ser referenciado com K (Kilobytes), M<br \/>\n(Megabytes), G (Gigabytes).<br \/>\ntarget<br \/>\nO alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP ou outro chain. Veja<br \/>\nEspecificando um alvo, Se\u00e7\u00e3o 10.3.6 para detalhes sobre a especifica\u00e7\u00e3o de um alvo.<br \/>\nprot<br \/>\nProtocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. Veja Especificando um<br \/>\nprotocolo, Se\u00e7\u00e3o 10.3.3 para detalhes.<br \/>\nopt<br \/>\nOp\u00e7\u00f5es extras passadas a regra. Normalmente &#8220;!&#8221; (veja Especificando uma exce\u00e7\u00e3o, Se\u00e7\u00e3o<br \/>\n10.3.5) ou &#8220;f&#8221; (veja Especificando fragmentos, Se\u00e7\u00e3o 10.3.4).<br \/>\nin<br \/>\nInterface de entrada (de onde os dados chegam). Veja Especificando a interface de<br \/>\norigem\/destino, Se\u00e7\u00e3o 10.3.2.<br \/>\nout<br \/>\nInterface de sa\u00edda (para onde os dados v\u00e3o). Veja Especificando a interface de origem\/destino,<br \/>\nSe\u00e7\u00e3o 10.3.2.<br \/>\nsource<br \/>\nEndere\u00e7o de origem. Veja Especificando um endere\u00e7o de origem\/destino, Se\u00e7\u00e3o 10.3.1.<br \/>\ndestination<br \/>\nEndere\u00e7o de destino. Veja Especificando um endere\u00e7o de origem\/destino, Se\u00e7\u00e3o 10.3.1.<br \/>\noutras op\u00e7\u00f5es<br \/>\nEstas op\u00e7\u00f5es normalmente aparecem quando s\u00e3o usadas a op\u00e7\u00e3o -x:<br \/>\n\u2022 dpt ou dpts &#8211; Especifica a porta ou faixa de portas de destino.<br \/>\n\u2022 reject-with icmp-port-unreachable &#8211; Significa que foi usado o alvo<br \/>\nREJECT naquela regra (veja Alvo REJECT, Se\u00e7\u00e3o 10.3.6.1).<br \/>\n10.2.3 Apagando uma regra &#8211; D<br \/>\nPara apagar um chain, existem duas alternativas:<br \/>\n\u2022 Quando sabemos qual \u00e9 o n\u00famero da regra no chain (listado com a op\u00e7\u00e3o -L) podemos<br \/>\nreferenciar o n\u00famero diretamente. Por exemplo, para apagar a regra criada acima:<br \/>\niptables -t filter -D INPUT 1<br \/>\nEsta op\u00e7\u00e3o n\u00e3o \u00e9 boa quando temos um firewall complexo com um grande n\u00famero de regras por<br \/>\nchains, neste caso a segunda op\u00e7\u00e3o \u00e9 a mais apropriada.<br \/>\n\u2022 Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -A por -D:<br \/>\niptables -t filter -D INPUT -d 127.0.0.1 -j DROP<br \/>\nEnt\u00e3o a regra correspondentes no chain INPUT ser\u00e1 automaticamente apagada (confira listando o<br \/>\nchain com a op\u00e7\u00e3o &#8220;-L&#8221;). Caso o chain possua v\u00e1rias regras semelhantes, somente a primeira ser\u00e1<br \/>\napagada.<br \/>\nOBS: N\u00e3o \u00e9 poss\u00edvel apagar os chains defaults do iptables (INPUT, OUTPUT&#8230;).<br \/>\n10.2.4 Inserindo uma regra &#8211; I<br \/>\nPrecisamos que o tr\u00e1fego vindo de 192.168.1.15 n\u00e3o seja rejeitado pelo nosso firewall. N\u00e3o<br \/>\npodemos adicionar uma nova regra (-A) pois esta seria inclu\u00edda no final do chain e o tr\u00e1fego seria<br \/>\nrejeitado pela primeira regra (nunca atingindo a segunda). A solu\u00e7\u00e3o \u00e9 inserir a nova regra antes da<br \/>\nregra que bloqueia todo o tr\u00e1fego ao endere\u00e7o 127.0.0.1 na posi\u00e7\u00e3o 1:<br \/>\niptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j<br \/>\nACCEPT<br \/>\nAp\u00f3s este comando, temos a regra inserida na primeira posi\u00e7\u00e3o do chain (repare no n\u00famero 1 ap\u00f3s<br \/>\nINPUT) e a antiga regra n\u00famero 1 passa a ser a n\u00famero 2. Desta forma a regra acima ser\u00e1<br \/>\nconsultada, se a m\u00e1quina de origem for 192.168.1.15 ent\u00e3o o tr\u00e1fego estar\u00e1 garantido, caso<br \/>\ncontr\u00e1rio o tr\u00e1fego com o destino 127.0.0.1 ser\u00e1 bloqueado na regra seguinte.<br \/>\n10.2.5 Substituindo uma regra &#8211; R<br \/>\nAp\u00f3s criar nossa regra, percebemos que a nossa inten\u00e7\u00e3o era somente bloquear os pings com o<br \/>\ndestino 127.0.0.1 (pacotes ICMP) e n\u00e3o havia necessidade de bloquear todo o tr\u00e1fego da<br \/>\nm\u00e1quina. Existem duas alternativas: apagar a regra e inserir uma nova no lugar ou modificar<br \/>\ndiretamente a regra j\u00e1 criada sem afetar outras regras existentes e mantendo a sua ordem no chain<br \/>\n(isso \u00e9 muito importante). Use o seguinte comando:<br \/>\niptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROP<br \/>\nO n\u00famero 2 \u00e9 o n\u00famero da regra que ser\u00e1 substitu\u00edda no chain INPUT, e deve ser especificado. O<br \/>\ncomando acima substituir\u00e1 a regra 2 do chain INPUT (-R INPUT 2) bloqueando (-j DROP)<br \/>\nqualquer pacote icmp (-p icmp) com o destino 127.0.0.1 (-d 127.0.0.1).<br \/>\n10.2.6 Criando um novo chain &#8211; N<br \/>\nEm firewalls organizados com um grande n\u00famero de regras, \u00e9 interessante criar chains individuais<br \/>\npara organizar regras de um mesmo tipo ou que tenha por objetivo analisar um tr\u00e1fego de uma<br \/>\nmesma categoria (interface, endere\u00e7o de origem, destino, protocolo, etc) pois podem consumir<br \/>\nmuitas linhas e tornar o gerenciamento do firewall confuso (e conseq\u00fcentemente causar s\u00e9rios<br \/>\nriscos de seguran\u00e7a). O tamanho m\u00e1ximo de um nome de chain \u00e9 de 31 caracteres e podem conter<br \/>\ntanto letras mai\u00fasculas quanto min\u00fasculas.<br \/>\niptables [-t tabela] [-N novochain]<br \/>\nPara criar o chain internet (que pode ser usado para agrupar as regras de internet) usamos o seguinte<br \/>\ncomando:<br \/>\niptables -t filter -N internet<br \/>\nPara inserir regras no chain internet basta especifica-lo ap\u00f3s a op\u00e7\u00e3o -A:<br \/>\niptables -t filter -A internet -s 200.200.200.200 -j DROP<br \/>\nE ent\u00e3o criamos um pulo (-j) do chain INPUT para o chain internet:<br \/>\niptables -t filter -A INPUT -j internet<br \/>\nOBS: O chain criando pelo usu\u00e1rio pode ter seu nome tanto em mai\u00fasculas como min\u00fasculas.<br \/>\nSe uma m\u00e1quina do endere\u00e7o 200.200.200.200 tentar acessar sua m\u00e1quina, o iptables consultar\u00e1<br \/>\nas seguintes regras:<br \/>\n`INPUT&#8217; `internet&#8217;<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n| Regra1: -s 192.168.1.15 | | Regra1: -s 200.200.200.200|<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;| |&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|<br \/>\n| Regra2: -s 192.168.1.1 | | Regra2: -d 192.168.1.1 |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;| &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n| Regra3: -j DROP |<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nO pacote tem o endere\u00e7o de origem<br \/>\n200.200.200.200, ele passa pela<br \/>\nprimeira e segunda regras do chain<br \/>\nINPUT, a terceira regra direciona<br \/>\npara o chain internet<br \/>\n_______________________________________<br \/>\nv \/ v<br \/>\n\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-\\ \/ \/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n-\\<br \/>\n| Regra1: -s 192.168.1.15 | | \/ | Regra1: -s 200.200.200.200 -j<br \/>\nDROP \\_____\\<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-| \/<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;| \/<br \/>\n| Regra2: -s 192.168.1.1 | | \/ | Regra2: -d 200.200.200.202 -j DROP<br \/>\n|<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-|\/ \\&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n-\/<br \/>\n| Regra3: -j internet \/|<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;| No chain internet, a primeira regra<br \/>\nconfere<br \/>\n| Regra4: -j DROP | com o endere\u00e7o de origem<br \/>\n200.200.200.200 e<br \/>\n\\&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\/ o pacote \u00e9 bloqueado.<br \/>\nSe uma m\u00e1quina com o endere\u00e7o de origem 200.200.200.201 tentar acessar a<br \/>\nm\u00e1quina,<br \/>\nent\u00e3o as regra consultadas ser\u00e3o as seguintes:<br \/>\nO pacote tem o endere\u00e7o de origem<br \/>\n200.200.200.201, ele passa pela<br \/>\nprimeira e segunda regras do chain<br \/>\nINPUT, a terceira regra direciona<br \/>\npara o chain internet ______________________________________<br \/>\nv \/ v<br \/>\n\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-\\ \/ \/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n-\\<br \/>\n| Regra1: -s 192.168.1.15 | | \/ | Regra1: -s 200.200.200.200 -j DROP |<br \/>\n|<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-| \/<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-|<br \/>\n| Regra2: -s 192.168.1.1 | | \/ | Regra2: -s 200.200.200.202 -j DROP |<br \/>\n|<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|-|\/ \\&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|<br \/>\n-\/<br \/>\n| Regra3: -j internet \/| v<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;| \/<br \/>\n| Regra4: -j DROP &#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n\\&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\/-\/ O pacote passa pelas regras 1 e 2 do<br \/>\nchain<br \/>\n| internet, como ele n\u00e3o confere com<br \/>\nnenhuma<br \/>\nv das 2 regras ele retorna ao chain INPUT<br \/>\ne \u00e9<br \/>\nEsta regra \u00e9 a n\u00famero 4 analisado pela regra seguinte.<br \/>\nque diz para rejeitar o<br \/>\npacote.<br \/>\n10.2.7 Renomeando um chain criado pelo usu\u00e1rio &#8211; E<br \/>\nSe por algum motivo precisar renomear um chain criado por voc\u00ea na tabela filter, nat ou mangle,<br \/>\nisto poder\u00e1 ser feito usando a op\u00e7\u00e3o -E do iptables:<br \/>\niptables -t filter -E chain-antigo novo-chain<br \/>\nNote que n\u00e3o \u00e9 poss\u00edvel renomear os chains defaults do iptables.<br \/>\n10.2.8 Listando os nomes de todas as tabelas atuais<br \/>\nUse o comando cat \/proc\/net\/ip_tables_names para fazer isto. \u00c9 interessante dar uma<br \/>\nolhada nos arquivos dentro do diret\u00f3rio \/proc\/net, pois os arquivos existentes podem lhe<br \/>\ninteressar para outras finalidades.<br \/>\n10.2.9 Limpando as regras de um chain &#8211; F<br \/>\nPara limpar todas as regras de um chain, use a seguinte sintaxe:<br \/>\niptables [-t tabela] [-F chain]<br \/>\nOnde:<br \/>\ntabela<br \/>\nTabela que cont\u00e9m o chain que desejamos zerar.<br \/>\nchain<br \/>\nChain que desejamos limpar. Caso um chain n\u00e3o seja especificado, todos os chains da tabela<br \/>\nser\u00e3o limpos.<br \/>\niptables -t filter -F INPUT<br \/>\niptables -t filter -F<br \/>\n10.2.10 Apagando um chain criado pelo usu\u00e1rio &#8211; X<br \/>\nPara apagarmos um chain criado pelo usu\u00e1rio, usamos a seguinte sintaxe:<br \/>\niptables [-t tabela] [-X chain]<br \/>\nOnde:<br \/>\ntabela<br \/>\nNome da tabela que cont\u00e9m o chain que desejamos excluir.<br \/>\nchain<br \/>\nNome do chain que desejamos apagar. Caso n\u00e3o seja especificado, todos os chains definidos<br \/>\npelo usu\u00e1rio na tabela especificada ser\u00e3o exclu\u00eddos.<br \/>\nOBS: &#8211; Chains embutidos nas tabelas n\u00e3o podem ser apagados pelo usu\u00e1rio. Veja os nomes destes<br \/>\nchains em O que s\u00e3o tabelas?, Se\u00e7\u00e3o 10.1.14.<br \/>\niptables -t filter -X internet<br \/>\niptables -X<br \/>\n10.2.11 Zerando contador de bytes dos chains &#8211; Z<br \/>\nEste comando zera o campo pkts e bytes de uma regra do iptables. Estes campos podem ser<br \/>\nvisualizados com o comando iptables -L -v. A seguinte sintaxe \u00e9 usada:<br \/>\niptables [-t tabela] [-Z chain] [-L]<br \/>\nOnde:<br \/>\ntabela<br \/>\nNome da tabela que cont\u00e9m o chain que queremos zerar os contadores de bytes e pacotes.<br \/>\nchain<br \/>\nChain que deve ter os contadores zerados. Caso n\u00e3o seja especificado, todos os chains da<br \/>\ntabela ter\u00e3o os contadores zerados. Note que as op\u00e7\u00f5es -Z e -L podem ser usadas juntas, assim<br \/>\no chain ser\u00e1 listado e imediatamente zerado. Isto evita a passagem de pacotes durante a<br \/>\nlistagem de um chain.<br \/>\niptables -t filter -Z INPUT<br \/>\n10.2.12 Especificando o policiamento padr\u00e3o de um chain &#8211; P<br \/>\nO policiamento padr\u00e3o determina o que acontecer\u00e1 com um pacote quando ele chegar ao final das<br \/>\nregras contidas em um chain. O policiamento padr\u00e3o do iptables \u00e9 &#8220;ACCEPT&#8221; mas isto pode<br \/>\nser alterado com o comando:<br \/>\niptables [-t tabela] [-P chain] [ACCEPT\/DROP]<br \/>\nOnde:<br \/>\ntabela<br \/>\nTabela que cont\u00e9m o chain que desejamos modificar o policiamento padr\u00e3o.<br \/>\nchain<br \/>\nDefine o chain que ter\u00e1 o policiamento modificado. O chain deve ser especificado.<br \/>\nACCEPT\/DROP<br \/>\nACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em regras<br \/>\npermissivas). DROP rejeita os pacotes caso nenhuma regra do chain conferir (usado em regras<br \/>\nrestritivas).<br \/>\nO policiamento padr\u00e3o de um chain \u00e9 mostrado com o comando iptables -L:<br \/>\n# iptables -L INPUT<br \/>\nChain INPUT (policy ACCEPT)<br \/>\ntarget prot opt source destination<br \/>\nDROP icmp &#8212; anywhere localhost<br \/>\nNo exemplo acima, o policiamento padr\u00e3o de INPUT \u00e9 ACCEPT (policy ACCEPT), o que significa<br \/>\nque qualquer pacote que n\u00e3o seja rejeitado pela regra do chain, ser\u00e1 aceito. Para alterar o<br \/>\npoliciamento padr\u00e3o deste chain usamos o comando:<br \/>\niptables -t filter -P INPUT DROP<br \/>\nNOTA: Os policiamentos PERMISSIVOS (ACCEPT) normalmente s\u00e3o usados em conjunto com<br \/>\nregras restritivas no chain correspondentes (tudo \u00e9 bloqueado e o que sobrar \u00e9 liberado) e<br \/>\npoliciamentos RESTRITIVOS (DROP) s\u00e3o usados em conjunto com regras permissivas no chain<br \/>\ncorrespondente (tudo \u00e9 liberado e o que sobrar \u00e9 bloqueado pelo policiamento padr\u00e3o).<br \/>\n10.3 Outras op\u00e7\u00f5es do iptables<br \/>\n10.3.1 Especificando um endere\u00e7o de origem\/destino<br \/>\nAs op\u00e7\u00f5es -s (ou &#8211;src\/&#8211;source)e -d (ou &#8211;dst\/&#8211;destination) servem para especificar endere\u00e7os de<br \/>\norigem e destino respectivamente. \u00c9 permitido usar um endere\u00e7o IP completo (como 192.168.1.1),<br \/>\num hostname (debian), um endere\u00e7o fqdn (www.debian.org) ou um par rede\/m\u00e1scara (como<br \/>\n200.200.200.0\/255.255.255.0 ou 200.200.200.0\/24).<br \/>\nCaso um endere\u00e7o\/m\u00e1scara n\u00e3o sejam especificados, \u00e9 assumido 0\/0 como padr\u00e3o (todos as<br \/>\nm\u00e1quinas de todas as redes). A interpreta\u00e7\u00e3o dos endere\u00e7os de origem\/destino dependem do chain<br \/>\nque est\u00e1 sendo especificado (como INPUT e OUTPUT por exemplo).<br \/>\nOBS: Caso seja especificado um endere\u00e7o fqdn e este resolver mais de um endere\u00e7o IP, ser\u00e3o<br \/>\ncriadas v\u00e1rias regras, cada uma se aplicando a este endere\u00e7o IP espec\u00edfico. \u00c9 recomend\u00e1vel sempre<br \/>\nque poss\u00edvel a especifica\u00e7\u00e3o de endere\u00e7os IP&#8217;s nas regras, pois al\u00e9m de serem muito r\u00e1pidos (pois<br \/>\nn\u00e3o precisar de resolu\u00e7\u00e3o DNS) s\u00e3o mais seguros para evitar que nosso firewall seja enganado por<br \/>\num ataque de IP spoofing.<br \/>\n# Bloqueia o tr\u00e1fego vindo da rede 200.200.200.*:<br \/>\niptables -A INPUT -s 200.200.200.0\/24 -j DROP<br \/>\n# Bloqueia conex\u00f5es com o destino 10.1.2.3:<br \/>\niptables -A OUTPUT -d 10.1.2.3 -j DROP<br \/>\n# Bloqueia o tr\u00e1fego da m\u00e1quina www.dominio.teste.org a rede 210.21.1.3<br \/>\n# nossa m\u00e1quina possui o endere\u00e7o 210.21.1.3<br \/>\niptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP<br \/>\n10.3.2 Especificando a interface de origem\/destino<br \/>\nAs op\u00e7\u00f5es -i (ou &#8211;in-interface) e -o (ou &#8211;out-interface) especificam as interfaces de origem\/destino<br \/>\nde pacotes. Nem todos as chains aceitam as interfaces de origem\/destino simultaneamente, a<br \/>\ninterface de entrada (-i) nunca poder\u00e1 ser especificada em um chain OUTPUT e a interface de sa\u00edda<br \/>\n(-o) nunca poder\u00e1 ser especificada em um chain INPUT. Abaixo uma r\u00e1pida refer\u00eancia:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\nTABELA | CHAIN | INTERFACE |<br \/>\n| +&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| | ENTRADA (-i) | SA\u00cdDA (-o) |<br \/>\n+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| | INPUT | SIM | N\u00c3O |<br \/>\n| filter | OUTPUT | N\u00c3O | SIM |<br \/>\n| | FORWARD | SIM | SIM |<br \/>\n+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| | PREROUTING | SIM | N\u00c3O |<br \/>\n| nat | OUTPUT | N\u00c3O | SIM |<br \/>\n| | POSTROUTING | N\u00c3O | SIM |<br \/>\n+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n| | PREROUTING | SIM | N\u00c3O |<br \/>\n| mangle | | | |<br \/>\n| | OUTPUT | N\u00c3O | SIM |<br \/>\n+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nO caminho do pacote na interface ser\u00e1 determinado pelo tipo da interface e pela posi\u00e7\u00e3o dos chains<br \/>\nnas etapas de seu roteamento. O chain OUTPUT da tabela filter somente poder\u00e1 conter a interface<br \/>\nde sa\u00edda (veja a tabela acima). O chain FORWARD da tabela filter \u00e9 o \u00fanico que aceita a<br \/>\nespecifica\u00e7\u00e3o de ambas as interfaces, este \u00e9 um \u00f3timo chain para controlar o tr\u00e1fego que passa entre<br \/>\ninterfaces do firewall.<br \/>\nPor exemplo para bloquear o acesso do tr\u00e1fego de qualquer m\u00e1quina com o endere\u00e7o<br \/>\n200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):<br \/>\niptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP<br \/>\nA mesma regra pode ser especificada como<br \/>\niptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP<br \/>\nO sinal de &#8220;+&#8221; funciona como um coringa, assim a regra ter\u00e1 efeito em qualquer interface de ppp0 a<br \/>\nppp9. As interfaces ativas no momento podem ser listadas com o comando ifconfig, mas \u00e9<br \/>\npermitido especificar uma regra que faz refer\u00eancia a uma interface que ainda n\u00e3o existe, isto \u00e9<br \/>\ninteressante para conex\u00f5es intermitentes como o PPP. Para bloquear qualquer tr\u00e1fego local para a<br \/>\nInternet:<br \/>\niptables -A OUTPUT -o ppp+ -j DROP<br \/>\nPara bloquear a passagem de tr\u00e1fego da interface ppp0 para a interface eth1 (de uma de nossas redes<br \/>\ninternas):<br \/>\niptables -A FORWARD -i ppp0 -o eth1 -j DROP<br \/>\n10.3.3 Especificando um protocolo<br \/>\nA op\u00e7\u00e3o -p (ou &#8211;protocol) \u00e9 usada para especificar protocolos no iptables. Podem ser<br \/>\nespecificados os protocolos tcp, udp e icmp. Por exemplo, para rejeitar todos os pacotes UDP<br \/>\nvindos de 200.200.200.200:<br \/>\niptables -A INPUT -s 200.200.200.200 -p udp -j DROP<br \/>\nOBS1: Tanto faz especificar os nomes de protocolos em mai\u00fasculas ou min\u00fasculas.<br \/>\n10.3.3.1 Especificando portas de origem\/destino<br \/>\nAs portas de origem\/destino devem ser especificadas ap\u00f3s o protocolo e podem ser precedidas por<br \/>\numa das seguintes op\u00e7\u00f5es:<br \/>\n\u2022 &#8211;source-port ou &#8211;sport &#8211; Especifica uma porta ou faixa de portas de origem.<br \/>\n\u2022 &#8211;destination-port ou &#8211;dport &#8211; Especifica uma porta ou faixa de portas de<br \/>\ndestino.<br \/>\nUma faixa de portas pode ser especificada atrav\u00e9s de PortaOrigem:PortaDestino:<br \/>\n# Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de<br \/>\n# portas 0 a 1023<br \/>\niptables -A OUTPUT -d 200.200.200.200 -p tcp &#8211;dport :1023 -j DROP<br \/>\nCaso a PortaOrigem de uma faixa de portas n\u00e3o seja especificada, 0 \u00e9 assumida como padr\u00e3o, caso<br \/>\na Porta Destino n\u00e3o seja especificada, 65535 \u00e9 assumida como padr\u00e3o. Caso precise especificar<br \/>\ndiversas regras que envolvam o tratamento de portas diferentes, recomendo da uma olhada em<br \/>\nEspecificando m\u00faltiplas portas de origem\/destino, Se\u00e7\u00e3o 10.6.6, antes de criar um grande n\u00famero<br \/>\nde regras.<br \/>\n10.3.3.2 Especificando mensagens do protocolo ICMP<br \/>\nO protocolo ICMP n\u00e3o possui portas, mas \u00e9 poss\u00edvel fazer um controle maior sobre o tr\u00e1fego ICMP<br \/>\nque entra\/sai da rede atrav\u00e9s da especifica\u00e7\u00e3o dos tipos de mensagens ICMP. Os tipos de mensagens<br \/>\ndevem ser especificados com a op\u00e7\u00e3o &#8220;&#8211;icmp-type C\u00f3digoICMP&#8221; logo ap\u00f3s a especifica\u00e7\u00e3o do<br \/>\nprotocolo icmp:<br \/>\niptables -A INPUT -s 200.123.123.10 -p icmp &#8211;icmp-type time-exceeded -i<br \/>\nppp+ -j DROP<br \/>\nA regra acima rejeitar\u00e1 mensagens ICMP do tipo &#8220;time-exceeded&#8221; (tempo de requisi\u00e7\u00e3o excedido)<br \/>\nque venham do endere\u00e7o 200.123.123.10 atrav\u00e9s da interface ppp+.<br \/>\nAlguns tipos de mensagens ICMP s\u00e3o classificados por categoria (como o pr\u00f3prio &#8220;timeexceeded&#8221;),<br \/>\ncaso a categoria &#8220;time-exceeded&#8221; seja especificada, todas as mensagens daquela<br \/>\ncategoria (como &#8220;ttl-zero-during-transit&#8221;, &#8220;ttl-zero-during-reassembly&#8221;) conferir\u00e3o na regra<br \/>\nespecificada.Os tipos de mensagens ICMP podem ser obtidos com o comando iptables -p<br \/>\nicmp -h:<br \/>\necho-reply (pong)<br \/>\ndestination-unreachable<br \/>\nnetwork-unreachable<br \/>\nhost-unreachable<br \/>\nprotocol-unreachable<br \/>\nport-unreachable<br \/>\nfragmentation-needed<br \/>\nsource-route-failed<br \/>\nnetwork-unknown<br \/>\nhost-unknown<br \/>\nnetwork-prohibited<br \/>\nhost-prohibited<br \/>\nTOS-network-unreachable<br \/>\nTOS-host-unreachable<br \/>\ncommunication-prohibited<br \/>\nhost-precedence-violation<br \/>\nprecedence-cutoff<br \/>\nsource-quench<br \/>\nredirect<br \/>\nnetwork-redirect<br \/>\nhost-redirect<br \/>\nTOS-network-redirect<br \/>\nTOS-host-redirect<br \/>\necho-request (ping)<br \/>\nrouter-advertisement<br \/>\nrouter-solicitation<br \/>\ntime-exceeded (ttl-exceeded)<br \/>\nttl-zero-during-transit<br \/>\nttl-zero-during-reassembly<br \/>\nparameter-problem<br \/>\nip-header-bad<br \/>\nrequired-option-missing<br \/>\ntimestamp-request<br \/>\ntimestamp-reply<br \/>\naddress-mask-request<br \/>\naddress-mask-reply<br \/>\nOBS1: N\u00e3o bloqueie mensagens do tipo &#8220;host-unreachable&#8221; e &#8220;source-quench&#8221;, pois ter\u00e1 s\u00e9rios<br \/>\nproblemas no controle de suas conex\u00f5es. A primeira diz que o destino est\u00e1 inalcan\u00e7avel e a segunda<br \/>\nque o host est\u00e1 sobrecarregado, assim os pacotes devem ser enviados mais lentamente.<br \/>\n10.3.3.3 Especificando pacotes syn<br \/>\nPacotes syn s\u00e3o usados para iniciarem uma conex\u00e3o, o uso da op\u00e7\u00e3o &#8211;syn serve para especificar<br \/>\nestes tipos de pacotes. Desta maneira \u00e9 poss\u00edvel bloquear somente os pacotes que iniciam uma<br \/>\nconex\u00e3o, sem afetar os pacotes restantes. Para que uma conex\u00e3o ocorra \u00e9 necess\u00e1rio que a m\u00e1quina<br \/>\nobtenha a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nunca ser\u00e1 retornada e<br \/>\na conex\u00e3o n\u00e3o ser\u00e1 estabelecida.<br \/>\niptables -A INPUT -p tcp &#8211;syn &#8211;dport 23 -i ppp+ -j DROP<br \/>\nA regra acima bloqueia (-j DROP) qualquer tentativa de conex\u00e3o (&#8211;syn) vindas da interface ppp+<br \/>\nao telnet (&#8211;dport 23) da m\u00e1quina local, conex\u00f5es j\u00e1 efetuadas \u00e3o s\u00e3o afetadas por esta regra. A<br \/>\nop\u00e7\u00e3o &#8211;syn somente pode ser especificada para o protocolo tcp.<br \/>\nATEN\u00c7\u00c3O: &#8211; A situa\u00e7\u00e3o de passagem de pacotes durante deve ser levada em conta durante a<br \/>\ninicializa\u00e7\u00e3o do firewall, bloqueando a passagem de pacotes durante o processo de configura\u00e7\u00e3o,<br \/>\ncriando regras que bloqueiam a passagem de pacotes (exceto para a interface loopback) at\u00e9 que a<br \/>\nconfigura\u00e7\u00e3o do firewall esteja completa, pode ser uma solu\u00e7\u00e3o eficiente.<br \/>\nOutra alternativa segura \u00e9 configurar as regras de firewall antes das interfaces de rede se tornarem<br \/>\nativas (usando a op\u00e7\u00e3o &#8220;pre-up comando_firewall&#8221; no arquivo de configura\u00e7\u00e3o<br \/>\n\/etc\/network\/interfaces em sistemas Debian.<br \/>\n10.3.4 Especificando fragmentos<br \/>\nA op\u00e7\u00e3o &#8220;-f&#8221; (ou &#8211;fragment) permite especificar regras que confiram com fragmentos. Fragmentos<br \/>\ns\u00e3o simplesmente um pacote maior dividido em peda\u00e7os para poder ser transmitido via rede TCP\/IP<br \/>\npara remontagem do pacote pela m\u00e1quina de destino.<br \/>\nSomente o primeiro fragmento possui detalhes de cabe\u00e7alho para ser processado, os segundos e<br \/>\nseguintes somente possuem alguns cabe\u00e7alhos necess\u00e1rios para dar continuidade ao processo de<br \/>\nremontagem do pacote no destino.<br \/>\nUma regra como<br \/>\niptables -A INPUT -s 200.200.200.1 -f -j DROP<br \/>\nderrubar\u00e1 os fragmentos de 200.200.200.1 derrubar\u00e1 o segundo pacote e pacotes seguintes enviados<br \/>\npor 200.200.200.1 at\u00e9 n\u00f3s.<br \/>\nOBS1: Note que se o cabe\u00e7alho do pacote n\u00e3o tiver detalhes suficientes para checagem de regras no<br \/>\niptables, a regra simplesmente n\u00e3o ira conferir.<br \/>\nOBS2: N\u00e3o \u00e9 preciso especificar a op\u00e7\u00e3o &#8220;-f&#8221; para conex\u00f5es NAT, pois os pacotes s\u00e3o remontados<br \/>\nantes de entrarem no c\u00f3digo de filtragem.<br \/>\nOBS3: A op\u00e7\u00e3o &#8220;-f&#8221; tamb\u00e9m pode ser usada para evitar o flood por fragmentos (bomba de<br \/>\nfragmentos) que, dependendo da intensidade, podem at\u00e9 travar a m\u00e1quina.<br \/>\n10.3.5 Especificando uma exce\u00e7\u00e3o<br \/>\nMuitos par\u00e2metros (como o endere\u00e7o de origem\/destino, protocolo, porta, mensagens ICMP,<br \/>\nfragmentos, etc) podem ser precedidos pelo sinal &#8220;!&#8221; que significa exce\u00e7\u00e3o. Por exemplo:<br \/>\niptables -t filter -A INPUT ! -s 200.200.200.10 -j DROP<br \/>\nDiz para rejeitar todos os pacotes EXCETO os que vem do endere\u00e7o 200.200.200.10.<br \/>\niptables -A INPUT -p tcp ! &#8211;syn -s 200.200.200.10 ! -i eth0 -j DROP<br \/>\nDiz para bloquear todos os pacotes EXCETO os que iniciam conex\u00f5es (! &#8211;syn), EXCETO para<br \/>\npacotes vindos pela interface eth0 (! -i eth0).<br \/>\niptables -A INPUT -s 200.200.200.10 ! -p tcp -j DROP<br \/>\nBloqueia todos os pacotes vindos de 200.200.200.10, EXCETO os do protocolo tcp.<br \/>\n10.3.6 Especificando um alvo<br \/>\nO alvo (-j) \u00e9 o destino que um pacote ter\u00e1 quando conferir com as condi\u00e7\u00f5es de uma regra, um alvo<br \/>\npode dizer para bloquear a passagem do pacote (-j DROP), aceitar a passagem do pacote (-j<br \/>\nACCEPT), registrar o pacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT),<br \/>\nredirecionar um pacote -j REDIRECT, retornar ao chain anterior sem completar o processamento no<br \/>\nchain atual (-j RETURN), passar para processamento de programas externos (-j QUEUE), fazer<br \/>\nsource nat (-j SNAT), destination nat (-j DNAT), etc. Podem existir mais alvos, pois o iptables \u00e9<br \/>\nmodulariz\u00e1vel, e m\u00f3dulos que acrescentam mais fun\u00e7\u00f5es podem ser carregados em adi\u00e7\u00e3o aos j\u00e1<br \/>\nexistentes no kernel.<br \/>\nNos exemplos anteriores vimos o uso de diversos alvos como o DROP e o ACCEPT. Apenas farei<br \/>\numa breve refer\u00eancia sobre os alvos mais usados em opera\u00e7\u00f5es comuns dos chains. Os alvos<br \/>\nREDIRECT, SNAT e DNAT ser\u00e3o explicados em uma se\u00e7\u00e3o seguinte:<br \/>\nACCEPT<br \/>\nO pacote \u00e9 ACEITO e o processamento das regras daquele chains \u00e9 conclu\u00eddo. Pode ser usado<br \/>\ncomo alvo em todos os chains de todas as tabelas do iptables e tamb\u00e9m pode ser<br \/>\nespecificado no policiamento padr\u00e3o das regras do firewall (veja Especificando o<br \/>\npoliciamento padr\u00e3o de um chain &#8211; P, Se\u00e7\u00e3o 10.2.12).<br \/>\nDROP<br \/>\nRejeita o pacote e o processamento das regras daquele chain \u00e9 conclu\u00eddo. Pode ser usado<br \/>\ncomo alvo em todos os chains de todas as tabelas do iptables e tamb\u00e9m pode ser<br \/>\nespecificado no policiamento padr\u00e3o das regras do firewall (veja Especificando o<br \/>\npoliciamento padr\u00e3o de um chain &#8211; P, Se\u00e7\u00e3o 10.2.12).<br \/>\nREJECT<br \/>\nEste \u00e9 um m\u00f3dulo opcional que faz a mesma fun\u00e7\u00e3o do alvo DROP com a diferen\u00e7a de que<br \/>\numa mensagem ICMP do tipo &#8220;icmp-port-unreachable&#8221; (TCP\/UDP) ou &#8220;host-unreachable&#8221;<br \/>\n(ICMP) \u00e9 retornada para a m\u00e1quina de origem. Pode ser usado como alvo somente nos chains<br \/>\nda tabela (n\u00e3o como policiamento padr\u00e3o).<br \/>\nLOG<br \/>\nEste m\u00f3dulo envia uma mensagem ao syslog caso a regra confira, o processamento<br \/>\ncontinua normalmente para a pr\u00f3xima regra (o pacote n\u00e3o \u00e9 nem considerado ACEITO ou<br \/>\nREJEITADO).<br \/>\nRETURN<br \/>\nRetorna o processamento do chain anterior sem processar o resto do chain atual.<br \/>\nQUEUE<br \/>\nPassa o processamento para um programa a n\u00edvel de usu\u00e1rio.<br \/>\n10.3.6.1 Alvo REJECT<br \/>\nPara ser usado, o m\u00f3dulo ipt_REJECT deve ser compilado no kernel ou como m\u00f3dulo. Este alvo<br \/>\nrejeita o pacote (como o DROP) e envia uma mensagem ICMP do tipo &#8220;icmp-port-unreachable&#8221;<br \/>\ncomo padr\u00e3o para a m\u00e1quina de origem.<br \/>\n\u00c9 um alvo interessante para bloqueio de portas TCP, pois em alguns casos da a impress\u00e3o que a<br \/>\nm\u00e1quina n\u00e3o disp\u00f5e de um sistema de firewall (o alvo DROP causa uma parada de muito tempo em<br \/>\nalguns portscanners e tentativas de conex\u00e3o de servi\u00e7os, revelando imediatamente o uso de um<br \/>\nsistema de firewall pela m\u00e1quina). O alvo REJECT vem dos tempos do ipchains e somente pode ser<br \/>\nusado na tabela filter. Quando um pacote confere, ele \u00e9 rejeitado com a mensagem ICMP do tipo<br \/>\n&#8220;port unreachable&#8221;, \u00e9 poss\u00edvel especificar outro tipo de mensagem ICMP com a op\u00e7\u00e3o &#8211;reject-with<br \/>\ntipo_icmp.<br \/>\nOBS: REJECT pode ser usado somente como alvo na tabela filter e n\u00e3o \u00e9 poss\u00edvel especifica-lo<br \/>\ncomo policiamento padr\u00e3o do chain filter (como acontecia no ipchains. Uma forma alternativa \u00e9<br \/>\ninserir como \u00faltima regra uma que pegue todos os pacotes restantes daquele chain e tenha como<br \/>\nalvo REJECT (como iptables -A INPUT -j REJECT), desta forma ele nunca atingir\u00e1 o<br \/>\npoliciamento padr\u00e3o do chain.<br \/>\n# Rejeita pacotes vindos de 200.200.200.1 pela interface ppp0:<br \/>\niptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT<br \/>\n10.3.6.2 Especificando LOG como alvo<br \/>\nEste alvo \u00e9 usado para registrar a passagem de pacotes no syslog do sistema. \u00c9 um alvo muito<br \/>\ninteressante para ser usado para regras que bloqueiam determinados tr\u00e1fegos no sistema (para que o<br \/>\nadministrador tome conhecimento sobre tais tentativas), para regras de fim de chain (quando voc\u00ea<br \/>\ntem um grande conjunto de regras em um firewall restritivo e n\u00e3o sabe onde suas regras est\u00e3o sendo<br \/>\nbloqueadas), para satisfazer sua curiosidade, etc.<br \/>\n# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela<br \/>\ninterface ppp0<br \/>\niptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG<br \/>\n# Para efetuar o bloqueio<br \/>\niptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT<br \/>\nNote que no exemplo anterior a regra que registra o pacote (-j LOG) deve aparecer antes da regra<br \/>\nque REJEITA (-j REJECT), caso contr\u00e1rio a regra de LOG nunca funcionar\u00e1. A regra que REJEITA<br \/>\npoderia tamb\u00e9m ser trocada por uma regra que ACEITA, caso queira registrar um pacote que deve<br \/>\nser aceito (se o policiamento padr\u00e3o do seu firewall for restritivo (-P DROP). A \u00fanica coisa que<br \/>\nmuda nas regras de log \u00e9 o alvo da regra, isto facilita a implementa\u00e7\u00e3o de grandes conjuntos de<br \/>\nregras de firewall.<br \/>\nA regra acima mostrar\u00e1 a seguinte sa\u00edda no syslog do sistema:<br \/>\nAug 25 10:08:01 debian kernel: IN=ppp0 OUT=<br \/>\nMAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1<br \/>\nDST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031<br \/>\nDPT=53 LEN=41<br \/>\nOs campos possuem o seguinte significado:<br \/>\nAug 25 10:08:01<br \/>\nM\u00eas, dia e hora do registro do pacote.<br \/>\ndebian<br \/>\nNome do computador que registrou o pacote.<br \/>\nkernel:<br \/>\nDaemon que registrou a mensagem, no caso o iptables faz parte do pr\u00f3prio kernel.<br \/>\nIN=ppp0<br \/>\nEspecifica a interface de entrada (de onde o pacote veio).<br \/>\nOUT=<br \/>\nEspecifica a interface de sa\u00edda (para onde o pacote foi).<br \/>\nMAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00<br \/>\nEndere\u00e7o mac da interface de rede (pode ser obtido com arp interface).<br \/>\nSRC=200.200.200.1<br \/>\nEndere\u00e7o de origem do pacote.<br \/>\nDST=200.210.10.10<br \/>\nEndere\u00e7o de destino do pacote.<br \/>\nSEQ=234234343<br \/>\nN\u00famero de seq\u00fc\u00eancia da recep\u00e7\u00e3o. \u00c9 ativado com a op\u00e7\u00e3o &#8211;log-tcp-sequence.<br \/>\nLEN=61<br \/>\nTamanho em bytes do pacote IP.<br \/>\nTOS=0x00<br \/>\nPrioridade do cabe\u00e7alho TOS (Tipo). Veja a se\u00e7\u00e3o Especificando o tipo de servi\u00e7o, Se\u00e7\u00e3o<br \/>\n10.5.1 para mais detalhes.<br \/>\nPREC=0x00<br \/>\nPrioridade do cabe\u00e7alho TOS (Preced\u00eancia). Veja a se\u00e7\u00e3o Especificando o tipo de servi\u00e7o,<br \/>\nSe\u00e7\u00e3o 10.5.1 para mais detalhes.<br \/>\nTTL=64<br \/>\nTempo de vida do pacote. No exemplo, 64 roteadores (hops).<br \/>\nID=0<br \/>\nIdentifica\u00e7\u00e3o \u00fanica destes datagrama. Esta identifica\u00e7\u00e3o tamb\u00e9m \u00e9 usada pelos fragmentos<br \/>\nseguintes deste pacote.<br \/>\nDF<br \/>\nOp\u00e7\u00e3o &#8220;Don&#8217;t fragment&#8221; (n\u00e3o fragmentar) do pacote. Usada quando o pacote \u00e9 pequeno o<br \/>\nbastante para n\u00e3o precisar ser fragmentado.<br \/>\nMF<br \/>\nOp\u00e7\u00e3o &#8220;More Fragments&#8221; (mais fragmentos) est\u00e3o para ser recebidos.<br \/>\nFRAG=100<br \/>\nTamanho do fragmento especificado em pacotes de 8 bits. No exemplo acima, o pacote tem o<br \/>\ntamanho de 800 bytes (100*8).<br \/>\nPROTO=UDP<br \/>\nNome do protocolo. Pode ser TCP, UDP ou ICMP<br \/>\nSPT=1031<br \/>\nPorta de origem da requisi\u00e7\u00e3o.<br \/>\nDPT=53<br \/>\nPorta de destino da requisi\u00e7\u00e3o.<br \/>\nLEN=41<br \/>\nTamanho do pacote.<br \/>\nO log acima mostra uma consulta DNS (porta destino 53) para nossa m\u00e1quina (INPUT) de<br \/>\n200.200.200.1 para 200.210.10.10.<br \/>\nO problema \u00e9 que em um grande n\u00famero de regras ser\u00e1 dif\u00edcil saber qual regra conferiu (pois<br \/>\nter\u00edamos que analisar o endere\u00e7o\/porta origem\/destino) e o destino do pacote (se ele foi ACEITO ou<br \/>\nBLOQUEADO) pois voc\u00ea pode ter regras para ambas as situa\u00e7\u00f5es. Por este motivo existem<br \/>\nalgumas op\u00e7\u00f5es \u00fateis que podemos usar com o alvo LOG:<br \/>\n&#8211;log-prefix &#8220;descri\u00e7\u00e3o&#8221;<br \/>\nPermite especificar uma descri\u00e7\u00e3o para a regra do firewall de at\u00e9 29 caracteres. Caso tiver<br \/>\nespa\u00e7os, devem ser usadas &#8220;aspas&#8221;.<br \/>\n&#8211;log-level n\u00edvel<br \/>\nEspecifica o n\u00edvel da mensagem no syslog.<br \/>\n&#8211;log-tcp-options<br \/>\nRegistra campos do cabe\u00e7alho TCP nos logs do sistema.<br \/>\n&#8211;log-ip-options<br \/>\nRegistra campos do cabe\u00e7alho IP nos logs do sistema<br \/>\n&#8211;log-tcp-sequence<br \/>\nRegistra os n\u00fameros de seq\u00fcencia TCP. Evite ao m\u00e1ximo o uso desta op\u00e7\u00e3o, pois a seq\u00fcencia<br \/>\nde n\u00fameros TCP pode ser a chave para um seq\u00fcestro de se\u00e7\u00e3o ou IP spoofing em seu sistema<br \/>\ncaso algum usu\u00e1rio tenha acesso a estes logs. Caso utilize tcp\/ip em servidores p\u00fablicos, o uso<br \/>\ndesta op\u00e7\u00e3o ajudar\u00e1 a entender bem os ataques DoS causados por syn-flood e porque ativar os<br \/>\nSynCookies (veja Prote\u00e7\u00e3o contra syn flood, Se\u00e7\u00e3o 10.6.4).<br \/>\nOBS1:Lembre-se que estas op\u00e7\u00f5es s\u00e3o referentes ao alvo LOG e devem ser usadas ap\u00f3s este, caso<br \/>\ncontr\u00e1rio voc\u00ea ter\u00e1 um pouco de trabalho para analisar e consertar erros em suas regras do firewall.<br \/>\nOBS2:Caso esteja usando o firewall em um servidor p\u00fablico, recomendo associar um limite a regra<br \/>\nde log, pois um ataque poderia causar um DoS enchendo sua parti\u00e7\u00e3o. Leia mais sobre isso em<br \/>\nLimitando o n\u00famero de vezes que a regra confere, Se\u00e7\u00e3o 10.6.2.<br \/>\n# Complementando o exemplo anterior:<br \/>\n# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela<br \/>\ninterface ppp0<br \/>\niptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nDerrubado &#8221;<br \/>\n# Para efetuar o bloqueio<br \/>\niptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT<br \/>\nRetornar\u00e1 a seguinte mensagem no syslog:<br \/>\nAug 25 10:08:01 debian kernel: FIREWALL: Derrubado IN=ppp0 OUT=<br \/>\nMAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1<br \/>\nDST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031<br \/>\nDPT=53 LEN=41<br \/>\nAgora voc\u00ea sabe o que aconteceu com o pacote (Rejeitado). A padroniza\u00e7\u00e3o de mensagens de<br \/>\nfirewall \u00e9 tamb\u00e9m importante para a cria\u00e7\u00e3o de scripts de an\u00e1lise que poder\u00e3o fazer a an\u00e1lise dos<br \/>\nlogs do seu firewall (para cria\u00e7\u00e3o de estat\u00edsticas que podem servir como base para a cria\u00e7\u00e3o de<br \/>\nnovas regras de firewall ou elimina\u00e7\u00e3o de outras).<br \/>\nOBS: Se voc\u00ea sente falta da fun\u00e7\u00e3o &#8220;-l&#8221; do ipchains que combina o alvo e log na mesma regra<br \/>\nvoc\u00ea pode criar um alvo como o seguinte:<br \/>\niptables -N log-drop<br \/>\niptables -A log-drop -j LOG<br \/>\niptables -A log-drop -j DROP<br \/>\nE usar &#8220;log-drop&#8221; como alvo em suas regras. Mesmo assim esta solu\u00e7\u00e3o \u00e9 &#8220;limitada&#8221; em rela\u00e7\u00e3o a &#8220;-<br \/>\nl&#8221; do ipchains porque o iptables n\u00e3o inclui detalhes de qual chain bloqueou o pacote\/qual<br \/>\npacote foi bloqueado, assim \u00e9 necess\u00e1rio a especifica\u00e7\u00e3o da op\u00e7\u00e3o &#8211;log-prefix para as mensagens se<br \/>\ntornarem mais compreens\u00edveis. Esta limita\u00e7\u00e3o pode ser contornada utilizando um firewall feito em<br \/>\nlinguagem shell script, desta forma voc\u00ea ter\u00e1 um controle maior sobre o seu programa usando<br \/>\nfun\u00e7\u00f5es e integra\u00e7\u00e3o com outros utilit\u00e1rios.<br \/>\n10.3.6.3 Especificando RETURN como alvo<br \/>\nO alvo RETURN diz ao iptables interromper o processamento no chain atual e retornar o<br \/>\nprocessamento ao chain anterior. Ele \u00e9 \u00fatil quando criamos um chain que faz um determinado<br \/>\ntratamento de pacotes, por exemplo bloquear conex\u00f5es vindas da internet para portas baixas, exceto<br \/>\npara um endere\u00e7o IP espec\u00edfico. Como segue:<br \/>\n1-) iptables -t filter -A INPUT -i ppp0 -j internet<br \/>\n2-) iptables -t filter -j ACCEPT<br \/>\n3-) iptables -t filter -N internet<br \/>\n4-) iptables -t filter -A internet -s www.debian.org -p tcp &#8211;dport 80 -j<br \/>\nRETURN<br \/>\n5-) iptables -t filter -A internet -p tcp &#8211;dport 21 -j DROP<br \/>\n6-) iptables -t filter -A internet -p tcp &#8211;dport 23 -j DROP<br \/>\n7-) iptables -t filter -A internet -p tcp &#8211;dport 25 -j DROP<br \/>\n\ud83d\ude0e iptables -t filter -A internet -p tcp &#8211;dport 80 -j DROP<br \/>\nQuando um pacote com o endere\u00e7o www.debian.org tentando acessar a porta www (80) de<br \/>\nnossa m\u00e1quina atrav\u00e9s da internet (via interface ppp0), o chain n\u00famero 1 confere, ent\u00e3o o<br \/>\nprocessamento continua no chain n\u00famero 4, o chain n\u00famero 4 confere ent\u00e3o o processamento volta<br \/>\npara a regra n\u00famero 2, que diz para aceitar o pacote.<br \/>\nAgora se um pacote vem com o endere\u00e7o www.dominio.com.br tentando acessar a porta www<br \/>\n*80) de nossa m\u00e1quina atrav\u00e9s da internet (via interface ppp0), o chain n\u00famero 1 confere, ent\u00e3o o<br \/>\nprocessamento continua no chain n\u00famero 4, que n\u00e3o confere. O mesmo acontece com os chains 5, 6<br \/>\ne 7. O chain n\u00famero 8 confere, ent\u00e3o o acesso \u00e9 bloqueado.<br \/>\nComo pode notou, o alvo RETURN facilita bastante a constru\u00e7\u00e3o das regras do seu firewall, caso<br \/>\nexistam m\u00e1quinas\/redes que sejam exce\u00e7\u00f5es as suas regras. Se ela n\u00e3o existisse, seria necess\u00e1rio<br \/>\nespecificar diversas op\u00e7\u00f5es -s, -d, etc para poder garantir o acesso livre a determinadas m\u00e1quinas.<br \/>\n10.3.7 Salvando e Restaurando regras<br \/>\nAs regras que voc\u00ea est\u00e1 trabalhosamente criando e testando manualmente enquanto manipula o<br \/>\niptables podem ser salvas de 2 formas; uma delas \u00e9 escrevendo um shell script que tenha todos<br \/>\nos comandos, um por linha. Isto \u00e9 recomendado quando tem um firewall grande e que exige uma<br \/>\nboa padroniza\u00e7\u00e3o de regras, bem como sua leitura, coment\u00e1rios. O script shell tamb\u00e9m permite o<br \/>\nuso de fun\u00e7\u00f5es presente no interpretador de comando, portanto se voc\u00ea \u00e9 uma pessoa que gosta de<br \/>\ninteragir com as fun\u00e7\u00f5es do shell e deixar as coisas mais flex\u00edveis, prefira esta op\u00e7\u00e3o.<br \/>\nA outra forma \u00e9 usando as ferramentas iptables-save e iptables-restore baseada na<br \/>\nid\u00e9ia do ipchains-save e ipchains-restore. O iptables-save deve ser usado<br \/>\nsempre que modificar regras no firewall iptables da seguinte forma:<br \/>\niptables-save &gt;\/dir\/iptables-regras<br \/>\nUma das vantagens do uso do iptables-save \u00e9 ele tamb\u00e9m salvar os contadores de chains, ou<br \/>\nseja, a quantidade de pacotes que conferiram com a regra. Isto tamb\u00e9m pode ser feito com algumas<br \/>\nregras adicionais em seu shell script, caso tenha interesse nesses contadores para estat\u00edsticas ou<br \/>\noutros tipos de relat\u00f3rios.<br \/>\nPara restaurar as regras salvas, utilize o comando:<br \/>\niptables-restore &lt;\/dir\/iptables-regras<br \/>\n10.4 A tabela nat (Network Address Translation) &#8211; fazendo nat<br \/>\nA tabela nat serve para controlar a tradu\u00e7\u00e3o dos endere\u00e7os que atravessam o c\u00f3digo de roteamento<br \/>\nda m\u00e1quina Linux. Existem 3 chains na tabela nat: PREROUTING, OUTPUT e POSTROUTING<br \/>\n(veja O que s\u00e3o tabelas?, Se\u00e7\u00e3o 10.1.14 para maiores detalhes).<br \/>\nA tradu\u00e7\u00e3o de endere\u00e7os tem in\u00fameras utilidades, uma delas \u00e9 o Masquerading, onde m\u00e1quinas de<br \/>\numa rede interna podem acessar a Internet atrav\u00e9s de uma m\u00e1quina Linux, redirecionamento de<br \/>\nporta, proxy transparente, etc. Esta se\u00e7\u00e3o abordar\u00e1 os tipos de NAT, exemplos de como criar<br \/>\nrapidamente uma conex\u00e3o IP masquerading e entender como a tradu\u00e7\u00e3o de endere\u00e7os funciona no<br \/>\niptables.<br \/>\nSe sua inten\u00e7\u00e3o \u00e9 ligar sua rede a Internet existem duas op\u00e7\u00f5es:<br \/>\n\u2022 Voc\u00ea possui uma conex\u00e3o que lhe oferece um endere\u00e7o IP din\u00e2mico (a cada conex\u00e3o \u00e9 dado<br \/>\num endere\u00e7o IP &#8211; como uma conex\u00e3o PPP) ent\u00e3o o IP masquerading \u00e9 o que precisa (veja<br \/>\nFazendo IP masquerading (para os apressados), Se\u00e7\u00e3o 10.4.2 ou Fazendo IP Masquerading,<br \/>\nSe\u00e7\u00e3o 10.4.3.1).<br \/>\n\u2022 Voc\u00ea tem uma conex\u00e3o que lhe oferece um endere\u00e7o IP permanente (ADSL, por exemplo)<br \/>\nent\u00e3o o SNAT \u00e9 o que precisa (veja Fazendo SNAT, Se\u00e7\u00e3o 10.4.3).<br \/>\n10.4.1 Criando um novo chain na tabela NAT<br \/>\nO procedimento para cria\u00e7\u00e3o de um novo chain nesta tabela \u00e9 o mesmo descrito em Criando um<br \/>\nnovo chain &#8211; N, Se\u00e7\u00e3o 10.2.6 ser\u00e1 necess\u00e1rio somente especificar a tabela nat (-t nat) para que o<br \/>\nnovo chain n\u00e3o seja criado na tabela padr\u00e3o (-t filter).<br \/>\niptables -t nat -N intra-inter<br \/>\nQue criar\u00e1 o chain chamado intra-inter na tabela nat. Para inserir regras neste chain ser\u00e1 necess\u00e1rio<br \/>\nespecificar a op\u00e7\u00e3o &#8220;-t nat&#8221;.<br \/>\n10.4.2 Fazendo IP masquerading (para os apressados)<br \/>\nVoc\u00ea precisar\u00e1 de um kernel com suporte ao iptables (veja Habilitando o suporte ao iptables no<br \/>\nkernel, Se\u00e7\u00e3o 10.1.15 e ip_forward e ent\u00e3o digitar os dois comandos abaixo para habilitar o<br \/>\nmasquerading para todas as m\u00e1quinas da rede 192.168.1.*:<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -j MASQUERADE<br \/>\necho &#8220;1&#8221; &gt;\/proc\/sys\/net\/ipv4\/ip_forward<br \/>\nA configura\u00e7\u00e3o do servidor Linux est\u00e1 completa, agora os clientes da rede precisar\u00e3o ser<br \/>\nconfigurados para usar o endere\u00e7o IP do servidor Linux como gateway. \u00c9 recomend\u00e1vel instalar<br \/>\num servidor proxy e DNS na m\u00e1quina Linux para acelerar o desempenho das<br \/>\nrequisi\u00e7\u00f5es\/resolu\u00e7\u00e3o de nomes das m\u00e1quinas em rede. A utiliza\u00e7\u00e3o de bits TOS tamb\u00e9m pode<br \/>\ntrazer um grande aumento de velocidade para os diferentes servi\u00e7os da rede (veja Especificando o<br \/>\ntipo de servi\u00e7o, Se\u00e7\u00e3o 10.5.1).<br \/>\n10.4.3 Fazendo SNAT<br \/>\nSNAT (source nat &#8211; nat no endere\u00e7o de origem) consiste em modificar o endere\u00e7o de origem das<br \/>\nm\u00e1quinas clientes antes dos pacotes serem enviados. A m\u00e1quina roteadora \u00e9 inteligente o bastante<br \/>\npara lembrar dos pacotes modificados e reescrever os endere\u00e7os assim que obter a resposta da<br \/>\nm\u00e1quina de destino, direcionando os pacotes ao destino correto. Toda opera\u00e7\u00e3o de SNAT \u00e9 feita no<br \/>\nchain POSTROUTING.<br \/>\n\u00c9 permitido especificar endere\u00e7os de origem\/destino, protocolos, portas de origem\/destino, interface<br \/>\nde entrada\/sa\u00edda (dependendo do chain), alvos, etc. \u00c9 desnecess\u00e1rio especificar fragmentos na<br \/>\ntabela nat, pois eles ser\u00e3o remontados antes de entrar no c\u00f3digo de roteamento.<br \/>\nO SNAT \u00e9 a solu\u00e7\u00e3o quando voc\u00ea tem acesso a internet atrav\u00e9s de um \u00fanico IP e deseja fazer que<br \/>\nsua rede tenha acesso a Internet atrav\u00e9s da m\u00e1quina Linux. Nenhuma m\u00e1quina da Internet poder\u00e1<br \/>\nter acesso direto as m\u00e1quinas de sua rede interna via SNAT.<br \/>\nOBS: A observa\u00e7\u00e3o acima n\u00e3o leva em conta o controle de acesso externo configurado na m\u00e1quina<br \/>\nque estiver configurando o iptables, uma configura\u00e7\u00e3o mau realizada pode expor sua m\u00e1quina a<br \/>\nacessos externos indesejados e comprometer sua rede interna caso algu\u00e9m consiga acesso direto ao<br \/>\nservidor.<br \/>\n\u00c9 necess\u00e1rio especificar SNAT como alvo (-j SNAT) quando desejar que as m\u00e1quinas de sua rede<br \/>\ninterna tenha acesso a Internet atrav\u00e9s do IP fixo da m\u00e1quina Linux (para conex\u00f5es intermitentes<br \/>\ncomo PPP, veja Fazendo IP Masquerading, Se\u00e7\u00e3o 10.4.3.1). O par\u00e2metro &#8211;to IP:portas deve<br \/>\nser usado ap\u00f3s o alvo SNAT. Ele serve para especificar um endere\u00e7o IP, faixa de endere\u00e7os e<br \/>\nopcionalmente uma porta ou faixa de portas que ser\u00e1 substitu\u00edda. Toda a opera\u00e7\u00e3o de SNAT \u00e9<br \/>\nrealizada atrav\u00e9s do chain POSTROUTING:<br \/>\n# Modifica o endere\u00e7o IP dos pacotes vindos da m\u00e1quina 192.168.1.2 da rede<br \/>\ninterna<br \/>\n# que tem como destino a interface eth1 para 200.200.217.40 (que \u00e9 o nosso<br \/>\nendere\u00e7o<br \/>\n# IP da interface ligada a Internet).<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT &#8211;to<br \/>\n200.200.217.40<br \/>\nOs pacotes indo para a Internet (nossa conex\u00e3o \u00e9 feita via eth1, nossa interface externa) vindo do<br \/>\nendere\u00e7o 192.168.1.2, s\u00e3o substitu\u00eddos por 200.241.200.40 e enviados para fora. Quando a resposta<br \/>\na requisi\u00e7\u00e3o \u00e9 retornada, a m\u00e1quina com iptables recebe os pacotes e faz a opera\u00e7\u00e3o inversa,<br \/>\nmodificando o endere\u00e7o 200.241.200.40 novamente para 192.168.1.2 e enviando a resposta a<br \/>\nm\u00e1quina de nossa rede interna. Ap\u00f3s definir suas regras de NAT, execute o comando echo &#8220;1&#8221;<br \/>\n&gt;\/proc\/sys\/net\/ipv4\/ip_forward para habilitar o suporte a redirecionamento de pacotes<br \/>\nno kernel.<br \/>\nTamb\u00e9m \u00e9 poss\u00edvel especificar faixas de endere\u00e7os e portas que ser\u00e3o substitu\u00eddas:<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o eth0 -j SNAT &#8211;to<br \/>\n200.200.217.40-200.200.217.50<br \/>\nModifica o endere\u00e7o IP de origem de todas as m\u00e1quinas da rede 192.168.1.0\/24 que tem o destino a<br \/>\ninterface eth0 para 200.241.200.40 a 200.241.200.50. O endere\u00e7o IP selecionado \u00e9 escolhido de<br \/>\nacordo com o \u00faltimo IP alocado.<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o eth0 -j SNAT &#8211;to<br \/>\n200.200.217.40-200.200.217.50:1-1023<br \/>\nId\u00eantico ao anterior, mas faz somente substitui\u00e7\u00f5es na faixa de portas de origem de 1 a 1023.<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o eth0 -j SNAT &#8211;to<br \/>\n200.200.217.40-200.200.217.50 &#8211;to 200.200.217.70-200.200.217.73<br \/>\nFaz o mapeamento para a faixa de portas 200.200.217.40 a 200.200.217.50 e de 200.200.217.70 a<br \/>\n200.200.217.73.<br \/>\nOBS1: Se por algum motivo n\u00e3o for poss\u00edvel mapear uma conex\u00e3o NAT, ela ser\u00e1 derrubada.<br \/>\nOBS2: Tenha certeza que as respostas podem chegar at\u00e9 a m\u00e1quina que fez o NAT. Se estiver<br \/>\nfazendo SNAT em um endere\u00e7o livre em sua rede (como 200.200.217.73).<br \/>\nOBS3: Como notou acima, o SNAT \u00e9 usado quando temos uma conex\u00e3o externa com um ou mais<br \/>\nIP&#8217;s fixos. O Masquerading \u00e9 uma forma especial de SNAT usada para funcionar em conex\u00f5es que<br \/>\nrecebem endere\u00e7os IP aleat\u00f3rios (PPP).<br \/>\nOBS4: N\u00e3o se esque\u00e7a de habilitar o redirecionamento de pacotes ap\u00f3s fazer suas regra de NAT<br \/>\ncom o comando: echo &#8220;1&#8221; &gt;\/proc\/sys\/net\/ipv4\/ip_forward, caso contr\u00e1rio o<br \/>\nredirecionamento de pacotes n\u00e3o funcionar\u00e1.<br \/>\n10.4.3.1 Fazendo IP Masquerading<br \/>\nO IP Masquerading \u00e9 um tipo especial de SNAT usado para conectar a sua rede interna a internet<br \/>\nquando voc\u00ea recebe um IP din\u00e2mico de seu provedor (como em conex\u00f5es ppp). Todas as opera\u00e7\u00f5es<br \/>\nde IP Masquerading s\u00e3o realizadas no chain POSTROUTING. Se voc\u00ea tem um IP fixo, deve ler<br \/>\nFazendo SNAT, Se\u00e7\u00e3o 10.4.3.<br \/>\nPara fazer IP Masquerading de uma m\u00e1quina com o IP 192.168.1.2 para ter acesso a Internet, use o<br \/>\ncomando:<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.2\/32 -o ppp0 -j MASQUERADE<br \/>\nA diferen\u00e7a \u00e9 que o alvo \u00e9 -j MASQUERADE. O comando acima faz IP Masquerading de todo o<br \/>\ntr\u00e1fego de 192.168.1.2 indo para a interface ppp0: O endere\u00e7o IP dos pacotes vindos de 192.168.1.2<br \/>\ns\u00e3o substitu\u00eddos pelo IP oferecido pelo seu provedor de acesso no momento da conex\u00e3o, quando a<br \/>\nresposta \u00e9 retornada a opera\u00e7\u00e3o inversa \u00e9 realizada para garantir que a resposta chegue ao destino.<br \/>\nNenhuma m\u00e1quina da internet poder\u00e1 ter acesso direto a sua m\u00e1quina conectava via Masquerading.<br \/>\nPara fazer o IP Masquerading de todas as m\u00e1quinas da rede 192.168.1.*:<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp0 -j MASQUERADE<br \/>\nAp\u00f3s definir a regra para fazer Masquerading (SNAT), execute o comando echo &#8220;1&#8221;<br \/>\n&gt;\/proc\/sys\/net\/ipv4\/ip_forward para habilitar o suporte a redirecionamento de pacotes<br \/>\nno kernel.<br \/>\n10.4.4 Fazendo DNAT<br \/>\nDNAT (Destination nat &#8211; nat no endere\u00e7o de destino) consiste em modificar o endere\u00e7o de destino<br \/>\ndas m\u00e1quinas clientes. O destination nat \u00e9 muito usado para fazer redirecionamento de pacotes,<br \/>\nproxyes transparentes e balanceamento de carga.<br \/>\nToda opera\u00e7\u00e3o de DNAT \u00e9 feita no chain PREROUTING. As demais op\u00e7\u00f5es e observa\u00e7\u00f5es do<br \/>\nSNAT s\u00e3o tamb\u00e9m v\u00e1lidas para DNAT (com exce\u00e7\u00e3o que somente \u00e9 permitido especificar a<br \/>\ninterface de origem no chain PREROUTING).<br \/>\n# Modifica o endere\u00e7o IP destino dos pacotes de 200.200.217.40 vindo da<br \/>\ninterface eth0<br \/>\n# para 192.168.1.2.<br \/>\niptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT &#8211;to<br \/>\n192.168.1.2<br \/>\nTamb\u00e9m \u00e9 poss\u00edvel especificar faixas de endere\u00e7os e portas que ser\u00e3o substitu\u00eddas no DNAT:<br \/>\niptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0\/24 -j DNAT &#8211;to<br \/>\n200.200.217.40-200.200.217.50<br \/>\nModifica o endere\u00e7o IP de destino do tr\u00e1fego vindos da interface 192.168.1.0\/24 para um IP de<br \/>\n200.241.200.40 a 200.241.200.50. Este \u00e9 um excelente m\u00e9todo para fazer o balanceamento de carga<br \/>\nentre servidores. O endere\u00e7o IP selecionado \u00e9 escolhido de acordo com o \u00faltimo IP alocado.<br \/>\niptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0\/24 -j DNAT &#8211;to<br \/>\n200.200.217.40-200.200.217.50:1024:5000<br \/>\nId\u00eantico ao anterior, mas faz somente substitui\u00e7\u00f5es na faixa de portas de destino de 1024 a 5000. A<br \/>\nopera\u00e7\u00e3o acima \u00e9 a mesma realizada pelo ipmasqadm dos kernels da s\u00e9rie 2.2.<br \/>\nOBS1: Se por algum motivo n\u00e3o for poss\u00edvel mapear uma conex\u00e3o NAT, ela ser\u00e1 derrubada.<br \/>\nOBS2: N\u00e3o se esque\u00e7a de conferir se o ip_forward est\u00e1 ajustado para 1: echo &#8220;1&#8221;<br \/>\n&gt;\/proc\/sys\/net\/ipv4\/ip_forward.<br \/>\n10.4.4.1 Redirecionamento de portas<br \/>\nO redirecionamento de portas permite a voc\u00ea repassar conex\u00f5es com destino a uma porta para outra<br \/>\nporta na mesma m\u00e1quina. O alvo REDIRECT \u00e9 usado para fazer esta opera\u00e7\u00e3o, junto com o<br \/>\nargumento &#8211;to-port especificando a porta que ser\u00e1 redirecionada. Este \u00e9 o m\u00e9todo DNAT espec\u00edfico<br \/>\npara se para fazer proxy transparente (para redirecionamento de endere\u00e7os\/portas, veja Fazendo<br \/>\nDNAT, Se\u00e7\u00e3o 10.4.4). Todas as opera\u00e7\u00f5es de redirecionamento de portas \u00e9 realizada no chain<br \/>\nPREROUTING e OUTPUT da tabela nat.<br \/>\niptables -t nat -A PREROUTING -i eth0 -p tcp &#8211;dport 80 -j REDIRECT &#8211;toport<br \/>\n81<br \/>\nRedireciona as conex\u00f5es indo para a porta 80 para a porta 81 (rodando squid) no firewall.<br \/>\nATEN\u00c7\u00c3O: O squid possui suporte a proxy transparente, e poder\u00e1 atender as requisi\u00e7\u00f5es acima<br \/>\nda regra acima.<br \/>\n10.4.5 Monitorando conex\u00f5es feitas na tabela nat<br \/>\nUse o comando cat \/proc\/net\/ip_conntrack para listar todas as conex\u00f5es atuais tratadas<br \/>\npelo m\u00f3dulo nat.<br \/>\n10.5 A tabela mangle<br \/>\nA tabela mangle serve para especificar a\u00e7\u00f5es especiais para o tratamento do tr\u00e1fego que atravessa os<br \/>\nchains. Nesta tabela existem cincos chains: PREROUTING, POSTROUTING, INPUT, OUTPUT e<br \/>\nFORWARD (veja O que s\u00e3o tabelas?, Se\u00e7\u00e3o 10.1.14 para maiores detalhes).<br \/>\nEm geral, cada um deste chain \u00e9 processado antes do chain correspondente na tabela filter e nat para<br \/>\ndefinir op\u00e7\u00f5es especiais para o tr\u00e1fego (por exemplo, o chain PREROUTING da tabela mangle \u00e9<br \/>\nprocessado antes do PREROUTING da tabela nat). O chain OUTPUT da tablea mangle corresponde<br \/>\nao OUTPUT da tabela nat. Op\u00e7\u00f5es como o Tipo de Servi\u00e7o (TOS) \u00e9 especificado nesta tabela para<br \/>\nclassificar e aumentar consideravelmente a velocidade de tr\u00e1fego considerados em tempo real.<br \/>\nMesmo ap\u00f3s o tr\u00e1fego ser estabelecido, os chains da tabela mangle continuam ativos para garantir<br \/>\nque as op\u00e7\u00f5es especiais relacionadas com a conex\u00e3o continuem fazendo efeito (veja os exemplos de<br \/>\nCaminho percorrido pelos pacotes nas tabelas e chains, Se\u00e7\u00e3o 10.7).<br \/>\n10.5.1 Especificando o tipo de servi\u00e7o<br \/>\nO tipo de servi\u00e7o \u00e9 um campo existente no cabe\u00e7alho de pacotes do protocolo ipv4 que tem a<br \/>\nfun\u00e7\u00e3o especificar qual \u00e9 a prioridade daquele pacote. A prioridade \u00e9 definida usando o algoritmo<br \/>\nFIFO do pr\u00f3prio kernel, sendo uma das alternativas de controle\/prioriza\u00e7\u00e3o de tr\u00e1fego das mais<br \/>\nsimples e r\u00e1pidas.<br \/>\nUma das vantagens da utiliza\u00e7\u00e3o do tipo de servi\u00e7o \u00e9 dar prioridade ao tr\u00e1fego de pacotes<br \/>\ninterativos (como os do ICQ, IRC, servidores de chat), etc. Com o TOS especificado, mesmo que<br \/>\nesteja fazendo um download consumindo toda a banda de sua interface de rede, o tr\u00e1fego com<br \/>\nprioridade interativa ser\u00e1 enviado antes, aumentando a efici\u00eancia do uso de servi\u00e7os em sua<br \/>\nm\u00e1quina.<br \/>\nEm testes realizados em minha conex\u00e3o de 56K, o uso de regras TOS aumentou bastante o<br \/>\ndesempenho em tr\u00e1fego interativo (em torno de 300%), durante o uso total da banda da interface<br \/>\nppp em grande consumo de banda.<br \/>\nUsamos o alvo TOS (-j TOS) para especificar a modifica\u00e7\u00e3o do tipo de servi\u00e7o nos pacotes que<br \/>\natravessam as regras do firewall, acompanhada do argumento &#8211;set-tos TOS que define a nova<br \/>\nprioridade dos pacotes. Os valores aceitos s\u00e3o os seguintes:<br \/>\nEspera M\u00ednima<br \/>\n\u00c9 especificado atrav\u00e9s de Minimize-Delay, 16 ou 0x10<br \/>\nM\u00e1ximo Processamento<br \/>\n\u00c9 especificado atrav\u00e9s de Maximize-Throughput, 8, ou 0x08.<br \/>\nM\u00e1xima Confian\u00e7a<br \/>\n\u00c9 especificado atrav\u00e9s de Maximize-Reliability, 4 ou 0x04.<br \/>\nCusto m\u00ednimo<br \/>\nEspecificado atrav\u00e9s de Minimize-Cost, 2 ou 0x02.<br \/>\nPrioridade Normal<br \/>\nEspecificado atrav\u00e9s de Normal-Service, 0 ou 0x00.<br \/>\nOs pacotes vem por padr\u00e3o com o valor TOS ajustado como prioridade normal (bits tos ajustados<br \/>\npara 0x00). O tipo M\u00ednima Espera \u00e9 o de maior prioridade, recomendado para tr\u00e1fego interativo.<br \/>\n10.5.1.1 Especificando o TOS para tr\u00e1fego de sa\u00edda<br \/>\nEste \u00e9 o mais usado, pois prioriza o tr\u00e1fego que sai da m\u00e1quina (com destino a Internet, por<br \/>\nexemplo). Sua opera\u00e7\u00e3o \u00e9 realizada atrav\u00e9s do chain OUTPUT ou POSTROUTING.<br \/>\nPara priorizar todo o tr\u00e1fego de IRC de nossa rede interna indo para a interface ppp0:<br \/>\niptables -t mangle -A OUTPUT -o ppp0 -p tcp &#8211;dport 6666-6668 -j TOS &#8211;settos<br \/>\n16<br \/>\nO bit TOS \u00e9 ajustado para Espera m\u00ednima e ser\u00e1 enviado antes dos pacotes com prioridade normal<br \/>\npara fora. Para priorizar a transmiss\u00e3o de dados ftp saindo da rede:<br \/>\niptables -t mangle -A OUTPUT -o ppp0 -p tcp &#8211;dport 20 -j TOS &#8211;set-tos 8<br \/>\nPara priorizar o tr\u00e1fego de ICQ da rede:<br \/>\niptables -t mangle -A OUTPUT -o ppp0 -p tcp &#8211;dport 5190 -j TOS &#8211;set-tos<br \/>\n16<br \/>\nExistem muitas outras otimiza\u00e7\u00f5es que podem ser feitas, s\u00f3 depende dos requerimentos e an\u00e1lise de<br \/>\ncada servi\u00e7o da rede pelo administrador.<br \/>\nOBS: &#8211; Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servi\u00e7o modificados,<br \/>\neles n\u00e3o ser\u00e3o de qualquer forma rejeitados.<br \/>\n10.5.1.2 Especificando o TOS para o tr\u00e1fego de entrada<br \/>\nEste prioriza o tr\u00e1fego que entra da m\u00e1quina. Sua opera\u00e7\u00e3o \u00e9 realizada no chain INPUT ou<br \/>\nPREROUTING. N\u00e3o faz muito sentido o uso deste chain dentro de uma rede pequena\/m\u00e9dia, pois o<br \/>\ntr\u00e1fego que recebermos ser\u00e1 priorizado pelo chain de sa\u00edda de outras m\u00e1quinas da internet\/outras<br \/>\nredes antes de chegar a nossa (desde que elas tamb\u00e9m estejam usando TOS).<br \/>\nPara priorizar o processamento do tr\u00e1fego interativo vindo de servidores IRC para nossa rede:<br \/>\niptables -t mangle -A PREROUTING -i eth0 -p tcp &#8211;sport 6666-6668 -j TOS<br \/>\n&#8211;set-tos 0x10<br \/>\nModifica o tipo de servi\u00e7o para m\u00ednima espera de todo o tr\u00e1fego enviado por servidores de IRC<br \/>\nvindo da interface eth0.<br \/>\nOBS: &#8211; Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servi\u00e7o modificados,<br \/>\neles n\u00e3o ser\u00e3o de qualquer forma rejeitados. \\<br \/>\n10.6 Outros m\u00f3dulos do iptables<br \/>\nOs m\u00f3dulos do iptables s\u00e3o especificados com a op\u00e7\u00e3o -m m\u00f3dulo ou &#8211;match m\u00f3dulo e permitem<br \/>\nexpandir a funcionalidade do firewall atrav\u00e9s de novas confer\u00eancias e recursos de filtragem<br \/>\nadicionais, como limitar a confer\u00eancia de regras do firewall (um m\u00e9todo \u00fatil de limitar ping floods,<br \/>\nsyn floods, etc).<br \/>\n10.6.1 Conferindo de acordo com o estado da conex\u00e3o<br \/>\nEste m\u00f3dulo permite especificar regras de acordo com o estado da conex\u00e3o do pacote, isto \u00e9 feito<br \/>\natrav\u00e9s da interpreta\u00e7\u00e3o da sa\u00edda do m\u00f3dulo ip_conntrack. O par\u00e2metro &#8211;state OP\u00c7\u00d5ES deve<br \/>\nacompanhar este m\u00f3dulo. As op\u00e7\u00f5es permitidas s\u00e3o as seguintes:<br \/>\n\u2022 NEW &#8211; Confere com pacotes que criam novas conex\u00f5es<br \/>\n\u2022 ESTABLISHED &#8211; Confere com conex\u00f5es j\u00e1 estabelecidas<br \/>\n\u2022 RELATED &#8211; Confere com pacotes relacionados indiretamente a uma conex\u00e3o, como<br \/>\nmensagens de erro icmp, etc.<br \/>\n\u2022 INVALID &#8211; Confere com pacotes que n\u00e3o puderam ser identificados por algum motivo.<br \/>\nComo respostas de conex\u00f5es desconhecidas.<br \/>\nCaso seja necess\u00e1rio especificar mais de uma op\u00e7\u00f5es estas devem ser separadas por v\u00edrgulas.<br \/>\niptables -A INPUT -m state &#8211;state NEW -i ppp0 -j DROP<br \/>\nBloqueia qualquer tentativa de nova conex\u00e3o vindo da interface ppp0.<br \/>\niptables -A INPUT -m state &#8211;state NEW,INVALID -i ppp0 -j LOG<br \/>\nPermite registrar novas conex\u00f5es e pacotes inv\u00e1lidos vindos da interface ppp0.<br \/>\n10.6.2 Limitando o n\u00famero de vezes que a regra confere<br \/>\nA op\u00e7\u00e3o -m limit permite especificar o n\u00famero de vezes que uma regra conferir\u00e1 quando todas as<br \/>\noutras condi\u00e7\u00f5es forem satisfeitas. O n\u00famero padr\u00e3o de confer\u00eancia \u00e9 de 3 por hora, a n\u00e3o ser que<br \/>\nseja modificado atrav\u00e9s dos argumentos aceitos pelo limit:<br \/>\n\u2022 &#8211;limit num\/tempo &#8211; Permite especificar a taxa de confer\u00eancias do limit. O par\u00e2metro<br \/>\nnum especifica um n\u00famero e tempo pode ser<br \/>\n\u2022 s &#8211; Segundo<br \/>\n\u2022 m &#8211; Minuto<br \/>\n\u2022 h &#8211; Hora<br \/>\n\u2022 d &#8211; Dia<br \/>\nAssim uma regra como iptables -A INPUT -m limit &#8211;limit 5\/m -j<br \/>\nACCEPT permitir\u00e1 que a regra acima confira apenas 5 vezes por minuto (&#8211;limit 2\/s). Este<br \/>\nlimite pode ser facilmente adaptado para uma regra de log que confere constantemente n\u00e3o<br \/>\ncausar uma avalanche em seus logs. O valor padr\u00e3o \u00e9 3\/h.<br \/>\n\u2022 &#8211;limit-burst num &#8211; Especifica o n\u00famero inicial m\u00e1ximo de pacotes que ir\u00e3o conferir,<br \/>\neste n\u00famero \u00e9 aumentado por 1 a cada vez que o par\u00e2metro &#8211;limit acima n\u00e3o for atingido. O<br \/>\nvalor padr\u00e3o \u00e9 5.<br \/>\n10.6.3 Prote\u00e7\u00e3o contra ping da morte<br \/>\nA regra abaixo pode tomada como base para prote\u00e7\u00e3o contra ping flood:<br \/>\niptables -t filter -A ping-chain -p icmp &#8211;icmp-type echo-request -m limit<br \/>\n&#8211;limit 1\/s -j ACCEPT<br \/>\niptables -t filter -A ping-chain -j DROP<br \/>\nA regra acima limita em 1 vez por segundo (&#8211;limit 1\/s) a passagem de pings (echo requests) para a<br \/>\nm\u00e1quina Linux.<br \/>\niptables -t filter -A ping-chain -i ppp0 -p icmp &#8211;icmp-type echo-reply -m<br \/>\nlimit &#8211;limit 1\/s -j RETURN<br \/>\niptables -t filter -A ping-chain -j DROP<br \/>\nLimita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a 1 por segundo.<br \/>\nATEN\u00c7\u00c3O: O exemplo acima \u00e9 somente para a cria\u00e7\u00e3o de suas pr\u00f3prias regras com limita\u00e7\u00f5es,<br \/>\ncaso um pacote n\u00e3o confira ele ser\u00e1 bloqueado pela pr\u00f3xima regra. Se uma regra como esta for<br \/>\ncolocada no chain INPUT sem modifica\u00e7\u00f5es, ela n\u00e3o ter\u00e1 o efeito desejado, podendo colocar em<br \/>\nrisco a sua instala\u00e7\u00e3o pela falsa impress\u00e3o de seguran\u00e7a. Portanto, \u00e9 recomend\u00e1vel sempre testar as<br \/>\nmodifica\u00e7\u00f5es para ter certeza que elas tem efeito.<br \/>\n10.6.4 Prote\u00e7\u00e3o contra syn flood<br \/>\nA regra abaixo \u00e9 uma boa prote\u00e7\u00e3o para os ataques syn floods:<br \/>\niptables -t filter -A syn-chain -p tcp &#8211;syn -m limit &#8211;limit 2\/s -j ACCEPT<br \/>\niptables -t filter -A syn-chain -j DROP<br \/>\nEsta regra limita o atendimento de requisi\u00e7\u00f5es de conex\u00f5es a 2 por segundo. Outra forma de<br \/>\naumentar a seguran\u00e7a contra syn-floods \u00e9 atrav\u00e9s do pr\u00f3prio kernel ativando a op\u00e7\u00e3o &#8220;TCP<br \/>\nSynflood&#8221; na compila\u00e7\u00e3o e depois executando: echo &#8220;1&#8221;<br \/>\n&gt;\/proc\/sys\/net\/ipv4\/tcp_synflood. No entanto, utilize estas op\u00e7\u00f5es com cautela em<br \/>\nservidores que possuem um grande n\u00famero de acessos para n\u00e3o ter problemas que afetem seu<br \/>\nclientes.<br \/>\nATEN\u00c7\u00c3O: Os exemplos acima devem s\u00e3o somente exemplos para cria\u00e7\u00e3o de suas pr\u00f3prias regras<br \/>\ncom limita\u00e7\u00f5es, caso um pacote n\u00e3o confira com a regra ele ser\u00e1 bloqueado pela pr\u00f3xima regra. Se<br \/>\numa regra como esta for colocada no chain INPUT sem modifica\u00e7\u00f5es, ela n\u00e3o ter\u00e1 o efeito<br \/>\ndesejado, podendo colocar em risco a sua instala\u00e7\u00e3o pela falsa impress\u00e3o de seguran\u00e7a. Portanto, \u00e9<br \/>\nrecomend\u00e1vel sempre testar as modifica\u00e7\u00f5es para ter certeza que elas tem efeito.<br \/>\n10.6.5 Prote\u00e7\u00e3o contra IP spoofing<br \/>\nA especifica\u00e7\u00e3o de endere\u00e7os de origem\/destino junto com a interface de rede pode ser usado como<br \/>\num detector de ataques spoofing. A l\u00f3gica \u00e9 que todos os endere\u00e7os que NUNCA devem vir da<br \/>\ninterface X devem ser negados imediatamente. As regras abaixo s\u00e3o colocadas no inicio do chain<br \/>\nINPUT para detectar tais ataques:<br \/>\niptables -A INPUT -s 192.168.1.0\/24 -i ! eth0 -j DROP<br \/>\niptables -A INPUT ! -s 192.168.1.0\/24 -i eth0 -j DROP<br \/>\nA primeira regra diz para bloquear todos os endere\u00e7os da faixa de rede 192.168.1.* que N\u00c3O vem<br \/>\nda interface eth0, a segunda regra diz para bloquear todos os endere\u00e7os que n\u00e3o sejam 192.168.1.*<br \/>\nvindos da interface eth0. O s\u00edmbolo &#8220;!&#8221; serve para especificar exce\u00e7\u00f5es (veja Especificando uma<br \/>\nexce\u00e7\u00e3o, Se\u00e7\u00e3o 10.3.5. O kernel do Linux automaticamente bloqueia a passagem de pacotes que<br \/>\ndizem ser de 127.0.0.1 e n\u00e3o est\u00e1 vindo da interface loopback.<br \/>\nO m\u00e9todo preferido para controlar o ip spoofing \u00e9 atrav\u00e9s do c\u00f3digo de roteamento do kernel (a n\u00e3o<br \/>\nser que esteja usando algum tipo de roteamento de origem assim\u00e9trico necess\u00e1rio por alguns<br \/>\nprogramas especiais):<br \/>\nfor i in \/proc\/sys\/net\/ipv4\/conf\/*\/rp_filter; do<br \/>\necho 1 &gt;$i<br \/>\ndone<br \/>\nDesta forma qualquer endere\u00e7o dizendo ser 192.168.1.5 vindo de ppp0 ser\u00e1 imediatamente<br \/>\nrejeitado. Uma checagem adicional contra IP spoofing pode ser feita no arquivo<br \/>\n\/etc\/host.conf (veja \/etc\/host.conf, Se\u00e7\u00e3o 4.6.2.2).<br \/>\n10.6.6 Especificando m\u00faltiplas portas de origem\/destino<br \/>\nO m\u00f3dulo multiport permite que seja especificado m\u00faltiplas portas para um alvo. Podem ser<br \/>\nespecificadas at\u00e9 15 portas em um \u00fanico par\u00e2metro e basta que uma porta confira para que a regra<br \/>\nentre em a\u00e7\u00e3o, pois a compara\u00e7\u00e3o \u00e9 feita usando condi\u00e7\u00f5es &#8220;or&#8221;. O par\u00e2metro multiport deve<br \/>\nser acompanhado de um dos argumentos abaixo:<br \/>\n\u2022 &#8211;source-port [porta1, porta2&#8230;] &#8211; Faz a regra conferir se a porta de origem<br \/>\nestiver presente entre as portas especificadas.<br \/>\n\u2022 &#8211;destination-port [porta1, porta2&#8230;] &#8211; Faz a regra conferir se a porta de<br \/>\ndestino estiver presente entre as portas especificadas.<br \/>\n\u2022 &#8211;port [porta1, porta2&#8230;] &#8211; Faz a regra conferir caso a porta de origem ou<br \/>\ndestino esteja presente no par\u00e2metro.<br \/>\nEste m\u00f3dulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pacotes<br \/>\npara diversas portas diferentes.<br \/>\niptables -A INPUT -p tcp -i ppp0 -m multiport &#8211;destination-port<br \/>\n21,23,25,80,110,113,6667 -j DROP<br \/>\nBloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp), 23 (telnet), 25 (smtp), 80 (www),<br \/>\n110 (pop3), 113 (ident), 6667 (irc).<br \/>\n10.6.7 Especificando o endere\u00e7o MAC da interface<br \/>\nO m\u00f3dulo mac serve para conferir com o endere\u00e7o Ethernet dos pacotes de origem. Somente faz<br \/>\nsentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter). Aceita<br \/>\ncomo argumento a op\u00e7\u00e3o &#8211;mac-source endere\u00e7o. O s\u00edmbolo &#8220;!&#8221; pode ser usado para especificar<br \/>\numa exce\u00e7\u00e3o.<br \/>\niptables -t filter -A INPUT -m mac &#8211;mac-source 00:80:AD:B2:60:0B -j DROP<br \/>\nConfere com a m\u00e1quina com endere\u00e7o ethernet igual a 00:80:AD:B2:60:0B.<br \/>\n10.6.8 Conferindo com quem criou o pacote<br \/>\nEste m\u00f3dulo confere com o usu\u00e1rio que iniciou a conex\u00e3o. \u00c9 somente v\u00e1lido no chain OUTPUT da<br \/>\ntabela filter. Os seguintes argumentos s\u00e3o v\u00e1lidas para este m\u00f3dulo:<br \/>\n\u2022 &#8211;uid-owner UID &#8211; Confere se o pacote foi criado por um processo com o UID<br \/>\nespecificado. At\u00e9 o momento somente UID num\u00e9ricos s\u00e3o aceitos.<br \/>\n\u2022 &#8211;gid-owner GID &#8211; Confere se o pacote foi criado por um usu\u00e1rio pertencente ao grupo<br \/>\nGID. At\u00e9 o momento somente GID num\u00e9ricos s\u00e3o aceitos.<br \/>\n\u2022 &#8211;pid-owner PID &#8211; Confere se o pacote foi criado por um processo com o PID<br \/>\nespecificado.<br \/>\n\u2022 &#8211;sid-owner ID &#8211; Confere se o pacote foi criado por um processo no grupo de se\u00e7\u00e3o<br \/>\nespecificado.<br \/>\nOBS: &#8211; Lembre-se que pacotes que n\u00e3o possuem detalhes suficientes de cabe\u00e7alho nunca<br \/>\nconferir\u00e3o!<br \/>\niptables -A OUTPUT -m owner &#8211;gid-owner 100 -p udp -j DROP<br \/>\nRejeita um conex\u00f5es indo para portas UDP de pacotes criados pelo usu\u00e1rios pertencentes ao grupo<br \/>\n100.<br \/>\n10.6.9 Conferindo com o conte\u00fado do pacote<br \/>\nO m\u00f3dulo string do iptables permite a inspe\u00e7\u00e3o de conte\u00fado de um pacote e tomar uma a\u00e7\u00e3o<br \/>\nse determinado tipo de tr\u00e1fego for encontrado em um pacote. Esta t\u00e9cnica pode ser usada tanto para<br \/>\nseguran\u00e7a como para economia de banda dentro da rede. Esta op\u00e7\u00e3o *N\u00c3O* torna o iptables como<br \/>\num firewall proxy, pois o proxy tem a habilidade de inspecionar o conte\u00fado, protocolo, comandos<br \/>\ndo pacote e decidir se o seu conte\u00fado \u00e9 nocivo ou n\u00e3o. O firewall em n\u00edvel de pacotes fazendo<br \/>\ninspe\u00e7\u00e3o de conte\u00fado, chega a ser 3 a 10 vezes mais r\u00e1pido do que um proxy, assim seu uso deve<br \/>\nser analisado dependendo do tr\u00e1fego que circula pelo link e da seguran\u00e7a dos dados que trafegam<br \/>\natrav\u00e9s dele.<br \/>\nUma boa pr\u00e1tica \u00e9 aliar esta op\u00e7\u00e3o a um IDS externo usando o alvo QUEUE e deixando o trabalho<br \/>\nde espe\u00e7\u00e3o de conte\u00fado para ele. Um exemplo de restri\u00e7\u00e3o direta \u00e9 o bloqueio do envio de qualquer<br \/>\ninforma\u00e7\u00e3o confidencial sigilosa para fora da rede interna (n\u00famero de contas, tudo que conferir com<br \/>\nCPF, CGC, endere\u00e7os de e-mail, memorandos, etc). De qualquer forma, analise o tr\u00e1fego de sua<br \/>\nrede antes de querer implementar qualquer solu\u00e7\u00e3o baseada neste m\u00e9todo sob o risco de afetar<br \/>\ntr\u00e1fego leg\u00edtimo.<br \/>\nOutra utilidade eficiente \u00e9 a diminui\u00e7\u00e3o de tr\u00e1fego, pois podemos barrar programas que<br \/>\nsobrecarregam o link em uma rede com muitos usu\u00e1rios como, por exemplo, usando o Kazaa ou<br \/>\nqualquer outro programa para c\u00f3pia de arquivos via Internet. Veja alguns exemplos:<br \/>\n# Bloqueia qualquer tentativa de acesso ao programa Kazaa<br \/>\niptables -A INPUT -m string &#8211;string &#8220;X-Kazaa&#8221; -j DROP<br \/>\n# N\u00e3o permite que dados confidenciais sejam enviados para fora da empresa<br \/>\n# e registra o ocorrido.<br \/>\niptables -A OUTPUT -m string &#8211;string &#8220;conta&#8221; -j LOG &#8211;log-prefix &#8220;ALERTA:<br \/>\ndados confidencial &#8221;<br \/>\niptables -A OUTPUT -m string &#8211;string &#8220;conta&#8221; -j DROP<br \/>\n# Somente permite a passagem de pacotes que n\u00e3o cont\u00e9m &#8220;.exe&#8221; em seu<br \/>\nconte\u00fado<br \/>\niptables -A INPUT -m string &#8211;string ! &#8220;.exe&#8221; -j ACCEPT<br \/>\n10.6.10 Conferindo com o tempo de vida do pacote<br \/>\nO m\u00f3dulo ttl pode ser usado junto com as seguintes op\u00e7\u00f5es para conferir com o tempo de vida<br \/>\n(TTL) de um pacote:<br \/>\n\u2022 &#8211;ttl-eq [num]<br \/>\n\u2022 &#8211;ttl-lt [num]<br \/>\n\u2022 &#8211;ttl-gq [num]<br \/>\nVeja alguns exemplos:<br \/>\n# Confere com todos os pacotes que tem o TTL maior que 100<br \/>\niptables -A INPUT -m ttl &#8211;ttl-gt 100 -j LOG &#8211;log-prefix &#8220;TTL alto&#8221;<br \/>\n# Confere com todos os pacotes que tem o TTL igual a 1<br \/>\niptables -A INPUT -m ttl &#8211;ttl-eq 1 -j DROP<br \/>\nOBS: Tenha um especial cuidado durante a programa\u00e7\u00e3o de regras que usem TTL, como elas est\u00e3o<br \/>\nespecialmente associadas com o estado da comunica\u00e7\u00e3o estabelecida entre as duas pontas e o tipo<br \/>\nde protocolo, cuidados especiais devem ser tomados para que seu firewall n\u00e3o manipule de forma<br \/>\nincorreta tr\u00e1fego v\u00e1lido.<br \/>\n10.6.11 Conferindo com n\u00fameros RPC<br \/>\nO m\u00f3dulo rpc permite um controle especial sobre o tr\u00e1fego RPC que chega at\u00e9 a sua m\u00e1quina. Um<br \/>\nuso \u00fatil \u00e9 restringir a chamada a determinados n\u00fameros RPC e permitir outros (por exemplo,<br \/>\npermitindo somente o servi\u00e7o keyserv e bloqueando outros como o ypserv ou portmapper). As<br \/>\nseguintes op\u00e7\u00f5es podem ser usadas com o m\u00f3dulo nfs:<br \/>\n\u2022 &#8211;rpcs [procedimentos] &#8211; Confere com a lista de chamadas RPC especificadas.<br \/>\nMais de um procedimento RPC pode ser especificado como nome ou n\u00famero separandoos<br \/>\ncom v\u00edrgulas. Um arquivo \u00fatil que cont\u00e9m esta lista \u00e9 o \/etc\/rpc.<br \/>\n\u2022 &#8211;strict &#8211; Ignora servi\u00e7os RPC que n\u00e3o contenham a chamada get do portmapper. Em<br \/>\nsitua\u00e7\u00f5es normais, o inicio de qualquer solicita\u00e7\u00e3o RPC.<br \/>\nVeja alguns exemplos:<br \/>\n# Para conferir com todas as chamadas RPC referentes a conex\u00f5es iniciadas<br \/>\n# para o portmapper<br \/>\niptables -A INPUT -m rpc &#8211;rpcs portmapper &#8211;strict -j DROP<br \/>\n# Para permitir que somente as chamadas para status e statmon sejam<br \/>\n# aceitas<br \/>\niptables -A INPUT -m rpc &#8211;rpcs 100023,100024 -j ACCEPT<br \/>\n10.6.12 Conferindo com tipo de pacote<br \/>\nO m\u00f3dulo pkttype permite identificar um pacote do tipo unicast (direcionado a voc\u00ea), broadcast<br \/>\n(direcionado a uma determinada rede, definida pela netmask) ou multicast (destinado a grupos de<br \/>\nredes) e desta forma realizar a\u00e7\u00f5es em cima destes. O tipo de pacote \u00e9 identificado logo ap\u00f3s a<br \/>\nop\u00e7\u00e3o &#8211;pkt-type. Veja alguns exemplos:<br \/>\n# Bloqueia a passagem de pacotes multicast de uma rede para outra<br \/>\niptables -A FORWARD -i eth0 -o eth0 -m pkttype &#8211;pkt-type multicast -j DROP<br \/>\n# Como deve ter notado, \u00e9 poss\u00edvel fazer a associa\u00e7\u00e3o com diversas<br \/>\nespecifica\u00e7\u00f5es<br \/>\n# de m\u00f3dulos, bastando apenas especificar uma op\u00e7\u00e3o &#8220;-m&#8221; para cada m\u00f3dulo<br \/>\n# adicional:<br \/>\n# Permite a passagem de pacotes broadcast de uma rede para outra com<br \/>\n# limita\u00e7\u00e3o de 5\/s.<br \/>\niptables -A FORWARD -i eth0 -o eth0 -m pkttype &#8211;pkt-type broadcast -m<br \/>\nlimit &#8211;limit 5\/s -j ACCEPT<br \/>\n10.6.13 Conferindo com o tamanho do pacote<br \/>\nO tamanho do pacote pode ser usado como condi\u00e7\u00e3o de filtragem atrav\u00e9s do m\u00f3dulo length. O<br \/>\ntamanho do pacote \u00e9 especificado atrav\u00e9s da op\u00e7\u00e3o &#8211;length e o argumento segue a mesma sintaxe<br \/>\nda especifica\u00e7\u00e3o de portas no iptables sendo separados por :. Veja alguns exemplos:<br \/>\n# Bloqueia qualquer pacote ICMP maior que 30Kb<br \/>\niptables -A INPUT -i eth0 -m length &#8211;length 30000: -j DROP<br \/>\n# Bloqueia qualquer pacote com o tamanho entre 20 e 2000 bytes<br \/>\niptables -A INPUT -i eth0 -m length &#8211;length 20:2000 -j DROP<br \/>\n10.7 Caminho percorrido pelos pacotes nas tabelas e chains<br \/>\n\u00c9 MUITO importante entender a fun\u00e7\u00e3o de cada filtro e a ordem de acesso dos chains de acordo<br \/>\ncom o tipo de conex\u00e3o e interface de origem\/destino. Esta se\u00e7\u00e3o explica a ordem que as regra s\u00e3o<br \/>\natravessadas, isso lhe permitir\u00e1 planejar a distribui\u00e7\u00e3o das regras nos chains, e evitar erros de<br \/>\nlocaliza\u00e7\u00e3o de regras que poderia deixar seu firewall com s\u00e9rios problemas de seguran\u00e7a, ou um<br \/>\nsistema de firewall totalmente confuso e sem l\u00f3gica.<br \/>\nNos exemplos abaixo assumirei a seguinte configura\u00e7\u00e3o:<br \/>\n\u2022 A m\u00e1quina do firewall com iptables possui o endere\u00e7o IP 192.168.1.1 e conecta a<br \/>\nrede interna ligada via interface eth0 a internet via a interface ppp0.<br \/>\n\u2022 Rede interna com a faixa de endere\u00e7os 192.168.1.0 conectada ao firewall via interface<br \/>\neth0<br \/>\n\u2022 Interface ppp0 fazendo conex\u00e3o com a Internet com o endere\u00e7o IP 200.217.29.67.<br \/>\n\u2022 A conex\u00e3o das m\u00e1quinas da rede interna (eth0) com a rede externa (ppp0) \u00e9 feita via<br \/>\nMasquerading.<br \/>\nTamb\u00e9m utilizarei a sintaxe CHAIN-tabela para fazer refer\u00eancia aos chains e tabelas dos blocos<br \/>\nASCII: INPUT-filter &#8211; chain INPUT da tabela filter.<br \/>\nATEN\u00c7\u00c3O: A ordem de processamento das regras do iptables, \u00e9 diferente do ipchains<br \/>\ndevido a inclus\u00e3o do novo sistema de nat e da tabela mangle.<br \/>\n10.7.1 Ping de 192.168.1.1 para 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Destino: 192.168.1.1<br \/>\n\u2022 Interface de Entrada: lo<br \/>\n\u2022 Interface de Sa\u00edda: lo<br \/>\n\u2022 Protocolo: ICMP<br \/>\n\u2022 Descri\u00e7\u00e3o: Ping para o pr\u00f3prio firewall<br \/>\nSA\u00cdDA DE PACOTES (envio do ping para 192.168.1.1):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-nat| =&gt; |OUTPUT-filter| =&gt;|POSTROUTING-mangle|<br \/>\n=&gt;|POSTROUTING-nat |<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br \/>\nENTRADA DOS PACOTES (Retorno da resposta ping acima):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt;|INPUT-mangle|=&gt;|INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nQuando damos o ping (echo request) os pacotes seguem o caminho em SA\u00cdDA DE PACOTES<br \/>\npercorrendo os chains na ordem especificada e retornam via ENTRADA DOS PACOTES (echo<br \/>\nreply). No envio da resposta da requisi\u00e7\u00e3o de ping, o caminho de sa\u00edda do pacote ignora os chains<br \/>\nOUTPUT-nat e POSTROUTING-nat (j\u00e1 que n\u00e3o \u00e9 necess\u00e1rio nat) mas sempre processa os chains<br \/>\ncorrespondentes da tabela mangle na ordem indicada acima.<br \/>\nOBS1: Para conex\u00f5es com destinos na pr\u00f3pria m\u00e1quina usando um endere\u00e7o IP das interfaces<br \/>\nlocais, a interface ser\u00e1 ajustada sempre para lo (loopback).<br \/>\nOBS2: Em qualquer opera\u00e7\u00e3o de entrada\/sa\u00edda de pacotes, os dois chains da tabela mangle s\u00e3o<br \/>\nsempre os primeiros a serem acessados. Isto \u00e9 necess\u00e1rio para definir a prioridade e controlar outros<br \/>\naspectos especiais dos pacotes que atravessam os filtros.<br \/>\nOBS3: O chain OUTPUT da tabela filter \u00e9 consultado sempre quando existem conex\u00f5es se<br \/>\noriginando em endere\u00e7os de interfaces locais.<br \/>\n10.7.2 Conex\u00e3o FTP de 192.168.1.1 para 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Destino: 192.168.1.1<br \/>\n\u2022 Interface de Origem: lo<br \/>\n\u2022 Interface de Destino: lo<br \/>\n\u2022 Porta Origem: 1404<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ftp (at\u00e9 o prompt de login, sem transfer\u00eancia<br \/>\nde arquivos).<br \/>\nSA\u00cdDA DOS PACOTES (envio da requisi\u00e7\u00e3o para 192.168.1.1):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-nat| =&gt; |OUTPUT-filter| =&gt; +POSTROUTING-mangle|<br \/>\n=&gt; |POSTROUTING-nat|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nENTRADA DE PACOTES (respostas da requisi\u00e7\u00e3o vindas de 192.168.1.1):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em SA\u00cdDA DOS PACOTES e retorna por<br \/>\nENTRADA DE PACOTES. Ap\u00f3s a conex\u00e3o ser estabelecida, o caminho de SA\u00cdDA DE PACOTES<br \/>\nser\u00e1:<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\npois os dados de entrada que vem da interface externa, s\u00e3o passados diretamente a m\u00e1quina do<br \/>\nfirewall, n\u00e3o necessitando de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat s\u00e3o<br \/>\nprocessado somente uma vez a procura de regras que conferem, principalmente para fazer SNAT).<br \/>\nNote novamente que mesmo n\u00e3o sendo necess\u00e1rio NAT, o chain POSTROUTING-mangle \u00e9<br \/>\nchecado.<br \/>\nOBS1: Para conex\u00f5es com destinos na pr\u00f3pria m\u00e1quina usando um endere\u00e7o IP das interfaces<br \/>\nlocais, a interface ser\u00e1 ajustada sempre para lo (loopback).<br \/>\nOBS2: Em qualquer opera\u00e7\u00e3o de entrada\/sa\u00edda de pacotes, os dois chains da tabela mangle s\u00e3o<br \/>\nsempre os primeiros a serem acessados. Isto \u00e9 necess\u00e1rio para definir a prioridade e controlar outros<br \/>\naspectos especiais dos pacotes que atravessam os filtros.<br \/>\n10.7.3 Conex\u00e3o FTP de 192.168.1.1 para 192.168.1.4<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Destino: 192.168.1.4<br \/>\n\u2022 Interface de Origem: eth0<br \/>\n\u2022 Interface de Destino: eth0<br \/>\n\u2022 Porta Origem: 1405<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ftp (at\u00e9 o prompt de login, sem transfer\u00eancia<br \/>\nde arquivos).<br \/>\nSA\u00cdDA DOS PACOTES (envio da requisi\u00e7\u00e3o para 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-nat| =&gt; |OUTPUT-filter| =&gt; +POSTROUTING-mangle|<br \/>\n=&gt; |POSTROUTING-nat|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nENTRADA DE PACOTES (respostas da requisi\u00e7\u00e3o de 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em SA\u00cdDA DOS PACOTES com o destino<br \/>\n192.168.1.4 porta 21 e retorna por ENTRADA DE PACOTES para 192.168.1.1 porta<br \/>\n1405. Ap\u00f3s a conex\u00e3o ser estabelecida, o caminho de SA\u00cdDA DE PACOTES ser\u00e1:<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\npois os dados n\u00e3o precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat<br \/>\ns\u00e3o processado somente uma vez a procura de regras que conferem, principalmente para fazer<br \/>\nSNAT).<br \/>\nOBS: Em qualquer opera\u00e7\u00e3o de entrada\/sa\u00edda de pacotes, os dois chains da tabela mangle s\u00e3o<br \/>\nsempre os primeiros a serem acessados. Isto \u00e9 necess\u00e1rio para definir a prioridade e controlar outros<br \/>\naspectos especiais dos pacotes que atravessam os filtros.<br \/>\n10.7.4 Conex\u00e3o FTP de 200.217.29.67 para a m\u00e1quina ftp.debian.org.br<br \/>\n\u2022 Endere\u00e7o de Origem: 200.217.29.67<br \/>\n\u2022 Endere\u00e7o de Destino: 200.198.129.162<br \/>\n\u2022 Interface de Origem: ppp0<br \/>\n\u2022 Interface de Destino: ppp0<br \/>\n\u2022 Porta Origem: 1407<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ftp (at\u00e9 o prompt de login, sem transfer\u00eancia<br \/>\nde arquivos).<br \/>\nSA\u00cdDA DOS PACOTES (envio da requisi\u00e7\u00e3o para 200.198.129.162):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-nat| =&gt; |OUTPUT-filter| =&gt; +POSTROUTING-mangle|<br \/>\n=&gt; |POSTROUTING-nat|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nENTRADA DE PACOTES (respostas da requisi\u00e7\u00e3o vindas de 200.198.129.162):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em SA\u00cdDA DOS PACOTES com o destino<br \/>\n200.198.129.162 porta 21 (ap\u00f3s a resolu\u00e7\u00e3o DNS de www.debian.org.br) e retorna por<br \/>\nENTRADA DE PACOTES para 200.217.29.67 porta 1407. Ap\u00f3s a conex\u00e3o ser estabelecida, o<br \/>\ncaminho de sa\u00edda de pacotes \u00e9:<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\npois os dados n\u00e3o precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat<br \/>\ns\u00e3o processado somente uma vez a procura de regras que conferem, principalmente para fazer<br \/>\nSNAT).<br \/>\nE ap\u00f3s a conex\u00e3o estabelecida, o caminho de entrada de pacotes passa a ser:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\npois os dados n\u00e3o precisam de tratamento DNAT (o chain PREROUTING-nat \u00e9 processado somente<br \/>\numa vez a procura de regras que conferem, principalmente para fazer DNAT).<br \/>\nOBS: Para qualquer opera\u00e7\u00e3o de entrada\/sa\u00edda de pacotes, os dois chains da tabela mangle s\u00e3o<br \/>\nsempre os primeiros a serem acessados. Isto \u00e9 necess\u00e1rio para definir a prioridade e controlar outros<br \/>\naspectos especiais dos pacotes que atravessam os filtros.<br \/>\n10.7.5 Ping de 192.168.1.4 para 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.4<br \/>\n\u2022 Endere\u00e7o de Destino: 192.168.1.1<br \/>\n\u2022 Interface de Entrada: eth0<br \/>\n\u2022 Interface de Sa\u00edda: eth0<br \/>\n\u2022 Protocolo: ICMP<br \/>\n\u2022 Descri\u00e7\u00e3o: Ping de 192.168.1.4 para a m\u00e1quina do firewall.<br \/>\nENTRADA DE PACOTES (recebimento da requisi\u00e7\u00e3o, vinda de 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |PREROUTING-nat| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nSA\u00cdDA DE PACOTES (envio da resposta a 192.168.1.4)<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nQuando damos o ping (echo request) os pacotes seguem o caminho em ENTRADA DE PACOTES<br \/>\npercorrendo os chains na ordem especificada e retornam via SA\u00cdDA DOS PACOTES (echo reply).<br \/>\nOBS1: Para qualquer opera\u00e7\u00e3o de entrada\/sa\u00edda de pacotes, os dois chains da tabela mangle s\u00e3o<br \/>\nsempre os primeiros a serem acessados. Isto \u00e9 necess\u00e1rio para definir a prioridade e controlar outros<br \/>\naspectos especiais dos pacotes que atravessam os filtros.<br \/>\n10.7.6 Conex\u00e3o FTP de 192.168.1.4 para 192.168.1.1<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.4<br \/>\n\u2022 Endere\u00e7o de Destino: 192.168.1.1<br \/>\n\u2022 Interface de Origem: eth0<br \/>\n\u2022 Interface de Destino: eth0<br \/>\n\u2022 Porta Origem: 1030<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ftp (at\u00e9 o prompt de login, sem transfer\u00eancia<br \/>\nde dados).<br \/>\nENTRADA DOS PACOTES (envio da requisi\u00e7\u00e3o vindas de 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |PREROUTING-nat| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nSA\u00cdDA DE PACOTES (respostas da requisi\u00e7\u00e3o acima para 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em ENTRADA DOS PACOTES com o<br \/>\ndestino 192.168.1.1 porta 21 e retorna por SA\u00cdDA DE PACOTES para 192.168.1.4 porta<br \/>\n1030. Ap\u00f3s a conex\u00e3o ser estabelecida, o caminho de entrada de pacotes \u00e9:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\npois os dados n\u00e3o precisam de tratamento DNAT (o chain PREROUTING-nat \u00e9 processado somente<br \/>\numa vez a procura de regras que conferem, principalmente para fazer DNAT).<br \/>\nOBS: O roteamento \u00e9 sempre realizado ap\u00f3s o processamento do chain PREROUTING da tabela<br \/>\nnat.<br \/>\n10.7.7 Conex\u00e3o FTP de 192.168.1.4 para ftp.debian.org.br<br \/>\n\u2022 Endere\u00e7o de Origem: 192.168.1.4<br \/>\n\u2022 Endere\u00e7o de Destino: 200.198.129.162<br \/>\n\u2022 Interface de Origem: eth0<br \/>\n\u2022 Interface de Destino: ppp0<br \/>\n\u2022 Porta Origem: 1032<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ftp (at\u00e9 o prompt de login, sem transfer\u00eancia<br \/>\nde dados).<br \/>\nSA\u00cdDA DOS PACOTES (requisi\u00e7\u00e3o vindas de 192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n|PREROUTING-mangle| =&gt; |PREROUTING-nat| =&gt; |FORWARD-mangle| =&gt; (continua<br \/>\nabaixo)<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|FORWARD-filter| =&gt; |POSTROUTING-mangle| =&gt; |POSTROUTING-nat|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nENTRADA DE PACOTES (respostas da requisi\u00e7\u00e3o acima, enviadas para<br \/>\n192.168.1.4):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |FORWARD-mangle| =&gt; |FORWARD-filter| =&gt; |<br \/>\nPOSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em SA\u00cdDA DOS PACOTES com o destino<br \/>\n200.198.129.162 porta 21 (ap\u00f3s a resolu\u00e7\u00e3o DNS de ftp.debian.org.br) e retorna por<br \/>\nENTRADA DE PACOTES para 192.168.1.4 porta 1032.<br \/>\nNote que o Masquerading regrava os pacotes; para a m\u00e1quina 200.198.129.162 a conex\u00e3o est\u00e1<br \/>\nsendo feita para 200.217.29.67. As respostas de conex\u00f5es vindas de 200.198.129.162 e<br \/>\nindo para 200.217.29.67 s\u00e3o regravadas no firewall com o destino 192.168.1.4 e enviadas<br \/>\npara a m\u00e1quina correspondente. Ap\u00f3s a conex\u00e3o ser estabelecida, o caminho de sa\u00edda de pacotes<br \/>\npara 200.198.129.163 \u00e9:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |FORWARD-mangle| =&gt; |FORWARD-filter| =&gt; |<br \/>\nPOSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nAp\u00f3s a conex\u00e3o estabelecida, o caminho da entrada de pacotes vindos de 200.198.129.163 \u00e9:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |FORWARD-mangle| =&gt; |FORWARD-filter| =&gt; |<br \/>\nPOSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nIsto acontece porque ap\u00f3s feita a conex\u00e3o Masquerading (via PREROUTING-nat), o firewall j\u00e1<br \/>\nsabe como reescrever os pacotes para realizar a opera\u00e7\u00e3o de Masquerading, reescrevendo todos os<br \/>\npacotes que chegam de www.debian.org.br para 192.168.1.4.<br \/>\nOBS: As conex\u00f5es Masquerading feitas atrav\u00e9s da rede interna, s\u00e3o enviadas para<br \/>\n200.198.129.162 tem o endere\u00e7o de origem ajustado para 200.217.29.67 que \u00e9 o IP de<br \/>\nnossa interface ppp0. Quando as respostas atravessam o firewall, os pacotes s\u00e3o checados pra saber<br \/>\nse s\u00e3o uma resposta a uma conex\u00e3o masquerading e far\u00e1 a regrava\u00e7\u00e3o dos pacotes substituindo o<br \/>\nendere\u00e7o de destino para 192.168.1.4. Caso uma opera\u00e7\u00e3o de Masquerading falhe, os pacotes<br \/>\nser\u00e3o Bloqueados.<br \/>\n10.7.8 Conex\u00e3o FTP de 200.198.129.162 para 200.217.29.167<br \/>\n\u2022 Endere\u00e7o de Origem: 200.198.129.162<br \/>\n\u2022 Endere\u00e7o de Destino: 200.217.29.67<br \/>\n\u2022 Interface de Origem: ppp0<br \/>\n\u2022 Interface de Destino: ppp0<br \/>\n\u2022 Porta Origem: 3716<br \/>\n\u2022 Porta Destino: 21<br \/>\n\u2022 Protocolo: TCP<br \/>\n\u2022 Descri\u00e7\u00e3o: Conex\u00e3o ao servi\u00e7o ftp do firewall<br \/>\nENTRADA DOS PACOTES (requisi\u00e7\u00e3o vinda de 200.198.129.162):<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;<br \/>\n+<br \/>\n|PREROUTING-mangle| =&gt; |PREROUTING-nat| =&gt; |INPUT-mangle | =&gt; |INPUTfilter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;<br \/>\n+<br \/>\nSA\u00cdDA DE PACOTES (respostas da requisi\u00e7\u00e3o de 200.198.129.162):<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\n|OUTPUT-mangle| =&gt; |OUTPUT-filter| =&gt; |POSTROUTING-mangle|<br \/>\n+&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;-+ +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br \/>\nA requisi\u00e7\u00e3o ftp passa atrav\u00e9s dos chains especificados em ENTRADA DOS PACOTES com o<br \/>\ndestino 200.217.29.67 (nossa interface ppp0 local) porta 21 e retorna por SA\u00cdDA DE<br \/>\nPACOTES para 200.198.129.162 porta 3716 (tamb\u00e9m via ppp0). Ap\u00f3s a conex\u00e3o ser<br \/>\nestabelecida, o caminho de entrada de pacotes \u00e9:<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\n|PREROUTING-mangle| =&gt; |INPUT-mangle| =&gt; |INPUT-filter|<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ +&#8212;&#8212;&#8212;&#8212;+ +&#8212;&#8212;&#8212;&#8212;+<br \/>\nIsto acontece porque ap\u00f3s feita a an\u00e1lise do chain PREROUTING (para necessidade de DNAT), a<br \/>\nm\u00e1quina j\u00e1 saber\u00e1 tomar a decis\u00e3o apropriada para gerenciar aquela conex\u00e3o.<br \/>\n10.7.9 Gr\u00e1fico geral da passagem dos pacotes<br \/>\nEste gr\u00e1fico foi retirado do documento netfilter-hacking-HOWTO.txt e mostra a estrutura<br \/>\ngeral de passagem dos pacotes nas tabelas\/chains. Os exemplos de passagem de pacotes acima<br \/>\npoder\u00e3o ser facilmente comparados com as etapas abaixo para compreender a estrutura do<br \/>\niptables.<br \/>\nE &#8212;&gt; PREROUTING &#8212;&#8212;&gt; (ROTEAM.) &#8212;&gt; FORWARD &#8212;&#8212;&#8212;-&gt; POSTROUTING<br \/>\n&#8211;&gt; S<br \/>\nMangle e | Mangle ^ Mangle<br \/>\nNAT (DNAT)) | Filter | NAT (SRC)<br \/>\n| (ROTEAM.)<br \/>\nv |<br \/>\nIN Mangle, OUT &#8211; Mangle,<br \/>\n| Filter ^ NAT (DNAT)<br \/>\n| | Filter<br \/>\nv |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br \/>\n| Processo Local |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br \/>\n10.8 Exemplos de configura\u00e7\u00f5es do iptables<br \/>\nExemplo de como bloquear todas as conex\u00f5es para a m\u00e1quina do firewall permitindo somente<br \/>\nconex\u00f5es da m\u00e1quina Linux para fora.<br \/>\n10.8.1 Bloqueando conex\u00f5es de fora para sua m\u00e1quina<br \/>\nAs regras a seguir servem para bloquear tentativas de conex\u00f5es da interface de Internet (ppp0) a sua<br \/>\nrede sem bloquear o tr\u00e1fego de conex\u00f5es j\u00e1 iniciadas. O tr\u00e1fego de outras interfaces n\u00e3o \u00e9 afetado<br \/>\ncom as regras a seguir:<br \/>\niptables -A INPUT -i ppp0 -m state &#8211;state ! ESTABLISHED,RELATED -j DROP<br \/>\nTodas as conex\u00f5es vindas de ppp0 de estado diferente de ESTABLISHED e RELATED (NEW e<br \/>\nINVALID) ser\u00e3o derrubadas. Veja Conferindo de acordo com o estado da conex\u00e3o, Se\u00e7\u00e3o 10.6.1<br \/>\npara detalhes.<br \/>\niptables -A INPUT -i ppp0 &#8211;syn -j DROP<br \/>\nEste acima \u00e9 mais simples e possui o mesmo efeito: Pacotes SYN s\u00e3o usados para iniciar conex\u00f5es,<br \/>\nderrubando pacotes deste tipo significa bloquear novas conex\u00f5es. Pacotes de conex\u00f5es j\u00e1<br \/>\nestabelecidas ainda s\u00e3o permitidos.<br \/>\nEstas regras acima servem para quem n\u00e3o deseja NENHUM acesso indevido a sua m\u00e1quina.<br \/>\nExistem outras formas de bloquear conex\u00f5es de modo mais seletivo usando chains espec\u00edficos,<br \/>\nendere\u00e7os de origem\/destino, portas, etc., este tipo de configura\u00e7\u00e3o \u00e9 muito usada caso precise<br \/>\nfornecer algum tipo de servi\u00e7o que seja acess\u00edvel externamente e protegendo outros.<br \/>\n10.8.2 Monitorando tentativa de conex\u00e3o de trojans em sua m\u00e1quina<br \/>\nAs regras abaixo alertam sobre a tentativa de conex\u00e3o dos trojans &#8220;For Win&#8221; mais conhecidos.<br \/>\nColoquei isto aqui por curiosidade de algumas pessoas, pois m\u00e1quinas Linux s\u00e3o imunes a este<br \/>\ntipo de coisa:<br \/>\n#!\/bin\/sh<br \/>\nTROJAN_PORTS=&#8221;12345 31336 31337 31338 3024 4092 5714 5742 2583 8787 5556<br \/>\n5557&#8243;<br \/>\niptables -t filter -N trojans-in<br \/>\nfor PORTA in ${TROJAN_PORTS};do<br \/>\niptables -A trojans-in -p tcp &#8211;sport=1024: &#8211;dport=${PORTA} -j LOG \\<br \/>\n&#8211;log-prefix &#8220;FIREWALL: Trojan ${PORTA} &#8221;<br \/>\niptables -A trojans-in -p tcp &#8211;sport=1024: &#8211;dport=${PORTA} -j DROP<br \/>\ndone<br \/>\niptables -t filter -A INPUT -i ppp0 -j trojans-in<br \/>\nA primeira linha do iptables cria o chain trojans-in dentro da tabela filter que usaremos para<br \/>\narmazenar nossas regras de firewall. A segunda (dentro do la\u00e7o for) faz uma regra de LOG para<br \/>\nregistrar as tentativas de acesso de trojans em nosso sistema, a terceira rejeita o acesso. A quarta<br \/>\nregra do iptables cria de todo o tr\u00e1fego vindo da interface ppp0 pra o chain trojans-in (queremos<br \/>\nque s\u00f3 o tr\u00e1fego vindo da internet seja analisado pelo chain trojans-in).<br \/>\nMuitas das portas especificadas na vari\u00e1vel TROJAN_PORTS s\u00e3o antigas conhecidas de quem j\u00e1<br \/>\nbrincou ou sofreram com o Back Orifice, Win Crack, NetBus (quem nunca passou pela<br \/>\nfase de ter uma lista com mais de 100 netmasks e conseguir encontrar centenas de m\u00e1quinas por dia<br \/>\ninfectadas pelo BO? :-).<br \/>\nNo c\u00f3digo acima a \u00fanica coisa que precisa fazer para adicionar mais portas \u00e9 inseri-las na vari\u00e1vel<br \/>\nTROJAN_PORTS e executar o programa. O la\u00e7o do for executar\u00e1 as 2 regras para cada porta<br \/>\nprocessada (economizando linhas e linhas de regras, me livrando de uma LER e poupando muitos<br \/>\nbytes neste guia ;-).<br \/>\nDependendo do n\u00famero de portas alvo, este c\u00f3digo pode ser muito simplificado usando o recurso<br \/>\nmultiport do iptables (veja Especificando m\u00faltiplas portas de origem\/destino, Se\u00e7\u00e3o 10.6.6 para<br \/>\ndetalhes).<br \/>\n10.8.3 Conectando sua rede interna a Internet<br \/>\nO seguinte exemplo permite ligar sua rede interna com a faixa de IP&#8217;s 192.168.1.* a internet<br \/>\n(usando uma conex\u00e3o discada do tipo ppp):<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -j MASQUERADE<br \/>\necho &#8220;1&#8221; &gt;\/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n10.8.4 Um exemplo de firewall simples<br \/>\nEsta se\u00e7\u00e3o possui um exemplo mais elaborado de firewall que servir\u00e1 para m\u00e1quinas conectadas via<br \/>\nppp com uma rede interna conectada via Masquerading. Este exemplo n\u00e3o \u00e9 t\u00e3o complexo e cobre<br \/>\nas expectativas mais comuns de pessoas que gostam de explorar os potenciais de rede no Linux ou<br \/>\nsatisfazer sua curiosidade. Ele poder\u00e1 ser facilmente adaptado para atender outro tipo de<br \/>\nnecessidade. A configura\u00e7\u00e3o assumida \u00e9 a seguinte:<br \/>\n\u2022 M\u00e1quina do firewall com 2 interfaces de rede, uma \u00e9 eth0 com o IP 192.168.1.1 que<br \/>\nserve de liga\u00e7\u00e3o a sua rede Interna, a outra \u00e9 ppp0 que \u00e9 a interface Internet.<br \/>\n\u2022 Qualquer acesso externo a m\u00e1quinas da rede interna \u00e9 bloqueado.<br \/>\n\u2022 Os usu\u00e1rios da rede local tem acesso livre ao servidor Linux.<br \/>\n\u2022 Qualquer acesso externo a m\u00e1quina do firewall \u00e9 bloqueado, exceto conex\u00f5es para o servi\u00e7o<br \/>\nApache (httpd). Outras tentativas de conex\u00f5es devem ser explicitamente registradas nos<br \/>\nlogs do sistema para conhecimento do administrador.<br \/>\n\u2022 Todos os usu\u00e1rios possuem acesso livre a Internet via Masquerading, exceto que o acesso<br \/>\npara o servi\u00e7o www deve ser obrigatoriamente feito via squid, e o servidor smtp a ser<br \/>\nusado dever\u00e1 ser o do firewall Linux.<br \/>\n\u2022 Prioridades ser\u00e3o estabelecidas para os servi\u00e7os de telnet, IRC,talk e DNS.<br \/>\n#!\/bin\/sh<br \/>\n# Modelo de configura\u00e7\u00e3o de firewall<br \/>\n# Autor: Gleydson M. Silva<br \/>\n# Data: 05\/09\/2001<br \/>\n# Descri\u00e7\u00e3o: Produzido para ser distribu\u00eddo livremente, acompanha o guia<br \/>\n# Foca GNU\/Linux. http:\/\/www.guiafoca.org<br \/>\n#<br \/>\n# \u00c9 assumido um sistema usando kmod para carga autom\u00e1tica dos m\u00f3dulos<br \/>\nusados por<br \/>\n# esta configura\u00e7\u00e3o do firewall:<br \/>\n# ipt_filter<br \/>\n# ipt_nat<br \/>\n# ipt_conntrack<br \/>\n# ipt_mangle<br \/>\n# ipt_TOS<br \/>\n# ipt_MASQUERADE<br \/>\n# ipt_LOG<br \/>\n# Se voc\u00ea tem um kernel modularizado que n\u00e3o utiliza o kmod, ser\u00e1<br \/>\nnecess\u00e1rio<br \/>\n# carregar estes m\u00f3dulos via modprobe, insmod ou iptables &#8211;modprobe=modulo<br \/>\n##### Defini\u00e7\u00e3o de Policiamento #####<br \/>\n# Tabela filter<br \/>\niptables -t filter -P INPUT DROP<br \/>\niptables -t filter -P OUTPUT ACCEPT<br \/>\niptables -t filter -P FORWARD DROP<br \/>\n# Tabela nat<br \/>\niptables -t nat -P PREROUTING ACCEPT<br \/>\niptables -t nat -P OUTPUT ACCEPT<br \/>\niptables -t nat -P POSTROUTING DROP<br \/>\n# Tabela mangle<br \/>\niptables -t mangle -P PREROUTING ACCEPT<br \/>\niptables -t mangle -P OUTPUT ACCEPT<br \/>\n##### Prote\u00e7\u00e3o contra IP Spoofing #####<br \/>\nfor i in \/proc\/sys\/net\/ipv4\/conf\/*\/rp_filter; do<br \/>\necho 1 &gt;$i<br \/>\ndone<br \/>\n##### Ativamos o redirecionamento de pacotes (requerido para NAT) #####<br \/>\necho &#8220;1&#8221; &gt;\/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n# O iptables define automaticamente o n\u00famero m\u00e1ximo de conex\u00f5es simult\u00e2neas<br \/>\n# com base na mem\u00f3ria do sistema. Para 32MB = 2048, 64MB = 4096, 128MB =<br \/>\n8192,<br \/>\n# sendo que s\u00e3o usados 350 bytes de mem\u00f3ria residente para controlar<br \/>\n# cada conex\u00e3o.<br \/>\n# Quando este limite \u00e9 excedido a seguinte mensagem \u00e9 mostrada:<br \/>\n# &#8220;ip_conntrack: maximum limit of XXX entries exceed&#8221;<br \/>\n#<br \/>\n# Como temos uma rede simples, vamos abaixar este limite. Por outro lado<br \/>\nisto<br \/>\n# criar\u00e1 uma certa limita\u00e7\u00e3o de tr\u00e1fego para evitar a sobrecarga do<br \/>\nservidor.<br \/>\necho &#8220;2048&#8221; &gt; \/proc\/sys\/net\/ipv4\/ip_conntrack_max<br \/>\n###############################################################<br \/>\n# Tabela filter #<br \/>\n###############################################################<br \/>\n##### Chain INPUT #####<br \/>\n# Criamos um chain que ser\u00e1 usado para tratar o tr\u00e1fego vindo da Internet e<br \/>\niptables -N ppp-input<br \/>\n# Aceita todo o tr\u00e1fego vindo do loopback e indo pro loopback<br \/>\niptables -A INPUT -i lo -j ACCEPT<br \/>\n# Todo tr\u00e1fego vindo da rede interna tamb\u00e9m \u00e9 aceito<br \/>\niptables -A INPUT -s 192.168.1.0\/24 -i eth0 -j ACCEPT<br \/>\n# Conex\u00f5es vindas da interface ppp0 s\u00e3o tratadas pelo chain ppp-input<br \/>\niptables -A INPUT -i ppp+ -j ppp-input<br \/>\n# Qualquer outra conex\u00e3o desconhecida \u00e9 imediatamente registrada e<br \/>\nderrubada<br \/>\niptables -A INPUT -j LOG &#8211;log-prefix &#8220;FIREWALL: INPUT &#8221;<br \/>\niptables -A INPUT -j DROP<br \/>\n##### Chain FORWARD ####<br \/>\n# Permite redirecionamento de conex\u00f5es entre as interfaces locais<br \/>\n# especificadas abaixo. Qualquer tr\u00e1fego vindo\/indo para outras<br \/>\n# interfaces ser\u00e1 bloqueado neste passo<br \/>\niptables -A FORWARD -d 192.168.1.0\/24 -i ppp+ -o eth0 -j ACCEPT<br \/>\niptables -A FORWARD -s 192.168.1.0\/24 -i eth0 -o ppp+ -j ACCEPT<br \/>\niptables -A FORWARD -j LOG &#8211;log-prefix &#8220;FIREWALL: FORWARD &#8221;<br \/>\niptables -A FORWARD -j DROP<br \/>\n##### Chain ppp-input ####<br \/>\n# Aceitamos todas as mensagens icmp vindas de ppp0 com certa limita\u00e7\u00e3o<br \/>\n# O tr\u00e1fego de pacotes icmp que superar este limite ser\u00e1 bloqueado<br \/>\n# pela regra &#8220;&#8230;! ESTABLISHED,RELATED -j DROP&#8221; no final do<br \/>\n# chain ppp-input<br \/>\n#<br \/>\niptables -A ppp-input -p icmp -m limit &#8211;limit 2\/s -j ACCEPT<br \/>\n# Primeiro aceitamos o tr\u00e1fego vindo da Internet para o servi\u00e7o www (porta<br \/>\n80)<br \/>\niptables -A ppp-input -p tcp &#8211;dport 80 -j ACCEPT<br \/>\n# A tentativa de acesso externo a estes servi\u00e7os ser\u00e3o registrados no<br \/>\nsyslog<br \/>\n# do sistema e ser\u00e3o bloqueados pela \u00faltima regra abaixo.<br \/>\niptables -A ppp-input -p tcp &#8211;dport 21 -j LOG &#8211;log-prefix &#8220;FIREWALL: ftp<br \/>\n&#8221;<br \/>\niptables -A ppp-input -p tcp &#8211;dport 25 -j LOG &#8211;log-prefix &#8220;FIREWALL: smtp<br \/>\n&#8221;<br \/>\niptables -A ppp-input -p udp &#8211;dport 53 -j LOG &#8211;log-prefix &#8220;FIREWALL: dns<br \/>\n&#8221;<br \/>\niptables -A ppp-input -p tcp &#8211;dport 110 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\npop3 &#8221;<br \/>\niptables -A ppp-input -p tcp &#8211;dport 113 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nidentd &#8221;<br \/>\niptables -A ppp-input -p udp &#8211;dport 111 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nrpc&#8221;<br \/>\niptables -A ppp-input -p tcp &#8211;dport 111 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nrpc&#8221;<br \/>\niptables -A ppp-input -p tcp &#8211;dport 137:139 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nsamba &#8221;<br \/>\niptables -A ppp-input -p udp &#8211;dport 137:139 -j LOG &#8211;log-prefix &#8220;FIREWALL:<br \/>\nsamba &#8221;<br \/>\n# Bloqueia qualquer tentativa de nova conex\u00e3o de fora para esta m\u00e1quina<br \/>\niptables -A ppp-input -m state &#8211;state ! ESTABLISHED,RELATED -j LOG &#8211;logprefix<br \/>\n&#8220;FIREWALL: ppp-in &#8221;<br \/>\niptables -A ppp-input -m state &#8211;state ! ESTABLISHED,RELATED -j DROP<br \/>\n# Qualquer outro tipo de tr\u00e1fego \u00e9 aceito<br \/>\niptables -A ppp-input -j ACCEPT<br \/>\n#######################################################<br \/>\n# Tabela nat #<br \/>\n#######################################################<br \/>\n##### Chain POSTROUTING #####<br \/>\n# Permite qualquer conex\u00e3o vinda com destino a lo e rede local para eth0<br \/>\niptables -t nat -A POSTROUTING -o lo -j ACCEPT<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o eth0 -j ACCEPT<br \/>\n# N\u00e3o queremos que usu\u00e1rios tenham acesso direto a www e smtp da rede<br \/>\nexterna, o<br \/>\n# squid e smtpd do firewall devem ser obrigatoriamente usados. Tamb\u00e9m<br \/>\nregistramos<br \/>\n# as tentativas para monitorarmos qual m\u00e1quina est\u00e1 tentando conectar-se<br \/>\ndiretamente.<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -p tcp &#8211;dport 80<br \/>\n-j LOG &#8211;log-prefix &#8220;FIREWALL: SNAT-www &#8221;<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -p tcp &#8211;dport 25<br \/>\n-j LOG &#8211;log-prefix &#8220;FIREWALL: SNAT-smtp &#8221;<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -p tcp &#8211;dport 25<br \/>\n-j DROP<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -p tcp &#8211;dport 80<br \/>\n-j DROP<br \/>\n# \u00c9 feito masquerading dos outros servi\u00e7os da rede interna indo para a<br \/>\ninterface<br \/>\n# ppp0<br \/>\niptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o ppp+ -j MASQUERADE<br \/>\n# Qualquer outra origem de tr\u00e1fego desconhecida indo para eth0 (conex\u00f5es<br \/>\nvindas<br \/>\n# de ppp+) s\u00e3o bloqueadas aqui<br \/>\niptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0\/24 -j LOG &#8211;logprefix<br \/>\n&#8220;FIREWALL: SNAT unknown&#8221;<br \/>\niptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0\/24 -j DROP<br \/>\n# Quando iniciamos uma conex\u00e3o ppp, obtermos um endere\u00e7o classe A<br \/>\n(10.x.x.x) e ap\u00f3s<br \/>\n# estabelecida a conex\u00e3o real, este endere\u00e7o \u00e9 modificado. O tr\u00e1fego indo<br \/>\npara<br \/>\n# a interface ppp n\u00e3o dever\u00e1 ser bloqueado. Os bloqueios ser\u00e3o feitos no<br \/>\n# chain INPUT da tabela filter<br \/>\niptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT<br \/>\n# Registra e bloqueia qualquer outro tipo de tr\u00e1fego desconhecido<br \/>\niptables -t nat -A POSTROUTING -j LOG &#8211;log-prefix &#8220;FIREWALL: SNAT &#8221;<br \/>\niptables -t nat -A POSTROUTING -j DROP<br \/>\n###############################################<br \/>\n# Tabela mangle #<br \/>\n###############################################<br \/>\n##### Chain OUTPUT #####<br \/>\n# Define m\u00ednimo de espera para os servi\u00e7os ftp, telnet, irc e DNS, isto<br \/>\n# dar\u00e1 uma melhor sensa\u00e7\u00e3o de conex\u00e3o em tempo real e diminuir\u00e1 o tempo<br \/>\n# de espera para conex\u00f5es que requerem resolu\u00e7\u00e3o de nomes.<br \/>\niptables -t mangle -A OUTPUT -o ppp+ -p tcp &#8211;dport 21 -j TOS &#8211;set-tos<br \/>\n0x10<br \/>\niptables -t mangle -A OUTPUT -o ppp+ -p tcp &#8211;dport 23 -j TOS &#8211;set-tos<br \/>\n0x10<br \/>\niptables -t mangle -A OUTPUT -o ppp+ -p tcp &#8211;dport 6665:6668 -j TOS &#8211;settos<br \/>\n0x10<br \/>\niptables -t mangle -A OUTPUT -o ppp+ -p udp &#8211;dport 53 -j TOS &#8211;set-tos<br \/>\n0x10<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o O Firewall \u00e9 um programa que como objetivo proteger a m\u00e1quina contra acessos indesejados, tr\u00e1fego indesejado, proteger servi\u00e7os que estejam rodando na m\u00e1quina e bloquear a passagem de coisas que voc\u00ea n\u00e3o deseja receber (como conex\u00f5es vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[79,51],"tags":[117,19],"class_list":["post-294","post","type-post","status-publish","format-standard","hentry","category-firewall","category-linux-linuxrs","tag-iptables","tag-tcpip"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=294"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/294\/revisions"}],"predecessor-version":[{"id":295,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/294\/revisions\/295"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}