Académique Documents
Professionnel Documents
Culture Documents
www.eriberto.pro.br/iptables
by Joo Eriberto Mota Filho
1. IP FORWARD
Consideraes iniciais
O IP FORWARD um tipo de roteamento. estabelecido quando colocamos uma mquina entre
dois ou mais segmentos de rede, permitindo a livre passagem de pacotes entre estes
sempre que for necessrio. importante ressaltar que o roteamento s ir funcionar
quando for feito entre REDES DIFERENTES. No se pode colocar um roteador entre dois
segmentos de rede iguais. Esse procedimentono serve apenas para estabelecer a comutao
de segmentos. Ele tambm til para diminuir o trfego na rede como um todo, pois s
deixa o pacote mudar de segmento se isso for realmente necessrio.
Veja a figura a seguir:
Para fazer o IP FORWARD, o micro roteador dever possuir uma placa de rede com endereo
IP pertencente a cada segmento. Tambm deveremos informar, em cada mquina de cada
seguimento, quem ser o micro responsvel pelo roteamento. O nome tcnico desse micro
gateway.
Fazendo o IP FORWARD
Para estabelecermos o IP FORWARD entre dois segmentos de rede, basta:
* inserir um micro com duas placas de rede entre os segmentos de rede, configurando-as
corretamente;
* definir, em cada mquina, de cada segmento, quem o seu gateway;
* ativar o IP FORWARD via kernel.
O estabelecimento de IP FORWARD entre mais de dois segmentos de rede segue o mesmo
princpio, bastando acrescer quantas placas de rede forem necessrias no gateway. Tambm
possvel utilizar placas de fax-modem em conjunto com placas de rede.
Definindo o gateway
Para definirmos o gateway em cada cliente, devemos:
--> No Linux Red Hat/Fedora
Editar o arquivo /etc/sysconfig/network e inserir a linha:
GATEWAY=ip_do_gateway
Em seguida, devemos reiniciar a rede:
#/etc/rc.d/init.d/network restart
--> No Linux Slackware
Editar o arquivo /etc/rc.d/rc.inet1.conf e configurar a linha:
GATEWAY="ip_do_gateway"
Em seguida, devemos reiniciar a rede:
#/etc/rc.d/rc.inet1 restart
--> No Linux Debian
Editar o arquivo /etc/network/interfaces e inserir a linha:
gateway ip_do_gateway
Em seguida, devemos reiniciar a rede:
#/etc/init.d/networking restart
--> No Windows 9x
Nas Propriedades do protocolo TCP/IP, h uma seo gateway. Basta inserir o IP do
gateway nessa seo. Exemplo:
--> No Windows XP
Nas Propriedades do protocolo TCP/IP, h uma entrada gateway. Basta inserir o IP do
gateway. Exemplo:
Teste do roteamento
O teste do roteamento pode ser feito por intermdio do comando ping. Basta "pingar" uma
mquina que esteja aps o roteador.
Caso no haja resposta, faa um teste progressivo para tentar deduzir o problema:
--> pingue a placa do roteador que esteja dentro do seu segmento de rede;
--> pingue a placa do roteador que esteja no outro segmento;
--> pingue outra mquina do outro segmento.
O programa IPTRAF poder ajudar a debugar a conexo. Execute a opo "IP traffic monitor" do citado programa na mquina
roteadora e verifique se o ICMP echo request est saindo e se o ICMP echo reply est voltando. Se no voltar, o problema estar no
segmento de destino do ping.
2. GENERALIDADES
Sistemas de Firewall
Muitos no conhecem o verdadeiro significado do vocbulo firewall. Firewall um sistema
integrado, utilizado em redes de computadores para a sua proteo. Tal sistema
composto por filtros de pacotes, filtros de estados, IDS, IPS, proxies etc. Assim sendo,
errado dizer que uma mquina rodando Iptables o firewall de uma rede. Isso por que o
Iptables um mero filtro de pacotes e estados. Assim sendo, s consegue analisar dados
contidos no cabealho IP do pacote que trafega. Ele, por exemplo, no consegue verificar
o contedo de um pacote. Com isso, um ataque ou um vrus podero adentrar rede.
A figura a seguir mostrar um exemplo de um sistema de firewall. A rea cinza representa
tal sistema.
Filtragem de Pacotes
O Iptables um filtro de pacotes. Essa filtragem poder ocorrer em duas sitaes:
--> diretamente em uma mquina de destino;
--> em uma mquina intermediria responsvel pelo roteamento de dados entre segmentos de
rede.
Os filtros Linux
O filtro de pacotes, na maioria das vezes, atua como um roteador controlado. uma
atividade interna, uma propriedade, do kernel.
So os seguintes, os filtros existentes:
--> kernel 2.0.x: ipfwadm;
--> kernel 2.2.x: ipchains;
--> kernel 2.4.x: iptables;
--> kernel 2.6.x: iptables.
Obs: um kernel estvel quando o algarismo existente entre os dois pontos par.
Exemplo: x.2.x estvel. J o x.3.x no estvel.
O Kernel 2.4, por questes de compatibilidade, mantm os filtros ipfwadm e ipchains. No
entanto, eles no funcionam completamente com esse kernel. Alm disso, se o ipchains
estiver ativo, o iptables no ir funcionar. Assim, no Red Hat, torna-se necessrio
entrar no #setup e:
--> habilitar o iptables;
--> desabilitar o ipchains.
Se a distribuio utilizada no possuir o comando #setup, utilize o comando #rmmod
ipchains. Cabe ressaltar que o iptables ter os seus mdulos bsicos carregados quando
for utilizado pela primeira vez.
Como funciona um filtro de pacotes?
O FILTRO DE PACOTES do Linux funciona mediante regras estabelecidas. Todos os pacotes
entram no kernel para serem analisados. As CHAINS (correntes) so as situaes possveis
dentro do kernel. Quando um pacote entra no kernel, este verifica o destino do pacote e
decide qual chain ir tratar do pacote. Isso se chama roteamento interno. Os tipos de
chains iro depender da tabela que estaremos utilizando no momento. Existem 3 tabelas
possveis:
--> filter: a tabela default. Quando no especificarmos a tabela, a filter ser
utilizada. Refere-se s atividades normais de trfego de dados, sem a ocorrncia de NAT.
Admite as chains INPUT, OUTPUT e FORWARD.
--> nat: utilizada quando h NAT. Exemplo: passagem de dados de uma rede privada para a
Internet. Admite as chains PREROUTING, OUTPUT e POSTROUTING.
--> mangle: basicamente, trabalha com marcao de pacotes e QoS. Neste tutorial, no
trataremos dessa tabela.
O Iptables stateful, ou seja, trabalha com os estados das conexes. O ipfwadm e o
ipchais so stateless.
3. TABELAS
Tabela Filter
Vejamos o funcionamento da tabela filter (default) e as suas respectivas chains:
Regras de filtragem
As regras (rules) de fitragem, geralmente, so compostas assim:
#iptables [-t tabela] [opo] [chain] [dados] -j [ao]
Exemplo:
#iptables -A FORWARD -d 192.168.1.1 -j DROP
A linha acima determina que todos os pacotes destinados mquina 192.168.1.1 devem ser
descartados. No caso:
tabela: filter ( a default)
opo: -A
chain: FORWARD
dados: -d 192.168.1.1
ao: DROP
Existem outras possibilidades que fogem sintaxe mostrada anteriormente. o caso do
comando #iptables -L, que mostra as regras em vigor.
Chains
As chains j so conhecidas:
INPUT --> Refere-se a todos os pacotes destinados mquina filtro.
OUTPUT --> Refere-se a todos os pacotes gerados na mquina filtro.
FORWARD --> Refere-se a todos os pacotes oriundos de uma mquina e destinados a outra.
So pacotes que atravessam a mquina filtro, mas no so destinados a ela.
Dados
Os elementos mais comuns para se gerar dados so os seguintes:
Aes
Observaes importantes
Impasses e ordem de processamento
As regras sero interpretadas na ordem em que aparecerem. Sempre que um pacote se
adequar a uma regra, tal regra processar o pacote e a sequncia iptables ser
finalizada naquele instante, sem que as regras seguintes atuem. Isso no se aplicar s
regras terminadas com -j LOG. Nesse caso, a regra com -j LOG ir atuar, se for o caso, e
permitir o prosseguimento da seqencia.
Concluso: se houver impasse entre regras, sempre valer a primeira. Assim, entre as
regras:
#iptables -A FORWARD -p icmp -j DROP
#iptables -A FORWARD -p icmp -j ACCEPT
Valer:
#iptables -A FORWARD -p icmp -j DROP
J entre as regras:
#iptables -A FORWARD -p icmp -j ACCEPT
#iptables -A FORWARD -p icmp -j DROP
Valer:
#iptables -A FORWARD -p icmp -j ACCEPT
Em resumo:
ACCEPT --> Pra de processar regras para o pacote atual;
DROP --> Pra de processar regras para o pacote atual;
REJECT --> Pra de processar regras para o pacote atual;
LOG --> Continua a processar regras para o pacote atual;
Vamos ver um exemplo. As regras sero as seguintes:
iptables
iptables
iptables
iptables
-P
-A
-A
-A
INPUT
INPUT
INPUT
INPUT
DROP
-s 10.0.0.1 -j DROP
-s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
-s 172.20.0.0/16 -j ACCEPT
-P
-A
-A
-A
INPUT
INPUT
INPUT
INPUT
ACCEPT
-s 10.0.0.1 -j DROP
-s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
-s 172.20.0.0/16 -j ACCEPT
O retorno
Ao se fazer determinadas regras, devemos prever o retorno. Assim, digamos que exista a
seguinte situao:
#iptables -P FORWARD DROP
#iptables -A FORWARD -s 10.0.0.0/8 -d 172.20.0.0/16 -j ACCEPT
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, no tornamos possvel a resposta da sub-rede
172.20.0.0 para a sub-rede 10.0.0.0. O correto, ento, seria:
#iptables -P FORWARD DROP
#iptables -A FORWARD -s 10.0.0.0/8 -d 172.20.0.0/16 -j ACCEPT
#iptables -A FORWARD -d 10.0.0.0/8 -s 172.20.0.0/16 -j ACCEPT
IP FORWARD
Caso haja o envolvimento de mais de uma sub-rede, ser necessrio que o IP FORWARD seja
ativado para que o iptables funcione corretamente. O IP FORWARD, via kernel, pode ser
ativado pelo comando:
#echo 1 > /proc/sys/net/ipv4/ip_forward
Cabe lembrar que a reinicializao do daemon de rede far com que o roteamento seja
perdido. Uma forma de deixar a regra de roteamento permanentemente ativada, resistindo a
qualquer tipo de reinicializao, seria a alterao do arquivo /etc/sysctl.conf:
net.ipv4.ip_forward = 1
O carregamento
Na primeira vez em que o iptables for utilizado, poder surgir a mensagem:
ip_tables: (c)2000 Netfilter core team
No se preocupe. Isso normal. o carregamento dos mdulos necessrios. Caso surjam
mensagens de erro, certifique-se de que o ipchains no esteja carregado. Caso esteja,
descarregue-o:
#rmmod ipchains
Extenses
As extenses permitem filtragens especiais, principalmente contra ataques de hackers. Os
exemplos abaixo mostram como controlar os pings que atravessam o filtro:
Contra Ping
#iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
Mascaramento
O mascaramento uma forma de fazer NAT (Network Address Translation). Com isso,
possvel fazer uma rede privada navegar na Internet. A rede solicita os dados para a
mquina que faz o mascaramento. Essa busca tais dados na Internet...
Redirecionamento de portas
O redirecionamento de portas ocorre quando desejamos alterar a porta de destino de uma
requisio. Exemplo: tudo que for destinado porta 23 de qualquer mquina, quando
passar pela mquina filtro, ser redirecionado para a porta 10000 de outro servidor.
Redirecionamento de servidores
Todos os pacotes destinados a um servidor sero redirecionados para outro servidor.
Proxy transparente
a tcnica que fora o uso de um servidor proxy na rede.
Balanceamento de carga
O balanceamento de carga (load balance) uma tcnica utilizada para distribuir carga
entre servidores sincronizados. O load balance o ato de distribuir os clientes aos
servidores mais desocupados. Esse trabalho tambm pode ser feito por servidores DNS.
A tabela NAT
A tabela NAT funciona da seguinte forma:
Regras de NAT
Para fazer o mascaramento, deveremos, antes, carregar o mdulo de NAT:
#modprobe iptable_nat
As regras mais utilizadas, alm da maioria dos recursos descritos para uso com a tabela
filter, contm o seguinte:
Chains
Existem as seguintes chains:
--> PREROUTING: utilizada para analisar pacotes que esto entrando no kernel para
sofrerem NAT. O PREROUTING pode fazer aes de NAT com o endereo de destino do pacote.
Isso conhecido como DNAT (Destination NAT);
--> POSTROUTING: utilizada para analisar pacotes que esto saindo do kernel, aps
sofrerem NAT. O POSTROUTING pode fazer aes de NAT com o endereo de origem do pacote.
Isso conhecido como SNAT (Source NAT);
--> OUTPUT: utilizada para analisar pacotes que so gerados na prpria mquina e que
iro sofrer NAT. O OUTPUT pode fazer aes de NAT com o endereo de destino do pacote.
Tambm DNAT.
Opes
-A --> Append (anexar).
-D --> Deletar.
Dados
-t --> Table (tabela). Estabelece a tabela a ser utilizada. A tabela default, por
omisso, filter. Para o mascaramento ou NAT ser nat. Exemplo:
#iptables -t nat -A ...
--to --> utilizado para definir IP e porta de destino, aps um DNAT, ou de origem, aps
um SNAT. Deve ser utilizado aps uma ao (-j ao). Assim:
-j DNAT --to 10.0.0.2
-j DNAT --to 10.0.0.2:80
-j SNAT --to 172.20.0.2
--dport --> assim como -d define um host de destino, --dport define uma porta de
destino. Deve ser utilizado antes de uma ao (-j ao). Antes de --dport, deve ser
especificado um protocolo (-p). Exemplo:
-d 172.20.0.1 -p tcp --dport 80 -j DNAT --to 10.0.0.2
--sport --> assim como -s define um host de origem, --sport define uma porta de origem.
Deve ser utilizado antes de uma ao (-j ao).
--to-port --> define uma porta de destino, aps um REDIRECT.
Obs: A maioria dos dados bsicos apresentados para a tabela filter continuam valendo.
Exemplo: -p servir para definir um protocolo de rede; -d define um host de destino.
Aes
SNAT --> Utilizado com POSTROUTING para fazer aes de mascaramento da origem.
DNAT --> Utilizado com PREROUTING e OUTPUT para fazer aes de redirecionamento de
portas e servidores, balanceamento de carga e proxy transparente. Caso a porta de
destino no seja especificada, valer a porta de origem. No filtro, a porta que ser
redirecionada no pode existir ou estar ocupada por um daemon.
MASQUERADE --> Faz mascaramento na sada de dados.
REDIRECT --> Redireciona uma requisio para uma porta local do filtro.
/proc/sys/net/ipv4/ip_forward
-t nat -A POSTROUTING -s 10.0.0.10 -o ppp0 -j MASQUERADE
-t nat -A POSTROUTING -s 10.0.0.20 -o ppp0 -j MASQUERADE
-t nat -A POSTROUTING -s 10.5.2.41 -o ppp0 -j MASQUERADE
Execuo de FTP
Para executar sesses de FTP, ser necessrio o carregamento de dois mdulos:
#insmod ip_conntrack_ftp
#insmod ip_nat_ftp
Salvando e recuperando regras
As regras de iptables devem ser salvas com o comando iptables-save e carregadas com
iptables-restore. O roteamento esttico e o carregamento dos mdulos FTP devem ser
feitos separadamente. Apenas para ilustrar, vamos executar o salvamento e a recuperao
das regras.
Salvamento de regras
--> Criando as regras
#iptables -t nat -A POSTROUTING -s 10.0.0.10 -o ppp0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -s 10.0.0.20 -o ppp0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -s 10.5.2.41 -o ppp0 -j MASQUERADE
--> Salvando
#iptables-save > /etc/iptables.rules
--> Recuperao
Um script de recuperao, inicializado pelo /etc/rc.d/rc.local, poderia ter a seguinte
estrutura:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
iptables-restore < /etc/iptables.rules
insmod ip_conntrack_ftp
insmod ip_nat_ftp
Tabelas Filter e NAT atuando em conjunto
As tabelas filter e nat podem atuar em conjunto, funcionando em paralelo. H de se ter
cuidado pois, como j disse, elas atuam em paralelo, como duas pilhas que sero
executadas ao mesmo tempo. Assim sendo, se tivermos as regras:
#iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
#iptables -A FORWARD -j DROP
Apesar da primeira (tabela nat) possibilitar a navegao mascarada da rede 10.0.0.0 na
Internet, essa navegao no ocorrer, pois a segunda regra (tabela filter) ir barrar o
forward entre as redes.
Topologias de filtros de pacotes
O posicionamento de um filtros de pacotes dentro da rede de extrema importncia para
ela. H duas possibilidades bsicas para a utilizao de um filtros de pacotes: filtro
isolado e filtro incorporado, sendo este ltimo o mais inseguro e menos desejvel.
O filtro ser isolado quando estiver entre mquinas, com funo exclusiva de filtro:
O filtro ser incorporado quando no houver uma mquina isolada como filtro. Nesse caso,
as mquinas da rede devero estabelecer, individualmente, as suas prprias regras de
filtragem. o sistema mais inseguro:
Nada impede que os dois sistemas sejam utilizados em parceria, oferendo-se assim um alto
grau de segurana rede. Cabe ressaltar que no filtro incorporado h maior nvel de
insegurana, uma vez que outros processos rodam junto com o filtro.
O filtro de pacotes deve ser protegido para que o restante da rede tambm tenha
segurana. Assim, algumas regras bsicas devem ser observadas:
--> Feche a mquina com Iptables, de modo que todas os pacotes destinados diretamente a
ela sejam descartados:
#iptables -P INPUT DROP
Em seguida, aos poucos, abra o que for necessrio. Cuidado, pois muitas vezes o Iptables
precisar de vrios acessos abertos. Por exemplo: se uma mquina Iptables tambm for
proxy http do tipo forward, a mesma ser servidora da intranet e cliente da Internet,
necessitando assim das portas superiores a 1023 abertas.
--> Prefira topologia de filtro isolado combinado com filtro incorporado;
--> Atualize sempre o Iptables e o kernel;
--> NUNCA rode qualquer servio, principalmente os remotos, como telnet e ftp, nas
mquinas firewall. Mas...
--> ...Se tiver que administrar remotamente uma mquina firewall, utilize ssh. Nesse
caso, o ssh no dever permitir o login como root;
--> Nunca cadastre qualquer usurio na mquina Iptables, caso se trate de filtro
isolado, a no ser os que iro administrar por ssh;
--> Utilize TCP Wrappers totalmente fechado (ALL:ALL em /etc/hosts.deny) em filtros
isolados. Abra o ssh (em /etc/hosts.allow) apenas para os clientes que forem fazer
administrao remota;
--> Anule as respostas a ICMP 8 (echo reply) no filtro isolado, para evitar ataques de
Ping of Death.
--> No insira referncias ao sistema de firewall no DNS;
--> No deixe as mquinas firewall isolado com cara de firewall. Utilize nomes
descaracterizados;
--> Faa log de aes suspeitas que estiverem ocorrendo na rede;
--> Teste, teste, teste novamente.