Академический Документы
Профессиональный Документы
Культура Документы
1 de 5
http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...
02:46
(9 votos, mdia 4.11 de 5)
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.
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
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
destination
destination
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
destination
destination
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
3 de 5
http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...
-A chain
Append to chain
--delete
-D chain
--delete
-D chain rulenum
--insert
-I chain [rulenum]
--list
-L [chain]
--flush
-F [chain]
--zero
-Z [chain]
--new
-N chain
--delete-chain -X [chain]
--policy
-P chain target
-p [!] proto
--source
-s [!] address[/mask]
source specification
-j target
--match
-m match
--numeric
-n
-t table
--verbose
-v
verbose mode
--line-numbers
--exact
-x
[!] --fragment -f
--modprobe=<command>
[!] --version -V
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).
10/04/2014 17:23
4 de 5
http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...
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
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
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?
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
5 de 5
http://www.numaboa.com.br/informatica/linux/configuracoes/1026-ipt...
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
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