iptables encaminhamento de porta

4

Eu tenho um servidor CentOS com Java / J2EE (Tomcat) instalado na porta TCP 8080. Eu tenho duas interfaces, eth0 e lo.

Eu preciso encaminhar todas as conexões de entrada na porta TCP 80 a 8080.

Eu tentei fazer o seguinte, que funciona:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to x.x.x.x:8080
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT

em que x.x.x.x é o ip associado à interface eth0.

Isso parece também abrir a porta 8080 para o mundo externo, o que não quero fazer. Eu só quero a porta 80 exposta ao mundo externo, encaminhando todo o tráfego para 8080.

Qualquer ajuda seria apreciada.

Atualização: O iptables -L se parece com abaixo

[root@server admin]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
DROP       tcp  --  anywhere             anywhere            state NEW tcp dpt:http 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@server admin]# 

iptables -t nat - list se parece com abaixo

[root@server admin]# iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere            tcp dpt:http to:x.x.x.x:8080 

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@server admin]# ^C
    
por ManiP 20.09.2013 / 21:06

2 respostas

1

Eu postei um comentário sugerindo para configurar o tomcat para escutar 80 ou usar o apache / nginx como um proxy reverso, que é o que eu acho que você deveria estar fazendo. Mas para a posteridade eu também responderei sua pergunta iptables .

O problema é que o que você está fazendo não é DNAT, é redirecionamento de porta. Em vez de -j DNAT , você precisa de -j REDIRECT .

Por exemplo:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
    
por 25.05.2014 / 08:06
0

Você está usando o iptables para trás. O iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT explicity abre a porta para o mundo. O que você precisa é alterar o ACCEPT para DROP , então a porta só aceitará novas conexões para 80, mas não para 8080.

iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j DROP
    
por 20.09.2013 / 21:18