Você está na página 1de 4

26/10/2014

Agajorte: Java, Linux, PostgreSQL e Gastronomia: Fazendo Mgica com NAT no iptables

mais

Prximo blog

Criar um blog

Login

Agajorte: Java, Linux,


PostgreSQL e Gastronomia
Tecnologia da informao e assuntos tangenciais

Sobre o autor
Rodrigo HJORT
Braslia, DF, Brazil

Analista de sistemas, fsico,


administrador de banco de dados,
desenvolvedor, instrutor de
informtica, entusiasta em
software livre e baixista nas horas
vagas...

quinta-feira, 6 de setembro de 2012

Fazendo Mgica com NAT no iptables


O GNU/Linux um sistema operacional to poderoso que nos permite
interferir no trfego da interface de rede de forma simplesmente
mgica atravs de ferramentas de rede como iptables.

Visualizar meu perfil completo

Pesquisar
Pesquisar

Marcadores

linux (22) postgresql


(19) shell (13) java (12)
persistence (11) admin (10)
databases (8) cassandra (7)
nosql (7) j2ee (5) gis (4) postgis

O iptables muito conhecido na implementao de firewalls no Linux.


Todavia, ele oferece muitos outros recursos, e dentre eles o
redirecionamento de pacotes.
Para demonstrar esse potencial, ilustraremos duas situaes
interessantes:
1. redirecionar a porta TCP 81 para a 80 na mesma mquina
2. redirecionar a porta TCP 5436 local para a 5432 de mquina em
outra rede

(4) zabbix (4) cloud (3) demoiselle (3)


maven (3) mongodb (3) flight (2) fts (2)
msdos (2) opendata (2) tomcat (2)
virtualbox (2) windows (2) afis (1) backup
(1) biometrics (1) eclipse (1) gastronomia
(1) glassfish (1) jboss (1) jpa (1) junk (1)
networks (1) nintendo (1) oracle (1) snmp (1)
sqlmagazine (1)

Postagens
2014 (1)
2013 (5)
2012 (4)
Dezembro (1)
Setembro (2)
Extraindo indicadores do DATASUS
com Shell, SED e ...

Sero considerados 10.220.10.62/16 como endereo IP local e


10.1.2.71/16 como endereo IP remoto. Ateno: a maioria das
instrues citadas neste artigo deve ser executada pelo "root" ou outro
usurio com poderes de super-vaca!
Antes de qualquer coisa, devemos nos certificar de que as regras
existentes do NAT no iptables tenham sido reinicializadas. Para limpar
as tabelas e cadeias (chains) e zerar os respectivos contadores,
executamos as instrues a seguir:
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z

http://www.hjort.co/2012/09/fazendo-magica-com-nat-no-iptables.html

1/4

26/10/2014

Agajorte: Java, Linux, PostgreSQL e Gastronomia: Fazendo Mgica com NAT no iptables

Fazendo Mgica com NAT no


iptables

Agosto (1)

O redirecionamento de portas locais pode ser feito com o alvo (target)


REDIRECT.

2011 (12)
2010 (10)
2009 (26)

Meus Projetos

Mapa de Visitas
O REDIRECT redireciona o pacote para a prpria mquina alterando o IP
de destino para o endereo primrio da interface de entrada (pacotes
gerados localmente so mapeados para o endereo 127.0.0.1).
Assim, afim de redirecionar a porta TCP 81 para a 80 na mesma
mquina, executamos:
iptables -t nat -A PREROUTING -p tcp --dport 81 -j REDIRECT --to-port 80

interessante analisar se o trfego est chegando essa porta 81. Para


isso, podemos usar o alvo LOG, o qual provocar a incluso de uma
entrada no /var/log/syslog a cada requisio.
O alvo LOG liga o registro dos pacotes que se encaixam em determinado
critrio pelo log do kernel (o qual pode ser lido com dmesg ou syslogd).
extremamente til para ser usado em conjunto com regras que
descartam o pacote (i.e., alvos DROP ou REJECT).
Para o nosso caso, basta executar a instruo a seguir para habilitar o
log:
iptables -t nat -A PREROUTING -p tcp --dport 81 -j LOG --log-prefix "[Por
ta 81] "

Executamos o comando abaixo para verificar as regras aplicadas


tabela NAT do iptables:
iptables -t nat -L -n -v

Para testar se o redirecionamento est acontecendo como esperado,


abra um novo terminal e execute a instruo a seguir para acompanhar
no log do Linux as requisies que chegam porta 81:
tail -f /var/log/syslog | grep 'Porta 81'

Para este caso, o teste deve ser disparado de uma mquina externa,
digamos, do endereo 10.220.8.250/16. Podemos usar o telnet
executando essa instruo:
telnet 10.220.10.62 81

Como se trata de um servio Web, outra opo usar o prprio


protocolo HTTP, atravs da ferramenta curl. Eis um exemplo:
curl -v http://10.220.10.62:81/
http://www.hjort.co/2012/09/fazendo-magica-com-nat-no-iptables.html

2/4

26/10/2014

Agajorte: Java, Linux, PostgreSQL e Gastronomia: Fazendo Mgica com NAT no iptables

Fcil, no?! Vejamos agora a segunda situao, um pouco mais


complicada.
O redirecionamento de IPs precisa ser habilitado no kernel do Linux.
Para fazer isso, basta executar esse comando:
echo 1 > /proc/sys/net/ipv4/ip_forward

Para garantir que esse parmetro do kernel esteja ligado durante uma
possvel reinicializao da mquina, uma sugesto adicionar tal
configurao no sysctl.conf:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Voltando ao iptables, usaremos um outro alvo, o DNAT.


O DNAT determina que o endereo de destino deve ser modificado
(assim como todos os demais pacotes da respectiva conexo) e as regras
devem parar de ser examinadas.

Assim, para redirecionar a porta 5436 local (10.220.10.62) para a 5432


de outra mquina (10.1.2.71), executamos:
iptables -t nat -A PREROUTING -s 10.220.0.0/16 -p tcp --dport 5436 -j DNA
T --to-destination 10.1.2.71:5432

A opo "-s" restringe a origem dos pacotes subrede da mquina local.


Como estamos redirecionando o pacote para uma mquina em outra
subrede, precisamos usar o alvo MASQUERADE.
iptables -t nat -A POSTROUTING -j MASQUERADE

Da mesma forma que no caso anterior, podemos ligar o log do Linux


para capturar as requisies nessa porta TCP:
iptables -t nat -A PREROUTING -p tcp --dport 5436 -j LOG --log-prefix "[P
orta 5436] "

E em seguida acompanhar as mudanas atravs desse comando:


tail -f /var/log/syslog | grep 'Porta 5436'

Para testar essa nova regra, abra um terminal em outra mquina na


mesma subrede e use o telnet:
telnet 10.220.10.62 5436

Como trata-se de um servio do SGBD PostgreSQL, podemos testar


definitivamente usando o cliente psql:
psql -h 10.220.10.62 -p 5436 -U usuario banco

Uma alternativa para acompanhar o trfego de rede nessas regras de


http://www.hjort.co/2012/09/fazendo-magica-com-nat-no-iptables.html

3/4

26/10/2014

Agajorte: Java, Linux, PostgreSQL e Gastronomia: Fazendo Mgica com NAT no iptables

NAT no iptables a ferramenta tcpdump. Atravs dela podemos


visualizar os IPs com setas mostrando a direo do trfego, e com isso
verificar se as requisies esto chegando e se as respectivas respostas
esto voltando.

Por exemplo, para analisar o trfego que chega porta 5436 local,
podemos usar:
tcpdump -n -i eth0 port 5436

J para verificar as requisies entre a mquina local e a mquina


remota, uma opo seria:
tcpdump -n -i eth0 host 10.1.2.71

Muito simples e prtico!


Postado por Rodrigo HJORT s 12:05
Marcadores: admin, linux, networks

Postagem mais recente

http://www.hjort.co/2012/09/fazendo-magica-com-nat-no-iptables.html

Incio

Postagem mais antiga

4/4

Você também pode gostar