Redirecionamento de portas com Iptables

Publicado por João Carlos em 29/01/2007

[ Hits: 77.581 ]

 


Redirecionamento de portas com Iptables



Nessa dica eu gostaria de apresentar o modo de redirecionamento de porta usando o Iptables.

Podemos imaginar uma rede que possui um firewall e um servidor Web, sendo que o servidor Web está dentro da subnet usando IP inválido.

Suposições:

IP Servidor Web: 172.16.0.2
IP Firewall (Iface interna): 172.16.0.1
IP Firewall (Iface externa): 200.200.200.200
Porta que será redirecionada: 80

Mão na massa:

1° passo: vamos criar uma regra para tratar o pacote quando ele chega no firewall.

iptables -t nat -A PREROUTING -d 200.200.200.200 -p tcp --dport 80 -j DNAT --to 172.16.0.2:80

O que essa regra faz?
Quando o pacote chega na interface externa para o IP 200.200.200.200, o firewall irá fazer um NAT no pacote para que ele tenha um novo destino, o IP 172.16.0.2. Mas isso só ocorrerá quando a requisição for para a porta 80.

Gostaria também de explicar o motivo que deixei no argumento para DNAT, nós temos "--to 172.16.0.2:80", note que novamente mencionamos a porta, nesse caso isso não é necessário, mas também não há problema, a idéia é que a porta de destino não precisa necessariamente ser a mesma da porta onde foi feita a requisição no firewall. O servidor Web poderia escutar por exemplo na porta 81 e mesmo assim conseguiríamos fazer o redirecionamento.

2° passo: pronto! O pacote foi encaminhado, mas e depois, como nós trataremos do retorno do pacote?

iptables -t nat -A POSTROUTING -d 172.16.0.2 -p tcp --dport 80 -j SNAT --to 200.200.200.200

Essa regra altera a origem do pacote apontando para o firewall, para que seja feito o retorno da requisição.

OBS: Só não podemos esquecer que o encaminhamento de pacotes deve ser ativado. Comando:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Vídeo Aulas sobre Redes

Sniffing com Wireshark como um usuário comum

Possíveis problemas após atualização do IPTables

Aplicando Knock sobre Iptables

DROP ou REJECT no iptables?

  

Comentários
[1] Comentário enviado por edmafer em 29/01/2007 - 14:48h

Eu sempre fiz assim:
iptables -t nat -A PREROUTING -s faixa_ip_rede_interna -p tcp --dport 80 -j REDIRECT --to-port 3128

Não se preocupe com volta, o iptables é inteligente o bastante para saber para onde ele deve ir (ele usa uma tabela)

Claro que é necessário liberar o redirecionamento:
# echo 1 > /proc/sys/net/ipv4/ip_forward

Há sim... se sua regra padrão FORWARD for DROP, não se esqueça de permitir o redirecionamento nele também.

iptables -A FORWARD -s faixa_ip_rede_interna -p tcp --dport 80 -j ACCEPT

[2] Comentário enviado por removido em 29/01/2007 - 15:09h

estávamos precisando de algo assim. Outro dia tive que fazer um port forward aqui em casa e não sabia fazer com iptables. Fiz pelo config do router, mas sem dúvida, o iptables é bem melhor....

[3] Comentário enviado por robson..pba em 31/01/2007 - 11:23h

Bom dia e com a licenças de vcs
vou postar meu arquivo de iptables e vejam se podem me ajudar
#!/bin/bash

# ativa o modulo nat
modprobe iptable_nat
iptables -F
# Ativo roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward


# redirecionamento de tudo que for da rede 10.0.0.0 para porta 80
# redirecionar para porta 3128 (proxy)
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Liberando somente a porta 25 para envio de email pelo outlook express
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -p tcp -o eth1 --dport 25 -j MASQUERADE

# Liberando somente a porta 110 para receber email pelo outlook express
iptables -t nat -A POSTROUTING -d 10.0.0.0/24 -p tcp --dport 110 -o eth0 -j MASQUERADE

# Libero tudo que for de origem 10.0.0.0/24 para internet
# (posso cancelar a regra que libera a porta 25 para enviar email )
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE

# Libero tudo para entrar na rede 10.0.0.0/24
# (posso cancelar a regra que libera a porta 110 para receber)
iptables -t nat -A POSTROUTING -d 10.0.0.0/24 -o eth0 -j MASQUERADE


#############################################################################
# Proteção contra ping da morte
#iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j DROP



echo "iptables pronto"


O que pode ser melhorado em meu arquivo?

Eu preciso fazer um redirecionamento de porta (5912) para o ip 10.0.0.12 (VNC) como fica essa regra ?

Obrigado a todos e desculpe a falta de conhecimento em iptables.

[4] Comentário enviado por srf em 07/01/2008 - 22:44h

OLá

tenho a seguinte regra:

iptables -t nat -A PREROUTING -d 201.60.10.26 -p tcp --dport 8080 -j DNAT --to 192.168.0.252:80

Esta regras faz toda requisição que chega de fora do firewall na pota 8080 ser direcionada para o webserver 192.168.0.252 na porta 80

Esta funcionando 100% o povo de fora acessa http://201.60.10.26:8080/ Blz...

O que preciso é que fazer os usuários de dentro da rede interna acessarem o mesmo link...

Isso é possivel?

[5] Comentário enviado por rogerio_gentil em 19/03/2009 - 14:12h

Muito boa essa dica.. aposto que tem muita gente atrás dessa!

[6] Comentário enviado por GustavinhoO em 02/05/2011 - 11:06h

bom dia!

tenho uma duvida.

tenho o seguinte ambiente na minha empresa, 40 maquinas internas e 50 que acessam de fora pela intranet.

tem um adsl + router d-link (lixo) que esta fazendo virtual host, ou seja redirecionando.
tudo que chega na porta xx encaminha para 192.168.1.100:1433 = sql server
e tem algumas outras.
como ficaria a regra nesse caso?

iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.100:1433

não testei ainda, gostaria de ter a certeza que esta certo!

[7] Comentário enviado por *mau* em 19/11/2011 - 11:10h

É possivel usar esse comando para direcionar a um DNS?

Eu quero que um servidor meu com IP valido e FIXO, direcione para um outro servidor o qual tambem tem um IP classe A valido porem com IP dinamico, portanto esse servidor tem um DNS.

Eu tentei esse comando não funcionou:

iptables -t nat -A PREROUTING -d 200.200.200.200 -p tcp --dport 80 -j DNAT --to teste.dyndns-web.com:8000


Seria possivel outro metodo?

[8] Comentário enviado por mcloh em 03/01/2012 - 11:00h

meu port forward não está funcionando... este é o retorno do iptables-save e do ip route... (123.123.123.123 é apenas um *** para o valor real do meu ip) alguma dica (sim, ativei o ip_forward)?


$iptables-save
# Generated by iptables-save v1.4.4 on Tue Jan 3 07:47:35 2012
*nat
:PREROUTING ACCEPT [698:38520]
:POSTROUTING ACCEPT [1122:89354]
:OUTPUT ACCEPT [1105:88470]
-A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.1.1.155:8080
-A POSTROUTING -d 10.1.1.155/32 -p tcp -m tcp --dport 8080 -j SNAT --to-source 123.123.123.123
COMMIT
# Completed on Tue Jan 3 07:47:35 2012
# Generated by iptables-save v1.4.4 on Tue Jan 3 07:47:35 2012
*mangle
:PREROUTING ACCEPT [8807:864273]
:INPUT ACCEPT [8671:857281]
:FORWARD ACCEPT [136:6992]
:OUTPUT ACCEPT [8352:1180725]
:POSTROUTING ACCEPT [8410:1181549]
COMMIT
# Completed on Tue Jan 3 07:47:35 2012
# Generated by iptables-save v1.4.4 on Tue Jan 3 07:47:35 2012
*filter
:INPUT ACCEPT [309:33618]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [147:14813]
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A FORWARD -d 10.1.1.155/32 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 8080 -j ACCEPT
COMMIT
# Completed on Tue Jan 3 07:47:35 2012


$ip route
10.1.1.0/24 via 123.123.123.123 dev venet0 scope link
127.0.0.0/8 dev lo scope link
default dev venet0 scope link

echo 1 > /proc/sys/net/ipv4/ip_forward

[9] Comentário enviado por zaeli em 13/07/2012 - 11:39h

Bom dia, sou novo no mundo livre linux, e gostaria de saber como irei criar essa regra e onde irei digitar ela, que foi passado pelo amigo Joao Carlos. Fico muito grato, abraços

[10] Comentário enviado por maringolo em 29/05/2013 - 18:50h

Amigo caso puder me ajudar.

O meu cenário é o seguinte, possuo um servidor de internet, com o debian 6 instalado, com ip fixo e gostaria de acessar uma pagina web, hospedada no tomcat em outro servidor de rede local windows server 2003.

Segue meu firewall

#!/bin/bash
#carregar modulos
modprobe iptable_nat
##############
# Limpar Regras
iptables -F
iptables -X
iptables -Z

iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z

iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
#####################
# Definir Politica Padrao

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#####################
# Liberar SSH

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#####################
# Liberar Loopback

iptables -A INPUT -i lo -j ACCEPT

#####################
# Liberar Resposta

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
######################################## Redirecionar para o Squid #########################################

iptables -t nat -A PREROUTING -i 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

#########################
# Redirecionamento (oque eu preciso)


#iptables -t nat -A PREROUTING -d (ip do servidor web) -p tcp -mtcp --dport 8080 -j DNAT --to-destination 192.168.0.254:8080

iptables -t nat -A PREROUTING -d (ip do servidor web) -i eth0 -p tcp --dport 8080 -j DNAT --to 192.168.0.254:8080

#FIM

esta regra acima foi oque eu tentei fazer mas sem sucesso!!!

Com este redirecionamento pretendo acessar este link do tomcat: http://ip do servidor:8080/dadosweb/loginWeb.jsp?execobj=XXPW20200 , de qualquer maquina web...








Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts