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:
-
Eu estou supondo que você está usando algum tipo de VPS , então
eth0provavelmente 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. -
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. -
Suas regras de firewall preexistentes podem interferir nessa regra, como está atualmente escrita. Não há substituto para realmente entender suas regras atuais de
iptablesantes 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 ACCEPTTal coisa seria necessária se a regra padrão da sua
FORWARDcadeia fosseDENY. -
Você precisa garantir que essas regras surjam na inicialização.
Se você tiver cuidado, poderá editar
/etc/sysconfig/iptablesno CentOS para fazer isso. Este arquivo usa uma sintaxe similar a - mas não exatamente como - a linguagem de linha de comandoiptables. 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 oiptablesservice (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.