19

У меня есть сервер под управлением Ubuntu и демон OpenSSH. Давайте назовем это S1.

Я использую этот сервер с клиентских машин (назовем одну из них C1) для создания обратного туннеля SSH с использованием переадресации удаленных портов, например:

ssh -R 1234:localhost:23 login@S1

На S1 я использую файл sshd_config по умолчанию. Из того, что я могу видеть, кто имея правильные учетные данные для входа {,} PWD на S1 могут войти в S1 и либо сделать удаленное перенаправление портов и локальное перенаправление портов. Такие учетные данные могут стать сертификатом в будущем, поэтому, насколько я понимаю, любой, кто получает сертификат, может войти в S1 из любого другого места (не обязательно C1) и, следовательно, создать переадресацию локальных портов.

Для меня разрешить переадресацию локальных портов слишком опасно, так как это позволяет создать какой-то публичный прокси. Я ищу способ отключить только -L пересылки.

Я попробовал следующее, но это отключает как локальную, так и удаленную пересылку:

AllowTcpForwarding No

Я также попробовал следующее, это позволит только -L для SX:1. Это лучше, чем ничего, но все же не то, что мне нужно, а вариант "нет".

PermitOpen SX:1

Поэтому мне интересно, есть ли способ, чтобы я мог запретить всем форвардам локальных портов писать что-то вроде:

PermitOpen none:none

Это хорошая идея?

PermitOpen localhost:1

5 ответов5

17

Другое решение - разрешить переадресацию портов только конкретным пользователям:

От SSH: полное руководство

Переадресация портов может быть включена или отключена глобально в sshd. Это делается с помощью ключевого слова конфигурации AllowTcpForwarding в /etc /sshd_config. Ключевое слово может иметь значение yes (по умолчанию, включение пересылки) или no (отключение пересылки):

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

Кроме того, SSH2 имеет следующие параметры:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

Их синтаксис такой же, как и для параметров AllowUsers и AllowGroups. [Раздел 5.5.2.1, "Контроль доступа к учетной записи"] Они определяют список пользователей или групп, которым разрешено использовать переадресацию портов; сервер отказывается выполнять запросы переадресации портов для кого-либо еще. Обратите внимание, что они относятся к целевой учетной записи сеанса SSH, а не к имени пользователя клиента (которое часто неизвестно).

...

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

14

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

% /usr/sbin/sshd -d -f mysshd.config -p 12345

если вы не доверяете пользователям делать что-то с вашей машиной, то вы не должны позволять им входить в систему.

(кстати, флаг -D также является своего рода «проблемным с прокси»)

2

Теперь есть возможность разрешить только локальную / удаленную пересылку.

AllowTcpForwarding Указывает, разрешена ли пересылка TCP. Доступные опции: «да» или «все», чтобы разрешить пересылку TCP, «нет», чтобы запретить всю пересылку TCP, «локально», чтобы разрешить только локальную (с точки зрения ssh (1)) пересылку, или «удаленную», чтобы разрешить удаленную пересылку. только пересылка. По умолчанию «да». Обратите внимание, что отключение пересылки TCP не повышает безопасность, если пользователям также не запрещен доступ к оболочке, поскольку они всегда могут установить свои собственные серверы пересылки.

Итак, как уже говорилось, вы также должны установить оболочку на нологин.

0

Я ищу способ отключить только -L пересылки

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

"Локальная переадресация портов", разрешенная SSH, является лишь одним из возможных способов сделать это. Другие включают запуск экземпляра socat , netcat или любого другого количества инструментов.

Лучший способ контролировать исходящие и входящие соединения в Linux - это Netfilter, он же IPTables.

Он имеет специальный модуль под названием владелец (ipt_owner), который позволяет сопоставлять различные характеристики создателя пакета для локально сгенерированных пакетов. Он действителен в цепях OUTPUT и POSTROUTING .

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

0

Мое решение этой проблемы было добавить:PermitOpen fo.local:80 в основной раздел sshd_config.

Это просто отклоняет любой запрос локальной пересылки, кроме fo.local:80.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .