Як відключити переадресацію локального порту SSH?


20

У мене є сервер під управлінням Ubuntu і демон OpenSSH. Назвемо це S1.

Я використовую цей сервер від клієнтських машин (назвемо один з них C1), щоб зробити зворотний тунель SSH за допомогою віддаленої переадресації портів, наприклад:

ssh -R 1234:localhost:23 login@S1

На S1 я використовую за замовчуванням файл sshd_config. З того, що я бачу, кожен, хто має правильні облікові дані {login, pwd} на S1, може увійти в S1, або зробити віддалене переадресацію портів та переадресацію локальних портів. Такі дані можуть стати сертифікатом у майбутньому, тому, наскільки я розумію, кожен, хто захопить сертифікат, може увійти до S1 з будь-якого місця (не обов'язково C1) і, отже, створити локальну переадресацію порту.

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

Я спробував таке, але це вимикає і локальне, і віддалене переадресація:

AllowTcpForwarding No

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

PermitOpen SX:1

Тож мені цікаво, чи є спосіб, щоб я заборонив усім місцевим портам форвард писати щось на кшталт:

PermitOpen none:none

Це приємна ідея?

PermitOpen localhost:1

тож, як завжди, давайте докорінись до цього: яка ваша реальна проблема, чому ви хочете налаштувати щось подібне для мобільних / вбудованих пристроїв, що ви хочете вирішити?
акіра

Проблема, яку слід вирішити, - це можливість відкрити сеанс Telnet з будь-якої точки Інтернету на мобільний / вбудований пристрій, підключений до Інтернету, враховуючи, що пристрій може бути NATED або брандмауером, отже, недоступним. з Інтернету.
ШОС

telnet .. для чого? для пробивання отворів у Google брандмауері для "оглушення"
akira

Відповіді:


16

кожен, хто має облікові дані для входу, може створити власний екземпляр sshd, що працює на випадковому порту, і дозволити все, що завгодно, включаючи локальну переадресацію:

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

якщо ви не довіряєте користувачам щось робити з вашою машиною, ви не повинні дозволяти їм входити в першу чергу.

(btw, прапор -D також є "прокси-проблематичним"


Я думаю, що я можу налаштувати для цієї мети дуже обмежувальний обліковий запис (наприклад, приєднати користувача до його дому, немає списків, не переглядати файлову систему), щоб він не міг запускати та sshd (або встановлювати та запускати sshd бінарний). Справа в тому, що клієнти повинні бути вбудованими пристроями. Але оскільки вони, ймовірно, вбудовують сертифікати і їх флеш-пам’яті можна скинути, можливо, сертифікати просочуються, отже, дозволяючи кожному ввійти в S1.
ШОС

Використання ChrootDirectory для конкретного користувача зробить трюк, спробуй це!
ШОС

1
В дозволених_кілей, встановіть command="/sbin/nologin". Це повинно запобігти виконанню будь-яких команд на сервері.
justis

Заява "кожен, хто має облікові дані для входу, може створити своє власне <що б не було>" помилковий. sshможна використовувати для підключення до облікових записів із сильно обмеженими оболонками входу, які цього не дозволяють. Переадресація порту - це захисна діра в таких обмежених оболонках. Окрім запуску дозволеної команди, користувач може створювати тунелі.
Каз

3
Цитата з sshd_configчоловічої сторінки: Зауважте, що відключення переадресації TCP не покращує безпеку, якщо користувачам також не буде відмовлено у доступі до оболонки , оскільки вони завжди можуть встановити власних пересилачів. (Наголос мій).
Каз

17

Іншим рішенням буде дозволити переадресацію портів лише користувачам specifc:

Від SSH: остаточне керівництво

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

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

Крім того, SSH2 має такі варіанти:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

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

...

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


1
В основному у мене на S1 передбачено лише одного користувача. У цьому конкретному випадку AFAIU, використовуючи AllowTcpForwardingForUsers / AllowTcpForwardingForGroups, не зробить фокус, правда? Заборона інтерактивного входу є хорошою ідеєю, оскільки це змусить користувачів не мати можливості запускати бінарні файли. Але будь-якому клієнту все ж буде дозволено використовувати синтаксис -L правильно? Тож поки найкращими варіантами будуть: 1 / Вимкнути інтерактивний логін, 2 / PermitOpen з підробленим іменем хоста: порт. Я щось пропустив?
ШОС

Найкращий спосіб перевірити це - спробувати налаштування.
Крістіан

Я не бачу цих параметрів у вільному програмному забезпеченні OpenSSH. Google для AllowTcpForwardingForUsersвиявлення того sshd2_config, що він налаштований на , який використовується в деяких комерційних програмах. Дивіться одну з відповідей на адресу: superuser.com/questions/384643/…
Kaz

^ OpenSSH має Matchблоки в конфігурації. Ви можете Matchкористувачам та групам та додавати до них AllowTcpForwardingвсередині.
Каз

2

Зараз є можливість дозволити лише локальне / віддалене переадресація.

AllowTcpForwarding Вказує, чи дозволено переадресація TCP. Доступні параметри "так" або "всі", щоб дозволити переадресацію TCP, "ні", щоб запобігти переадресації TCP, "локальний", щоб дозволити місцеве (з точки зору ssh (1)) лише переадресації, або "віддалений", щоб дозволити віддалене пересилання тільки . За замовчуванням - «так». Зауважте, що відключення переадресації TCP не покращує безпеку, якщо користувачам також не буде відмовлено у доступі до оболонки, оскільки вони завжди можуть встановити власних пересилачів.

Отже, як уже було зазначено, ви також повинні встановити оболонку на нологін.


0

Моє рішення цієї проблеми було додати: PermitOpen fo.local: 80 у головному розділі sshd_config.

Це просто заперечує будь-який запит локального переадресації, крім fo.local: 80.


0

Я шукаю спосіб відключити лише переадресацію -L

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

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

Найкращий спосіб контролювати вихідні та вхідні з'єднання в Linux - це Netfilter, він же IPTables.

Він має спеціальний модуль під назвою owner ( ipt_owner), який дозволяє зіставити різні характеристики творця пакетів для локально генерованих пакетів. Це дійсно в ланцюгах OUTPUTі POSTROUTING.

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

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