Teleport — безопасный доступ к системам Linux и Kubernetes

Teleport — безопасный доступ к системам Linux и Kubernetes

 

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

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

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

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

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

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

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

Установка Teleport Tool

Teleport основной службы 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

Настроить службу Teleport SystemD

Мы можем использовать systemd для управления процессами жизненного цикла Teleport, такими как запуск и остановка службы. Создайте сервис teleport 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.

Установить на 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

Как настроить 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

Из приведенной выше конфигурации вы заметите, что данные Teleport каталога будут сохранены ( /var/lib/teleport ). Чтобы все работало правильно, мы должны предоставить этому каталогу необходимые разрешения, чтобы 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

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

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

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]:infoit
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:teleport.infoit.com.ua
Email Address []: admin@infoit.com.ua 

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

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

Затем перезапустите Teleport

sudo systemctl restart teleport

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

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

Создать пользователя Teleport

Как и любой другой сервис аутентификации, 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.infoit.com.ua: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-код, и вы увидите код, представленный на вашем телефоне. Это « Двухфакторный токен » на странице входа в Teleport. Введите новый пароль для пользователя, затем код на вашем телефоне в разделе « Двухфакторный токен », затем нажмите « Создать учетную запись ».

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

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

Добавление узла в кластер Teleport

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

$ sudo teleport start --roles=node \
 --token=f7adb7ccdf04037bcd2b52ec6010fd6f0caec94ba190b765 \
 --auth-server=teleport.infoit.com.ua: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, вы должны увидеть второй узел в списке серверов, как показано ниже.

 

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

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

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

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

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

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