Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

For Internal Use Only

Ukrainian language is used for safety reasons.

Постановка задачі: з міркувань безпеки, до bitcoin-ноди, розташованої на dev.marionette.dev, має забезпечуватись доступ лише з 2х серверів: dev.marionette.dev та demo.marionette.dev.

Для реалізації використовуються:
1. Налаштування мережевого файєрвола на Digital Ocean, де розташовані дроплети dev.marionette.dev та demo.marionette.dev
2. Налаштування docker-compose файла для біткоін-ноди на dev.marionette.dev

Примітка: додатково (не стосується bitcoin-ноди): для взаємодії середовища demo.marionette.dev (а саме сервіса BITCOIN-PI на цьому деплойменті) прописується внутрішня IP-адреса dev.marionette.dev в мережі VPC.

Реалізація

Внутрішня IP-адреса dev.marionette.dev в VPC - 10.116.0.3.
Внутрішня IP-адреса demo.marionette.dev в VPC - 10.116.0.9.

  1. Створено наступні вхідні правила файервола, де додано порт 8332 лише для IP 10.116.0.9:

та застосовані до дроплета dev.marionette.dev:

  1. Для деплоймента bitcoin-ноди на dev.marionette.dev, зроблено мапінг 8332 порта з docker-контейнера bitcoind на порт 8332 хоста. Оскільки docker-compose.yaml, застосований в складі Configurator, змінено темплейт cryptonodes.yaml.t шляхом додавання секції мапінга портів:

ports:       - "{{rpcport}}:{{rpcport}}" 


Після рендерінга на dev.marionette.dev отримано cryptonodes.yaml :

version: "3.7"

services:
  blockchainRegistry:
    image: gitlab.tunex.io:5050/marionette-develop/backend:latest
    restart: always
    command: ./node_modules/.bin/moleculer-runner
    hostname: "blockchainRegistry"
    env_file:
      - ../config/database.env
    environment:
      SERVICES: services/blockchainRegistry
      LOGLEVEL: info

  bitcoind:
    image: gitlab.tunex.io:5050/marionette-stack/public/bitcoind24v
    restart: always
    user: root
    command: bitcoind
    ports:
      - "8332:8332"
    environment:
      HOSTNAME: bitcoind
    volumes:
      - ../data/bitcoin/.bitcoin:/bitcoin/.bitcoin
      - ../config/bitcointest.conf:/bitcoin/.bitcoin/bitcoin.conf

Після рендерінга cryptonodes.yaml перезапуск демона bitcoind - обов'язковий. Перезапуск відбувається по CI-CD, налаштованому в gitlab.tunex.io для Configurator, або вручну:

$ docker-compose restart bitcoind

Перевірка

Для того, щоб переконатись, що демон bitcoin-ноди доступний лише на 2-х дроплетах, застосовуємо інструменти bitcoin-cli та curl, а також RPC API для bitcoin-ноди (https://developer.bitcoin.org/reference/rpc/index.html )

  1. Для dev.marionette.dev скористаємось bitcoin-cli. Наприклад, перевіримо найвищий блок в ноді:

    $ docker-compose exec bitcoind bitcoin-cli getblockcount
    2470217
  2. Для demo.marionette.dev скористаємось curl. Як приклад, перевіримо баланс гаманця в ноді:

    $ curl --data-binary '{"jsonrpc":"1.0","method":"getbalance","params":[]}' -H 'content-type: text/plain;' http://*****:*****@10.116.0.3:8332
    {"result":0.21380328,"error":null,"id":null}

де замість **** в http://*****:*****@10.116.0.3:8332 вказується ім'я та пароль rpc-користувача, визначеного в конфігураційному файлі bitcoin-ноди (як правило, це bitcoin.conf)

Також для прикладу, що доступ до bitcoin-ноди лише на рівні VPC мережі забезпечений, використаємо curl, щоб перевірити баланс гаманця в ноді, вказавши в запиті зовнішню IP-адресу dev.marionette.dev:

$ curl --data-binary '{"jsonrpc":"1.0","method":"getbalance","params":[]}' -H 'content-type: text/plain;' http://****:*****@157.230.93.53:8332
curl: (28) Failed to connect to 157.230.93.53 port 8332: Connection timed out

3. Для будь-якого іншого випадку, візьмено власний ноут або інший сервер та відправимо запит на отримання найвищого блоку в ноді:

$ curl --data-binary '{"jsonrpc":"1.0","method":"getblockcount","params":[]}' -H 'content-type: text/plain;' http://****:*****@dev.marionette.dev:8332
curl: (28) Failed to connect to 157.230.93.53 port 8332: Connection timed out

Оскільки відповідь: "Failed to connect to 157.230.93.53 port 8332: Connection timed out", то реалізація безпеки bitcoin-ноди виконана.

Додатково: забезпечення комунікації BITCOIN-PI на demo.marionette.dev з bitcoin-нодою

З огляду на реалізацію доступу до bitcoin-ноди на dev.marionette.dev з внутрішньої VPC мережі лише по 8332 порту для RPC-комунікації, потрібно в Configurator в файлі global/config.yaml в секції BITCOIN-PI: змінити змінну rpchost :

rpchost: 10.116.0.3

Після рендерінга global/config.yam перезапуск демона BITCOIN-PI - обов'язковий. Перезапуск відбувається по CI-CD, налаштованому в gitlab.tunex.io для configurator, або вручну:

$ docker-compose restart BITCOIN-PI
  • No labels