Estou executando o Lucee Server, um mecanismo de servidor de fusão a frio que no meu caso roda no Tomcat, no Apache.
Estou procurando fortalecê-lo de várias maneiras e me deparo com uma pergunta sobre a abordagem de tunelamento SSH descrita aqui:https://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide.html#restricted-access-plus-ssh-tunnelling
O problema é que não acho que a descrição de como fazer esse tunelamento ssh seja precisa ou completa. Passei muito tempo examinando a documentação do SSH e também algumas outras questões do Stack Exchange (https://superuser.com/q/588591/504387,https://superuser.com/q/237977/504387), mas ainda não consegue fazer o tunelamento SSH funcionar conforme descrito nesse guia ou de qualquer outra forma.
Configuração atual, tenho lucee rodando em server.example.com escutando na porta 8888. O Apache rodando no mesmo servidor está escutando na porta 443 e está configurado para fazer proxy de todas as solicitações para 127.0.0.1 na porta 8888 (ou seja, encaminhá-las para lucee) . Mas está configurado para negar solicitações para /lucee conforme descrito na documentação acima.
Isso significa que o console de administração Lucee só pode ser acessado diretamente na porta 8888, não através da porta 443. As regras de firewall (iptables) são definidas para permitir o tráfego de entrada na porta 8888 apenas da rede interna da empresa, para que possamos acessar o console lucee, mas o mundo exterior não pode.
Essepoderiatudo bem, mas eu estava tentando ver se conseguia fazer a abordagem de tunelamento funcionar conforme descrito. Se o tunelamento pudesse funcionar, poderíamos abandonar a regra de permissão do iptables e apenas bloquear a porta 8888 completamente (exceto no loopback), ou apenas reconfigurar o lucee para ligar SOMENTE a 127.0.0.1.
O SSH está em uma porta não padrão em server.example.com, vamos fingir que é 3300.
O que eu quero fazer é executar um comando SSH no meu laptop que irá:
- Use minha configuração e chave ssh existente para me conectar a server.example.com (onde o sshd está escutando na porta 3300),
- Vincule a qualquer porta no host local do meu laptop, digamos 60001,
- DA extremidade remota em server.example.com, conecte-se, por sua vez, a 127.0.0.1:8888 para que o tráfego possa ser passado para lucee.
O resultado final deve ser que eu possa acessarhttp://127.0.0.1:60001/lucee/admin/server.cfmno meu laptop e será recebido pelo lucee rodando em server.example.com e ouvindo a porta 8888 vinculada a 127.0.0.1 nesse servidor.
Como posso fazer isso?
Responder1
Você deve vincular o Lucee Server apenas, localhost
pois ele não fornece TLS na porta 8888
. Então você tem duas opções para acessar os caminhos administrativos com segurança.
Túnel SSH
Dessh(1):
-L [ bind_address:]port:host:hostport
Especifica que o
port
host local (cliente) fornecido deve ser encaminhado para ahost
porta fornecida no lado remoto.
Preenchido com os parâmetros da sua pergunta:
ssh -L 60001:127.0.0.1:8888 [email protected] -p 3300
Proxy Apache com controle de acesso adequado
Como o proxy na porta 443
é criptografado com TLS, você não precisa necessariamente de proxy SSH, mas pode permitir conexões com os caminhos administrativos das redes da empresa na configuração do Apache.
A documentação está um pouco desatualizada, pois o exemplo usa a sintaxe do Apache 2.2:
<Location /lucee> Order Deny,Allow Deny from all Allow from 127.0.0.1 </Location>
Mas a documentação do Apache 2.4controle de acessodiz:
As diretivas , e, fornecidas por
Allow
,Deny
estão obsoletas e desaparecerão em uma versão futura. Você deve evitar usá-los e evitar tutoriais desatualizados que recomendem seu uso.Order
mod_access_compat
Digamos que você gostaria de limitar o acesso para /lucee
permitir apenas LAN 192.168.22.0/24
e IP público 198.51.100.22
:
<Location /lucee>
<RequireAny>
Require ip 192.168.22.0/24
Require ip 198.51.100.22
</RequireAny>
</Location>