Problema na Configuração IPTABLES [RESOLVIDO]

1. Problema na Configuração IPTABLES [RESOLVIDO]

Rodrigo Colli
rcolli

(usa Debian)

Enviado em 09/07/2009 - 10:26h

Moçada, estou configurando um firewall aqui na empresa onde trabalho.

Então precisava compartilhar a internet e isso está funcionando corretamente.

Agora estou tentando fazer um redirecionamento de porta. Melhor dizendo preciso que ao acessar a porta 2222 do meu IP externo, seja redirecionado para o IP interno na porta 22. E isso não estou conseguindo fazer.

Estou iniciando com o IPTABLES, se alguém puder dar uma ajuda!! Abaixo segue o Script que fiz baseado nos arquivos do VOL e em um livro que tenho.

#Ativa modulos iptables
modprobe iptable_nat
modprobe ip_tables
modprobe ipt_state
modprobe iptable_filter
modprobe ipt_MASQUERADE
modprobe iptable_mangle
modprobe ip_conntrack_ftp
modprobe ip_conntrack irc
modprobe ip_nat_ftp
modprobe ipt_LOG

#!/bin/bash
# Limpa tables e seta variaveis do kernel
echo "Iniciando firewall.."
echo "Limpando tabelas .."
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

#Compartilha Web para rede interna
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

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

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#LOGs
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j LOG --log-prefix="LOG SSH:"
iptables -t nat -A POSTROUTING -p tcp --dport 22 -j LOG --log-prefix="LOG SSH-OUT:"
iptables -A INPUT -p tcp --dport 2222 -j LOG --log-prefix="LOG INPUT:"
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix="LOG INPUT:"
iptables -A FORWARD -p tcp --dport 2222 -j LOG --log-prefix="LOG FORWARD:"
iptables -A FORWARD -p tcp --dport 22 -j LOG --log-prefix="LOG FORWARD:"
iptables -A OUTPUT -p tcp --dport 2222 -j LOG --log-prefix="LOG OUTPUT:"
iptables -A OUTPUT -p tcp --dport 22 -j LOG --log-prefix="LOG OUTPUT:"


#--------------REGRAS DE LIBERACAO----------------------#
iptables -A INPUT -p tcp --dport 5001 -j ACCEPT #SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #SSH
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #FTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #HTTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT #SMTP
iptables -A INPUT -p tcp --dport 110 -j ACCEPT #POP3
iptables -A INPUT -p tcp --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT #DNS
iptables -A INPUT -p udp --dport 2082 -j ACCEPT
iptables -A INPUT -p udp --dport 2086 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -A FORWARD -p tcp --dport 2222 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT #HTTPS
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT #HTTPS
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT #HTTPS
iptables -A FORWARD -p tcp --dport 5800 -j ACCEPT #HTTPS
iptables -A FORWARD -p tcp --dport 5900 -j ACCEPT #HTTPS
iptables -A FORWARD -p udp --dport 443 -j ACCEPT #HTTPS
iptables -A FORWARD -p tcp --dport 20 -j ACCEPT #FTP_DATA
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT #SSH
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT #FTP
iptables -A FORWARD -p tcp --dport 2631 -j ACCEPT #Caixa
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT #Proxy
iptables -A OUTPUT -p tcp --dport 2222 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Desvio de Porta SSH.
iptables -A PREROUTING -t nat -i eth1 -p tcp -d 0/0 --dport 2222 -j DNAT --to 10.1.48.6:22

Valeu ...


  


2. MELHOR RESPOSTA

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 13/07/2009 - 09:34h

Tem certeza que:

a) no servidor SSH o serviço SSH na porta 22 está ativo
Porque pelos teus logs, o NAT está ocorrendo com sucesso.

b) Este serviço aceita conexões de qualquer IP, isto é, NO SERVIDOR não tem um outro firewall BLOQUEANDO este acesso.
Pode ser que o servidor interno SSH não esteja aceitando conexões na porta 22, a menos que venha dos ips confiáveis. Veja que a conexão continuará vindo do IP externo.

c) O servidor SSH está configurado para usar o teu firewall como gateway?
Porque se o teu servidor interno está configurado com outro gateway, ele irá responder para este e não para o teu firewall.


3. Re: Problema na Configuração IPTABLES [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 09/07/2009 - 10:40h

# Desvio de Porta SSH.
iptables -A PREROUTING -t nat -i eth1 -p tcp -d 0/0 --dport 2222 -j DNAT --to 10.1.48.6:22

Supondo que tua rede EXTERNA, da internet, seja realmente a eth1 e que o 10.1.48.6 esteja EM OUTRA PLACA (eth0?) a regra que colocaste ai é SUFICIENTE e DEVE FUNCIONAR.

Agora se o acesso vem da mesma rede onde está o 10.1.46.6 (exemplo: cliente 10.1.46.200 acessando a porta 2222) ai nao funciona. Ao menos não desta forma


4. Re: Problema na Configuração IPTABLES [RESOLVIDO]

Rodrigo Colli
rcolli

(usa Debian)

Enviado em 13/07/2009 - 09:24h

[3] Enviado em 09/07/2009 - 10:57h:
LOGs

Amigo ..primeiramente obrigado pela ajuda ... é exatamente o que vc falou internet na eth1 e rede local na eth0.

Pois é quando eu tento acessar via putty(ssh) pela porta 2222 o mesmo da timeout. Não sei se ajuga mas abaixo segue os logs registrado no momento de uma tentativa de conexão. E o iptables -L -v. Valeu ..

LOG:
Jul 9 10:51:03 S1476 kernel: [175726.049507] LOG SSH:IN=eth1 OUT= MAC=00:14:d1:38:b6:d0:00:25:45:66:cd:94:08:00 SRC=189.107.17.35 DST=189.75.233.1 LEN=48 TOS=0x00 PREC=0x00 TTL=118 ID=27874 DF PROTO=TCP SPT=63918 DPT=2222 WINDOW=65535 RES=0x00 SYN URGP=0

Jul 9 10:51:03 S1476 kernel: [175726.049507] LOG FORWARD:IN=eth1 OUT=eth0 SRC=189.107.17.35 DST=10.1.48.6 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=27874 DF PROTO=TCP SPT=63918 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Jul 9 10:51:03 S1476 kernel: [175726.049507] LOG SSH-OUT:IN= OUT=eth0 SRC=189.107.17.35 DST=10.1.48.6 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=27874 DF PROTO=TCP SPT=63918 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Jul 9 10:51:06 S1476 kernel: [175729.036016] LOG FORWARD:IN=eth1 OUT=eth0 SRC=189.107.17.35 DST=10.1.48.6 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=27901 DF PROTO=TCP SPT=63918 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Jul 9 10:51:12 S1476 kernel: [175735.308656] LOG FORWARD:IN=eth1 OUT=eth0 SRC=189.107.17.35 DST=10.1.48.6 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=27971 DF PROTO=TCP SPT=63918 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

IPTABLES -L -v:

Chain INPUT (policy ACCEPT 9813 packets, 933K bytes)
pkts bytes target prot opt in out source destination
835 74827 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 LOG tcp -- any any anywhere anywhere tcp dpt:2222 LOG level warning prefix `LOG INPUT:'
1 52 LOG tcp -- any any anywhere anywhere tcp dpt:ssh LOG level warning prefix `LOG INPUT:'
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5001
1 52 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:smtp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:pop3
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:domain
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:domain
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:2082
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:gnunet
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:2222
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:2222
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:ssh

Chain FORWARD (policy ACCEPT 66076 packets, 3836K bytes)
pkts bytes target prot opt in out source destination
105K 39M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 LOG tcp -- any any anywhere anywhere tcp dpt:2222 LOG level warning prefix `LOG FORWARD:'
3 144 LOG tcp -- any any anywhere anywhere tcp dpt:ssh LOG level warning prefix `LOG FORWARD:'
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:2222
169 10083 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
1114 59268 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:3128
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5800
5 256 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5900
4 184 ACCEPT udp -- any any anywhere anywhere udp dpt:https
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp-data
3 144 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
8 416 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:2631
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:3128
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:ssh
1 52 ACCEPT tcp -- any any anywhere anywhere tcp spt:2222

Chain OUTPUT (policy ACCEPT 23 packets, 1642 bytes)
pkts bytes target prot opt in out source destination
776 154K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 LOG tcp -- any any anywhere anywhere tcp dpt:2222 LOG level warning prefix `LOG OUTPUT:'
0 0 LOG tcp -- any any anywhere anywhere tcp dpt:ssh LOG level warning prefix `LOG OUTPUT:'
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:2222
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:2222


5. Re: Problema na Configuração IPTABLES [RESOLVIDO]

Rodrigo Colli
rcolli

(usa Debian)

Enviado em 13/07/2009 - 11:26h

Gente boa ... vc matou a charada!!

O item C, nós já temos um firewall rodando com um link velox.

E estamos colocando um novo firewall com link dedicado.

O servidor que estava tentando acessar estava com o gateway da velox. Dai naum vai nunca mesmo.

Mandou muito bem cara!!
Brigadão.
Att.
Colli


6. Re: Problema na Configuração IPTABLES [RESOLVIDO]

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 14/07/2009 - 15:50h

Sei que já identificou o problema e até marcou o post como resolvido.

Mas a solução?

No teu último post disseste, ou deixaste entender, que "nunca iria funcionar".

Na verdade tem como fazer funcionar sim, mesmo com os dois links. Basta um duplo nat. Ao passar pelo teu firewall, trocar o ip de origem também fazendo chegar no teu servidor vindo do firewall. Isto pode ser feito inserindo ainda mais esta regra iptables no firewall:

iptables -I POSTROUTING -t nat -o eth0 -p tcp -d 10.1.48.6 --dport 22 -j MASQUERADE

Estou supondo que o teu server esteja na eth0. Pus o -I para garantir que ela seja aplicada antes de algum outro MASQ que tenhas (pelos teus exemplos, tu não tem nada para eth0).

O único inconveniente é que nos logs do teu servidor só verias o ip do firewall acessando SSH e nunca os verdadeiros. Teria que buscar esta informação nos logs do firewall.