Облегченная виртуализация с открытым исходным кодом с помощью LXC.
LXD - это решение с открытым исходным кодом для управления виртуальными машинами и системными контейнерами. Оно обеспечивает безопасную и масштабируемую среду с минимальными затратами. С помощью удобного веб-интерфейса вы можете легко управлять рабочими нагрузками и настраивать их в соответствии с вашими потребностями.
Сколько я собираю сервисов, столько же у меня всплывает вопрос - а как же безопасность? Ведь в каждом варианте, наружу торчит куча портов и панелей управления, а именно они и являются проводником к ядру сервера для хакеров. Вот и задумал использовать контейнеры и спрятать сервисы подалее с глаз.
В общем концепция такая, нужные порты мы выпускаем наружу, а все интерфейсы для настройки, будут доступны только из локальной сети нашей "конторы". Для этих целей будем использовать LXC, LXD, Ztnet и Docker.
В конечном итоге, мы сможем управлять не только локальной сетью предприятия а еще и выставлять наши сервисы в интернет при необходимости. Бонусом - полная контейнеризация сервера что значительно облегчит администрирование и восстановление системы, и максимальная защита от взлома. Приступим.
Установка системы на VDS.
Ставить будем Ubuntu LTS, на данный момент это 24.04 версия. После установки обновим пакеты -
apt update
apt upgrade
Давайте сразу проверим какие порты у нас открыты. Я воспользуюсь сканером.
Как видим, сканер говорит что у нас торчит наружу всего один порт - SSH. Его мы конечно оставим, но для безопасности стоит настроить вход по ключу. Как это сделать, спросим у ИИ -
Как настроить ssh доступ по ключу?
Для настройки доступа по ключу SSH выполните следующие шаги:
Создайте ключи SSH для аутентификации на локальном сервере с помощью утилиты ssh-keygen.
Загрузите ключ на удаленный сервер с помощью утилиты ssh-copy-id или вручную.
Отключите проверку пароля на сервере, открыв конфигурационный файл /etc/ssh/sshd_config и установив значение директивы PasswordAuthentication в No.
После выполнения этих шагов вы сможете входить на сервер без ввода пароля.
Только этот интеллект, умолчал о том что надо настроить клиента SSH. Но я думаю вы справитесь!
Следующим шагом, установим LXC (нативная виртуализация в Linux от Canonical) и LXD - демон для управления виртуализацией через API LXC, тоже от Canonical. Кстати если вы не знали -
Canonical — частная британская компания, основанная Марком Шаттлвортом для развития и популяризации проектов свободного программного обеспечения, прежде всего — Linux-дистрибутива Ubuntu.
Основана 5 марта 2004 года с целью разработки и коммерциализации Ubuntu. Также развивает и поддерживает производные от Ubuntu дистрибутивы: Kubuntu (использует KDE вместо Gnome), Xubuntu (использует менее требовательную к ресурсам среду рабочего стола Xfce) и Edubuntu (ориентирован на использование в образовательных учреждениях).
И опять от ИИ. Удобно блин!
Установка LXC и LXD
Я дольше писал этот абзац, насколько просто установить виртуализацию в Linux. Всего три команды -
snap install lxd Установка пакета
lxd init Инициализация (для VDS можно
оставить все по умолчанию.
Измените только -
[default=zfs]: btrfs и
[default=5GiB]: 10)
lxc config set core.https_address :8443 Разрешаем занять 8443 порт
На этом этапе, можно подключиться к интерфейсу по адресу - https://Ip:8443 и сгенерировать ключи доступа. При первом входе, увидим такую страницу -
Нажмем зеленую кнопку и попадем на страницу генерации ключей доступа -
В строке Импорт, выбираем тип вашего браузера и жмем зелененькую -
Поступит предложение защитить ключ паролем. Можете ввести свой пароль и подтвердить -
Теперь наши ключи сгенерированы, и осталось их скачать и установить в браузер. Как зарегистрировать ключи, написано в пункте импорт. Только не забудьте выбрать свой браузер.
Для регистрации ключа и сертификата, нажмите Импорт, и выберите по очереди оба скачанных файла. Только не забудьте выбрать Автоматическое определение хранилища. Перезагружаем браузер и выбираем в окне наш сертификат. Вы сразу должны попасть в интерфейс администрирования. В ходе экспериментов, вылезла трабла, если через браузер прошел не один инстанс LXD, то появляется окно для подтверждения сертификата -
Жмем ссылку Использовать существующий и переходим на страницу с описанием как это сделать -
Нам при помощи команды представленной на странице -
lxc config trust add --name lxd-ui
требуется на сервере, сгенерировать ключ и ввести в форму на странице -
Теперь копируем токен, и отправляем в форму -
Жмем Импорт -
И Ву Аля! Мы в интерфейсе, авторизованы по ключу.
Создаем контейнер LXC
Жмем кнопку Создать инстанс -
Вводим имя контейнера и нажимаем кнопку выбора имиджа -
Выбираем нужный имидж системы, я выбрал Ubuntu 24.04 LTS -
Выбираем тип - Контейнер, и жмем Создать -
Началось создание нашего контейнера -
Контейнер создан и запущен, имеет IP -
Заходим в свойства контейнера и открываем терминал -
Для нормальной работы Docker, надо выполнить команду в терминале хоста -
lxc config set Servis security.nesting=true security.syscalls.intercept.mknod=true security.syscalls.intercept.setxattr=true
Теперь в терминале контейнера, можно установить Docker и Portainer.
Установка Docker
Здесь все просто, в терминале контейнера -
apt install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
Установка Portainer
Здесь еще проще, в терминале контейнера -
docker run -d -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.21.5
Теперь у нас на сервере стоят -
Виртуализация приложений - Docker
Виртуализация LXC (контейнеры) - LXD
Виртуализация KVM (Kernel-Based VM) - LXD
Собирать сервисы в стек, будем в следующей статье.
Всем удачи!