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

Управление кластером компьютеров linux за межсетевыми экранами

Продукт моей компании - это, по сути, Linux-система (Ubuntu), находящаяся в чужой сети, в которой работает наше программное обеспечение. До сих пор у нас было менее 25 ящиков в дикой природе, и для управления ими мы использовали TeamViewer.

Сейчас мы собираемся отправить 1000 таких коробок, и TeamViewer больше не подходит. Моя работа - найти способ доступ к этим ящикам и обновление программного обеспечения на них. Это решение должно иметь возможность пробивать брандмауэры и то, что у вас есть.

Я рассмотрел:

1. Домашний раствор (например, служба Linux), которая устанавливает Обратный туннель SSH к серверу в облаке и другой облачной службе, которая отслеживает их и позволяет вам подключаться к ним.

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

2. Такие инструменты, как марионетка, повар или OpenVPN.

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

Никто, кроме нас, не должен подключаться к этим ящикам. Есть ли кто-нибудь с соответствующим опытом, который может дать мне несколько советов?

Получайте обновления, не нажимайте

По мере того, как вы масштабируете, это станет невозможным От себя обновления для всех ваших продуктов.

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

Вместо этого пусть ваши продукты периодически «вытягивают» свои обновления, а затем вы можете добавлять дополнительную емкость на стороне сервера по мере своего роста.

Как?

Как вы и предлагали, эта проблема уже решена. Вот несколько подходов, которые я могу придумать.

  • используя apt: Используйте встроенную систему APT с настраиваемым списком PPA и источников. Как мне настроить PPA?
    • Против: Если вы не используете общедоступный хостинг, такой как панель запуска, настройка собственной подходящей системы упаковки PPA + не для слабонервных.
  • используя ssh: Создайте открытый ключ SSH для каждого продукта, а затем добавьте ключ этого устройства на свои серверы обновлений. Тогда просто получите свое программное обеспечение rsync / scp необходимые файлы.
    • Против: Придется отслеживать (и создавать резервные копии!) Все открытые ключи для каждого отправляемого вами продукта.
    • Pro: Более безопасен, чем необработанная загрузка, поскольку единственные устройства, которые могут получить доступ к обновлениям, - это те, у которых установлен открытый ключ.
  • необработанная загрузка + проверка подписи:

    • Разместите где-нибудь подписанный файл обновления (Amazon S3, FTP-сервер и т. Д.)
    • Ваш продукт периодически проверяет наличие изменений в файле обновления, а затем загружает / проверяет подпись.
    • Против: В зависимости от того, как вы это развертываете, файлы могут быть общедоступными. (что может упростить реконструирование и взлом вашего продукта)
  • анзибль: Ansible - отличный инструмент для управления конфигурациями системы. Он относится к сфере puppet / chef, но без агентов (использует python) и разработан как идемпотентный. Если для развертывания вашего программного обеспечения потребуется сложный сценарий bash, я бы использовал такой инструмент, чтобы упростить выполнение ваших обновлений.

Конечно, есть и другие способы сделать это ... Но это подводит меня к важному моменту.

Подпишите / подтвердите свои обновления!

Независимо от того, что вы делаете, это императив что у вас есть механизм, гарантирующий, что ваше обновление не было изменено. Злоумышленник может выдать себя за ваш сервер обновлений в любой из указанных выше конфигураций. Если вы не подтвердите свое обновление, ваш ящик много легче взломать и попасть внутрь.

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

Физическая охрана

Конечно, если кто-то имеет физический доступ к развертыванию клиента, он легко может взять на себя управление сервером. Но, по крайней мере, они не могут атаковать другие развертывания! Физическая безопасность, скорее всего, является обязанностью вашего клиента.

Если бы вы на мгновение представили, что произошло бы, если бы вы использовали большую сеть OpenVPN для обновлений ... Затем они могли бы использовать скомпрометированный сервер для атаки каждый экземпляр в VPN

Безопасность

Что бы вы ни делали, безопасность должна быть встроенный с начала. Не срезайте углы здесь - вы в конце концов пожалеете, если сделаете это.

Полная защита этой системы обновлений выходит за рамки этого поста, и я настоятельно рекомендую нанять консультанта, если вы или кто-то из вашей команды не осведомлен в этой области. Это стоит каждой копейки.

Вам действительно нужен доступ к ним?

Или просто обновить их? Потому что вы можете сделать так, чтобы они обновлялись сами по себе, подобно тому, как apt обновляется самостоятельно без присмотра.

Если вам нужно авторизоваться

Почему демон OpenSSH не слушает через переадресацию портов? У каждого клиента может быть отдельный ключ для безопасности, и он будет подключаться только при необходимости.

До ваших клиентов

Вы также должны учитывать то, что покупатель готов принять. Им может быть неудобно какой-либо удаленный доступ к своей сети, или им могут быть удобны только определенные технологии / конфигурации.

Я предлагаю инструмент оркестровки, например Кукольный или Поваренная соль.

Salt - это очередь сообщений, которая может установить постоянное исходящее соединение от вашего устройства к главному серверу. Вы можете использовать это для запуска произвольных команд на устройствах ... например, apt-get.

Другой вариант - Puppet, где у вас все еще есть главный сервер, а клиенты устанавливают исходящие соединения из своего местоположения.

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