Безопасный доступ к системам 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 и наслаждайтесь.
В противном случае это канун праздника, и хотя мы все еще окутаны этим темным облаком Ковида, мы желаем вам безопасности и здоровья, когда вы празднуете со своими близкими. Вы можете продолжить чтение других материалов, опубликованных ниже