Вы находитесь на странице: 1из 5

Aldeia Numaboa - iptables para iniciantes

1 de 5

http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...

Informtica Numaboa - Linux


iptables para iniciantes
Qui
1
Jan
2009

02:46
(9 votos, mdia 4.11 de 5)

Categoria: Como fazer configuraes


Atualizao: Quinta, 05 Julho 2012 19:10
Autor: vov Vicki
Acessos: 13250

O iptables uma ferramenta que pode ser usada para controlar o Netfilter das mais diversas distribuies Linux. O Netfilter
um firewall embutido no kernel do Linux e o iptables uma ferramenta que permite estabelecer regras para este firewall.
Este tutorial trata apenas dos aspectos bsicos das tabelas do iptables e da sintaxe para a criao de regras.

O Netfilter
Como voc j deve saber, toda comunicao numa rede TCP-IP feita atravs de pacotes. O Netfilter trata apenas de regras que podem ser
aplicadas aos pacotes. Cada regra criada para fazer alguma coisa, e esta coisa chamada de alvo. As regras pertencem a vertentes
(chains), que so usadas para agrupar regras. Imagine as vertentes como uma correnteza que carrega pacotes, onde cada vertente leva
determinado tipo de pacote. Cada vertente descrita em uma tabela.

Alvos das Regras


Como j disse, as regras atuam sobre os pacotes. Se uma regra for aplicvel a um pacote, ento o alvo executado. Os alvos pr-existentes
so ACCEPT (aceitar), DROP (descartar), QUEUE (colocar em fila de espera) e RETURN (retornar ou devolver).

As cinco vertentes pr-existentes


Imagine seu sistema como uma caixa preta. Fora desta caixa preta fica um processador que "caa" todos os pacotes destinados ao seu
sistema antes mesmo que eles alcancem a interface de entrada - uma placa ethernet, um modem, uma antena de wireless ou qualquer outra
interface de comunicao. Esta rea chamada de pr-roteamento. Como os pacotes no podem ser alterados pelo sistema antes de eles
entrarem no sistema, mais fcil imaginar que eles possam ser alterados nesta rea de pr-roteamento para que, quando alcanarem a
interface, j tenham sido modificados e estejam prontos para serem roteados. Desta forma, as regras da vertente PREROUTING podem ser
aplicadas antes que os pacotes entrem no sistema.
Dentro do sistema existem mais trs vertentes: INPUT (entrada), FORWARD (redespacho) e OUTPUT (sada). Todos os pacotes que chegam
so levados ou pela "correnteza" INPUT ou pela "correnteza" FORWARD. Os pacotes que esto apenas em trnsito so levados pela vertente
FORWARD. Quanto ao sistema local, os pacotes que so destinados a ele chegam pela vertente INPUT e os pacotes produzidos por ele so
enviados e transitam apenas pela vertente OUTPUT.
Quando os pacotes saem da "caixa preta" e ainda no abandonaram a mquina, eles ainda podem ser levados por uma ltima vertente - a
POSTROUTING. Esta a rea de ps-roteamento, onde o sistema tambm no pode mais alcanar os pacotes.

As tabelas do iptables
O framework do iptables dividido em 3 tabelas (vertentes) separadas:
tabela filter,
tabela nat (Network Address Translation - Traduo de Endereos de Rede) e
tabela mangle (lustrar, dar brilho).
Cada uma destas tabelas representam correntes ou vertentes (chains) mostrando os caminhos que devem ser seguidos ou as tarefas que
devem ser realizadas.

O filtro
A tabela filter a tabela padro e uma das mais utilizadas. usada para identificar e tratar pacotes que passam pelo firewall. Esta tabela
possui trs vertentes: INPUT (entrada), OUTPUT (sada) e FORWARD (redespacho), ou seja, o corao da "caixa preta" do sistema. A

10/04/2014 17:23

Aldeia Numaboa - iptables para iniciantes

2 de 5

http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...

vertente de entrada trata os pacotes destinados ao sistema local, a de sada filtra os pacotes que esto saindo do sistema local e a vertente de
redespacho mostra o que deve ser feito com os pacotes que esto apenas em trnsito porque se destinam a outra mquina.
Um dado pacote no pode transitar por mais de uma vertente, ou seja, o pacote que estiver na "correnteza" INPUT no pode pular a a
vertente FORWARD e vice-versa.
Se voc quiser saber se sua mquina est ou no filtrando pacotes, chame o iptables para listar a tabela de filtragem com -L (lista). Se voc
ainda no definiu nenhuma regra de filtragem, o resultado mostra apenas as vertentes vazias:
# iptables -L
Chain INPUT (policy ACCEPT)
target

prot opt source

destination

Chain FORWARD (policy ACCEPT)


target

prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target

prot opt source

destination

Nada impede identificar a tabela no comando usado: iptables -L -t filter tem o mesmo efeito que iptables -L.

A tabela NAT
Esta tabela usada para alterar o endereo IP e/ou portas de destino. Suas vertentes so PREROUTING (pr-roteamento), POSTROUTING
(ps-roteamento) e OUTPUT (sada).
Na vertente PREROUTING podemos identificar a origem do pacote (interface de entrada) alm do endereo IP e a porta qual se destina.
Antes do pacote ser roteado (quando ainda est na rea de pr-roteamento) podemos alterar o IP e tambm a porta que deve receb-lo - em
outras palavras, pode-se mudar a rota do pacote direcionando-o para uma outra mquina e/ou para uma outra porta na mesma mquina ou
numa mquina diferente.
A vertente OUTPUT serve para dar sada aos pacotes e para analis-los antes que saiam da mquina.
Na vertente POSTROUTING podemos alterar o IP/porta de origem do pacote. Tambm podemos indicar a interface de sada. Tudo isto
acontece depois do pacote ter sido tratado na vertente OUTPUT e um pouquinho antes de ser despachado, ou seja, quando est na rea de
ps-roteamento.
Se voc quiser saber se a sua mquina est redirecionando pacotes, chame o iptables com o comando -L -t nat. Se nenhuma regra tiver sido
definida, a listagem deve ser a seguinte:
# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target

prot opt source

destination

Chain POSTROUTING (policy ACCEPT)


target

prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target

prot opt source

destination

Apenas para reforar: para listar a tabela NAT, preciso especific-la com a diretiva -t (tabela). No caso da tabela de filtragem isto no foi
preciso porque o filtro a tabela padro do iptables.

A tabela mangle
Esta tabela serve para guardar as regras que devem ser seguidas para "escovar" ("lustrar") pacotes, ou seja, fazer pacotes "mexidos". Mas
quem que quer ou precisa dar uma ajeitada em pacotes? O motivo mais comum alterar o campo Tipo de Servio (Type Of Service - TOS).
Este campo lido pelo kernel do Linux e altera a prioridade do pacote.
Como o uso da tabela mangle pequeno e depende de conhecimentos mais especializados, no vou entrar em maiores detalhes por que
ainda temos muito pela frente
Em todo caso, agora que voc j sabe como descobrir as vertentes de uma tabela, que tal dar um iptables -L -t mangle?

Aprendendo na prtica
O iptables disponibiliza uma srie de comandos que podem ser "vitaminados" com um outro tanto de opes. Pelo menos um destes comandos
ns j conhecemos, o -L, usado para listar tabelas. Se voc tiver curiosidade, faa um iptables -h para ver o que pode ser feito:
iptables -h
iptables v1.3.3
Usage: iptables -[AD] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]

10/04/2014 17:23

Aldeia Numaboa - iptables para iniciantes

3 de 5

http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...

iptables -[NX] chain


iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append

-A chain

Append to chain

--delete

-D chain

Delete matching rule from chain

--delete

-D chain rulenum

Delete rule rulenum (1 = first) from chain

--insert

-I chain [rulenum]

Insert in chain as rulenum (default 1=first)

--replace -R chain rulenum

Replace rule rulenum (1 = first) in chain

--list

-L [chain]

List the rules in a chain or all chains

--flush

-F [chain]

Delete all rules in

--zero

-Z [chain]

Zero counters in chain or all chains

--new

-N chain

Create a new user-defined chain

chain or all chains

--delete-chain -X [chain]

Delete a user-defined chain

--policy

Change policy on chain to target

-P chain target

--rename-chain -E old-chain new-chain


Change chain name, (moving any references)
Options:
--proto

-p [!] proto

protocol: by number or name, eg. `tcp'

--source

-s [!] address[/mask]

source specification

--destination -d [!] address[/mask] destination specification


--in-interface -i [!] input name[+] network interface name ([+] for wildcard)
--jump

-j target

target for rule (may load target extension)

--match

-m match

extended match (may load extension)

--numeric

-n

numeric output of addresses and ports

--out-interface -o [!] output name[+]


network interface name ([+] for wildcard)
--table

-t table

table to manipulate (default: `filter')

--verbose

-v

verbose mode

--line-numbers

print line numbers when listing

--exact

expand numbers (display exact values)

-x

[!] --fragment -f

match second or further fragments only

--modprobe=<command>

try to insert modules using this command

--set-counters PKTS BYTES

set the counter during insert/append

[!] --version -V

print package version.

Observe que todos os comandos e opes possuem duas formas: a completa e a reduzida. Observe tambm que a forma reduzida dos
comandos sempre em letra maiscula e a das opes em letra minscula e que a forma completa precedida por -- e a forma reduzida por
-. Apenas para ficarmos no que j sabemos usar, para listar tabelas a forma completa --list (dois hfens seguidos pela palavra list) e a forma
reduzida -L (um hfem seguido pela letra maiscula L).

Criando a primeira regra


Se que voc no sabe, o endereo 127.0.0.1 a interface 'loopback', a qual existe mesmo quando nenhuma conexo de rede estiver ativa.
Vamos us-la neste exemplo para criar pacotes.
O modo mais fcil e rpido de criar um pacote usando o programa 'ping'. O ping envia um pacote ICMP tipo 8 (requisio de eco) ao qual
todos os hosts (mquinas) que estejam no mesmo segmento de rede precisam obrigatoriamente responder com um pacote ICMP tipo 0
(resposta de eco). Isto torna o programa muito til para fazer testes de conectividade e... para fazer testes com o Netfilter/iptables
Experimente o seguinte:
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.072 ms
--- 127.0.0.1 ping statistics ---

10/04/2014 17:23

Aldeia Numaboa - iptables para iniciantes

4 de 5

http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...

1 packets transmitted, 1 received, 0% packet loss, time 0ms


rtt min/avg/max/mdev = 0.072/0.072/0.072/0.000 ms

A opo -c 1 (count 1 = contador 1) do ping diz para enviar apenas um pacote. Na estatstica v-se que apenas um pacote foi transmitido pela
mquina local para ela mesma (1 packets transmitted), que ela recebeu a resposta (1 received) e que, portanto, houve 0% de perda de pacotes
(0% packet loss).
Agora chegou a hora de botar o firewall para funcionar. Como no queremos alterar o pacote de resposta ao ping antes que ele alcance o
sistema, podemos esquecer a rea de pr-roteamento e nos concentrarmos apenas no sistema. Sabemos que este pacote no vai ser
redespachado (afinal, a resposta que estamos esperando) e que, se est endereado para nossa mquina, s pode ser levado pela vertente
INPUT (entrada). Quais so as tabelas que possuem a vertente INPUT? A tabela filter e a tabela mangle (a nap no tem a vertente INPUT). A
mangle para alterar caractersticas do pacote, nada do que pretendemos fazer. S sobra a tabela filter.
Eu poderia ter explicado esta coisa toda dizendo que, como queremos filtrar um pacote ICMP vindo de 127.0.0.1, vamos usar a tabela filter.
Acontece que repetir a lgica do sistema Netfilter/iptables nunca demais. Existem casos um pouco mais complicados que apenas podemos
resolver se conhecermos o caminho das pedras (ou o caminho da "correnteza"). Pelo menos foi assim que eu aprendi a pilotar este firewall
Mas vamos l, est na hora de criar nossa primeira regra. Vamos chamar o iptables para acionar a tabela filter (-t filter) e adicionar (-A) na
vertente INPUT uma regra que diz: quando o endereo de origem (-s source) for 127.0.0.1 e o protocolo (-p) for icmp, salte (-j jump) para DROP
(descartar). Bo, para escrever isto em iptabls, faa o seguinte:
# iptables -t filter -A INPUT -s 127.0.0.1 -p icmp -j DROP

claro que a opo -t filter poderia ser omitida (j que a tabela filter a default), mas, por uma questo de respeito (e para deixar as coisas
mais explcitas), resolvi identificar a tabela. Para verificar o resultado deste comando, faa uma listagem com iptables -t filter -L INPUT ou
apenas com iptables -L INPUT:
# iptables -t filter -L INPUT
Chain INPUT (policy ACCEPT)
target

prot opt source

destination

DROP

icmp --

anywhere

localhost

Veja que a poltica aceitar qualquer pacote que venha "boiando" nesta vertente (policy ACCEPT), a no ser que se encaixe em qualquer uma
das regras que vier a seguir. A nica regra a que acabamos de criar e ela diz que, se o pacote for do protocolo ICMP (prot icmp), originrio de
localhost (source localhost) que o mesmo que 127.0.0.1 e cujo destino for para qualquer lugar (destination anywhere), o alvo (target) DROP
(descartar). Isto significa que, a partir de agora, qualquer resposta de ping ser descartada. Toca conferir:
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
--- 127.0.0.1 ping statistics --1 packets transmitted, 0 received, 100% packet loss, time 0ms

Fazendo um novo ping, igualzinho ao primeiro, at parece que tudo travou. Tenha pacincia, demora um pouquinho mesmo. Depois do pacote
de resposta do ping chegar levado pela vertente INPUT, nossa regra precisa ser aplicada e o pacote descartado. Tanto que a resposta 1
packets transmitted, 0 received, 100% packet loss.
Novamente, s para conferir, vamos pedir uma listagem apenas da vertente INPUT da tabela filter no modo verbose (-v explicativo) e com
nmero de linhas (--line-numbers):
# iptables -t filter -L INPUT -v --line-numbers
Chain INPUT (policy ACCEPT 5592 packets, 2716K bytes)
num

pkts bytes target

84 DROP

prot opt in

out

source

destination

icmp --

any

localhost

anywhere

any

O modo verbose diz que um pacote (pkts 1) foi recebido e descartado. D mais um ping e confira que pkts vai para 2. No que funciona
mesmo?

Mais um exemplo de regra


Quando um usurio chama seu site com http://www.seusite.com.br, a porta 80 automaticamente acionada. S para efeito de teste, vamos
adicionar mais uma porta de acesso para o site, a 8080.

Antes de comear, experimente acessar seu site com http://www.seusite.com.br:8080. A no ser que a porta 8080 esteja habilitada, voc vai
receber uma pgina de erro informando que houve falha na conexo. Se no h conexo, ento vamos proporcion-la usando o iptables... s
para testar
Vamos redirecionar a porta 8080 para a porta 80. Redirecionar significa rotear de forma diferente e a tabela que cuida disto a NAT. Com uma
regra na vertente PREROUTING podemos alterar todos os pacotes cujo protocolo seja TCP trocando a porta de destino de 8080 para 80. A

10/04/2014 17:23

Aldeia Numaboa - iptables para iniciantes

5 de 5

http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...

sintaxe deste comando a seguinte:


iptables -t nat -A PREROUTING -p {protocolo} -i {interface} -d {IP destino}
--dport {porta destino} -j REDIRECT --to-port {nova porta}

Podemos usar todas as opes ou algumas delas. Neste exemplo nos interessam apenas as opes -t (precisamos garantir que a tabela seja a
nat), -p, --dport e --to-port. Para adicionar a nova regra faa o seguinte:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

S pra tirar a cisma, chame seu site novamente com http://www.seusite.com.br:8080 e... isto a. Funcionou novamente

Eliminando regras
Como este segundo exemplo uma insanidade (ningum vai chamar seu site usando a porta 8080), no tem sentido manter esta regra no
Netfilter. isto mesmo o que voc leu, o iptables uma ferramenta que coloca as regras diretamente dentro do Netfilter, ou seja, no kernel do
Linux. Bem, se ele serve para adicionar regras, o esperado que tambm seja capaz de retir-las. O comando para retirar regras do Netfilter
especialmente importante de se conhecer quando estamos brincando com o firewall - caso alguma coisa d errado ou no esteja de acordo
com o esperado, precisamos poder eliminar a regra para podermos continuar com nossas experincias. O comando para limpar as tabelas
chama-se Flush e meu mnemnico F de Faxina:
iptables -F
iptables -t nat -F
iptables -t mangle -F

Por um lado, o -F da faxina bom porque tira TODAS as regras de determinada tabela; por outro, uma encrenca quando queremos eliminar
apenas uma delas. Para remediar existe um outro comando, o -D de deletar, que precisa de um parmetro adicional: o nmero da regra que
queremos fazer sumir. Digamos que nossa tabela NAT tenha 5 regras na vertente PREROUTING. Para saber como esto numeradas s listar
a tabela com a opo --line-number:
iptables -t nat -L PREROUTING --line-number

Depois disto, basta indicar o nmero da regra que deve ser eliminada com:
iptables -t nat -D PREROUTING 3

Uma outra forma de eliminar determinada regra simplesmente repetir o que ela estava ditando. Digamos que criamos uma regra do tipo
iptables -A INPUT -s 192.168.0.1 -j ACCEPT. Para elimin-la da tabela filter s repetir a regra depois do -D:
iptables -D INPUT -s 192.168.0.1 -j ACCEPT

Tornando as regras permanentes


O fato de inserirmos regras no Netfilter usando o iptables no significa que elas so permanentes - enquanto o servifor estiver no ar, tudo bem;
no momento em que for rebootado, ba-bau... as regras estaro perdidas. Como fazer com que sejam recuperadas? Coloque as regras num dos
scripts de inicializao do boot (por exemplo, no /etc/rc.d/rc.local). isso a.

Finalmentes
O bsico do bsico sobre o iptables o que voc acabou de ler. claro que a coisa no pra por a. H um mundo de comandos e opes que
ainda pode ser explorado, mas isto vai ficar por sua conta. Espero que este texto introdutrio sirva de ajuda para poder comear. O resto fica
por sua conta.
Grande abrao da

v Vicki

10/04/2014 17:23

Вам также может понравиться