Безопасный доступ к системам Linux и Kubernetes с помощью Teleport

Безопасный доступ к системам Linux и Kubernetes с помощью Teleport

 

В этом распределении взаимосвязанных систем крайне важно, чтобы каждый актив, каждый документ и вся информация хранились как можно дальше от посторонних глаз и ушей. Что еще хуже, так это то, что количество этих неприятных глаз и ушей растет, и с каждым днем ​​держать их подальше от своих систем становится все труднее и сложнее. Так что делать? Инновации от хороших умов в нашем мире привели к решениям, которые могут, по крайней мере, отразить их, а также усложнить их усилия. Телепорт — одно из таких решений, и в этом кратком руководстве мы подробно рассмотрим его.

Gravitational Teleport — это шлюз для управления доступом к кластерам серверов Linux через SSH или Kubernetes API. Он предназначен для использования вместо традиционного OpenSSH для организаций, которым необходимо: Источник: Teleport Documentation

  • Защитите свою инфраструктуру и соблюдайте передовые практики безопасности и нормативные требования.
  • Получите полную картину активности, происходящей в их инфраструктуре.
  • Сократите операционные издержки управления привилегированным доступом как в традиционной, так и в облачной инфраструктуре.

Комплексные возможности телепорта

Teleport предлагает впечатляющие новые функции, которые понравятся традиционным администраторам и разработчикам. Они включают:

  • Единый шлюз доступа SSH / Kubernetes для всей организации.
  • Проверка подлинности на основе сертификата SSH вместо статических ключей.
  • Избегайте распространения ключей и доверия при первом использовании, используя ключи с автоматическим истечением срока действия, подписанные центром сертификации кластера (CA).
  • Принудительная двухфакторная аутентификация.
  • Подключайтесь к кластерам, расположенным за межсетевыми экранами, без прямого доступа в Интернет через бастионы SSH.
  • Совместно устраняйте проблемы с помощью совместного использования сеанса.
  • Обнаруживайте онлайн-серверы и контейнеры Docker в кластере с помощью динамических меток узлов.
  • Единый инструмент («стеклянная панель») для управления RBAC как для SSH, так и для Kubernetes.
  • Журнал аудита с записью / воспроизведением сеанса.
  • Журнал аудита Kubernetes, включая запись интерактивных команд, выполняемых через kubectl.
  • Возможность работать в « безагентном » режиме, то есть большинство функций Teleport доступно на кластерах с уже существующими демонами SSH, обычно sshd.

Адаптированный с официального сайта Teleport, Teleport поставляется в виде трех двоичных файлов: демон телепорта , клиент tsh и инструмент администрирования tctl . Они не зависят от зависимостей, написаны на компилируемом языке и работают в любой UNIX-совместимой операционной системе, такой как Linux, FreeBSD или macOS. Teleport имеет открытый исходный код по лицензии Apache 2, и исходный код доступен на Github.

Телепорт легко развернуть. Это традиционный демон Linux, похожий на sshd и обычно работающий как служба systemd.

Шаг 1. Установка Teleport Tool

Телепорт основной службы Teleport и инструмент администрирования tctl были разработаны для работы в операционных системах Linux и Mac. Пользовательский клиент Teleport tsh и пользовательский интерфейс доступны для операционных систем Linux, Mac и Windows.

Установите Teleport в Linux

В следующих примерах устанавливается 64-разрядная версия двоичных файлов Teleport, но также доступны 32-разрядные (i386) и двоичные файлы ARM. Посетите страницу последней версии для получения самой последней информации.

Установить из архива

curl -O https://get.gravitational.com/teleport-v5.0.0-linux-amd64-bin.tar.gz
tar -xzf teleport-v5.0.0-linux-amd64-bin.tar.gz
cd teleport
sudo ./install
Teleport binaries have been copied to /usr/local/bin

Шаг 2. Настроить службу Teleport SystemD

Мы можем использовать systemd для управления процессами жизненного цикла телепорта, такими как запуск и остановка службы. Создайте системный сервис телепорта следующим образом:

$ sudo vim /etc/systemd/system/teleport.service

[Unit]
Description=Teleport SSH Service
After=network.target

[Service]
Type=simple
Restart=on-failure
EnvironmentFile=-/etc/default/teleport
ExecStart=/usr/local/bin/teleport start --pid-file=/run/teleport.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/teleport.pid
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target

Затем перезагрузите демон, запустите и включите службу

sudo systemctl daemon-reload
sudo systemctl start teleport
sudo systemctl enable teleport

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

$ sudo systemctl status teleport

● teleport.service - Teleport SSH Service
   Loaded: loaded (/etc/systemd/system/teleport.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-12-14 07:31:33 UTC; 1h 2min ago
 Main PID: 2053 (teleport)
    Tasks: 9 (limit: 11004)
   Memory: 35.0M
   CGroup: /system.slice/teleport.service
           └─2053 /usr/local/bin/teleport start --pid-file=/run/teleport.pid

Dec 14 07:31:35 centos8.localdomain teleport[2053]: [NODE]         Service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3022.
Dec 14 07:31:35 centos8.localdomain teleport[2053]: [PROXY]        Reverse tunnel service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3024.   
Dec 14 07:31:35 centos8.localdomain teleport[2053]: [PROXY]        Web proxy service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3080.        
Dec 14 07:31:35 centos8.localdomain teleport[2053]: [PROXY]        SSH proxy service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3023.

Шаг 3. Установить на CentOS из репозитория RPM

Если вы используете CentOS, вы можете использовать следующее, если вам не нравится метод установки tarball

sudo yum-config-manager --add-repo https://rpm.releases.teleport.dev/teleport.repo
sudo yum install teleport -y

Установить на Debian Ubuntu из пакета .deb

Если вы используете систему на основе Debian, вы можете использовать следующее, если вам не нравится метод установки tarball

$ curl https://get.gravitational.com/teleport_5.0.0_amd64.deb.sha256
$ curl -O https://get.gravitational.com/teleport_5.0.0_amd64.deb
$ sha256sum teleport_5.0.0_amd64.deb
# Verify that the checksums match
$ sudo dpkg -i teleport_5.0.0_amd64.deb
$ which teleport
/usr/local/bin/teleport

Установите Teleport на macOS

Благодаря Homebrew telport можно легко установить на macOS следующим образом:

$ brew install teleport

Шаг 4. Как настроить Teleport

При настройке Teleport команда разработчиков рекомендует запускать его с файлом конфигурации Teleport YAML, как показано ниже:

$ sudo nano /etc/teleport.yaml

teleport:
    data_dir: /var/lib/teleport
auth_service:
    enabled: true
    cluster_name: "teleport-quickstart"
    listen_addr: 0.0.0.0:3025
    tokens:
    - proxy,node,app:f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765
    public_addr: 172.20.192.38:3025
ssh_service:
    enabled: true
    labels:
        env: staging
app_service:
    enabled: true
    debug_app: true
proxy_service:
    enabled: true
    listen_addr: 0.0.0.0:3023
    web_listen_addr: 0.0.0.0:3080
    tunnel_listen_addr: 0.0.0.0:3024
    public_addr: 172.20.192.38:3080

Из приведенной выше конфигурации вы заметите, что данные телепорта каталога будут сохранены ( / var / lib / teleport ). Чтобы все работало должным образом, мы должны предоставить этому каталогу необходимые разрешения, чтобы телепорт и tctl могли читать и писать. Для этого выполните следующую команду

sudo chmod 755 -R /var/lib/teleport/

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

##On CentOS

sudo firewall-cmd --permanent --add-port={3023,3080,3024,3025}/tcp
sudo firewall-cmd --reload

##On Ubuntu

sudo ufw allow 3023,3080,3024,3025/tcp

Шаг 5. Настройте безопасный https с помощью самоподписанных сертификатов

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

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/teleport2.key -out /etc/pki/tls/certs/teleport2.crt

При этом вам будут заданы некоторые вопросы, как показано ниже. Выберите подходящие для вашей среды. Если у вас нет DNS, вы можете добавить свои доменные имена в / etc / hosts на своих серверах.

-----
Country Name (2 letter code) [XX]:KE
State or Province Name (full name) []:Nairobi
Locality Name (eg, city) [Default City]:Nairobi
Organization Name (eg, company) [Default Company Ltd]:computingforgeeks
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:teleport.computingforgeeks.com
Email Address []:[email protected]

После этого обновите файл конфигурации с помощью сертификатов, как показано ниже.

teleport:
    data_dir: /var/lib/teleport
auth_service:
    enabled: true
    cluster_name: "teleport-quickstart"
    listen_addr: 0.0.0.0:3025
    tokens:
    - proxy,node,app:f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765
    public_addr: 172.20.192.38:3025
ssh_service:
    enabled: true
    labels:
        env: staging
app_service:
    enabled: true
    debug_app: true
proxy_service:
    enabled: true
    listen_addr: 0.0.0.0:3023
    web_listen_addr: 0.0.0.0:3080
    tunnel_listen_addr: 0.0.0.0:3024
##Updated/added part of this configuration
    public_addr: 172.20.192.38:3080
    https_keypairs:
      - key_file: /etc/pki/tls/private/teleport2.key
        cert_file: /etc/pki/tls/certs/teleport2.crt

Затем перезапустите телепорт

sudo systemctl restart teleport

На этом этапе вы можете быть в состоянии получить доступ к Телепорт веб — интерфейс по адресу:: “https://IP-or-Domain-Name:3080“. Просто откройте свой любимый браузер и укажите его на свой сервер с указанным портом (3080). Тебе следует увидеть:

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

Шаг 6. Создать пользователя Teleport

Как и любой другой сервис аутентификации, телепорт требует пользователей и их учетных данных, чтобы они могли войти в систему и использовать серверы, которые находятся под его защитой. Стоит отметить, что Teleport всегда будет принудительно использовать двухфакторную аутентификацию по умолчанию. Он поддерживает одноразовые пароли (OTP) и аппаратные токены (U2F). В этом кратком руководстве будет использоваться OTP — вам понадобится OTP-совместимое приложение, которое может сканировать QR-код.

Если у вас нет разрешения на создание новых пользователей на хосте Linux, запустите tctl users add teleport $ (whoami), чтобы явно разрешить Teleport аутентифицироваться как пользователь, под которым вы сейчас вошли в систему.

tctl users add geeks-admin root

User geeks-admin has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h0m0s:
https://teleport.computingforgeeks.com:3080/web/invite/2ef0091feea7fea0a210f53a1d8751d3
NOTE: Make sure centos8.localdomain:3080 points at a Teleport proxy which users can access.

Указанные вами пользователи (такие как root в нашем примере) должны существовать! Это означает, что geeks-admin сможет входить на серверы кластера Teleport с правами root.

После запуска команды вы увидите сообщение, которое она представляет в оболочке. Скопируйте предоставленный URL и продолжайте настройку нового пользователя:

https://teleport.infoit.com.ua:3080/web/invite/2ef0091feea7fea0a210f53a1d8751d3

После того, как вы посетите URL-адрес в своем браузере, вы увидите новую страницу входа с QR-кодом, как показано выше. Чтобы создать нового пользователя, мы рекомендуем использовать приложение Google Authenticator из Play Store. Загрузите его и установите из игрового магазина, как показано на скриншотах ниже.

После загрузки и установки откройте его и выберите «Сканировать QR-код».

Это откроет вашу камеру. Установите камеру, чтобы прочитать QR-код, и вы увидите код, представленный на вашем телефоне. Это  “Two Factor Token” на странице входа в Teleport. Введите новый пароль для пользователя, затем код на вашем телефоне в разделе “Two Factor Token” затем нажмите“Create Account“.

Если все пойдет хорошо, новый пользователь будет введен в панель управления, как показано ниже:

Удивительные вещи, верно!

Шаг 7. Добавление узла в кластер телепортации

Когда вы настраивали Teleport ранее, мы настроили сильный статический токен для узлов и приложений в файле teleport.yaml . Добавлять узлы в кластер теперь довольно просто. Мы собираемся использовать этот токен на этом этапе. Сначала установите Teleport на целевой узел, затем запустите его с помощью команды, как показано ниже.

$ sudo teleport start --roles=node \
 --token=f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765 \
 --auth-server=teleport.computingforgeeks.com:3025

[NODE]         Service 5.0.0:v5.0.0-0-gac4971801 is starting on 0.0.0.0:3022.

Просмотрите и обновите auth-server, app-name и app-uri перед запуском этой команды.

Если вы получили ошибку, указанную ниже, удалите папку /var/lib/teleport на узле, который вы пытаетесь добавить в кластер, и повторно выполните указанную выше команду еще раз.

Node failed to establish connection to cluster: Get "https://172.20.192.38:3025/v1/webapi/find": x509: certificate signed by unknown authority. time/sleep.go:148

Когда вы снова войдете в веб-интерфейс Teleport, вы должны увидеть второй узел в списке серверов, как показано ниже.

Шаг 8. Вход на серверы через Teleport Web-UI

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

И браузер откроет новую вкладку и проведет нас.

Заключительные замечания

Если вам удалось зайти так далеко, то вы великолепны. Teleport — один из многообещающих проектов, в котором задействованы все функции безопасности, которым вы всегда завидуете в своей среде. Он не только обслуживает серверы, но и управляет кластерами Kubernetes и многим другим. Проверьте это на странице Teleport и наслаждайтесь.

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