Redirecionar tráfego entre duas portas com iptables

2

Meu objetivo é executar um servidor da Web na porta 3000 e disponibilizá-lo para minha rede pela porta 80. A melhor resposta que encontrei até agora é esse ótimo liner.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

Mas isso só afeta os pacotes recebidos e eu gostaria que o cliente obtivesse sua resposta de volta da porta 80. O próximo problema é que o servidor da Web deve ser acessível somente pela porta 80. Até agora estou preso com essa configuração.

# Default Chain Policies
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Allow Loopback Access
iptables -t filter -A INPUT  -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
iptables -t nat -A POSTROUTING -p tcp -o eth0 --sport 3000 -j SNAT --to 192.168.0.2:80

iptables -t filter -A INPUT  -i eth0 -p tcp --dport 3000 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 3000 -j ACCEPT
    
por TheHelix 05.05.2012 / 19:53

2 respostas

0

Isso parece fazer o truque. O servidor da Web agora está disponível com mais de 80 e não mais de 3.000.

iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 1
iptables -t nat    -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
iptables -t filter -A INPUT      -i eth0 -p tcp --dport 3000 -m state --state NEW,ESTABLISHED -m mark --mark 1 -j ACCEPT
iptables -t filter -A OUTPUT     -o eth0 -p tcp --sport 3000 -m state --state ESTABLISHED -j ACCEPT
    
por 06.05.2012 / 19:53
2

Você precisa permitir os estados "RELACIONADO" e "ESTABELECIDO". Não há necessidade da regra POSTROUTING.

Um servidor da Web como o apache pode ligar-se à porta 80 porque ele é executado como raiz. Isso permite vincular a uma porta privilegiada < 1024, mas descarta privilégios de root depois disso e processa a solicitação http em um usuário não privilegiado. Então, você deve ser capaz de fazer algo similar se quiser ligar à porta 80.

    
por 05.05.2012 / 21:41