Как я могу ограничить переадресацию портов ssh * remote *?

22

Мне нужно ограничить, какие порты могут быть ssh -R«перенаправлены» удаленно пользователем.

Я знаю о permitopenпараметре авторизованных ключей, но, как сказано на странице руководства, он ограничивает только локальную ssh -Lпереадресацию портов.

Как обсуждалось здесь, пользователь получит то же самое netcatили похожее, но в этом случае у пользователя нет доступа к оболочке.

Я также нашел эту нить , что говорит об использовании SELinux или LD_PRELOAD, но я никогда не сконфигурирована SELinux раньше и не могу найти информацию о том , как сделать это с LD_PRELOAD.

может быть кто-то сделал патч для openssh для реализации этого?

РЕДАКТИРОВАТЬ: я нашел этот отчет об ошибке, так что я думаю, что он еще не реализован

Lluís
источник
Вы нашли решение для этого?
alex88
Я этого не сделал, я думаю, что это невозможно сделать, пока вышеуказанная ошибка не будет закрыта или кто-то напишет патч для реализации этого
Lluís

Ответы:

3

Это было реализовано в OpenSSH 7.8p1, который был выпущен 2018-08-24. Цитата из заметок о выпуске:

добавьте директиву PermitListen в sshd_config (5) и соответствующую опцию allowlisten = authorized_keys, которая контролирует, какие адреса прослушивания и номера портов могут использоваться удаленной пересылкой (ssh -R ...).

Фрэнк
источник
4

Есть опция, no-port-forwardingкоторую вы можете использовать, которая предотвращает переадресацию всех портов. По крайней мере, в OpenSSH 4.3p2 (CentOS 5.3 - самая старая машина, к которой у меня есть доступ). Положите его в то же место, что вы бы положили permitopen.

utopiabound
источник
13
Полное отключение переадресации портов кажется излишним и не подходит для вопроса. Я предполагаю, что OP хочет ограничить его, но разрешить некоторые переадресации некоторых удаленных портов.
gertvdijk
2
Да, мне нужно разрешить переадресацию некоторых портов
Lluís
0

Это невозможно ограничить с помощью ssh. Может быть, selinux или iptables могут быть использованы для этой цели. Тем не менее, существует альтернативная стратегия, которая может или не может удовлетворить ваши потребности. Используйте привязку к сокетам UNIX. Это должно быть доступно начиная с версии 6.8 openssh.

При использовании сокетов в вашем распоряжении есть ACL файловой системы (хотя более влажные сокеты могут зависеть от * nix), и вы можете использовать его для предотвращения привязки одного пользователя к другим сокетам. Однако это никак не препятствует привязке к портам, поэтому в зависимости от вашего случая использования это может не помочь, но, возможно, порты не имеют значения, если вы можете последовательно использовать только сокеты.

С сокетами UNIX обработка висячих файлов сокетов может быть проблематичной, поскольку обратные издатели пытаются восстановить соединение. У меня есть другой вопрос (и ответ) на эту проблему. Короче говоря, вы, вероятно, также хотите использовать StreamLocalBindUnlink yes:

Как очистить сокет обратного туннеля SSH после закрытия соединения?

Timo
источник
-1

Дубликат: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Похоже, вы можете использовать следующее?

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

Изменить: Таким образом, в конфигурации сервера добавить следующее

PermitOpen хост: порт

PermitOpen IPv4_addr: порт

PermitOpen [IPv6_addr]: порт

PHoBwz
источник
1
Только на U & L можно пометить как дубликат.
GAD3R
1
Как указано в вопросе, это для -L, и это уже известно как не решение
alex88
1
Будет ли когда-нибудь решение этого (кроме iptables)?
davesave