SSH-туннелирование для предотвращения раскрытия административной консоли

SSH-туннелирование для предотвращения раскрытия административной консоли

Я использую Lucee Server, серверный движок холодного синтеза, который в моем случае работает на Tomcat, на Apache.

Я изучаю способы усиления защиты и столкнулся с вопросом о подходе к туннелированию SSH, описанном здесь:https://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide.html#restricted-access-plus-ssh-tunnelling

Дело в том, что я не думаю, что описание того, как сделать этот ssh-туннель, является точным или полным. Я потратил кучу времени на изучение документации SSH, а также на некоторые другие вопросы Stack Exchange (https://superuser.com/q/588591/504387,https://superuser.com/q/237977/504387), но все еще не могу заставить работать SSH-туннелирование, как описано в этом руководстве или каким-либо другим способом.


Текущая настройка: lucee запущен на server.example.com и прослушивает порт 8888. Apache, запущенный на том же сервере, прослушивает порт 443 и настроен на проксирование всех запросов на 127.0.0.1 на порт 8888 (т. е. перенаправляет их на lucee). Но он настроен на отклонение запросов на /lucee, как описано в документации выше.

Это означает, что доступ к консоли администратора Lucee можно получить только напрямую через порт 8888, а не через порт 443. Правила брандмауэра (iptables) настроены так, чтобы разрешать входящий трафик через порт 8888 только из внутренней сети компании, поэтому мы можем получить доступ к консоли Lucee, но внешний мир не может.

Этотможетвсе в порядке, но я пытался понять, смогу ли я заставить работать подход с туннелированием так, как описано. Если туннелирование может работать, мы можем отказаться от правила iptables allow и просто полностью заблокировать порт 8888 (кроме loopback) или просто перенастроить lucee на привязку ТОЛЬКО к 127.0.0.1.


SSH находится на нестандартном порту на server.example.com, предположим, что это 3300.

Я хочу запустить на своем ноутбуке команду SSH, которая:

  1. Используйте мою существующую конфигурацию SSH и ключ для подключения к server.example.com (где sshd прослушивает порт 3300),
  2. Привяжите его к любому порту на локальном хосте моего ноутбука, скажем, 60001,
  3. С удаленного конца server.example.com подключитесь по очереди к 127.0.0.1:8888, чтобы трафик мог передаваться в lucee.

Конечным результатом должно быть то, что я могу получить доступhttp://127.0.0.1:60001/lucee/admin/server.cfmна моем ноутбуке, и его получит lucee, работающий на server.example.com и прослушивающий порт 8888, привязанный к 127.0.0.1 на этом сервере.

Как я могу это сделать?

решение1

Вам следует привязать Lucee Server только к , localhostпоскольку он не предоставляет TLS на порту 8888. Тогда у вас есть два варианта для безопасного доступа к административным путям.

SSH-туннель

Отсш(1):

-L [ bind_address:]port:host:hostport

Указывает, что данные portна локальном (клиентском) хосте должны быть перенаправлены на указанный hostпорт на удаленной стороне.

Заполнено параметрами из вашего вопроса:

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

Apache proxy с надлежащим контролем доступа

Поскольку прокси-сервер на порту 443зашифрован с помощью TLS, вам не обязательно использовать прокси-сервер SSH, но вы можете разрешить подключения к административным путям из корпоративных сетей в конфигурации Apache.

Документация немного устарела, так как в примере используется синтаксис Apache 2.2:

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

Но документация по Apache 2.4контроль доступарассказывает:

Директивы Allow, Deny, и Order, предоставляемые mod_access_compat, устарели и будут удалены в будущей версии. Вам следует избегать их использования и избегать устаревших руководств, рекомендующих их использование.

Допустим, вы хотите ограничить доступ, /luceeразрешив только локальную сеть 192.168.22.0/24и публичный IP-адрес 198.51.100.22:

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

Связанный контент