Як я можу обмежити пересилання на порт ssh * remote *?


22

Мені потрібно обмежити, які порти можна віддалено ' ssh -R' пересилати користувачем.

Я знаю про permitopenваріант на авторизованих_кейдах, але, як написано на сторінці man, він обмежує лише локальну ssh -Lпереадресацію портів

Як обговорювалося тут, користувач отримав би те саме з netcatабо подібним, але в цьому випадку користувач не має доступу до оболонки

Я також знайшов цю тему, яка розповідає про використання selinux або LD_PRELOAD, але я ніколи раніше не налаштовував selinux і не можу знайти інформацію про те, як це зробити LD_PRELOAD.

можливо, хтось зробив патч для opensh, щоб реалізувати це?

EDIT: Я знайшов цей звіт про помилку, тому, мабуть, він ще не виконаний


Ви знайшли рішення для цього?
alex88

Я цього не зробив, я вважаю, що це неможливо зробити, поки вищезгадана помилка не буде закрита або хтось не напише виправлення для її реалізації
Lluís

Відповіді:


3

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

додайте директиву PermitListen до sshd_config (5) та відповідну опцію enablelisten = санкціонований_кейс, яка контролює, які адреси прослуховування та номери портів можуть використовуватися шляхом віддаленого переадресації (ssh -R ...).


4

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


13
Повністю відключення переадресації портів здається непосильним і не підходить для питання. Я припускаю, що ОП хоче його обмежити , але дозволяючи деякі конкретні віддалені переадресації портів.
gertvdijk

2
Так, мені потрібно дозволити переадресацію деяких портів
Lluís

0

Обмежити це за допомогою ssh неможливо. Можливо, для цього можна використовувати selinux або iptables. Однак існує альтернативна стратегія, яка може відповідати вашим потребам. Використовуйте прив'язку до розеток UNIX. Це має бути доступне, починаючи з відкритої версії 6.8.

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

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

Як очистити розетку зворотного тунелю SSH після закриття з'єднання?


-1

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

Схоже, ви можете використовувати наступне?

У файлі конфігурації сервера є параметр PermitOpen . Цей параметр може бути використаний для визначення хостів і портів, для яких можна встановити форварди. Цю опцію можна використовувати всередині блоку відповідності, тому вона може бути обмежена користувачем, групою чи іменем хосту або шаблоном IP-адреси.

Редагувати: Отже, у налаштуваннях сервера додайте наступне

Хост PermitOpen: порт

PermitOpen IPv4_addr: порт

PermitOpen [IPv6_addr]: порт


1
Тільки на U&L можна позначати як дублікат.
GAD3R

1
Як зазначено в запитанні, це для -L і це вже відоме як не рішення
alex88

1
Чи знайдеться коли-небудь рішення для цього (крім iptables)?
davesave
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.