У меня есть сервер под управлением 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
Ответы:
любой, имеющий учетные данные для входа в систему, может вызвать свой собственный экземпляр sshd, работающий на произвольном порту, и разрешить все, что ему захочется, включая локальные пересылки -L:
если вы не доверяете пользователям делать что-то с вашей машиной, то вы не должны позволять им входить в систему.
(кстати, флаг -D также является своего рода «проблемным с прокси»)
источник
command="/sbin/nologin"
. Это должно помешать им запускать любые команды на сервере.ssh
может использоваться для подключения к учетным записям, которые имеют строго ограниченные оболочки входа в систему, которые не позволяют этого. Переадресация портов является дырой в безопасности в таких ограниченных оболочках. В дополнение к выполнению разрешенной команды пользователь может создавать туннели.sshd_config
страницы руководства: обратите внимание, что отключение пересылки TCP не повышает безопасность, если пользователям также не запрещен доступ к оболочке , поскольку они всегда могут установить свои собственные серверы пересылки. (Акцент мой).Другое решение - разрешить переадресацию портов только конкретным пользователям:
От SSH: полное руководство
Переадресация портов может быть включена или отключена глобально в sshd. Это делается с помощью ключевого слова конфигурации AllowTcpForwarding в / etc / sshd_config. Ключевое слово может иметь значение yes (по умолчанию, включение пересылки) или no (отключение пересылки):
Кроме того, SSH2 имеет следующие параметры:
Их синтаксис такой же, как и для параметров AllowUsers и AllowGroups. [Раздел 5.5.2.1, «Контроль доступа к учетной записи»] Они указывают список пользователей или групп, которым разрешено использовать переадресацию портов; сервер отказывается выполнять запросы перенаправления портов для кого-либо еще. Обратите внимание, что они относятся к целевой учетной записи сеанса SSH, а не к имени пользователя клиента (которое часто неизвестно).
...
Важно понимать, что директивы в этом разделе на самом деле не предотвращают переадресацию портов, если только вы не отключите интерактивный вход в систему и не ограничите, какие программы могут запускаться на удаленной стороне. В противном случае опытные пользователи могут просто запустить свое собственное приложение для переадресации портов через сеанс SSH. Эти настройки сами по себе могут быть достаточным сдерживающим фактором в нетехническом сообществе, но они не остановят того, кто знает, что она делает.
источник
AllowTcpForwardingForUsers
показывает, что он настроен вsshd2_config
, который используется в некоторых коммерческих программах. См. Один из ответов на: superuser.com/questions/384643/…Match
блоки в конфигурации. Вы можетеMatch
на пользователей и групп, и приложитьAllowTcpForwarding
внутри.Теперь есть возможность разрешить только локальную / удаленную пересылку.
AllowTcpForwarding Указывает, разрешена ли пересылка TCP. Доступные опции: «да» или «все», чтобы разрешить пересылку TCP, «нет», чтобы запретить всю пересылку TCP, «локальный», чтобы разрешить только локальную (с точки зрения ssh (1)) пересылку, или «удаленный», чтобы разрешить удаленную пересылку. только пересылка . По умолчанию «да». Обратите внимание, что отключение пересылки TCP не повышает безопасность, если пользователям также не запрещен доступ к оболочке, поскольку они всегда могут установить свои собственные серверы пересылки.
Итак, как уже говорилось, вы также должны установить оболочку на нологин.
источник
Мое решение этой проблемы было добавить: PermitOpen fo.local: 80 в основной раздел sshd_config.
Это просто отклоняет любой запрос локальной пересылки, кроме fo.local: 80.
источник
Если я вас правильно понимаю, у ваших пользователей есть полный доступ к оболочке, но вы не хотите, чтобы они могли открывать соединения со всей остальной сетью.
«Локальная переадресация портов», разрешенная SSH, является лишь одним из возможных способов сделать это. Другие включают запуск экземпляра
socat
,netcat
или любое другое количество инструментов.Лучший способ контролировать исходящие и входящие соединения в Linux - это Netfilter, он же IPTables.
Он имеет специальный модуль под названием owner (
ipt_owner
), который позволяет сопоставлять различные характеристики создателя пакета для локально сгенерированных пакетов. Это действительно вOUTPUT
иPOSTROUTING
цепях.Вы можете использовать его для запрета исходящих пакетов, сгенерированных определенными группами пользователей, что запрещает переадресацию портов любого типа, а не только
-L
SSH.источник