Я использую 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, которая:
- Используйте мою существующую конфигурацию SSH и ключ для подключения к server.example.com (где sshd прослушивает порт 3300),
- Привяжите его к любому порту на локальном хосте моего ноутбука, скажем, 60001,
- С удаленного конца 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>