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
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. -
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
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 fosseDENY
. -
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 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 oiptables
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.