Redirecionamento de portas na rede interna

Iniciado por nelia, 13 de Outubro de 2010, 15:15

tópico anterior - próximo tópico

nelia

Oi,

Meu caso é o seguinte tenho um servidor win2003 rodado minha aplicação web e o firewall com ubuntu (nao estou usando squid). Estou conseguindo acessar o sistema  fora da minha rede, mas quando acesso os sistema de denta da minha rede interna nao consigo acessar o que pode ser?

zekkerj

Redirecionamento não funciona na rede interna. Ou, funciona, mas pra isso vc tem que fazer SNAT/MASQUERADING, senão não funciona.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

Citação de: zekkerj online 13 de Outubro de 2010, 16:00
Redirecionamento não funciona na rede interna. Ou, funciona, mas pra isso vc tem que fazer SNAT/MASQUERADING, senão não funciona.

Coloquei a seguinte regra no meu firewall
iptables -t nat -A PREROUTING -d IP_DA_WEB -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
iptables -t nat -A POSTROUTING -d 192.168.1.3 -s 0/0 -p tcp --dport 80 -j SNAT --to IP_DA_WEB

mas continuo sem acessar de dentro da rede da minha rede interna.
Quando acesso de fora o endereço é o seguinte http://201.xxx.xxx.xxx/webalunos/sae_alunos/login.php, acessa sem problemas
mas quando estou na rede interna nao acessa, no entanto se eu substituit o IP, por exemplo http://192.168.1.3/webalunos/sae_alunos/login.php ai dar certo... o que eu faço?

zekkerj

Citar--to IP_DA_WEB
Use o IP da rede interna que vai funcionar. ;)
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

Citação de: zekkerj online 14 de Outubro de 2010, 12:24
Citar--to IP_DA_WEB
Use o IP da rede interna que vai funcionar. ;)
Talvez seja uma pergunta besta, mas mesmo assim vou perguntar ;-)

Vc fala em substituir o IP_DA_WEB pelo meu IP do servidor? assim....

iptables -t nat -A PREROUTING -d 192.168.1.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
iptables -t nat -A POSTROUTING -d 192.168.1.3 -s 0/0 -p tcp --dport 80 -j SNAT --to 192.168.1.3

zekkerj

Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

#6
Citação de: zekkerj online 14 de Outubro de 2010, 12:57
Sim, isso mesmo.
Não deu certo...

Olha a regra que eu coloquei e que esta fucionando de fora da minha rede é a seguinte

iptables - A PREROUTING -t nat -p tcp -i eth0 -d 201.xxx.xxx.xxx --dport 80 -j DNAT --to 192.168.1.3:80
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 80 -j ACCEPT.

continua funcionando apenas de fora da minha rede

zekkerj

Isso que dá não prestar atenção no que está escrito. Eu li rápido (mó correria aqui no serviço hoje), e achei que "192.168.1.3" seria o endereço interno do firewall, e pelo visto não é.

Digamos que seu firewall tenha endereço interno 192.168.1.1, na interface eth1. Sua regra então fica assim:

iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.1.3 -j SNAT --to 192.168.1.1
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

Citação de: zekkerj online 14 de Outubro de 2010, 17:25
Isso que dá não prestar atenção no que está escrito. Eu li rápido (mó correria aqui no serviço hoje), e achei que "192.168.1.3" seria o endereço interno do firewall, e pelo visto não é.

Digamos que seu firewall tenha endereço interno 192.168.1.1, na interface eth1. Sua regra então fica assim:

iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.1.3 -j SNAT --to 192.168.1.1
Não deu certo....
Meu ip_valido é 200.200.200.200
Meu firewall é 192.168.1.1
o ip da maquina que tem minha aplicação web é 192.168.1.3.
Como disse antes de fora da minha rede eu consigo acessar normalmente, no entanto quando estou na minha rede so consigo acessar se eu trocar o ip. por exemplo
http://200.200.200.200/webaluno/sap_aluno/login.php trocar por http://192.168.1.3/webaluno/sap_aluno/login.php

zekkerj

Entente pq eu falei lá em cima que não funciona? A gente até vai conseguir fazer funcionar alguma hora, mas é complicado...

Mostra teu firewall todo, de repente a regra está colocada no lugar errado.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

Citação de: zekkerj online 20 de Outubro de 2010, 18:26
Entente pq eu falei lá em cima que não funciona? A gente até vai conseguir fazer funcionar alguma hora, mas é complicado...

Mostra teu firewall todo, de repente a regra está colocada no lugar errado.
Conforme vc pediu estou enviando como estão minhas regras

###########---REGRAS PARA FIREWALL ----###############
# ATIVA MódULOS
# -------------------------------------------------------
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE


# ATIVA ROTEAMENTO NO KERNEL
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward


# PROTEÇÃO CONTRA IP SPOOFING
# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


# ZERA REGRAS
# -------------------------------------------------------
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle


# DETERMINA A POLITICA PADRÃO
# -------------------------------------------------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


#################################################
# TABELA FILTER
#################################################


# DROPA PACOTES TCP INDESEJVEIS
# -------------------------------------------------------
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: "
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP



# ACEITA OS PACOTES QUE REALMENTE DEVEM ENTRAR
# -------------------------------------------------------
iptables -A INPUT -i ! eth0 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


# PROTEÇÃO CONTRA TRINOO
# -------------------------------------------------------
iptables -N TRINOO
iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: "
iptables -A TRINOO -j DROP
iptables -A INPUT -p TCP -i eth0 --dport 27444 -j TRINOO
iptables -A INPUT -p TCP -i eth0 --dport 27665 -j TRINOO
iptables -A INPUT -p TCP -i eth0 --dport 31335 -j TRINOO
iptables -A INPUT -p TCP -i eth0 --dport 34555 -j TRINOO
iptables -A INPUT -p TCP -i eth0 --dport 35555 -j TRINOO


# PROTEÇAO CONTRA TRONJANS
# -------------------------------------------------------
iptables -N TROJAN
iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "
iptables -A TROJAN -j DROP
iptables -A INPUT -p TCP -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p TCP -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p TCP -i eth0 --dport 4000 -j TROJAN
iptables -A INPUT -p TCP -i eth0 --dport 6000 -j TROJAN
iptables -A INPUT -p TCP -i eth0 --dport 6006 -j TROJAN
iptables -A INPUT -p TCP -i eth0 --dport 16660 -j TROJAN


# PROTEÇAO CONTRA WORMS
# -------------------------------------------------------
iptables -A FORWARD -p tcp --dport 135 -i eth1 -j REJECT


# PROTEÇAO CONTRA SYN-FLOOD
# -------------------------------------------------------
iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT

# PROTEÇAO CONTRA PING DA MORTE
# -------------------------------------------------------
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


# PROTEÇAO CONTRA PORT SCANNERS
# -------------------------------------------------------
iptables -N SCANNER
iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: port scanner: "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i eth0 -j SCANNER


# LOGA TENTATIVA DE ACESSO A DETERMINADAS PORTAS
# -------------------------------------------------------
iptables -A INPUT -p tcp --dport 21 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
iptables -A INPUT -p tcp --dport 23 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: "
iptables -A INPUT -p tcp --dport 25 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: "
iptables -A INPUT -p tcp --dport 80 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
iptables -A INPUT -p tcp --dport 110 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: "
iptables -A INPUT -p udp --dport 111 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: "
iptables -A INPUT -p tcp --dport 113 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: identd: "
iptables -A INPUT -p tcp --dport 137:139 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p udp --dport 137:139 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p tcp --dport 161:162 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: "
iptables -A INPUT -p tcp --dport 6667:6668 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: irc: "
iptables -A INPUT -p tcp --dport 3128 -i eth0 -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "

# LIBERA ACESSO EXTERNO A DETERMINADAS PORTAS
# -------------------------------------------------------
iptables -A INPUT -p tcp --dport 22 -i eth0 -j ACCEPT

iptables -A INPUT -p tcp --dport 4976 -i eth0 -j ACCEPT  #DIRET. FINANCEIRA BANCO REAL



#################################################
# TABELA NAT
#################################################


# ATIVA MASCARAMENTO DE SAA
# -------------------------------------------------------
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE


# REDIRECIONANDO PARA RADMIN
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 200.200.200.200 --dport 4899 -j DNAT --to 192.168.1.3:4899
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 4899 -j ACCEPT


# REDIRECIONANDO O SITE  PARA SERVIDOR DBSERVER
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 200.200.200.200 --dport 80 -j DNAT --to 192.168.1.3:80
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 80 -j ACCEPT

####TESTANDO REDIRECIONAR PARA BIBLIOTECA
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 200.200.200.200 --dport 8080 -j DNAT --to 192.168.1.5:8080
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.5 --dport 8080 -j ACCEPT






zekkerj

Acho que já entendi o problema.

Você só está liberando a passagem de pacotes vindos da rede interna ou na loopback, na cadeia INPUT. Acontece que quando vc faz DNAT, ele deixa de ir pra cadeia INPUT, e passa a ir pra cadeia FORWARD.
...
iptables -A INPUT -i ! eth0 -j ACCEPT
...

Lá na cadeia FORWARD, vc só liberou a passagem se estiver vindo da interface eth0:

...
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 80 -j ACCEPT
...

Eu sugiro que vc retire esse "-i eth0" dessas regras, e coloque a regra sugerida antes na cadeia POSTROUTING.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

nelia

Citação de: zekkerj online 20 de Outubro de 2010, 20:07
Acho que já entendi o problema.

Você só está liberando a passagem de pacotes vindos da rede interna ou na loopback, na cadeia INPUT. Acontece que quando vc faz DNAT, ele deixa de ir pra cadeia INPUT, e passa a ir pra cadeia FORWARD.
...
iptables -A INPUT -i ! eth0 -j ACCEPT
...

Lá na cadeia FORWARD, vc só liberou a passagem se estiver vindo da interface eth0:

...
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 80 -j ACCEPT
...

Eu sugiro que vc retire esse "-i eth0" dessas regras, e coloque a regra sugerida antes na cadeia POSTROUTING.
Vc fala em colocar a regra

# ATIVA MASCARAMENTO DE SAA
# -------------------------------------------------------
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.1.3 -j SNAT --to 192.168.1.1


# REDIRECIONANDO PARA RADMIN
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 200.200.200.200 --dport 4899 -j DNAT --to 192.168.1.3:4899
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.3 --dport 4899 -j ACCEPT


# REDIRECIONANDO O SITE  PARA SERVIDOR DBSERVER
iptables -A PREROUTING -t nat -p tcp  -d 200.200.200.200 --dport 80 -j DNAT --to 192.168.1.3:80
iptables -A FORWARD -p tcp -d 192.168.1.3 --dport 80 -j ACCEPT


####TESTANDO REDIRECIONAR PARA BIBLIOTECA
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 200.200.200.200 --dport 8080 -j DNAT --to 192.168.1.5:8080
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.5 --dport 8080 -j ACCEPT


zekkerj

Sim, retirar o "-i eth0" das duas regras é melhor (eu tinha dito pra tirar só da segunda regra).

Teste e dê retorno.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D