Бесплатная миграция IT-инфраструктуры в облако

Установка OpenBSD 7.3 на облачный сервер Timeweb Cloud

Пётр Разумов
Пётр Разумов
Ведущий разработчик
25 января 2023 г.
560
12 минут чтения
Средний рейтинг статьи: 5

Операционная система OpenBSD

Когда речь заходит об использовании операционной системы для веб-сервера, то, как правило, выбор ограничивается самыми распространёнными вариантами — Windows или одним из дистрибутивов Linux. Я хочу познакомить вас с ещё одной операционной системой, заслуживающей особого внимания — это OpenBSD.

Разработка OpenBSD началась в 1995 году, а спустя год вышел первый официальный релиз операционной системы. И с тех пор сообщество разработчиков радует нас стабильными релизами приблизительно каждые полгода. Под стабильными релизами я подразумеваю не столько периодичность выпусков новых версий, сколько стабильность самой операционной системы и поставляемых с ней прикладных программ. Это и неудивительно, ведь одними из основных целей проекта разработчики OpenBSD называют создание надёжных и безопасных программ, строгое следование и реализация стандартов, поддержка как можно большего числа аппаратных платформ и устройств, а также стремление сделать OpenBSD самой безопасной операционной системой.

Кроме того, к другим сильным сторонам OpenBSD пользователи относят:

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

Из недр сообщества разработчиков OpenBSD вышли также другие программы и системы, завоевавшие популярность в других операционных системах:

  • Фаервол PF (Packet Filter)
  • Система удалённого доступа OpenSSH
  • Библиотека LibreSSL
  • Консольный мультиплексор tmux

Установка OpenBSD

Изначально мы писали эту статью для OpenBSD 7.2, но позднее актуализировали для более новой версии — 7.3.

Если вы решили опробовать эту операционную систему для своего веб-сервера, воспользуйтесь этим руководством, и уже через несколько минут в вашем распоряжении будет виртуальный сервер с поддержкой HTTPS (через Let’s Encrypt) и установленным PHP.

В качестве платформы для нашего виртуального сервера мы будем использовать облако Timeweb Cloud. Если вы ещё не являетесь пользователем этой платформы, зарегистрируйте аккаунт.

Несмотря на то, что OpenBSD не поддерживается напрямую облачной платформой, то есть виртуальную машину с OpenBSD невозможно создать через панель управления, установить OpenBSD на виртуальную машину в облаке Timeweb Cloud всё же возможно. Для этого нам надо запустить виртуальную машину с… Ubuntu!

Ubuntu в качестве промежуточной системы

Мы будем использовать Ubuntu в качестве промежуточного звена для последующей установки OpenBSD на виртуальную машину. Создайте новый «чистый» облачный сервер и выберите в качестве операционной системы Ubuntu. Для этого на главной странице панели нажмите «Добавить» справа вверху. Дополнительные инструкции вы можете найти в документации.

После успешной настройки и установки виртуальной машины вам на электронную почту должно прийти письмо с параметрами доступа: IP-адресом и паролем пользователя root. Используйте эти данные для подключения к облачному серверу по протоколу SSH или через веб-консоль.

Установка загрузчика OpenBSD

Для того, чтобы чтобы при следующей перезагрузке виртуальной машины, запустилась установка OpenBSD, а не загрузка Ubuntu, необходимо сделать следующее:

  1. Скачать ramdisk ядро OpenBSD.
  2. Настроить загрузчик GRUB на запуск ramdisk ядра.
  3. Перезагрузить виртуальную машину и произвести установку OpenBSD.

Установщик OpenBSD использует специальное ramdisk ядро (bsd.rd), которое создает live-среду, полностью загружаемую в память. Эта среда содержит установочные скрипты и небольшое количество утилит, необходимых для процесса установки. Скачаем его с «зеркала» Яндекса и сохраним в директорию /boot:

wget https://mirror.yandex.ru/openbsd/7.3/amd64/bsd.rd -O /boot/bsd.rd

После этого нам необходимо внести изменения в два файла конфигурации загрузчика GRUB:

  1. В самый конец файла /etc/grub.d/40_custom нужно добавить:
menuentry "bsd.rd" {
set root=(hd0,msdos1)
kopenbsd /boot/bsd.rd
}
  1. В файле /etc/default/grub в качестве значения параметра GRUB_DEFAULT необходимо указать только что созданный пункт меню:
GRUB_DEFAULT="bsd.rd"

Далее необходимо выполнить команду update-grub и перезагрузить виртуальную машину командой reboot.

После перезагрузки запустится установщик операционной системы OpenBSD. Установку и первоначальную настройку мы будем производить в веб-консоли панели управления Timeweb Cloud, так как сервис sshd ещё не запущен и подключение по протоколу SSH невозможно.

Операционная система OpenBSD отличается довольно простой процедурой установки — практически все значения, предлагаемые мастером установки, не требуют внесения изменений. Поэтому об установке OpenBSD часто шутят: «Несколько раз нажми Enter — и всё готово!»

После очередной перезагрузки облачного сервера будет запущена уже операционная система OpenBSD. Обратите внимание, что иконка сервера в панели по-прежнему будет отображать логотип Ubuntu — той системы, которая была установлена на сервер автоматически.

Теперь можно приступать к настройке.

Первым делом, необходимо установить обновления. Для этого надо выполнить команду syspatch в консоли и еще раз перезагрузиться (командой reboot), чтобы запустить обновленное ядро.

Интеграция с панелью управления Timeweb Cloud

Для обеспечения взаимодействия панели управления Timeweb Cloud и нашей виртуальной машины, а так же для того, чтобы собирать статистику использования ресурсов нам необходимо установить и сконфигурировать два сервиса: QEMU Guest Agent и Zabbix.

QEMU Guest Agent

QEMU Guest Agent — это программа-демон, которая запускается внутри виртуальной машины для помощи в управлении. В OpenBSD эта программа устанавливается командой:

pkg_add qemu-ga

Затем надо отредактировать конфигурационный файл /etc/qemu/qemu-ga.conf так, чтобы он выглядел следующим образом:

[general]
method=isa-serial
path=/dev/cua00

После этого, запустим сервис командой:

rcctl start qemu_ga

И добавим его в автозагрузку:

rcctl enable qemu_ga

Zabbix

Zabbix — это система мониторинга с открытым исходным кодом. Что установить программу-агент Zabbix в OpenBSD, нужно выполнить команду:

pkg_add zabbix-agent

Конфигурационный файл агента, расположенный в /etc/zabbix/zabbix_agentd.conf, должен содержать следующее:

Server=92.53.116.12,92.53.116.111,92.53.116.119
StartAgents=3
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogType=system
DebugLevel=3

AllowRoot=0
Timeout=30
DenyKey=system.run[*]

UserParameter=timeweb_config_version,echo 127

Запуск и автозагрузка сервиса осуществляется командами:

rcctl start zabbix_agentd
rcctl enable zabbix_agentd

Веб-сервер httpd

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

За отдачу статического контента по протоколу HTTP в OpenBSD отвечает веб-сервер httpd. Его не нужно устанавливать, он идёт в базовой установке операционной системы.

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

Давайте создадим файл /var/www/htdocs/index.html следующего содержания:

<h1>Hello, OpenBSD!</h1>

Конфигурационный файл веб-сервера должен находиться в /etc/httpd.conf. Изначально он отсутствует, его следует создать и записать в нём следующее:

server "default" {
  listen on egress port http
}

Добавим веб-сервер в автозагрузку и запустим его:

rcctl enable httpd
rcctl start httpd

Если набрать в браузере IP-адрес нашей виртуальной машины (узнать его можно в панели управления или из письма об изначальной установке), то вы должны увидеть приветствие, которое мы предварительно создали.

Image1

Настройка HTTPS соединения при помощи acme-client и relayd

Обращение к сайту по IP-адресу и по протоколу HTTP хоть и возможно, но не совсем удобно. Давайте внесем изменения в конфигурацию так, чтобы наш сайт-приветствие открывался на домене и через защищённое соединение HTTPS.

Доменное имя

Первым делом нам необходимо зарегистрировать новый домен или внести изменения в настройку DNS-зон уже существующего домена так, чтобы A-запись указывала на IP-адрес нашей виртуальной машины. В панели управления доменами облачной платформы Timeweb Cloud это можно сделать в разделе «Домены». В случае возникновения вопросов изучите справочную информацию или обратитесь в службу поддержки. После внесения изменений в DNS-записи домена должно пройти какое-то время, пока записи обновятся на серверах имен. Рекомендую воспользоваться сервисом DNS Propagation Checker для получения информации.

Далее, мы будем использовать www.example.com в качестве доменного имени. Замените его на ваше доменное имя в конфигурационных параметрах.

acme-client

Let’s Encrypt — некоммерческий Центр сертификации, предоставляющий сертификаты TLS — использует ACME-протокол для подтверждения прав на доменное имя, а также для выпуска сертификата для него. Чтобы получить сертификат Let’s Encrypt, необходимо использовать ACME-клиент. В OpenBSD он так и называется acme-client и входит в базовую установку операционной системы.

Прежде чем начать конфигурацию acme-client, внесем необходимые изменения в конфигурацию веб-сервера в файле /etc/httpd.conf. Файл должен выглядеть, как показано ниже:

server "www.example.com" {
    listen on egress port http
    alias "example.com"
    root "/"

    location "/.well-known/acme-challenge/*" {
        request strip 2
        root "/acme"
    }

    location * {
        block return 301 "https://www.example.com$REQUEST_URI"
    }
}

server "www.example.com" {
    listen on lo port https
    log style forwarded
}

types {
    include "/usr/share/misc/mime.types"
}

Проверим, что в конфигурационном файле веб-сервера нет ошибок или опечаток:

httpd -n

Создадим конфигурационный файл /etc/acme-client.conf:

authority letsencrypt {
    api url "https://acme-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-privkey.pem"
}

domain www.example.com {
    alternative names { example.com }
    domain key "/etc/ssl/private/www.example.com.key"
    domain full chain certificate "/etc/ssl/www.example.com.fullchain.pem"
    sign with letsencrypt
}

Теперь, когда мы внесли изменения в конфигурационный файл веб-сервера и создали конфигурацию для клиента ACME, пришло время перезапустить веб-сервер и запросить сертификат:

rcctl restart httpd
acme-client www.example.com

Команды должны выполниться без ошибок. Проверим, что файл сертификата действительно создан:

ls /etc/ssl/www.example.com.fullchain.pem

Сгенерируем сертификат в формате OCSP из формата PEM:

ocspcheck -No /etc/ssl/www.example.com.ocsp /etc/ssl/www.example.com.fullchain.pem

Срок действия сертификата на ваш домен в формате PEM истекает через 90 дней, а его ответ в формате OCSP — через неделю. Для того, чтобы автоматизировать процесс обновления сертификатов, добавьте следующий скрипт в файл /etc/daily.local, и тогда проверки валидности сертификата будут проходить ежедневно, сертификаты будут обновляться при необходимости:

#!/bin/ksh

dir=/etc/ssl
domain=www.example.com

/usr/sbin/acme-client $domain
if [ $? -eq 0 ] ; then
    /usr/sbin/ocspcheck -No $dir/$domain.ocsp $dir/$domain.fullchain.pem
    /usr/sbin/rcctl restart relayd
fi

/usr/sbin/ocspcheck -i $dir/$domain.ocsp $dir/$domain.fullchain.pem
if [ $? -eq 1 ] ; then
    /usr/sbin/ocspcheck -No $dir/$domain.ocsp $dir/$domain.fullchain.pem
    /usr/sbin/rcctl restart relayd
fi

exit 0

relayd

relayd — это балансировщик нагрузки, шлюз уровня приложения, прозрачный прокси, SSL/TLS-шлюз. Именно он (в связке с веб-сервером httpd) отвечает за HTTPS-соединение. Создадим конфигурационный файл /etc/relayd.conf следующего содержания:

log state changes
log connection
prefork 10

table <www> { 127.0.0.1 }

http protocol "https" {
    tls keypair "www.example.com"

    return error

    match request header set "X-Forwarded-For" value "$REOTE_ADDR"
    match request header set "X-Forwarded-Port" value "$REMOTE_PORT"

    match method GET tag ok
    match method HEAD tag ok

    block
    pass tagged ok forward to <www>
}

relay "https" {
    listen on egress port https tls
    protocol "https"
    forward to <www> port https
}

Маска файлов, по которой relayd ищет сертификаты и файлы ключей, подразумевает, что один и тот же сертификат может использоваться на разных портах. Самый простой способ удовлетворить этому требованию — использовать символьные ссылки:

cd /etc/ssl
ln -s www.example.com.fullchain.pem www.example.com:443.crt
ln -s www.example.com.ocsp www.example.com:443.ocsp
cd private
ln -s www.example.com.key www.example.com:443.key

Проверим конфигурацию relayd на корректность:

relayd -n

Теперь можно запустить relayd:

rcctl enable relayd
rcctl start relayd

Теперь наш сайт-приветствие открывается по домену и по протоколу HTTPS:

Image3

Установка PHP

Для некоторых задач простого веб-сервера, пусть даже и с поддержкой HTTPS, может быть недостаточно. Нужна поддержка серверных языков программирования. И такое возможно настроить в OpenBSD. Рассмотрим на примере языка PHP.

Первым делом установим пакет PHP:

pkg_add php

На выбор будет предложена установка одной из нескольких версий. В моём случае это были php-8.0.28p1, php-8.1.19 и php-8.2.6. Я выбрал последнюю, так как это версия с самым долгим сроком поддержки.

Вместе с пакетом php также был установлен менеджер процессов FastCGI (FPM). Давайте добавим этот сервис в автозагрузку и запустим его:

rcctl enable php82_fpm
rcctl start php82_fpm

Теперь нам надо добавить обработку PHP-скриптов на стороне веб-сервера httpd. Для это отредактируем конфигурационный файл /etc/httpd и изменим вторую запись server так, чтобы она выглядела следующим образом:

server "www.example.com" {
    listen on lo port https
    log style forwarded

    location "*.php" {
        fastcgi socket "/run/php-fpm.sock"
    }
}

Не забудьте перезапустить веб-сервер после внесения изменений в файл конфигурации:

rcctl restart httpd

Пора проверить, как работают PHP-скрипты в нашей конфигурации. Создайте файл /var/www/htdocs/info.php следующего содержания:

<?php phpinfo(); ?>

При переходе на страницу info.php на нашем домене должна появиться информация об установленной версии PHP:

Image1

Заключение

В этом материале мы познакомились с операционной системой OpenBSD. С помощью данной инструкции можно установить операционную систему на облачный сервер Timeweb Cloud, а также произвести базовую настройку веб-сервера для размещения сайта с поддержкой PHP. Помимо этого сервер так же работает по защищенному протоколу HTTPS и использует для этого сертификат Let’s Encrypt. Конфигурация сервера позволяет обновлять сертификат автоматически.

Статья обновлена 30.05.2023

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
25 января 2023 г.
560
12 минут чтения
Средний рейтинг статьи: 5
Комментарии 5
василий
25.07.2024, 20:24

полезная инструкция. и услуги- огонь! жаль, что ваши фсбешные связи всё перечёркивают. что ж, буду искать дальше :
ps: успехов вам, конечно, желать не стану :D

Команда Timeweb Cloud
Команда Timeweb Cloud
26.07.2024, 12:24

Здравствуйте! Спасибо за комплимент по поводу сервиса и инструкции. Кураторам из ФСБ передадим, что вы нас раскрыли. Жаль, что вы не пожелали нам успеха - боимся, что это скажется на работе компании и прибыли в этом году. Переживаем.

Александр Достоевский
Александр Достоевский
01.09.2023, 12:21

Спасибо! Уже несколько раз воспользовался!

Сидоренко Андрей
Сидоренко Андрей
06.06.2023, 19:01

Очень круто! Спасибо!!!

Команда Timeweb Cloud
Команда Timeweb Cloud
09.06.2023, 11:07

Спасибо за фидбэк, очень рады, что вам понравилась инструкция 🙂