Como eu posso redirecionar as portas 80 e 443 para 8080 e 8443 com o iptables?

4

Estou vendo a documentação de uma aplicação web do Tomcat 6 chamada DSpace, especificamente em relação à execução de Rodando o DSpace em portas padrão (80 para http: // e 443 para https: //)

Estou tentando usar o "Método 1", que usa o iptables para redirecionar o tráfego das portas 80 e 443 para 8080 e 8443, a fim de se livrar do :8080 na URL.

Estes são os comandos que a documentação fornece:

/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A OUTPUT -p tcp -d _[server_ip_address|server_ip_address]_ --dport 80 -j  REDIRECT --to-port 8080
/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 8443

Eu acho que há algo que precisa ser alterado sobre a segunda linha, especificamente com a seção -d _[server_ip_address|server_ip_address]_ - mas não tenho certeza sobre o quê. Eu li a página man para iptables mas não estou tendo sorte.

Eu tentei alterar -d _[server_ip_address|server_ip_address]_ para:

-d _[127.0.0.1|127.0.0.1]_ 

e também:

-d _[54.224.121.116|54.224.121.116]_

e também:

-d _[ec2-54-224-112-116.compute-1.amazonaws.com|ec2-54-224-112-116.compute-1.amazonaws.com]_

Os erros que estou recebendo incluem Bad argument 'REDIRECT' e também

host/network '_127.0.0.1' not found

Alguém pode me ajudar a identificar o que estou fazendo de errado?

update : acho que o redirecionamento funcionará sem a segunda linha, mas ainda não sei qual é a finalidade pretendida ...

    
por cwd 21.03.2013 / 18:44

3 respostas

5

Acho que você está simplesmente confuso com a pontuação quebrada nessa página. Os _ e [ são remanescentes de alguma marcação, eles não fazem parte da sintaxe iptables . Além disso, o caractere | não pode ser usado para separar IPs, você precisa usar , (vírgula).

/sbin/iptables -t nat -A OUTPUT -p tcp -d 54.224.121.116,54.224.121.116 --dport 80 -j  REDIRECT --to-port 8080
    
por 22.03.2013 / 01:30
1

fwiw Eu realmente penso em trabalhar com o mod_proxy_ajp no Apache normal. Parece que você está tentando fazer as pessoas não precisarem digitar / ver: 8080 e: 8443 no final do nome do servidor na URL. mod_proxy_ajp é geralmente mais fácil para o que você está tentando fazer e se você decidir fazer o backup mais tarde e fazer algum balanceamento de carga, é trivial fazê-lo se você já estiver em uma configuração mod_proxy_ajp. Esta é a configuração em um dos meus servidores de produção:

<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass         /   ajp://fqdn.for.server:8009/
ProxyPassReverse  /   ajp://fqdn.for.server:8009/

Você pode colocar o ProxyPass em uma configuração do VirtualHost e depois disso é praticamente como configurar qualquer outro host (o que significa que você pode configurar o SSL na porta 443 e texto simples na porta 80). Para um maior discurso sobre o negócio inteiro .

Apache + mod_proxy não é a única maneira de fazer isso, mas é o que eu tenho mais experiência e parece que seria menos trabalho do que como você está tentando fazê-lo (encaminhamento de porta com o firewall).

    
por 21.03.2013 / 19:34
1

Tanto quanto eu entendo, as segundas regras especificam o que fazer se você estiver tentando ir do servidor para o servidor (assim, -d ) redirecionando 80 para 8080 . Isso é necessário porque pacotes gerados localmente não são tratados por PREROUTING (de link e "Atualizações")

Nota: eu costumo usar o shorewall como firewall, então não considere minha resposta como prova de balas e nem de arco-íris.

    
por 21.03.2013 / 21:45