Redireciona a porta HTTP padrão para um aplicativo

2

No meu servidor CentOS em mydomain.com , tenho um aplicativo da Web svn em execução na porta 8880. Desejo ocultar a porta: neste momento, se alguém quiser acessar, precisará acessar por meio de http://thisdomain.com:8880/svn . Quero tornar o aplicativo acessível em http://thisdomain.com/ .

    
por Marco Herrarte 06.11.2013 / 05:47

2 respostas

2

Opção 1: encaminhamento de porta NAT

Se tudo que você precisa fazer aqui é redirecionar solicitações na porta externa 80 para um programa interno em execução na porta 8880, você pode usar iptables port forwarding para isto:

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 127.0.0.1:8880

Existem vários pontos para entender aqui:

  1. Eu estou supondo que você está usando algum tipo de VPS , então eth0 provavelmente não é o nome da interface correta. Você terá que substituir isso em caso afirmativo.

    Por acaso, se você estiver em hospedagem compartilhada ou o seu VPS não permitir iptables , pule para a próxima opção.

  2. Como escrito acima, a regra assume que você configurou este programa interno para ouvir somente na interface localhost, 127.0.0.1 . Isso faz com que você tenha o comportamento de "esconder" que você pediu.

  3. Suas regras de firewall preexistentes podem interferir nessa regra, como está atualmente escrita. Não há substituto para realmente entender suas regras atuais de iptables antes de modificá-las, mas se isso não funcionar, você pode tentar adicionar outra regra como essa:

    # iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
    

    Tal coisa seria necessária se a regra padrão da sua FORWARD cadeia fosse DENY .

  4. Você precisa garantir que essas regras surjam na inicialização.

    Se você tiver cuidado, poderá editar /etc/sysconfig/iptables no CentOS para fazer isso. Este arquivo usa uma sintaxe similar a - mas não exatamente como - a linguagem de linha de comando iptables . Provavelmente, você deve testar isso em uma VM local para reduzir as chances de você se desconectar acidentalmente de seu servidor público.

    Seria mais seguro colocar os comandos em /etc/rc.local , mas lembre-se de que, se você reiniciar o iptables service (por exemplo, service iptables reload ), suas regras personalizadas serão removidas se não estiverem em /etc/sysconfig/iptables .

Se você leu tudo isso e se perguntou por que eu fiz a Opção 1, quando a Opção 2 abaixo é mais simples, é que é muito mais eficiente. O encaminhamento de porta é basicamente "gratuito" em termos de recursos depois de configurado.

Opção 2: proxy HTTP

Outro caminho a seguir é usar algum tipo de proxy HTTP . Eu usei Tinyproxy para esse tipo de coisa. É mais flexível do que o encaminhamento de porta NAT e não exige que você use o firewall do SO.

Ele é empacotado para o CentOS em EPEL , para que, depois de ativar o repositório EPEL, você só precise dizer yum install tinyproxy .

Faça essas alterações no arquivo /etc/tinyproxy/tinyproxy.conf do estoque:

Port 80
Upstream localhost:8880

Além disso, comente a linha Allow , para que o Tinyproxy aceite conexões de IPs externos:

# Allow 127.0.0.1

Você precisa ter certeza de que o Apache não está em execução ( service httpd stop ) quando você tentar iniciar isto ( service tinyproxy start ), já que ele estará ocupando a porta 80.

A documentação do Tinyproxy é apenas uma referência concisa, então não tenho certeza se esse uso de Upstream é um hack melhor substituído pelo uso do Tinyproxy's proxy reverso . Funciona para mim, porém, e leva menos alterações ao arquivo de configuração, então é assim que eu faço.

Se você está se perguntando por que eu não usei o Apache para isso desde o começo, é simplesmente que é mais complexo e requer mais recursos. O Apache possui recursos de proxy . A menos que você precise de todo o poder do Apache, eu não vejo uma razão para seguir o caminho do Tinyproxy.

Ao contrário do redirecionamento de portas NAT, são necessários alguns recursos do sistema para executar o Tinyproxy. É preciso um pouco de RAM e, se o seu nível de tráfego for alto o suficiente, ele poderá se tornar limite de E / S . Se o seu servidor não estiver particularmente ocupado, você provavelmente nem perceberá que está sendo executado.

    
por 06.11.2013 / 23:43
2

Isso seria feito no seu arquivo httpd.conf como um host virtual. Seria algo parecido com:

<VirtualHost thisdomain.com:8880>
DocumentRoot /www/docs/svn/myapp
ServerName thisdomain.com
</VirtualHost

Certifique-se de que o apache esteja em risco para a porta correta. Encontre onde está escrito listen 80 e inclua listen 8880

    
por 06.11.2013 / 07:14