Category: Создание собственных сервисов

  • Руководство по созданию собственного VPN-сервера

    Использование туннеля VPN сейчас предоставляет сильную защиту как и против бытовых «проблем», вроде региональной интернет-цензуры или любопытного «носа» государственных органов, так и серьёзных угроз вроде корпоративного шпионажа, и, реже, перехвата трафика при помощи государственных же «фильтров».

    Интернет-ресурс «Может, вам повезет?», тем не менее, выступает против крайне популярного подхода по популяризации VPN, который заключается в публикации списков и прочих рекомендаций конкретных VPN-провайдеров. Не только потому, что современное российское законодательство трактует такие «советы» как прямую рекламу VPN, но и потому, что подобные списки работают в обе «стороны» российские надзорные ведомства не менее активно берут эти рекомендации в «работу».

    Гораздо более совершенным подходом является продвижение инструкций по созданию собственных VPN-серверов подобные решения не только работают несравнимо дольше, но и практически полностью избавляют автора от нужды постоянного обновления «списков». Как и в случае с созданием собственного мессенджера, за последний десяток лет «расплодилось» множество решений, которые упрощают настройку подобного сервера до «смехотворной» сложности.

    I. Выбор сервера

    Данное руководство не имеет привязки к географическому местоположению сервера. То есть, вы можете использовать его, в том числе, для подключения к интернету через вашу домашнюю сеть. Мы же рассмотрим вариант, когда сервер располагается в далеком «заморском» государстве.

    Как и прежде, интернет-ресурс «Может, вам повезет?» крайне не рекомендует пользоваться российскими хостинг-провайдерами. В том числе и потому, что весь их трафик обязан проходить через российские «фильтры» ТСПУ.

    Из зарубежных «Может, вам повезет?» может порекомендовать хостинг-провайдера 1984.hosting.

    Касательно параметров:

    • ОС: Debian Bookworm (12) или Trixie (13)
    • RAM: 1 GB
    • CPU: 1 vCPU

    Принципиальной разницы между Bookworm и Trixie нет, но предпочительно выбирать именно Trixie ввиду того, что это текущая стабильная версия дистрибутива Debian.

    II. Конфигурация

    Как решение VPN мы будем использовать Outline. Стоит заметить, что это не VPN в «классическом» смысле, а «закос» под него на базе Shadowsocks. Он проще в конфигурации чем «традиционные» VPN вроде OpenVPN и WireGuard, но имеет кратно превосходящую их устойчивость к блокировкам.

    Подключитесь к своему серверу по протоколу Secure Shell:

    ssh root@{IP cервера}

    При первом подключении ваш клиент Secure Shell покажет криптографический отпечаток сервера. Настоятельно рекомендуется провести «сверку показаний» с отпечатком ключа сервера, который показывает ваш хостинг-провайдер. После успешного подключения обновите cистемные пакеты & кэш пакетного менеджера apt:

    apt update && apt upgrade

    Для установки сервера Outline нам потребуется Docker. Получите ключ GPG его репозитория:

    curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc

    Задайте правильные права доступа:

    chmod a+r /etc/apt/keyrings/docker.asc

    Добавьте репозиторий Docker в sources.list пакетного менеджера apt:

    tee /etc/apt/sources.list.d/docker.sources <<EOF
    Types: deb
    URIs: https://download.docker.com/linux/debian
    Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
    Components: stable
    Signed-By: /etc/apt/keyrings/docker.asc
    EOF

    Установите сам Docker и его зависимости:

    apt update && apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    Для дальнейшей конфигурации сервера вам потребуется программа Outline Manager. Кроме первичной настройки она также используется для создания и управления пользовательскими ключами. На случай, если вы не можете «достучаться» до сайта Outline, вы можете скачать Outline Manager непосредственно с зеркала интернет-ресурса «Может, вам повезет?»:

    При первом запуске вам предложат выбрать хостинг-провайдера. Выбирайте четвертый вариант, он же «свой».

    Далее вам покажут команду, которую необходимо выполнить на вашем сервере для установки контейнера Docker с сервером Outline в систему. После ее завершения вам покажут ярко-зеленую строчку, которую нужно вставить в Outline Manager:

    На этом настройка сервера завершена. Далее вы сможете создать необходимое количество ключей для последующего использования в клиентах Outline.

    III. Клиенты

    Официальные приложения Outline доступны на следующих платформах:

    Можно пользоваться любым другим клиентом с поддержкой Shadowsocks.

  • Руководство по созданию собственного мессенджера

    В связи с медленно наступающими изменениями государственной политики по отношению к, в частности, мессенджеру Telegram, вопрос о «построении» своей платформы для коммуникации может скоро встать «ребром» для значительной части российского общества.

    Стоит отметить, что сейчас сделать свой мессенджер относительно просто; За последний десяток лет появилось множество протоколов для децентрализованной коммуникации, в числе которых — Matrix, SMP, и прочие. Данное руководство рассматривает именно настройку сервера Matrix, конкретнее Matrix-Synapse.

    Что потребуется?

    • VPS с 1GB RAM и 1 CPU (если планируете иметь больше 10-ти активных пользователей — 2 GB RAM и 2 CPU);
    • Доменное имя;
    • Базовое знание терминала Unix.

    Важно: крайне нежелательно пользоваться услугами российских как и хостинг-провайдеров, так и регистраторов. Из зарубежных интернет-ресурс «Может, вам повезет» может уверенно порекомендовать хостинг-провайдера 1984, который, в том числе предоставляет услуги регистрации доменов.

    I. Подготовительные работы

    В качестве ОС для сервера мы будем использовать Debian 13 (Trixie), но можно и Debian 12 (Bookworm). Существенной разницы между ними нет.

    Откройте панель управления вашего регистрара и зайдите в параметры зон DNS вашего домена. Тут вам необходимо создать запись типа A, которая указывает на IP вашего сервера. «Выглядеть» она должна следующим образом:

    • Хост: @
    • IP-адрес: IP вашего сервера
    • TTL (если доступно): 86400

    Обновление записей DNS может занять несколько часов, ввиду чего желательно не «тянуть» с этим пунктом.

    II. Настройка сервера

    Подключитесь к своему серверу по протоколу Secure Shell:

    ssh root@{IP сервера}

    Можно заменить непосредственный IP сервера на ваш домен, если вы «подождали» от его настройки достаточное количество времени.

    Далее вам покажут отпечаток ключа вашего сервера и попросят ввести пароль. Желательно провести «сверку показаний» с отпечатком, который виден у вашего хостинг-провайдера. Его можно вставить как и напрямую в ssh, так и сверить вручную.

    После успешного подключения обновите кэш пакетного менеджера APT и системные пакеты:

    apt update && apt upgrade

    Скорее всего, вам будет необходимо установить несколько гигабайт обновлений, в числе которых будет, например, новый образ ядра Linux. Чтобы загрузить «обновки» в память, перезагрузите систему:

    reboot

    Подождите несколько минут и подключитесь по Secure Shell вновь. Далее, создайте отдельного пользователя для сервера Synapse:

    useradd -m synapse

    Задайте ему пароль (желательно 64-128 символа)

    passwd synapse

    Установите необходимые для сервера пакеты:

    apt install python3-full nginx certbot postgresql coturn pwgen

    Создайте случайный пароль на 64 символа:

    pwgen -s 64 1 

    В дальнейшем этот пароль будет использоваться для доступа к базе данных сервера Synapse. Сохраните его в безопасном месте (например, в базе данных менеджера паролей KeepassXC)

    Откройте пользователя Postgres:

    su - postgres

    Создайте базу данных для Synapse:

    createuser --pwprompt synapse_user # задайте созданный ранее пароль
    createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
    logout

    Закройте пользователя Postgres:

    logout

    На этом заканчивается базовая настройка сервера. Перейдем к более «детальной» части.

    III. Конфигурация

    Откройте дополнительное окно Secure Shell и подключитесь к вашему пользователю Synapse:

    ssh synapse@{ваш сервер}

    Создайте виртуальную среду:

    python3 -m venv venv

    Переключитесь в свежесозданную среду:

    source venv/bin/activate

    Обновите пакеты pip и setuptools:

    pip install --upgrade pip
    pip install --upgrade setuptools

    Установите сервер Matrix-Synapse:

    pip install matrix-synapse psycopg2-binary

    Создайте конфигурационный файл сервера Synapse:

    python -m synapse.app.homeserver \
        --server-name kremlinkernel.com \
        --config-path homeserver.yaml \
        --generate-config \
        --report-stats=no


    В параметре –server-name замените kremlinkernel.com на ваше доменное имя.

    Откройте конфигурационный файл homeserver.yaml:

    nano homeserver.yaml

    Вам необходимо полностью заменить параметер database на следующий:

    database:
      name: psycopg2
      args:
        user: synapse_user
        password: # пароль от базы данных synapse
        dbname: synapse
        host: 127.0.0.1
        cp_min: 5
        cp_max: 10

    Вернитесь обратно в пользователя root. Теперь нам необходимо настроить сервер Coturn, который необходим для стабильной интернет-телефонии (VoIP). Создайте для него секретный ключ:

    pwgen -s 64 1 # его также необходимо сохранить

    Откройте конфигурационный файл сервера:

    nano /etc/turnserver.conf

    Задайте в нем следующие параметры:

    use-auth-secret
    static-auth-secret= # ваш секретный ключ
    realm=kremlinkernel.com # замените kremlinkernel.com на ваш домен
    
    no-tcp-relay
    
    denied-peer-ip=10.0.0.0-10.255.255.255
    denied-peer-ip=192.168.0.0-192.168.255.255
    denied-peer-ip=172.16.0.0-172.31.255.255
    
    no-multicast-peers
    denied-peer-ip=0.0.0.0-0.255.255.255
    denied-peer-ip=100.64.0.0-100.127.255.255
    denied-peer-ip=127.0.0.0-127.255.255.255
    denied-peer-ip=169.254.0.0-169.254.255.255
    denied-peer-ip=192.0.0.0-192.0.0.255
    denied-peer-ip=192.0.2.0-192.0.2.255
    denied-peer-ip=192.88.99.0-192.88.99.255
    denied-peer-ip=198.18.0.0-198.19.255.255
    denied-peer-ip=198.51.100.0-198.51.100.255
    denied-peer-ip=203.0.113.0-203.0.113.255
    denied-peer-ip=240.0.0.0-255.255.255.255
    denied-peer-ip=::1
    denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
    denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
    denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
    denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
    denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
    denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
    denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
    
    allowed-peer-ip=10.0.0.1
    total-quota=1200

    Сохраните этот файл и перезапустите сервер coturn:

    systemctl restart coturn

    Переключитесь на пользователя Synapse. Нам необходимо добавить конфигурацию сервера TURN в homeserver.yaml:

    nano homeserver.yaml

    Добавьте данные параметры в конец файла:

    turn_uris: [ "turn:kremlinkernel.com?transport=udp", "turn:kremlinkernel.com?transport=tcp" ]
    turn_shared_secret: # ваш секретный ключ
    turn_user_lifetime: 86400000
    turn_allow_guests: true

    Замените kremlinkernel.com на ваш домен.

    Сохраните этот файл и закройте пользователя Synapse. Все необходимые на этом этапе конфигурационные шаги в нем выполнены.

    Переключитесь на пользователя root. Для последующего использования шифрования TLS web-сервером nginx необходимо получить сертификаты на ваш домен. Остановите его:

    systemctl stop nginx

    Запросите сертификаты для вашего домена:

    certbot certonly

    Если вас попросят выбрать способ подтверждения, выбирайте первый. Далее проблем возникнуть не должно.

    Теперь нам необходимо настроить сам web-сервер Nginx. Создайте конфигурационный файл для вашего домена:

    cd /etc/nginx/conf.d
    nano {доменное имя вашего сайта}.conf

    Скопируйте данную конфигурацию в этот файл:

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        # For the federation port
        listen 8448 ssl default_server;
        listen [::]:8448 ssl default_server;
        server_name kremlinkernel.com;
        ssl_certificate /etc/letsencrypt/live/kremlinkernel.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/kremlinkernel.com/privkey.pem;
        ssl_protocols TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        location ~ ^(/_matrix|/_synapse/client) {
            proxy_pass http://localhost:8008;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host:$server_port;
            client_max_body_size 50M;
        proxy_http_version 1.1;
        }
    }

    Замените kremlinkernel.com на своё доменное имя в параметре server_name и в путях до сертификатов Let’s encrypt.

    Перезапустите Nginx:

    systemctl restart nginx

    IV. Управление

    Запустить сервер Synapse из одноименного пользователя можно следующим образом:

    source venv/bin/activate
    synctl start

    Зарегистрировать аккаунт можно так:

    source venv/bin/activate
    register_new_matrix_user -c homeserver.yaml

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

    Стоит отметить, что данное руководство не подразумевает возможности регистрировать аккаунты без непосредственного участия администратора. Открытая регистрация — верный способ превратить ваш сервер в «помойку».

    V. Приложения

    Для iOS/Android существует клиент Element, которым я и рекомендую пользоваться. Его страницы в магазинах приложений:

    Вместо регистрации на matrix.org используйте кнопку «sign in manually», потом «change account provider».

    Для настольных компьютеров существует как и клиент Element, так и Nheko.