SSH-Tunneling, um die Offenlegung einer Administratorkonsole zu verhindern

SSH-Tunneling, um die Offenlegung einer Administratorkonsole zu verhindern

Ich verwende Lucee Server, eine Cold-Fusion-Server-Engine, die in meinem Fall auf Tomcat auf Apache läuft.

Ich versuche, es auf verschiedene Weise zu härten, und stoße auf eine Frage zum hier beschriebenen SSH-Tunneling-Ansatz:https://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide.html#restricted-access-plus-ssh-tunnelling

Die Sache ist, dass ich nicht glaube, dass die Beschreibung, wie man dieses SSH-Tunneling durchführt, korrekt oder vollständig ist. Ich habe viel Zeit damit verbracht, mir die SSH-Dokumentation und auch einige andere Stack Exchange-Fragen anzusehen (https://superuser.com/q/588591/504387,https://superuser.com/q/237977/504387), aber ich bekomme das SSH-Tunneling immer noch nicht wie in diesem Handbuch oder auf andere Weise zum Laufen.


Aktuelles Setup: Ich habe lucee auf server.example.com laufen und lausche auf Port 8888. Apache läuft auf demselben Server und lauscht auf Port 443 und ist so konfiguriert, dass alle Anfragen an 127.0.0.1 auf Port 8888 weitergeleitet werden (d. h. sie werden an lucee weitergeleitet). Es ist jedoch so konfiguriert, dass Anfragen an /lucee abgelehnt werden, wie in der obigen Dokumentation beschrieben.

Dies bedeutet, dass auf die Lucee-Administratorkonsole nur direkt über Port 8888 und nicht über Port 443 zugegriffen werden kann. Die Firewall-Regeln (iptables) sind so eingestellt, dass eingehender Datenverkehr auf Port 8888 nur aus dem internen Firmennetzwerk zugelassen wird, sodass wir auf die Lucee-Konsole zugreifen können, die Außenwelt jedoch nicht.

DasMaiwäre in Ordnung, aber ich wollte sehen, ob ich den Tunnelansatz wie beschrieben zum Laufen bringen könnte. Wenn Tunneling funktionieren könnte, könnten wir die iptables-Zulassungsregel aufgeben und Port 8888 komplett blockieren (außer bei Loopback) oder Lucee einfach so neu konfigurieren, dass es NUR an 127.0.0.1 bindet.


SSH befindet sich auf einem nicht standardmäßigen Port auf server.example.com, nehmen wir an, es ist 3300.

Ich möchte auf meinem Laptop einen SSH-Befehl ausführen, der Folgendes bewirkt:

  1. Verwenden Sie meine vorhandene SSH-Konfiguration und meinen Schlüssel, um mich mit server.example.com zu verbinden (wo SSHD auf Port 3300 lauscht).
  2. Binden Sie an einen beliebigen Port auf dem lokalen Host auf meinem Laptop, sagen wir 60001,
  3. Stellen Sie vom Remote-Ende bei server.example.com aus wiederum eine Verbindung zu 127.0.0.1:8888 her, damit der Datenverkehr an lucee weitergeleitet werden kann.

Das Endergebnis sollte sein, dass ich darauf zugreifen kannhttp://127.0.0.1:60001/lucee/admin/server.cfmauf meinem Laptop und es wird von Lucee empfangen, das auf server.example.com läuft und auf Port 8888 lauscht, der an 127.0.0.1 auf diesem Server gebunden ist.

Wie kann ich das machen?

Antwort1

Sie sollten den Lucee-Server nur an binden, localhostda dieser auf dem Port kein TLS bereitstellt 8888. Dann haben Sie zwei Möglichkeiten, sicher auf die Verwaltungspfade zuzugreifen.

SSH-Tunnel

Ausssh(1):

-L [ bind_address:]port:host:hostport

Gibt an, dass die auf dem lokalen (Client-)Host angegebenen Daten an den angegebenen Port auf der Remote-Seite portweitergeleitet werden sollen .host

Gefüllt mit den Parametern aus Ihrer Frage:

ssh -L 60001:127.0.0.1:8888 [email protected] -p 3300

Apache-Proxy mit entsprechender Zugriffskontrolle

Da der Proxy auf dem Port 443mit TLS verschlüsselt ist, ist ein SSH-Proxying nicht unbedingt erforderlich, Sie können in der Apache-Konfiguration jedoch Verbindungen zu den Verwaltungspfaden aus Firmennetzwerken zulassen.

Die Dokumentation ist etwas veraltet, da das Beispiel die Apache 2.2-Syntax verwendet:

<Location /lucee>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Aber die Dokumentation zu Apache 2.4Zugangskontrolleerzählt:

Die von bereitgestellten Direktiven Allow, Deny, und sind veraltet und werden in einer zukünftigen Version entfernt. Sie sollten ihre Verwendung vermeiden und veraltete Tutorials meiden, die ihre Verwendung empfehlen.Ordermod_access_compat

Angenommen, Sie möchten den Zugriff auf /luceeLAN 192.168.22.0/24und öffentliche IP beschränken 198.51.100.22:

<Location /lucee>
    <RequireAny>
        Require ip 192.168.22.0/24
        Require ip 198.51.100.22
    </RequireAny>
</Location>

verwandte Informationen