FIREWALL COM IPTABLES
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 entreestes sempre que for
necessrio. importante ressaltar que o roteamento s ir funcionar
quando for feito entreREDES DIFERENTES. No se pode colocar um
roteador entre dois segmentos derede 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.
No caso do esquema anterior, temos as seguintes situaes:
* Gateway para 10.0.0.1, 10.0.0.2 e 10.0.0.3: a mquina
10.0.0.10
* Gateway para 172.20.0.1, 172.20.0.2 e 172.20.0.3: a mquina
172.20.0.10
importante que, nos dois lados, todos os micros saibam quem o
seu gateway pois, do contrrio, os hosts no sabero para onde enviar
os pacotes destinados rede oposta. Exemplo:
A mquina 10.0.0.1 sabe que 10.0.0.10 o seu gateway. A mquina
172.20.0.1 no sabe quem o seu gateway. Um ping de 10.0.0.1 para
172.20.0.1 sair de 10.0.0.1, passar por 10.0.0.10, seguir por
172.20.0.10 e chegar em 172.20.0.1. Como172.20.0.1 no sabe quem o
seu gateway para a rede 10.0.0.0, no conseguir responder. O ping
vai morrer por timeout. Houve o icmp echo request mas ser impossvel
gerar o icmp echo reply.
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-modemem 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:
--> Outras verses de Windows
Em outras verses de Windows, o procedimento similar.
Ativando o roteamento via kernel no Linux
O roteamento via kernel ser ativado com o comando:
#echo 1 > /proc/sys/net/ipv4/ip_forward
Esse roteamento ser perdido se a rede (e, em conseqncia, a
mquina) for reinicializada (#/etc/rc.d/init.d/network restart).
Poderamos inserir a regra no fim do arquivo /etc/rc.d/rc.local,
para que a mesma seja ativada a cada reinicializao do sistema. No
entanto, um reincio da rede mataria o roteamento novamente.
No Red Hat, 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
J no Debian, a linha a seguir deve ser inserida no
arquivo/etc/sysctl.conf:
net/ipv4/ip_forward=1
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.
FIREWALL COM IPTABLES
www.eriberto.pro.br/iptables
by Joo Eriberto Mota Filho
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.
Vamos considerar a filtragem de pacotes no caso decontrole do
roteamento. Ento, vamos configurar uma mquina capaz de tomar
decises em relao ao trfego de rede. Assim, analisaremos o filtro de
pacotes existente no Linux. Ele verifica apenas o cabealho de cada
pacote. Basicamente, s entende endereo IP, mscara de sub-rede,
portas e tipos de protocolos IP. No analisa o contedo do pacote e
nem identifica ataques.
A filtragem de pacotes uma atividade interna do kernel.
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.
FIREWALL COM IPTABLES
www.eriberto.pro.br/iptables
by Joo Eriberto Mota Filho
3. TABELAS
Tabela Filter
Vejamos o funcionamento da tabela filter (default) e as suas
respectivas chains:
ESQUEMA DA TABELA FILTER
So trs, as possveis chains:
--> INPUT: utilizada quando o destino final a prpria mquina
filtro;
--> OUTPUT: qualquer pacote gerado na mquina fltro e que deva
sair para a rede ser tratado pela chain OUTPUT;
--> FORWARD: qualquer pacote que atravessa o fltro, oriundo
de uma mquina e direcionado a outra, ser tratado pela chain
FORWARD.
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.
Anlise de regras com a tabela filter
Opes
As principais opes so:
-P--> Policy (poltica). Altera a poltica da chain. A poltica
inicial de cada chain ACCEPT. Isso faz com que o filtro,
inicialmente, aceite qualquer INPUT, OUTPUT ou FORWARD. A poltica
pode ser alterada para DROP, que ir negar o servio da chain, at que
uma opo -A entre em vigor. O -P no aceita REJECT ou LOG.
Exemplos:
#iptables -P FORWARD DROP
#iptables -P INPUT ACCEPT
-A--> Append (anexar). Acresce uma nova regra chain. Tem
prioridade sobre o -P. Geralmente, como buscamos segurana mxima,
colocamos todas as chains em poltica DROP, com o -P e, depois,
abrimos o que necessrio com o -A. Exemplos:
#iptables -A OUTPUT -d 172.20.5.10 -j ACCEPT
#iptables -A FORWARD -s 10.0.0.1 -j DROP
#iptables -A FORWARD -d www.chat.com.br -j DROP
-D--> Delete (apagar). Apaga uma regra. A regra deve ser
escrita novamente, trocando-se a opo para -D. Exemplos:
Para apagar as regras anteriores, usa-se:
#iptables -D OUTPUT -d 172.20.5.10 -j ACCEPT
#iptables -D FORWARD -s 10.0.0.1 -j DROP
#iptables -D FORWARD -d www.chat.com.br -j DROP
Tambm possvel apagar a regra pelo seu nmero de ordem. Pode-se
utilizar o -L para verificar o nmero de ordem. Verificado esse
nmero, basta citar a chain e o nmero de ordem. Exemplo:
#iptables -D FORWARD 4
Isso deleta a regra nmero 4 de forward.
-L--> List (listar). Lista as regras existentes.
Exemplos:
#iptables -L
#iptables -L FORWARD
-F--> Flush (esvaziar). Remove todas as regras existentes. No
entanto, no altera a poltica (-P). Exemplos:
#iptables -F
#iptables -F FORWARD
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:
-s--> Source (origem). Estabelece a origem do pacote.
Geralmente uma combinao do endereo IP com a mscara de sub-rede,
separados por uma barra. Exemplo:
-s 172.20.0.0/255.255.0.0
No caso, vimos a sub-rede 172.20.0.0. Para hosts, a mscara
sempre ser 255.255.255.255. Exemplo:
-s 172.20.5.10/255.255.255.255
Agora vimos o host 172.20.5.10. Ainda no caso de hosts, a mscara
pode ser omitida. Caso isso ocorra, o iptables considera a mscara
como 255.255.255.255. Exemplo:
-s 172.20.5.10
Isso corresponde ao host 172.20.5.10. H um recurso para
simplificar a utilizao da mscara de sub-rede. Basta utilizar a
quantidade de bits 1 existentes na mscara. Assim, a mscara
255.255.0.0 vira 16. A utilizao fica assim:
-s 172.20.0.0/16
Outra possibilidade a designao de hosts pelo nome. Exemplo:
-s www.chat.com.br
Para especificar qualquer origem, utilize a rota default, ou
seja, 0.0.0.0/0.0.0.0, tambm admitindo 0/0.
-d--> Destination (destino). Estabelece o destino do pacote.
Funciona exatamente como o -s, incluindo a sintaxe.
-p--> Protocol (protocolo). Especifica o protocolo a ser
filtrado. O protocolo IP pode ser especificado pelo seu nmero (vide
/etc/protocols) ou pelo nome. Os protocolos mais utilizados so udp,
tcp e icmp. Exemplo:
-p icmp
-i--> In-Interface (interface de entrada). Especifica a
interface de entrada. As interfaces existentes podem ser vistas com
o comando #ifconfig. O -i no pode ser utilizado com a chain OUTPUT.
Exemplo:
-i ppp0
O sinal + pode ser utilizado para simbolizar vrias interfaces.
Exemplo:
-i eth+
eth+ refere-se eth0, eth1, eth2 etc.
-o--> Out-Interface (interface de sada). Especifica a
interface de sada. Similar a -i, inclusive nas flexibilidades. O -o
no pode ser utilizado com a chain INPUT.
!--> Excluso. Utilizado com -s, -d, -p, -i, -o e outros, para
excluir o argumento. Exemplo:
-s ! 10.0.0.1
Isso refere-se a qualquer endereo de entrada, exceto o
10.0.0.1.
-p ! tcp
Todos os protocolos, exceto o TCP.
--sport--> Source Port. Porta de origem. S funciona com as
opes -p udp e -p tcp. Exemplo:
-p tcp --sport 80
Refere-se porta 80 sobre protocolo TCP.
--dport--> Destination Port. Porta de destino. S funciona com
as opes -p udp e -p tcp. Similar a --sport.
Aes
As principais aes so:
ACCEPT--> Aceitar. Permite a passagem do pacote.
DROP--> Abandonar. No permite a passagem do pacote,
descartando-o. No avisa a origem sobre o ocorrido.
REJECT--> Igual ao DROP, mas avisa a origem sobre o ocorrido
(envia pacote icmp unreachable).
LOG--> Cria um log referente regra, em /var/log/messages.
Usar antes de outras aes.
Exemplos comentados de regras de filtragem (tabela filter)
---------------------------------------
#iptables -L
Lista todas as regras existentes.
---------------------------------------
#iptables -F
Apaga todas as regras sem alterar a poltica.
---------------------------------------
#iptables -P FORWARD DROP
Estabelece uma poltica de proibio inicial de passagem de pacotes
entre sub-redes.
---------------------------------------
#iptables -A FORWARD -j DROP
Todos os pacotes oriundos de qualquer sub-rede e destinados a
qualquer sub-rede devero ser descartados.
---------------------------------------
#iptables -A FORWARD -j ACCEPT
Todos os pacotes oriundos de qualquer sub-rede e destinados a
qualquer sub-rede devero ser aceitos.
---------------------------------------
#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j
DROP
Os pacotes oriundos da sub-rede 10.0.0.0 (mscara 255.0.0.0) e
destinados aos hosts cujos endereos IP respondem pelo nome
www.chat.com.br devero ser descartados. Note que se a mquina
possuir domnios virtuais, todos esses sero bloqueados.
---------------------------------------
#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j
REJECT
Os pacotes oriundos da sub-rede 10.0.0.0 (mscara 255.0.0.0) e
destinados aos hosts cujos endereos IP respondem pelo nome
www.chat.com.br devero ser descartados. Dever ser enviado um ICMP
avisando origem.
---------------------------------------
#iptables -A FORWARD -d www.chat.com.br -j DROP
Os pacotes oriundos de qualquer lugar e destinados aos hosts
cujos endereos IP respondem pelo nome www.chat.com.br devero ser
descartados.
---------------------------------------
#iptables -A FORWARD -d 10.0.0.0/8 -s www.chat.com.br -j
DROP
Os pacotes destinados sub-rede 10.0.0.0 (mscara 255.0.0.0) e
oriundos aos hosts cujos endereos IP respondem pelo nome
www.chat.com.br devero ser descartados.
---------------------------------------
#iptables -A FORWARD -s www.chat.com.br -j DROP
Os pacotes oriundos aos hosts cujos endereos IP respondem pelo
nome www.chat.com.br e destinados a qualquer lugar devero ser
descartados.
---------------------------------------
#iptables -A FORWARD -s 200.221.20.0/24 -j DROP
Os pacotes oriundos da sub-rede 200.221.20.0 (mscara
255.255.255.0) e destinados a qualquer lugar devero ser
descartados.
---------------------------------------
#iptables -A FORWARD -s 10.0.0.5 -p icmp -j DROP
Os pacotes icmp oriundos do host 10.0.0.5 e destinados a
qualquer lugar devero ser descartados.
---------------------------------------
#iptables -A FORWARD -i eth0 -j ACCEPT
Os pacotes que entrarem pela interface eth0 sero aceitos.
---------------------------------------
#iptables -A FORWARD -i ! eth0 -j ACCEPT
Os pacotes que entrarem por qualquer interface, exceto a eth0,
sero aceitos.
---------------------------------------
#iptables -A FORWARD -s 10.0.0.5 -p tcp --sport 80 -j LOG
O trfego de pacotes TCP oriundos da porta 80 do host 10.0.0.5 e
destinados a qualquer lugar dever ser gravado em log. No caso,
/var/log/messages.
---------------------------------------
#iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
Os pacotes TCP destinados porta 25 de qualquer host devero ser
aceitos.
---------------------------------------
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 -P INPUT DROPiptables -A INPUT -s 10.0.0.1 -j
DROPiptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j
ACCEPTiptables -A INPUT -s 172.20.0.0/16 -j ACCEPT
Analisando-se o fluxo de um pacote, chegamos ao diagrama:
Agora, vamos abrir a poltica:
iptables -P INPUT ACCEPTiptables -A INPUT -s 10.0.0.1 -j
DROPiptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j
ACCEPTiptables -A INPUT -s 172.20.0.0/16 -j ACCEPT
O fluxo tambm mudar:
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
Salvando e recuperando tudo
As regras iptables podero ser salvas com o comando:
#iptables-save > arquivo
A recuperao poder ser feita pelo comando:
#iptables-restore < arquivo
Um tpico exemplo de carregamento de regras de iptables, aps a
inicializao do sistema, seria:
#echo 1 > /proc/sys/net/ipv4/ip_forward#iptables-restore <
/etc/iptables.rules
Isso pode ser inserido no fim do arquivo /etc/rc.d/rc.local.
Nada impede que as regras sejam colocadas diretamente dentro de
um shell script.
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
Contra Ping of Death
#iptables -A FORWARD -p icmp --icmp-type echo-request -m limit
--limit 1/s -j ACCEPT#iptables -A FORWARD -p icmp --icmp-type
echo-request -j DROP
lgico que as regras anteriores podem ser utilizadas com
INPUT.
No faz parte dos meus objetivos o aprofundamento no assunto
extenses. Procure por documentos especializados. Consulte a seo de
links.
Mais proteo
Existe, ainda, uma regra muito importante que pode ser utilizada
como segurana. a proteo contra pacotes danificados, suspeitos ou
mal formados.
#iptables -A FORWARD -m unclean -j DROP
Tambm pode ser utilizado com INPUT.
Network Address Translator - NAT (tabela nat)
Existem vrios recursos que utilizam NAT. Os mais conhecidos
so:
--> Mascaramento (masquerading)
--> Redirecionamento de portas (port forwarding ou PAT)
--> Redirecionamento de servidores (forwarding)
--> Proxy transparente (transparent proxy)
--> Balanceamento de carga (load balance)
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...
...e os entrega aos solicitantes:
No entanto, um host da Internet, por vontade prpria, no consegue
ultrapassar o filtro que faz mascaramento, em direo rede:
O nico endereo IP que ir circular na Internet ser o do
filtro.
O mascaramento tambm possui um esquema de funcionamento. Como
haver trocas de endereos, deveremos utilizar a tabela NAT para
fazer isso.
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:
ESQUEMA DA TABELA NAT
O NAT dividido em:
--> SNAT: aplica-se quando desejamos alterar o endereo de
origem do pacote. Somente a chain POSTROUTING faz SNAT. O
mascaramento um exemplo de SNAT.
--> DNAT: aplica-se quando desejamos alterar o endereo 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 so exemplos de DNAT.
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.
Exemplos comentados de regras de filtragem (tabela nat)
---------------------------------------
#iptables -t nat -L
Mostra as regras de NAT ativas.
---------------------------------------
#iptables -t nat -F
Apaga todas as regras de NAT existentes.
---------------------------------------
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Todos os pacotes que sarem pela interface ppp0 (modem) sero
mascarados. Isso d um nvel de segurana elevado rede que est atrs da
ppp0. uma boa regra para navegao na Internet. Note que esse tipo de
mascaramento no usa SNAT.
---------------------------------------
#iptables -t nat -A POSTROUTING -d 0/0 -j MASQUERADE
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 mascarado. A regra
anterior refere-se aos pacotes que saem por determinada interface.
A opo -d 0/0 poderia ser -d 0.0.0.0/0 tambm. uma outra regra para
navegao na Internet.
---------------------------------------
#iptables -t nat -A PREROUTING -p tcp -d 10.0.0.2 --dport 80 -j
DNAT --to 172.20.0.1
Redireciona todos os pacotes destinados porta 80 da mquina
10.0.0.2 para a mquina 172.20.0.1. Esse tipo de regra exige a
especificao do protocolo. Como no foi especificada uma porta de
destino, a porta 80 ser mantida como destino.
---------------------------------------
#iptables -t nat -A OUTPUT -p tcp -d 10.0.0.10 -j DNAT --to
10.0.0.1
Qualquer pacote TCP, originado na mquina filtro, destinado a
qualquer porta da mquina 10.0.0.10, ser desviado para a mquina
10.0.0.1 .
---------------------------------------
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to
200.20.0.1
Essa regra faz com que todos os pacotes que iro sair pela
interface eth0 tenham o seu endereo de origem alterado para
200.20.0.1 .
---------------------------------------
#iptables -t nat -A PREROUTING -i eth0 -j DNAT --to
172.20.0.1
Todos os pacotes que entrarem pela eth0 sero enviados para a
mquina 172.20.0.1
---------------------------------------
#iptables -t nat -A PREROUTING -i eth0 -j DNAT --to
172.20.0.1-172.20.0.3
Aqui haver o load balance. Todos os pacotes que entrarem pela
eth0 sero distribudos entre as mquinas 172.20.0.1 , 172.20.0.2 e
172.20.0.3
---------------------------------------
#iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p tcp --dport 80
-j REDIRECT --to-port 3128
Todos os pacotes TCP que vierem da rede 10.0.0.0, com mscara
255.0.0.0, destinados porta 80 de qualquer host, no sairo; sero
redirecionados para a porta 3128 do filtro. Isso o passo necessrio
para fazer um proxy transparente. O proxy utilizado dever aceitar
esse tipo de recurso. No caso, o Squid, que aceita transparncia,
dever estar instalado na mquina filtro, servindo na porta 3128.
---------------------------------------
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j
SNAT 200.20.5.0/24
Uma situao interessante: todos os pacotes que sarem da rede
192.168.1.0 sero transformados em 200.20.5.0 .
---------------------------------------
Apesar de estarmos lidando com um filtro de pacotes, que um
roteador controlado, h a possibilidade de fazermos algumas operaes
dentro da mesma sub-rede. No entanto, isso tem que ser bem
estudado. Muitas vezes ir exigir regras especiais de roteamento
esttico (comando #route).
Execuo do mascaramento destinado Internet
Por ser uma atividade perigosa, o acesso Internet deve ser feito
com um mximo grau de segurana. Assim, vejamos as regras bsicas para
permitir que uma rede privada navegue com um IP vlido.
Primeiro exemplo: uma rede na Internet
Vamos permitir que a rede 10.0.0.0 navegue na Internet. A mquina
filtro (gateway) ser a 10.0.0.1. Regras:
#echo 1 > /proc/sys/net/ipv4/ip_forward#modprobe
iptable_nat#iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o ppp0 -j
MASQUERADE
O procedimento totalmente seguro, pois discrimina uma origem,
que s poder sair pela ppp0, de forma mascarada. Hoje em dia, o
carregamento do mdulo iptable_nat, na maioria das vezes, se d
automaticamente, dispensando a segunda linha.
Segundo exemplo: alguns hosts na Internet
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 mquina filtro
(gateway) ser a 10.0.0.1. Regras:
#echo 1 > /proc/sys/net/ipv4/ip_forward#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
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/bashecho 1 > /proc/sys/net/ipv4/ip_forwardmodprobe
iptable_natiptables-restore < /etc/iptables.rulesinsmod
ip_conntrack_ftpinsmod 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.
FIREWALL COM IPTABLES
www.eriberto.pro.br/iptables
by Joo Eriberto Mota Filho
4. Segurana do filtro de pacotes
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 evitarataques 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.
LEMBRE-SE: Como foi dito no item2. Generalidades, firewall no
uma mquina ou um programa. um sistema de segurana composto por
filtros de pacotes e estados, proxies, IDS, IPS, antivrus de rede
etc. No deixe de conhecer o IPS HLBR, disponvel
emhttp://hlbr.sourceforge.net.Se preferir, cliqueaquipara fazer
download.