Можно ли отключить доступ к интерактивной оболочке при туннелировании веб-трафика через SSH?

12

Я рассматриваю внедрение SSH-туннелирования в качестве дешевого VPN-решения для внешних пользователей для доступа к веб-приложениям, предназначенным только для внутренней сети.

В настоящее время я использую Ubuntu Server 10.04.1 64 бит с установленным OpenSSH.

Я использую Putty на компьютерах с Windows для создания туннеля на локальном порту моего сервера SSH.

start putty -D 9999 mysshserver.com -N

Затем я использую команду Firefox, чтобы использовать SOCKS прокси на localhost: 9999.

Флаг -N отключит интерактивную оболочку на стороне клиента. Есть ли способ сделать это на стороне сервера?

Помимо отключения корневого доступа, использования аутентификации по ключу rsa и изменения порта по умолчанию; Существуют ли другие очевидные методы безопасности, которым я должен следовать для этой цели? Моя цель - просто иметь возможность туннелировать веб-трафик.

КТ.
источник

Ответы:

15

Через четыре года этот ответ заслуживает обновления. Хотя изначально я использовал authorized_keysсебя и, вероятно, использовал бы его в некоторых избранных случаях, вы также можете использовать sshd_configфайл конфигурации центрального сервера.

sshd_config

Вы можете назначить (для вашего конкретного случая использования) группу, например, proxy-onlyили Matchотдельных пользователей. В sshd_config. Это делается после глобальных настроек и отменяет, повторяет или уточняет некоторые настройки, заданные в глобальных настройках.

Примечание: некоторые из используемых синтаксисов / директив sshd_config(5)задокументированы на manстранице ssh_config(5). В частности, обязательно прочитайте раздел УЗОРЫssh_config(5) .

Для группы это означает, что ваш Matchблок начнется так:

Match group proxy-only

Вы можете Matchследующие критерии: User, Group, Host, LocalAddress, LocalPortи Address. Чтобы соответствовать нескольким критериям, просто разделите запятыми пары критериев-шаблонов (см. group proxy-onlyВыше).

Внутри такого блока, который традиционно используется для краткости (но не обязательно), вы можете затем объявить настройки, которые вы хотите применить для группы пользователей, без необходимости редактировать каждый отдельный authorized_keysфайл для членов этой группы.

no-ptyУстановка от authorized_keysбудет зеркально на PermitTTY noместе и command="/sbin/nologin"стал бы ForceCommand /sbin/nologin.

Кроме того, вы также можете установить дополнительные параметры, чтобы удовлетворить паранойю администратора, например chroot-ввести пользователя в его домашнюю папку и в итоге получится что-то вроде этого:

Match group proxy-only
    PermitTTY no
    ForceCommand /sbin/nologin
    ChrootDirectory %h
    # Optionally enable these by un-commenting the needed line
    # AllowTcpForwarding no
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no

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

Это %hтокен, который заменяется домашним каталогом пользователя ( %uбудет содержать имя пользователя и %%знак процента). Я нашел ChrootDirectoryособенно полезным ограничить моих sftp-onlyпользователей:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Обратите внимание, что в блоке могут использоваться только определенные директивы Match. Обратитесь к manстранице sshd_config(5)для деталей (поиск Match).

authorized_keys

NB: часть под этим замечанием была моим первоначальным ответом. Между тем - но это также зависит от особенностей вашей точной sshdверсии - я бы пошел на метод, описанный выше в большинстве случаев.

Да, вы можете так детально, как вы можете назначить открытые ключи. В дополнение к nologin, как рекомендовано ajdecon, я бы предложил установить следующее перед ключевой записью в authorized_keys:

no-pty ssh-rsa ...

Параметр no pty сообщает стороне сервера, что для этого ключа не должен быть выделен псевдотерминал.

Вы также можете принудительно выполнить что-то вроде nologin для определенного ключа, добавив следующее:

command="/sbin/nologin",no-pty ssh-rsa ...
0xC0000022L
источник
Обратите внимание, что no-ptyсамо по себе это не помешает пользователю ключа выполнить команды. См. Superuser.com/q/1230979/195460 .
Тэд Лиспи
3

Для любого пользователя, использующего только туннелирование, измените его оболочку входа в систему на / sbin / nologin. Таким образом, ваш пользователь не сможет получить доступ к оболочке на сервере, но все равно сможет запускать настроенные ssh-туннели со своего клиента.

ajdecon
источник
0

Я знаю, что это может быть не тот ответ, который вы ищете, но рассматривали ли вы возможность использования OpenVPN в качестве альтернативы?

Мэтт Бекман
источник
0

Если вы готовы отказаться от аутентификации user / pass и использовать ключи для входа в систему, вы можете указать параметры s для каждого открытого ключа.

Известные параметры:

Команда = «команда»

Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если есть), игнорируется.

а также

ограничивать

Включите все ограничения, т.е. отключите порт, агент и переадресацию X11, а также отключите распределение PTY и выполнение ~ / .ssh / rc.

и наконец

Переадресация портов Включите переадресацию портов, ранее отключенную параметром restrict.

С их помощью вы можете в значительной степени ограничить пользователя этой конкретной пары ключей тем, что он может делать с сеансом SSH.

Это будет выглядеть так:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
asdmin
источник
Я вижу, что мой ответ несколько избыточен для serverfault.com/a/242411/13364 , но я оставил его из-за параметров 'restrict' и ' forward -port', которые, на мой взгляд, лучше, чем 'no-pty'.
asdmin
-1

Я рекомендую попробовать Tunnelier . Это намного проще в настройке / управлении.

Bael
источник