{"id":2798,"date":"2014-07-31T20:00:48","date_gmt":"2014-07-31T20:00:48","guid":{"rendered":"http:\/\/www.deuzebranaweb.com.br\/?p=2798"},"modified":"2014-07-31T20:00:48","modified_gmt":"2014-07-31T20:00:48","slug":"firewall-com-iptables","status":"publish","type":"post","link":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/2014\/07\/31\/firewall-com-iptables\/","title":{"rendered":"FIREWALL COM IPTABLES"},"content":{"rendered":"<p>FIREWALL COM IPTABLES<\/p>\n<p>www.eriberto.pro.br\/iptables<\/p>\n<p>by Jo\u00e3o Eriberto Mota Filho<\/p>\n<p>3. TABELAS<\/p>\n<p>Tabela Filter<\/p>\n<p>Vejamos o funcionamento da tabela filter (default) e as suas respectivas chains:<\/p>\n<p>ESQUEMA DA TABELA FILTER<\/p>\n<p>S\u00e3o tr\u00eas, as poss\u00edveis chains:<\/p>\n<p>&#8211;> INPUT: utilizada quando o destino final \u00e9 a pr\u00f3pria m\u00e1quina filtro;<\/p>\n<p>&#8211;> OUTPUT: qualquer pacote gerado na m\u00e1quina fltro e que deva sair para a rede ser\u00e1 tratado pela chain OUTPUT;<\/p>\n<p>&#8211;> FORWARD: qualquer pacote que atravessa o fltro, oriundo de uma m\u00e1quina e direcionado a outra, ser\u00e1 tratado pela chain FORWARD.<\/p>\n<p>Regras de filtragem<\/p>\n<p>As regras (rules) de fitragem, geralmente, s\u00e3o compostas assim:<\/p>\n<p>#iptables [-t tabela] [op\u00e7\u00e3o] [chain] [dados] -j [a\u00e7\u00e3o]<\/p>\n<p>Exemplo:<\/p>\n<p>#iptables -A FORWARD -d 192.168.1.1 -j DROP<\/p>\n<p>A linha acima determina que todos os pacotes destinados \u00e0 m\u00e1quina 192.168.1.1 devem ser descartados. No caso:<\/p>\n<p>tabela: filter (\u00e9 a default)<\/p>\n<p>op\u00e7\u00e3o: -A<\/p>\n<p>chain: FORWARD<\/p>\n<p>dados: -d 192.168.1.1<\/p>\n<p>a\u00e7\u00e3o: DROP<\/p>\n<p>Existem outras possibilidades que fogem \u00e0 sintaxe mostrada anteriormente. \u00c9 o caso do comando #iptables -L, que mostra as regras em vigor.<\/p>\n<p>An\u00e1lise de regras com a tabela filter<\/p>\n<p>Op\u00e7\u00f5es<\/p>\n<p>As principais op\u00e7\u00f5es s\u00e3o:<\/p>\n<p>-P &#8211;> Policy (pol\u00edtica). Altera a pol\u00edtica da chain. A pol\u00edtica inicial de cada chain \u00e9 ACCEPT. Isso faz com que o filtro, inicialmente, aceite qualquer INPUT, OUTPUT ou FORWARD. A pol\u00edtica pode ser alterada para DROP, que ir\u00e1 negar o servi\u00e7o da chain, at\u00e9 que uma op\u00e7\u00e3o -A entre em vigor. O -P n\u00e3o aceita REJECT ou LOG. Exemplos:<\/p>\n<p>#iptables -P FORWARD DROP<\/p>\n<p>#iptables -P INPUT ACCEPT<\/p>\n<p>-A &#8211;> Append (anexar). Acresce uma nova regra \u00e0 chain. Tem prioridade sobre o -P. Geralmente, como buscamos seguran\u00e7a m\u00e1xima, colocamos todas as chains em pol\u00edtica DROP, com o -P e, depois, abrimos o que \u00e9 necess\u00e1rio com o -A. Exemplos:<\/p>\n<p>#iptables -A OUTPUT -d 172.20.5.10 -j ACCEPT<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.1 -j DROP<\/p>\n<p>#iptables -A FORWARD -d www.chat.com.br -j DROP<\/p>\n<p>-D &#8211;> Delete (apagar). Apaga uma regra. A regra deve ser escrita novamente, trocando-se a op\u00e7\u00e3o para -D. Exemplos:<\/p>\n<p>Para apagar as regras anteriores, usa-se:<\/p>\n<p>#iptables -D OUTPUT -d 172.20.5.10 -j ACCEPT<\/p>\n<p>#iptables -D FORWARD -s 10.0.0.1 -j DROP<\/p>\n<p>#iptables -D FORWARD -d www.chat.com.br -j DROP<\/p>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel apagar a regra pelo seu n\u00famero de ordem. Pode-se utilizar o -L para verificar o n\u00famero de ordem. Verificado esse n\u00famero, basta citar a chain e o n\u00famero de ordem. Exemplo:<\/p>\n<p>#iptables -D FORWARD 4<\/p>\n<p>Isso deleta a regra n\u00famero 4 de forward.<\/p>\n<p>-L &#8211;> List (listar). Lista as regras existentes. Exemplos:<\/p>\n<p>#iptables -L<\/p>\n<p>#iptables -L FORWARD<\/p>\n<p>-F &#8211;> Flush (esvaziar). Remove todas as regras existentes. No entanto, n\u00e3o altera a pol\u00edtica (-P). Exemplos:<\/p>\n<p>#iptables -F<\/p>\n<p>#iptables -F FORWARD<\/p>\n<p>Chains<\/p>\n<p>As chains j\u00e1 s\u00e3o conhecidas:<\/p>\n<p>INPUT &#8211;> Refere-se a todos os pacotes destinados \u00e0 m\u00e1quina filtro.<\/p>\n<p>OUTPUT &#8211;> Refere-se a todos os pacotes gerados na m\u00e1quina filtro.<\/p>\n<p>FORWARD &#8211;> Refere-se a todos os pacotes oriundos de uma m\u00e1quina e destinados a outra. S\u00e3o pacotes que atravessam a m\u00e1quina filtro, mas n\u00e3o s\u00e3o destinados a ela.<\/p>\n<p>Dados<\/p>\n<p>Os elementos mais comuns para se gerar dados s\u00e3o os seguintes:<\/p>\n<p>-s &#8211;> Source (origem). Estabelece a origem do pacote. Geralmente \u00e9 uma combina\u00e7\u00e3o do endere\u00e7o IP com a m\u00e1scara de sub-rede, separados por uma barra. Exemplo:<\/p>\n<p>-s 172.20.0.0\/255.255.0.0<\/p>\n<p>No caso, vimos a sub-rede 172.20.0.0. Para hosts, a m\u00e1scara sempre ser\u00e1 255.255.255.255. Exemplo:<\/p>\n<p>-s 172.20.5.10\/255.255.255.255<\/p>\n<p>Agora vimos o host 172.20.5.10. Ainda no caso de hosts, a m\u00e1scara pode ser omitida. Caso isso ocorra, o iptables considera a m\u00e1scara como 255.255.255.255. Exemplo:<\/p>\n<p>-s 172.20.5.10<\/p>\n<p>Isso corresponde ao host 172.20.5.10. H\u00e1 um recurso para simplificar a utiliza\u00e7\u00e3o da m\u00e1scara de sub-rede. Basta utilizar a quantidade de bits 1 existentes na m\u00e1scara. Assim, a m\u00e1scara 255.255.0.0 vira 16. A utiliza\u00e7\u00e3o fica assim:<\/p>\n<p>-s 172.20.0.0\/16<\/p>\n<p>Outra possibilidade \u00e9 a designa\u00e7\u00e3o de hosts pelo nome. Exemplo:<\/p>\n<p>-s www.chat.com.br<\/p>\n<p>Para especificar qualquer origem, utilize a rota default, ou seja, 0.0.0.0\/0.0.0.0, tamb\u00e9m admitindo 0\/0.<\/p>\n<p>-d &#8211;> Destination (destino). Estabelece o destino do pacote. Funciona exatamente como o -s, incluindo a sintaxe.<\/p>\n<p>-p &#8211;> Protocol (protocolo). Especifica o protocolo a ser filtrado. O protocolo IP pode ser especificado pelo seu n\u00famero (vide \/etc\/protocols) ou pelo nome. Os protocolos mais utilizados s\u00e3o udp, tcp e icmp. Exemplo:<\/p>\n<p>-p icmp<\/p>\n<p>-i &#8211;> In-Interface (interface de entrada). Especifica a interface de entrada. As interfaces existentes podem ser vistas com o comando #ifconfig. O -i n\u00e3o pode ser utilizado com a chain OUTPUT. Exemplo:<\/p>\n<p>-i ppp0<\/p>\n<p>O sinal + pode ser utilizado para simbolizar v\u00e1rias interfaces. Exemplo:<\/p>\n<p>-i eth+<\/p>\n<p>eth+ refere-se \u00e0 eth0, eth1, eth2 etc.<\/p>\n<p>-o &#8211;> Out-Interface (interface de sa\u00edda). Especifica a interface de sa\u00edda. Similar a -i, inclusive nas flexibilidades. O -o n\u00e3o pode ser utilizado com a chain INPUT.<\/p>\n<p>! &#8211;> Exclus\u00e3o. Utilizado com -s, -d, -p, -i, -o e outros, para excluir o argumento. Exemplo:<\/p>\n<p>-s ! 10.0.0.1<\/p>\n<p>Isso refere-se a qualquer endere\u00e7o de entrada, exceto o 10.0.0.1.<\/p>\n<p>-p ! tcp<\/p>\n<p>Todos os protocolos, exceto o TCP.<\/p>\n<p>&#8211;sport &#8211;> Source Port. Porta de origem. S\u00f3 funciona com as op\u00e7\u00f5es -p udp e -p tcp. Exemplo:<\/p>\n<p>-p tcp &#8211;sport 80<\/p>\n<p>Refere-se \u00e0 porta 80 sobre protocolo TCP.<\/p>\n<p>&#8211;dport &#8211;> Destination Port. Porta de destino. S\u00f3 funciona com as op\u00e7\u00f5es -p udp e -p tcp. Similar a &#8211;sport.<\/p>\n<p>A\u00e7\u00f5es<\/p>\n<p>As principais a\u00e7\u00f5es s\u00e3o:<\/p>\n<p>ACCEPT &#8211;> Aceitar. Permite a passagem do pacote.<\/p>\n<p>DROP &#8211;> Abandonar. N\u00e3o permite a passagem do pacote, descartando-o. N\u00e3o avisa a origem sobre o ocorrido.<\/p>\n<p>REJECT &#8211;> Igual ao DROP, mas avisa a origem sobre o ocorrido (envia pacote icmp unreachable).<\/p>\n<p>LOG &#8211;> Cria um log referente \u00e0 regra, em \/var\/log\/messages. Usar antes de outras a\u00e7\u00f5es.<\/p>\n<p>Exemplos comentados de regras de filtragem (tabela filter)<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -L<\/p>\n<p>Lista todas as regras existentes.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -F<\/p>\n<p>Apaga todas as regras sem alterar a pol\u00edtica.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -P FORWARD DROP<\/p>\n<p>Estabelece uma pol\u00edtica de proibi\u00e7\u00e3o inicial de passagem de pacotes entre sub-redes.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -j DROP<\/p>\n<p>Todos os pacotes oriundos de qualquer sub-rede e destinados a qualquer sub-rede dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -j ACCEPT<\/p>\n<p>Todos os pacotes oriundos de qualquer sub-rede e destinados a qualquer sub-rede dever\u00e3o ser aceitos.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.0\/8 -d www.chat.com.br -j DROP<\/p>\n<p>Os pacotes oriundos da sub-rede 10.0.0.0 (m\u00e1scara 255.0.0.0) e destinados aos hosts cujos endere\u00e7os IP respondem pelo nome www.chat.com.br dever\u00e3o ser descartados. Note que se a m\u00e1quina possuir dom\u00ednios virtuais, todos esses ser\u00e3o bloqueados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.0\/8 -d www.chat.com.br -j REJECT<\/p>\n<p>Os pacotes oriundos da sub-rede 10.0.0.0 (m\u00e1scara 255.0.0.0) e destinados aos hosts cujos endere\u00e7os IP respondem pelo nome www.chat.com.br dever\u00e3o ser descartados. Dever\u00e1 ser enviado um ICMP avisando \u00e0 origem.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -d www.chat.com.br -j DROP<\/p>\n<p>Os pacotes oriundos de qualquer lugar e destinados aos hosts cujos endere\u00e7os IP respondem pelo nome www.chat.com.br dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -d 10.0.0.0\/8 -s www.chat.com.br -j DROP<\/p>\n<p>Os pacotes destinados \u00e0 sub-rede 10.0.0.0 (m\u00e1scara 255.0.0.0) e oriundos aos hosts cujos endere\u00e7os IP respondem pelo nome www.chat.com.br dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s www.chat.com.br -j DROP<\/p>\n<p>Os pacotes oriundos aos hosts cujos endere\u00e7os IP respondem pelo nome www.chat.com.br e destinados a qualquer lugar dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s 200.221.20.0\/24 -j DROP<\/p>\n<p>Os pacotes oriundos da sub-rede 200.221.20.0 (m\u00e1scara 255.255.255.0) e destinados a qualquer lugar dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.5 -p icmp -j DROP<\/p>\n<p>Os pacotes icmp oriundos do host 10.0.0.5 e destinados a qualquer lugar dever\u00e3o ser descartados.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -i eth0 -j ACCEPT<\/p>\n<p>Os pacotes que entrarem pela interface eth0 ser\u00e3o aceitos.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -i ! eth0 -j ACCEPT<\/p>\n<p>Os pacotes que entrarem por qualquer interface, exceto a eth0, ser\u00e3o aceitos.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.5 -p tcp &#8211;sport 80 -j LOG<\/p>\n<p>O tr\u00e1fego de pacotes TCP oriundos da porta 80 do host 10.0.0.5 e destinados a qualquer lugar dever\u00e1 ser gravado em log. No caso, \/var\/log\/messages.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -A FORWARD -p tcp &#8211;dport 25 -j ACCEPT<\/p>\n<p>Os pacotes TCP destinados \u00e0 porta 25 de qualquer host dever\u00e3o ser aceitos.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>Observa\u00e7\u00f5es importantes<\/p>\n<p>Impasses e ordem de processamento<\/p>\n<p>As regras ser\u00e3o interpretadas na ordem em que aparecerem. Sempre que um pacote se adequar a uma regra, tal regra processar\u00e1 o pacote e a sequ\u00eancia iptables ser\u00e1 finalizada naquele instante, sem que as regras seguintes atuem. Isso n\u00e3o se aplicar\u00e1 \u00e0s regras terminadas com -j LOG. Nesse caso, a regra com -j LOG ir\u00e1 atuar, se for o caso, e permitir\u00e1 o prosseguimento da seq\u00fcencia.<\/p>\n<p>Conclus\u00e3o: se houver impasse entre regras, sempre valer\u00e1 a primeira. Assim, entre as regras:<\/p>\n<p>#iptables -A FORWARD -p icmp -j DROP<\/p>\n<p>#iptables -A FORWARD -p icmp -j ACCEPT<\/p>\n<p>Valer\u00e1:<\/p>\n<p>#iptables -A FORWARD -p icmp -j DROP<\/p>\n<p>J\u00e1 entre as regras:<\/p>\n<p>#iptables -A FORWARD -p icmp -j ACCEPT<\/p>\n<p>#iptables -A FORWARD -p icmp -j DROP<\/p>\n<p>Valer\u00e1:<\/p>\n<p>#iptables -A FORWARD -p icmp -j ACCEPT<\/p>\n<p>Em resumo:<\/p>\n<p>ACCEPT &#8211;> P\u00e1ra de processar regras para o pacote atual;<\/p>\n<p>DROP &#8211;> P\u00e1ra de processar regras para o pacote atual;<\/p>\n<p>REJECT &#8211;> P\u00e1ra de processar regras para o pacote atual;<\/p>\n<p>LOG &#8211;> Continua a processar regras para o pacote atual;<\/p>\n<p>Vamos ver um exemplo. As regras ser\u00e3o as seguintes:<\/p>\n<p>iptables -P INPUT DROP<br \/>\niptables -A INPUT -s 10.0.0.1 -j DROP<br \/>\niptables -A INPUT -s 10.0.0.2 -p tcp &#8211;dport 80 -j ACCEPT<br \/>\niptables -A INPUT -s 172.20.0.0\/16 -j ACCEPT<\/p>\n<p>Analisando-se o fluxo de um pacote, chegamos ao diagrama:<\/p>\n<p>Agora, vamos abrir a pol\u00edtica:<\/p>\n<p>iptables -P INPUT ACCEPT<br \/>\niptables -A INPUT -s 10.0.0.1 -j DROP<br \/>\niptables -A INPUT -s 10.0.0.2 -p tcp &#8211;dport 80 -j ACCEPT<br \/>\niptables -A INPUT -s 172.20.0.0\/16 -j ACCEPT<\/p>\n<p>O fluxo tamb\u00e9m mudar\u00e1:<\/p>\n<p>O retorno<\/p>\n<p>Ao se fazer determinadas regras, devemos prever o retorno. Assim, digamos que exista a seguinte situa\u00e7\u00e3o:<\/p>\n<p>#iptables -P FORWARD DROP<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.0\/8 -d 172.20.0.0\/16 -j ACCEPT<\/p>\n<p>Com as regras anteriores, fechamos todo o FORWARD e depois abrimos da sub-rede 10.0.0.0 para a sub-rede 172.20.0.0. No entanto, n\u00e3o tornamos poss\u00edvel a resposta da sub-rede 172.20.0.0 para a sub-rede 10.0.0.0. O correto, ent\u00e3o, seria:<\/p>\n<p>#iptables -P FORWARD DROP<\/p>\n<p>#iptables -A FORWARD -s 10.0.0.0\/8 -d 172.20.0.0\/16 -j ACCEPT<\/p>\n<p>#iptables -A FORWARD -d 10.0.0.0\/8 -s 172.20.0.0\/16 -j ACCEPT<\/p>\n<p>IP FORWARD<\/p>\n<p>Caso haja o envolvimento de mais de uma sub-rede, ser\u00e1 necess\u00e1rio que o IP FORWARD seja ativado para que o iptables funcione corretamente. O IP FORWARD, via kernel, pode ser ativado pelo comando:<\/p>\n<p>#echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward<\/p>\n<p>Cabe lembrar que a reinicializa\u00e7\u00e3o do daemon de rede far\u00e1 com que o roteamento seja perdido. Uma forma de deixar a regra de roteamento permanentemente ativada, resistindo a qualquer tipo de reinicializa\u00e7\u00e3o, seria a altera\u00e7\u00e3o do arquivo \/etc\/sysctl.conf:<\/p>\n<p>net.ipv4.ip_forward = 1<\/p>\n<p>O carregamento<\/p>\n<p>Na primeira vez em que o iptables for utilizado, poder\u00e1 surgir a mensagem:<\/p>\n<p>ip_tables: (c)2000 Netfilter core team<\/p>\n<p>N\u00e3o se preocupe. Isso \u00e9 normal. \u00c9 o carregamento dos m\u00f3dulos necess\u00e1rios. Caso surjam mensagens de erro, certifique-se de que o ipchains n\u00e3o esteja carregado. Caso esteja, descarregue-o:<\/p>\n<p>#rmmod ipchains<\/p>\n<p>Salvando e recuperando tudo<\/p>\n<p>As regras iptables poder\u00e3o ser salvas com o comando:<\/p>\n<p>#iptables-save > arquivo<\/p>\n<p>A recupera\u00e7\u00e3o poder\u00e1 ser feita pelo comando:<\/p>\n<p>#iptables-restore < arquivo\n\nUm t\u00edpico exemplo de carregamento de regras de iptables, ap\u00f3s a inicializa\u00e7\u00e3o do sistema, seria:\n\n#echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n#iptables-restore < \/etc\/iptables.rules\n\nIsso pode ser inserido no fim do arquivo \/etc\/rc.d\/rc.local.\n\nNada impede que as regras sejam colocadas diretamente dentro de um shell script.\n\n \n\n \n\nExtens\u00f5es\n\nAs extens\u00f5es permitem filtragens especiais, principalmente contra ataques de hackers. Os exemplos abaixo mostram como controlar os pings que atravessam o filtro:\n\n \n\nContra Ping\n\n#iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP\n\n \n\nContra Ping of Death\n\n#iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1\/s -j ACCEPT\n#iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP\n\n \n\n\u00c9 l\u00f3gico que as regras anteriores podem ser utilizadas com INPUT.\n\n \n\nN\u00e3o faz parte dos meus objetivos o aprofundamento no assunto extens\u00f5es. Procure por documentos especializados. Consulte a se\u00e7\u00e3o de links.\n\n \n\nMais prote\u00e7\u00e3o\n\nExiste, ainda, uma regra muito importante que pode ser utilizada como seguran\u00e7a. \u00c9 a prote\u00e7\u00e3o contra pacotes danificados, suspeitos ou mal formados.\n\n#iptables -A FORWARD -m unclean -j DROP\n\nTamb\u00e9m pode ser utilizado com INPUT.\n\n \n\nNetwork Address Translator - NAT (tabela nat)\n\nExistem v\u00e1rios recursos que utilizam NAT. Os mais conhecidos s\u00e3o:\n\n--> Mascaramento (masquerading)<\/p>\n<p>&#8211;> Redirecionamento de portas (port forwarding ou PAT)<\/p>\n<p>&#8211;> Redirecionamento de servidores (forwarding)<\/p>\n<p>&#8211;> Proxy transparente (transparent proxy)<\/p>\n<p>&#8211;> Balanceamento de carga (load balance)<\/p>\n<p>Mascaramento<\/p>\n<p>O mascaramento \u00e9 uma forma de fazer NAT (Network Address Translation). Com isso, \u00e9 poss\u00edvel fazer uma rede privada navegar na Internet. A rede solicita os dados para a m\u00e1quina que faz o mascaramento. Essa busca tais dados na Internet&#8230;<\/p>\n<p>&#8230;e os entrega aos solicitantes:<\/p>\n<p>No entanto, um host da Internet, por vontade pr\u00f3pria, n\u00e3o consegue ultrapassar o filtro que faz mascaramento, em dire\u00e7\u00e3o \u00e0 rede:<\/p>\n<p>O \u00fanico endere\u00e7o IP que ir\u00e1 circular na Internet ser\u00e1 o do filtro.<\/p>\n<p>O mascaramento tamb\u00e9m possui um esquema de funcionamento. Como haver\u00e1 trocas de endere\u00e7os, deveremos utilizar a tabela NAT para fazer isso.<\/p>\n<p>Redirecionamento de portas<\/p>\n<p>O redirecionamento de portas ocorre quando desejamos alterar a porta de destino de uma requisi\u00e7\u00e3o. Exemplo: tudo que for destinado \u00e0 porta 23 de qualquer m\u00e1quina, quando passar pela m\u00e1quina filtro, ser\u00e1 redirecionado para a porta 10000 de outro servidor.<\/p>\n<p>Redirecionamento de servidores<\/p>\n<p>Todos os pacotes destinados a um servidor ser\u00e3o redirecionados para outro servidor.<\/p>\n<p>Proxy transparente<\/p>\n<p>\u00c9 a t\u00e9cnica que for\u00e7a o uso de um servidor proxy na rede.<\/p>\n<p>Balanceamento de carga<\/p>\n<p>O balanceamento de carga (load balance) \u00e9 uma t\u00e9cnica utilizada para distribuir carga entre servidores sincronizados. O load balance \u00e9 o ato de distribuir os clientes aos servidores mais desocupados. Esse trabalho tamb\u00e9m pode ser feito por servidores DNS.<\/p>\n<p>A tabela NAT<\/p>\n<p>A tabela NAT funciona da seguinte forma:<\/p>\n<p>ESQUEMA DA TABELA NAT<\/p>\n<p>O NAT \u00e9 dividido em:<\/p>\n<p>&#8211;> SNAT: aplica-se quando desejamos alterar o endere\u00e7o de origem do pacote. Somente a chain POSTROUTING faz SNAT. O mascaramento \u00e9 um exemplo de SNAT.<\/p>\n<p>&#8211;> DNAT: aplica-se quando desejamos alterar o endere\u00e7o de destino do pacote. As chains PREROUTING e OUTPUT fazem DNAT. O redirecionamento de porta, o redirecionamento de servidor, o load balance e o proxy transparente s\u00e3o exemplos de DNAT.<\/p>\n<p>Regras de NAT<\/p>\n<p>Para fazer o mascaramento, deveremos, antes, carregar o m\u00f3dulo de NAT:<\/p>\n<p>#modprobe iptable_nat<\/p>\n<p>As regras mais utilizadas, al\u00e9m da maioria dos recursos descritos para uso com a tabela filter, cont\u00eam o seguinte:<\/p>\n<p>Chains<\/p>\n<p>Existem as seguintes chains:<\/p>\n<p>&#8211;> PREROUTING: utilizada para analisar pacotes que est\u00e3o entrando no kernel para sofrerem NAT. O PREROUTING pode fazer a\u00e7\u00f5es de NAT com o endere\u00e7o de destino do pacote. Isso \u00e9 conhecido como DNAT (Destination NAT);<\/p>\n<p>&#8211;> POSTROUTING: utilizada para analisar pacotes que est\u00e3o saindo do kernel, ap\u00f3s sofrerem NAT. O POSTROUTING pode fazer a\u00e7\u00f5es de NAT com o endere\u00e7o de origem do pacote. Isso \u00e9 conhecido como SNAT (Source NAT);<\/p>\n<p>&#8211;> OUTPUT: utilizada para analisar pacotes que s\u00e3o gerados na pr\u00f3pria m\u00e1quina e que ir\u00e3o sofrer NAT. O OUTPUT pode fazer a\u00e7\u00f5es de NAT com o endere\u00e7o de destino do pacote. Tamb\u00e9m \u00e9 DNAT.<\/p>\n<p>Op\u00e7\u00f5es<\/p>\n<p>-A &#8211;> Append (anexar).<\/p>\n<p>-D &#8211;> Deletar.<\/p>\n<p>Dados<\/p>\n<p>-t &#8211;> Table (tabela). Estabelece a tabela a ser utilizada. A tabela default, por omiss\u00e3o, \u00e9 filter. Para o mascaramento ou NAT ser\u00e1 nat. Exemplo:<\/p>\n<p>#iptables -t nat -A &#8230;<\/p>\n<p>&#8211;to &#8211;> utilizado para definir IP e porta de destino, ap\u00f3s um DNAT, ou de origem, ap\u00f3s um SNAT. Deve ser utilizado ap\u00f3s uma a\u00e7\u00e3o (-j a\u00e7\u00e3o). Assim:<\/p>\n<p>-j DNAT &#8211;to 10.0.0.2<\/p>\n<p>-j DNAT &#8211;to 10.0.0.2:80<\/p>\n<p>-j SNAT &#8211;to 172.20.0.2<\/p>\n<p>&#8211;dport &#8211;> assim como -d define um host de destino, &#8211;dport define uma porta de destino. Deve ser utilizado antes de uma a\u00e7\u00e3o (-j a\u00e7\u00e3o). Antes de &#8211;dport, deve ser especificado um protocolo (-p). Exemplo:<\/p>\n<p>-d 172.20.0.1 -p tcp &#8211;dport 80 -j DNAT &#8211;to 10.0.0.2<\/p>\n<p>&#8211;sport &#8211;> assim como -s define um host de origem, &#8211;sport define uma porta de origem. Deve ser utilizado antes de uma a\u00e7\u00e3o (-j a\u00e7\u00e3o).<\/p>\n<p>&#8211;to-port &#8211;> define uma porta de destino, ap\u00f3s um REDIRECT.<\/p>\n<p>Obs: A maioria dos dados b\u00e1sicos apresentados para a tabela filter continuam valendo. Exemplo: -p servir\u00e1 para definir um protocolo de rede; -d define um host de destino.<\/p>\n<p>A\u00e7\u00f5es<\/p>\n<p>SNAT &#8211;> Utilizado com POSTROUTING para fazer a\u00e7\u00f5es de mascaramento da origem.<\/p>\n<p>DNAT &#8211;> Utilizado com PREROUTING e OUTPUT para fazer a\u00e7\u00f5es de redirecionamento de portas e servidores, balanceamento de carga e proxy transparente. Caso a porta de destino n\u00e3o seja especificada, valer\u00e1 a porta de origem. No filtro, a porta que ser\u00e1 redirecionada n\u00e3o pode existir ou estar ocupada por um daemon.<\/p>\n<p>MASQUERADE &#8211;> Faz mascaramento na sa\u00edda de dados.<\/p>\n<p>REDIRECT &#8211;> Redireciona uma requisi\u00e7\u00e3o para uma porta local do filtro.<\/p>\n<p>Exemplos comentados de regras de filtragem (tabela nat)<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -L<\/p>\n<p>Mostra as regras de NAT ativas.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -F<\/p>\n<p>Apaga todas as regras de NAT existentes.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE<\/p>\n<p>Todos os pacotes que sa\u00edrem pela interface ppp0 (modem) ser\u00e3o mascarados. Isso d\u00e1 um n\u00edvel de seguran\u00e7a elevado \u00e0 rede que est\u00e1 atr\u00e1s da ppp0. \u00c9 uma boa regra para navega\u00e7\u00e3o na Internet. Note que esse tipo de mascaramento n\u00e3o usa SNAT.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A POSTROUTING -d 0\/0 -j MASQUERADE<\/p>\n<p>Tem o mesmo efeito da regra anterior. No entanto, parece ser menos segura, pois estabelece que qualquer pacote destinado a qualquer outra rede, diferente da interna, ser\u00e1 mascarado. A regra anterior refere-se aos pacotes que saem por determinada interface. A op\u00e7\u00e3o -d 0\/0 poderia ser -d 0.0.0.0\/0 tamb\u00e9m. \u00c9 uma outra regra para navega\u00e7\u00e3o na Internet.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A PREROUTING -p tcp -d 10.0.0.2 &#8211;dport 80 -j DNAT &#8211;to 172.20.0.1<\/p>\n<p>Redireciona todos os pacotes destinados \u00e0 porta 80 da m\u00e1quina 10.0.0.2 para a m\u00e1quina 172.20.0.1. Esse tipo de regra exige a especifica\u00e7\u00e3o do protocolo. Como n\u00e3o foi especificada uma porta de destino, a porta 80 ser\u00e1 mantida como destino.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A OUTPUT -p tcp -d 10.0.0.10 -j DNAT &#8211;to 10.0.0.1<\/p>\n<p>Qualquer pacote TCP, originado na m\u00e1quina filtro, destinado a qualquer porta da m\u00e1quina 10.0.0.10, ser\u00e1 desviado para a m\u00e1quina 10.0.0.1 .<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A POSTROUTING -o eth0 -j SNAT &#8211;to 200.20.0.1<\/p>\n<p>Essa regra faz com que todos os pacotes que ir\u00e3o sair pela interface eth0 tenham o seu endere\u00e7o de origem alterado para 200.20.0.1 .<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A PREROUTING -i eth0 -j DNAT &#8211;to 172.20.0.1<\/p>\n<p>Todos os pacotes que entrarem pela eth0 ser\u00e3o enviados para a m\u00e1quina 172.20.0.1<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A PREROUTING -i eth0 -j DNAT &#8211;to 172.20.0.1-172.20.0.3<\/p>\n<p>Aqui haver\u00e1 o load balance. Todos os pacotes que entrarem pela eth0 ser\u00e3o distribu\u00eddos entre as m\u00e1quinas 172.20.0.1 , 172.20.0.2 e 172.20.0.3<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A PREROUTING -s 10.0.0.0\/8 -p tcp &#8211;dport 80 -j REDIRECT &#8211;to-port 3128<\/p>\n<p>Todos os pacotes TCP que vierem da rede 10.0.0.0, com m\u00e1scara 255.0.0.0, destinados \u00e0 porta 80 de qualquer host, n\u00e3o sair\u00e3o; ser\u00e3o redirecionados para a porta 3128 do filtro. Isso \u00e9 o passo necess\u00e1rio para fazer um proxy transparente. O proxy utilizado dever\u00e1 aceitar esse tipo de recurso. No caso, o Squid, que aceita transpar\u00eancia, dever\u00e1 estar instalado na m\u00e1quina filtro, servindo na porta 3128.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#iptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o eth1 -j SNAT 200.20.5.0\/24<\/p>\n<p>Uma situa\u00e7\u00e3o interessante: todos os pacotes que sa\u00edrem da rede 192.168.1.0 ser\u00e3o transformados em 200.20.5.0 .<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>Apesar de estarmos lidando com um filtro de pacotes, que \u00e9 um roteador controlado, h\u00e1 a possibilidade de fazermos algumas opera\u00e7\u00f5es dentro da mesma sub-rede. No entanto, isso tem que ser bem estudado. Muitas vezes ir\u00e1 exigir regras especiais de roteamento est\u00e1tico (comando #route).<\/p>\n<p>Execu\u00e7\u00e3o do mascaramento destinado \u00e0 Internet<\/p>\n<p>Por ser uma atividade perigosa, o acesso \u00e0 Internet deve ser feito com um m\u00e1ximo grau de seguran\u00e7a. Assim, vejamos as regras b\u00e1sicas para permitir que uma rede privada navegue com um IP v\u00e1lido.<\/p>\n<p>Primeiro exemplo: uma rede na Internet<\/p>\n<p>Vamos permitir que a rede 10.0.0.0 navegue na Internet. A m\u00e1quina filtro (gateway) ser\u00e1 a 10.0.0.1. Regras:<\/p>\n<p>#echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n#modprobe iptable_nat<br \/>\n#iptables -t nat -A POSTROUTING -s 10.0.0.0\/8 -o ppp0 -j MASQUERADE<\/p>\n<p>O procedimento \u00e9 totalmente seguro, pois discrimina uma origem, que s\u00f3 poder\u00e1 sair pela ppp0, de forma mascarada. Hoje em dia, o carregamento do m\u00f3dulo iptable_nat, na maioria das vezes, se d\u00e1 automaticamente, dispensando a segunda linha.<\/p>\n<p>Segundo exemplo: alguns hosts na Internet<\/p>\n<p>Vamos permitir que alguns hosts, no caso, o 10.0.0.10, o 10.0.0.20 e o 10.5.2.41, naveguem na Internet. A m\u00e1quina filtro (gateway) ser\u00e1 a 10.0.0.1. Regras:<\/p>\n<p>#echo 1 > \/proc\/sys\/net\/ipv4\/ip_forward<br \/>\n#iptables -t nat -A POSTROUTING -s 10.0.0.10 -o ppp0 -j MASQUERADE<br \/>\n#iptables -t nat -A POSTROUTING -s 10.0.0.20 -o ppp0 -j MASQUERADE<br \/>\n#iptables -t nat -A POSTROUTING -s 10.5.2.41 -o ppp0 -j MASQUERADE<\/p>\n<p>Execu\u00e7\u00e3o de FTP<\/p>\n<p>Para executar sess\u00f5es de FTP, ser\u00e1 necess\u00e1rio o carregamento de dois m\u00f3dulos:<\/p>\n<p>#insmod ip_conntrack_ftp<br \/>\n#insmod ip_nat_ftp<\/p>\n<p>Salvando e recuperando regras<\/p>\n<p>As regras de iptables devem ser salvas com o comando iptables-save e carregadas com iptables-restore. O roteamento est\u00e1tico e o carregamento dos m\u00f3dulos FTP devem ser feitos separadamente. Apenas para ilustrar, vamos executar o salvamento e a recupera\u00e7\u00e3o das regras.<\/p>\n<p>Salvamento de regras<\/p>\n<p>&#8211;> Criando as regras<\/p>\n<p>#iptables -t nat -A POSTROUTING -s 10.0.0.10 -o ppp0 -j MASQUERADE<br \/>\n#iptables -t nat -A POSTROUTING -s 10.0.0.20 -o ppp0 -j MASQUERADE<br \/>\n#iptables -t nat -A POSTROUTING -s 10.5.2.41 -o ppp0 -j MASQUERADE<\/p>\n<p>&#8211;> Salvando<\/p>\n<p>#iptables-save > \/etc\/iptables.rules<\/p>\n<p>&#8211;> Recupera\u00e7\u00e3o<\/p>\n<p>Um script de recupera\u00e7\u00e3o, inicializado pelo \/etc\/rc.d\/rc.local, poderia ter a seguinte estrutura:<\/p>\n<p>#!\/bin\/bash<br \/>\necho 1 > \/proc\/sys\/net\/ipv4\/ip_forward<br \/>\nmodprobe iptable_nat<br \/>\niptables-restore < \/etc\/iptables.rules\ninsmod ip_conntrack_ftp\ninsmod ip_nat_ftp\n\n \n\n \n\nTabelas Filter e NAT atuando em conjunto\n\nAs tabelas filter e nat podem atuar em conjunto, funcionando em paralelo. H\u00e1 de se ter cuidado pois, como j\u00e1 disse, elas atuam em paralelo, como duas pilhas que ser\u00e3o executadas ao mesmo tempo. Assim sendo, se tivermos as regras:\n\n#iptables -t nat -A POSTROUTING -s 10.0.0.0\/8 -o eth0 -j MASQUERADE\n#iptables -A FORWARD -j DROP\n\nApesar da primeira (tabela nat) possibilitar a navega\u00e7\u00e3o mascarada da rede 10.0.0.0 na Internet, essa navega\u00e7\u00e3o n\u00e3o ocorrer\u00e1, pois a segunda regra (tabela filter) ir\u00e1 barrar o forward entre as redes.\n\n \n\nTopologias de filtros de pacotes\n\n \n\nO posicionamento de um filtros de pacotes dentro da rede \u00e9 de extrema import\u00e2ncia para ela. H\u00e1 duas possibilidades b\u00e1sicas para a utiliza\u00e7\u00e3o de um filtros de pacotes: filtro isolado e filtro incorporado, sendo este \u00faltimo o mais inseguro e menos desej\u00e1vel.\n\nO filtro ser\u00e1 isolado quando estiver entre m\u00e1quinas, com fun\u00e7\u00e3o exclusiva de filtro:\n\n\n\nO filtro ser\u00e1 incorporado quando n\u00e3o houver uma m\u00e1quina isolada como filtro. Nesse caso, as m\u00e1quinas da rede dever\u00e3o estabelecer, individualmente, as suas pr\u00f3prias regras de filtragem. \u00c9 o sistema mais inseguro:\n\n\n\nNada impede que os dois sistemas sejam utilizados em parceria, oferendo-se assim um alto grau de seguran\u00e7a \u00e0 rede. Cabe ressaltar que no filtro incorporado h\u00e1 maior n\u00edvel de inseguran\u00e7a, uma vez que outros processos rodam junto com o filtro.\n\n\n\t\t\nLEMBRE-SE: Como foi dito no item 2. Generalidades, firewall n\u00e3o \u00e9 uma m\u00e1quina ou um programa. \u00c9 um sistema de seguran\u00e7a composto por filtros de pacotes e estados, proxies, IDS, IPS, antiv\u00edrus de rede etc. N\u00e3o deixe de conhecer o IPS HLBR, dispon\u00edvel em http:\/\/hlbr.sourceforge.net. Se preferir, clique aqui para fazer download.\n\n\nhttp:\/\/eriberto.pro.br\/iptables\/3.html\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FIREWALL COM IPTABLES www.eriberto.pro.br\/iptables by Jo\u00e3o Eriberto Mota Filho 3. TABELAS Tabela Filter Vejamos o funcionamento da tabela filter (default) e as suas respectivas chains: ESQUEMA DA TABELA FILTER S\u00e3o tr\u00eas, as poss\u00edveis chains: &#8211;> INPUT: utilizada quando o destino final \u00e9 a pr\u00f3pria m\u00e1quina&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_angie_page":false,"page_builder":"","footnotes":""},"categories":[12],"tags":[],"class_list":["post-2798","post","type-post","status-publish","format-standard","hentry","category-iptables"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=2798"}],"version-history":[{"count":0,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2798\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=2798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=2798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=2798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}