Назад | Перейти на главную страницу

Можно ли ограничить доступ к хостам через SSH-туннелирование?

У меня есть коробка, которая запускает и ssh-сервер, и веб-сервер.

Так например:

  1. Откройте туннель: ssh -D1234 myhost.com
  2. Настройте браузер для использования localhost: 1234 в качестве прокси
  3. Доступ myhost.com через этот прокси должно работать
  4. Доступ к любому другому хосту через этот прокси-сервер должен завершиться ошибкой

Я предполагаю, что это можно было бы сделать грубо, просто закрыв исходящий порт 80, но это (а) не помешало бы людям туннелировать не-веб-трафик и (б) запретить любому пользователю на коробке доступ к веб-сайтам. Возможен ли более тонкий способ сделать это, в идеале, ограничив то, что sshd будет разрешать туннелировать?

Вы можете ограничить количество хостов, доступных через туннель, с помощью параметра PermitOpen в файле sshd_config.

PermitOpen <TheIPYourWebServerListensOn>:80

Если вы используете localhost так как TheIPYourWebServerListensOnвам, вероятно, потребуется указать вашему прокси-клиенту использовать его даже для запросов, адресованных localhost. Что-то, что может сбивать с толку.

Также, пожалуйста, имейте в виду, что в SOCKS5 разрешение DNS происходит / может происходить на стороне прокси, что позволяет очень удобные настройки, такие как определение локальных псевдонимов для сервера в файле hosts.

Забыл сказать, что вы можете добавить несколько комбинаций хост: порт. Вам просто нужно разделить их пробелами. Ссылка на страницу руководства sshd_config. Надеюсь это поможет!

С участием PermitOpen в sshd_config вы, безусловно, можете добиться такой настройки.

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

Если вам нужно запретить пользователям доступ к определенным диапазонам портов или даже ко всему Интернету напрямую (разрешить использовать только локальные службы, например, отправлять и получать почту), вы можете использовать iptables'расширенные модули согласования пакетов, именно модуль владелец, что позволяет фильтровать пакеты по uid или gid владельца и даже по имени процесса.