Você está na página 1de 8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

Guia do Linux/Avanado/Firewall iptables/Manipulando chains


Origem: Wikilivros, livros abertos por um mundo aberto. < Guia do Linux | Avanado | Firewall iptables

ndice
1 Manipulando chains 1.1 Adicionando regras - A 1.2 Listando regras - L 1.3 Apagando uma regra - D 1.4 Inserindo uma regra - I 1.5 Substituindo uma regra - R 1.6 Criando um novo chain - N 1.7 Renomeando um chain criado pelo usurio - E 1.8 Listando os nomes de todas as tabelas atuais 1.9 Limpando as regras de um chain - F 1.10 Apagando um chain criado pelo usurio - X 1.11 Zerando contador de bytes dos chains - Z 1.12 Especificando a poltica padro de um chain - P

Manipulando chains
Oi p t a b l e strabalha com uma tabela de regras que analisada uma a uma at que a ltima seja processada. Por padro, se uma regra tiver qualquer erro, uma mensagem ser mostrada e ela descartada. O pacote no conferir e a ao final (se ele vai ser aceito ou rejeitado) depender das regras seguintes. As opes passadas ao i p t a b l e susadas para manipular os chains so SEMPRE em maisculas. As seguintes operaes podem ser realizadas:

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

# p i n g1 2 7 . 0 . 0 . 1 P I N G1 2 7 . 0 . 0 . 1( 1 2 7 . 0 . 0 . 1 ) :5 6d a t ab y t e s 6 4b y t e sf r o m1 2 7 . 0 . 0 . 1 :i c m p _ s e q = 0t t l = 2 5 5t i m e = 0 . 6m s 6 4b y t e sf r o m1 2 7 . 0 . 0 . 1 :i c m p _ s e q = 1t t l = 2 5 5t i m e = 0 . 5m s -1 2 7 . 0 . 0 . 1p i n gs t a t i s t i c s2p a c k e t st r a n s m i t t e d ,2p a c k e t sr e c e i v e d ,0 %p a c k e tl o s s r o u n d t r i pm i n / a v g / m a x=0 . 5 / 0 . 5 / 0 . 6m s


pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 1/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

Ok, a mquina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereo 127.0.0.1 (-d 127.0.0.1): iptables -t filter -A INPUT -d 127.0.0.1 -j DROP Agora verificamos um novo ping:

# p i n g1 2 7 . 0 . 0 . 1 P I N G1 2 7 . 0 . 0 . 1( 1 2 7 . 0 . 0 . 1 ) :5 6d a t ab y t e s -1 2 7 . 0 . 0 . 1p i n gs t a t i s t i c s2p a c k e t st r a n s m i t t e d ,0p a c k e t sr e c e i v e d ,1 0 0 %p a c k e tl o s s

Desta vez a mquina 127.0.0.1 no respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d 127.0.0.1) so rejeitados (-j DROP). A opo -A usada para adicionar novas regras no final do chain. Alm de -j DROP que serve para rejeitar os pacotes, podemos tambm usar -j ACCEPT para aceitar pacotes. A opo j chamada de alvo da regra ou somente alvo pois define o destino do pacote que atravessa a regra (veja [#s-fw-iptables-outras-alvo Especificando um alvo, Seo 10.3.6]). Bem vindo a base de um sistema de firewall :-) OBS1: - O acesso a interface loopback no deve ser de forma alguma bloqueado, pois muitos aplicativos utilizam soquetes tcp para realizarem conexes, mesmo que voc no possua uma rede interna. OBS2: - A tabela filter ser usada como padro caso nenhuma tabela seja especificada atravs da opo -t.

Listando regras - L
A seguinte sintaxe usada para listar as regras criadas: iptables [-t tabela] -L [chain] [opes] Onde: tabela uma das tabelas usadas pelo i p t a b l e s . Se a tabela no for especificada, a tabela filter ser usada como padro. Veja [#s-fw-iptables-tabelas O que so tabelas?, Seo 10.1.14] para detalhes. chain Um dos chains disponveis na tabela acima (veja [#s-fw-iptables-tabelas O que so tabelas?, Seo 10.1.14]) ou criado pelo usurio ([#s-fw-iptables-chains-N Criando um novo chain - N, Seo 10.2.6]). Caso o chain no seja especificado, todos os chains da tabela sero mostrados. opes As seguintes opes podem ser usadas para listar o contedo de chains: -v - Exibe mais detalhes sobre as regras criadas nos chains. -n - Exibe endereos de mquinas/portas como nmeros ao invs de tentar a resoluo DNS e consulta ao / e t c / s e r v i c e s . A resoluo de nomes pode tomar muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de sua conexo.
pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 2/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

-x - Exibe nmeros exatos ao invs de nmeros redondos. Tambm mostra a faixa de portas de uma regra de firewall. --line-numbers - Exibe o nmero da posio da regra na primeira coluna da listagem. Para listar a regra criada anteriormente usamos o comando:

# i p t a b l e stf i l t e rLI N P U T C h a i nI N P U T( p o l i c yA C C E P T ) t a r g e t p r o to p ts o u r c e D R O P a l l - a n y w h e r e

d e s t i n a t i o n l o c a l h o s t

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

# i p t a b l e sLI N P U Tn C h a i nI N P U T( p o l i c yA C C E P T ) t a r g e t p r o to p ts o u r c e D R O P a l l - 0 . 0 . 0 . 0 / 0

d e s t i n a t i o n 1 2 7 . 0 . 0 . 1

# i p t a b l e sLI N P U Tnl i n e n u m b e r s C h a i nI N P U T( p o l i c yA C C E P T ) n u mt a r g e t p r o to p ts o u r c e 1 D R O P a l l - 0 . 0 . 0 . 0 / 0

d e s t i n a t i o n 1 2 7 . 0 . 0 . 1

# i p t a b l e sLI N P U Tnv C h a i nI N P U T( p o l i c yA C C E P T7 8p a c k e t s ,5 8 2 0b y t e s ) p k t sb y t e st a r g e t p r o to p ti n o u t s o u r c e 2 1 9 4D R O P i c m p- * * 0 . 0 . 0 . 0 / 0

d e s t i n a t i o n 1 2 7 . 0 . 0 . 1

Os campos assim possuem o seguinte significado: Chain INPUT Nome do chain listado (policy ACCEPT 78 packets, 5820 bytes) poltica padro do chain (veja [#s-fw-iptables-chains-P Especificando a poltica padro de um chain - P, Seo 10.2.12]). pkts Quantidade de pacotes que atravessaram a regra (veja [#s-fw-iptables-chains-Z Zerando contador de bytes dos chains - Z, Seo 10.2.11]). bytes Quantidade de bytes que atravessaram a regra. Pode ser referenciado com K (Kilobytes), M (Megabytes), G (Gigabytes). target O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP ou outro chain. Veja [#s-fw-iptablesoutras-alvo Especificando um alvo, Seo 10.3.6] para detalhes sobre a especificao de um alvo. prot Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. Veja [#s-fw-iptables-outras-proto
pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 3/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

Especificando um protocolo, Seo 10.3.3] para detalhes. opt Opes extras passadas a regra. Normalmente "!" (veja [#s-fw-iptables-outras-excessoes Especificando uma exceo, Seo 10.3.5]) ou "f" (veja [#s-fw-iptables-outras-fragmentos Especificando fragmentos, Seo 10.3.4]). in Interface de entrada (de onde os dados chegam). Veja [#s-fw-iptables-outras-iface Especificando a interface de origem/destino, Seo 10.3.2]. out Interface de sada (para onde os dados vo). Veja [#s-fw-iptables-outras-iface Especificando a interface de origem/destino, Seo 10.3.2]. source Endereo de origem. Veja [#s-fw-iptables-outras-endOD Especificando um endereo de origem/destino, Seo 10.3.1]. destination Endereo de destino. Veja [#s-fw-iptables-outras-endOD Especificando um endereo de origem/destino, Seo 10.3.1]. outras opes Estas opes normalmente aparecem quando so usadas a opo -x: dpt ou dpts - Especifica a porta ou faixa de portas de destino. reject-with icmp-port-unreachable - Significa que foi usado o alvo REJECT naquela regra (veja [#s-fw-iptables-outras-alvo-REJECT Alvo REJECT, Seo 10.3.6.1]).

Apagando uma regra - D


Para apagar um chain, existem duas alternativas: Quando sabemos qual o nmero da regra no chain (listado com a opo -L) podemos referenciar o nmero diretamente. Por exemplo, para apagar a regra criada acima: iptables -t filter -D INPUT 1 Esta opo no boa quando temos um firewall complexo com um grande nmero de regras por chains, neste caso a segunda opo a mais apropriada. Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -A por -D: iptables -t filter -D INPUT -d 127.0.0.1 -j DROP Ento a regra correspondentes no chain INPUT ser automaticamente apagada (confira listando o chain com a opo "-L"). Caso o chain possua vrias regras semelhantes, somente a primeira ser apagada. OBS: No possvel apagar os chains defaults do i p t a b l e s (INPUT, OUTPUT...).

Inserindo uma regra - I


Precisamos que o trfego vindo de 1 9 2 . 1 6 8 . 1 . 1 5no seja rejeitado pelo nosso firewall. No podemos adicionar uma nova regra (-A) pois esta seria includa no final do chain e o trfego seria rejeitado pela primeira regra (nunca atingindo a segunda). A soluo inserir a nova regra antes da regra que bloqueia todo o trfego ao endereo 1 2 7 . 0 . 0 . 1na posio 1: iptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j ACCEPT Aps este comando, temos a regra inserida na primeira posio do chain (repare no nmero 1 aps INPUT) e
pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 4/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

a antiga regra nmero 1 passa a ser a nmero 2. Desta forma a regra acima ser consultada, se a mquina de origem for 192.168.1.15 ento o trfego estar garantido, caso contrrio o trfego com o destino 127.0.0.1 ser bloqueado na regra seguinte.

Substituindo uma regra - R


Aps criar nossa regra, percebemos que a nossa inteno era somente bloquear os pings com o destino 1 2 7 . 0 . 0 . 1(pacotes ICMP) e no havia necessidade de bloquear todo o trfego da mquina. Existem duas alternativas: apagar a regra e inserir uma nova no lugar ou modificar diretamente a regra j criada sem afetar outras regras existentes e mantendo a sua ordem no chain (isso muito importante). Use o seguinte comando: iptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROP O nmero 2 o nmero da regra que ser substituda no chain INPUT, e deve ser especificado. O comando acima substituir a regra 2 do chain INPUT (-R INPUT 2) bloqueando (-j DROP) qualquer pacote icmp (-p icmp) com o destino 1 2 7 . 0 . 0 . 1(-d 127.0.0.1).

Criando um novo chain - N


Em firewalls organizados com um grande nmero de regras, interessante criar chains individuais para organizar regras de um mesmo tipo ou que tenha por objetivo analisar um trfego de uma mesma categoria (interface, endereo de origem, destino, protocolo, etc) pois podem consumir muitas linhas e tornar o gerenciamento do firewall confuso (e consequentemente causar srios riscos de segurana). O tamanho mximo de um nome de chain de 31 caracteres e podem conter tanto letras maisculas quanto minsculas. iptables [-t tabela] [-N novochain] Para criar o chain internet (que pode ser usado para agrupar as regras de internet) usamos o seguinte comando:
i p t a b l e stf i l t e rNi n t e r n e t

Para inserir regras no chain internet basta especifica-lo aps a opo -A:
i p t a b l e stf i l t e rAi n t e r n e ts2 0 0 . 2 0 0 . 2 0 0 . 2 0 0jD R O P

E ento criamos um pulo (-j) do chain INPUT para o chain internet : iptables -t filter -A INPUT -j internet OBS: O chain criando pelo usurio pode ter seu nome tanto em maisculas como minsculas. Se uma mquina do endereo 200.200.200.200 tentar acessar sua mquina, o i p t a b l e sconsultar as seguintes regras:
` I N P U T ' |R e g r a 1 :s1 9 2 . 1 6 8 . 1 . 1 5 | | | |R e g r a 2 :s1 9 2 . 1 6 8 . 1 . 1 | | | |R e g r a 3 :jD R O P | ` i n t e r n e t ' |R e g r a 1 :s2 0 0 . 2 0 0 . 2 0 0 . 2 0 0 | | | |R e g r a 2 :d1 9 2 . 1 6 8 . 1 . 1 | -

Op a c o t et e moe n d e r e od eo r i g e m 2 0 0 . 2 0 0 . 2 0 0 . 2 0 0 ,e l ep a s s ap e l a p r i m e i r aes e g u n d ar e g r a sd oc h a i n I N P U T ,at e r c e i r ar e g r ad i r e c i o n a p a r aoc h a i ni n t e r n e t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ v / v / | \ // | \ |R e g r a 1 :s1 9 2 . 1 6 8 . 1 . 1 5|| / |R e g r a 1 :s2 0 0 . 2 0 0 . 2 0 0 . 2 0 0jD R O P \ _ _ _ _ _ \ | | | / | | /


pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 5/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

|R e g r a 2 :s1 9 2 . 1 6 8 . 1 . 1 ||/ | | | / |R e g r a 3 :ji n t e r n e t / | | | |R e g r a 4 :jD R O P | \ /

|R e g r a 2 :d2 0 0 . 2 0 0 . 2 0 0 . 2 0 2jD R O P | \ / N oc h a i ni n t e r n e t ,ap r i m e i r ar e g r ac o n f e r e c o moe n d e r e od eo r i g e m2 0 0 . 2 0 0 . 2 0 0 . 2 0 0e op a c o t eb l o q u e a d o .

S eu m am q u i n ac o moe n d e r e od eo r i g e m2 0 0 . 2 0 0 . 2 0 0 . 2 0 1t e n t a ra c e s s a ram q u i n a , e n t oa sr e g r ac o n s u l t a d a ss e r oa ss e g u i n t e s :

Op a c o t et e moe n d e r e od eo r i g e m 2 0 0 . 2 0 0 . 2 0 0 . 2 0 1 ,e l ep a s s ap e l a p r i m e i r aes e g u n d ar e g r a sd oc h a i n I N P U T ,at e r c e i r ar e g r ad i r e c i o n a p a r aoc h a i ni n t e r n e t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ v / v / | \ // | \ |R e g r a 1 :s1 9 2 . 1 6 8 . 1 . 1 5|| / |R e g r a 1 :s2 0 0 . 2 0 0 . 2 0 0 . 2 0 0jD R O P || | | | / | | | |R e g r a 2 :s1 9 2 . 1 6 8 . 1 . 1 ||/ |R e g r a 2 :s2 0 0 . 2 0 0 . 2 0 0 . 2 0 2jD R O P || | | | / \ | / |R e g r a 3 :ji n t e r n e t / | v | | / |R e g r a 4 :jD R O P -\ / / Op a c o t ep a s s ap e l a sr e g r a s1e2d oc h a i n | i n t e r n e t ,c o m oe l en oc o n f e r ec o mn e n h u m a v d a s2r e g r a se l er e t o r n aa oc h a i nI N P U Te E s t ar e g r aan m e r o4 a n a l i s a d op e l ar e g r as e g u i n t e . q u ed i zp a r ar e j e i t a ro p a c o t e .

Renomeando um chain criado pelo usurio - E


Se por algum motivo precisar renomear um chain criado por voc na tabela filter, nat ou mangle, isto poder ser feito usando a opo -E do i p t a b l e s :
i p t a b l e stf i l t e rEc h a i n a n t i g on o v o c h a i n

Note que no possvel renomear os chains defaults do i p t a b l e s .

Listando os nomes de todas as tabelas atuais


Use o comando cat /proc/net/ip_tables_names para fazer isto. interessante dar uma olhada nos arquivos dentro do diretrio / p r o c / n e t , pois os arquivos existentes podem lhe interessar para outras finalidades.

Limpando as regras de um chain - F


Para limpar todas as regras de um chain, use a seguinte sintaxe: iptables [-t tabela] [-F chain] Onde: tabela Tabela que contm o chain que desejamos zerar. chain Chain que desejamos limpar. Caso um chain no seja especificado, todos os chains da tabela sero limpos.

pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains

6/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

i p t a b l e stf i l t e rFI N P U T i p t a b l e stf i l t e rF

Apagando um chain criado pelo usurio - X


Para apagarmos um chain criado pelo usurio, usamos a seguinte sintaxe: iptables [-t tabela] [-X chain] Onde: tabela Nome da tabela que contm o chain que desejamos excluir. chain Nome do chain que desejamos apagar. Caso no seja especificado, todos os chains definidos pelo usurio na tabela especificada sero excludos. OBS: - Chains embutidos nas tabelas no podem ser apagados pelo usurio. Veja os nomes destes chains em [#s-fw-iptables-tabelas O que so tabelas?, Seo 10.1.14].
i p t a b l e stf i l t e rXi n t e r n e t i p t a b l e sX

Zerando contador de bytes dos chains - Z


Este comando zera o campo pkts e bytes de uma regra do i p t a b l e s . Estes campos podem ser visualizados com o comando i p t a b l e sLv . A seguinte sintaxe usada: iptables [-t tabela] [-Z chain] [-L] Onde: tabela Nome da tabela que contm o chain que queremos zerar os contadores de bytes e pacotes. chain Chain que deve ter os contadores zerados. Caso no seja especificado, todos os chains da tabela tero os contadores zerados. Note que as opes -Z e -L podem ser usadas juntas, assim o chain ser listado e imediatamente zerado. Isto evita a passagem de pacotes durante a listagem de um chain.
i p t a b l e stf i l t e rZI N P U T

Especificando a poltica padro de um chain - P


A poltica padro determina o que acontecer com um pacote quando ele chegar ao final das regras contidas em um chain. A poltica padro do i p t a b l e s "ACCEPT" mas isto pode ser alterado com o comando: iptables [-t tabela] [-P chain] [ACCEPT/DROP] Onde: tabela Tabela que contm o chain que desejamos modificar a poltica padro. chain Define o chain que ter a poltica modificada. O chain deve ser especificado. ACCEPT/DROP ACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em regras permissivas). DROP rejeita os pacotes caso nenhuma regra do chain conferir (usado em regras restritivas).
pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains 7/8

08/07/13

Guia do Linux/Avanado/Firewall iptables/Manipulando chains - Wikilivros

A poltica padro de um chain mostrada com o comando i p t a b l e sL :


#i p t a b l e sLI N P U T C h a i nI N P U T( p o l i c yA C C E P T ) t a r g e t p r o to p ts o u r c e D R O P i c m p- a n y w h e r e

d e s t i n a t i o n l o c a l h o s t

No exemplo acima, a poltica padro de INPUT ACCEPT (policy ACCEPT), o que significa que qualquer pacote que no seja rejeitado pela regra do chain, ser aceito. Para alterar a poltica padro deste chain usamos o comando:
i p t a b l e stf i l t e rPI N P U TD R O P

NOTA: As polticas de acesso PERMISSIVASS (ACCEPT) normalmente so usadas em conjunto com regras restritivas no chain correspondentes (tudo bloqueado e o que sobrar liberado) e polticas RESTRITIVAS (DROP) so usadas em conjunto com regras permissivas no chain correspondente (tudo liberado e o que sobrar bloqueado pela poltica padro). Obtido em "http://pt.wikibooks.org/w/index.php? title=Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains&oldid=215154" Categorias: Livro/Guia do Linux Livro/Guia do Linux/Avanado Esta pgina foi modificada pela ltima vez (s) 21h43min de 15 de maro de 2011. Este texto disponibilizado nos termos da licena Creative Commons Atribuio-Compartilhamento pela mesma Licena 3.0 Unported; pode estar sujeito a condies adicionais. Consulte as Condies de Uso para mais detalhes.

pt.wikibooks.org/wiki/Guia_do_Linux/Avanado/Firewall_iptables/Manipulando_chains

8/8