[DRAFT] BTC Node Security
For Internal Use Only
Ukrainian language is used for safety reasons.
Постановка задачі: з міркувань безпеки, до Bitcoin-ноди, розташованої на dev.marionette.dev, має забезпечуватись доступ лише з 2х серверів: dev.marionette.dev та demo.marionette.dev.
Task Description: For security reasons, access to the bitcoin-node located on dev.marionette.dev should be restricted to only two servers: dev.marionette.dev and demo.marionette.dev.
Для реалізації використовуються:
Implementation involves:
1. Налаштування мережевого файєрвола на Digital Ocean, де розташовані дроплети dev.marionette.dev та demo.marionette.dev
1. Configuring the network firewall on Digital Ocean, where the droplets dev.marionette.dev and demo.marionette.dev are located.
2. Налаштування docker-compose файла для біткоін-ноди на dev.marionette.dev
Configuring the
docker-compose
file for the Bitcoin-node on dev.marionette.dev.
Примітка: додатково (не стосується bitcoin-ноди): для взаємодії середовища demo.marionette.dev (а саме сервіса BITCOIN-PI на цьому деплойменті) прописується внутрішня IP-адреса dev.marionette.dev в мережі VPC.
Note: Additionally (not related to the Bitcoin node): For interactions with the demo environment (specifically the BITCOIN-PI service on this deployment), the internal IP address of dev.marionette.dev should be configured in the VPC network.
Реалізація
Implementation:
Внутрішня IP-адреса dev.marionette.dev в VPC - 10.116.0.3.
Internal IP address of dev.marionette.dev in VPC - 10.116.0.3.
Внутрішня IP-адреса demo.marionette.dev в VPC - 10.116.0.9.
Internal IP address of demo.marionette.dev in VPC - 10.116.0.9.
Створено наступні вхідні правила файервола, де додано порт 8332 лише для IP 10.116.0.9:
The following firewall inbound rules have been created, allowing port 8332 only for IP 10.116.0.9:
та застосовані до дроплета dev.marionette.dev:
and applied to the dev.marionette.dev droplet:
Для деплоймента bitcoin-ноди на dev.marionette.dev, зроблено мапінг 8332 порта з docker-контейнера bitcoind на порт 8332 хоста. Оскільки docker-compose.yaml, застосований в складі Configurator, змінено темплейт cryptonodes.yaml.t шляхом додавання секції мапінга портів:
For deploying the Bitcoin-node on dev.marionette.dev, port 8332 is mapped from the Docker-containerbitcoind
to port 8332 on the host. Since thedocker-compose.yaml
used in Configurator has been modified from the cryptonodes.yaml.t template by adding a port mapping section:
ports: - "{{rpcport}}:{{rpcport}}"
Після рендерінга на dev.marionette.dev отримано cryptonodes.yaml :
The rendered file on dev.marionette.dev is 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, або вручну:
After rendering cryptonodes.yaml, restarting the Bitcoin
daemon is mandatory. This restart can be done via the CI/CD pipeline configured in gitlab.tunex.io for Configurator or manually.
$ docker-compose restart bitcoind
Перевірка
Verification:
Для того, щоб переконатись, що демон bitcoin-ноди доступний лише на 2-х дроплетах, застосовуємо інструменти bitcoin-cli та curl, а також RPC API для bitcoin-ноди (https://developer.bitcoin.org/reference/rpc/index.html )
To ensure the Bitcoin-node daemon is accessible only from the two droplets, use-bitcoin-cli, curl, and the RPC API for the Bitcoin node (https://developer.bitcoin.org/reference/rpc/index.html )
Для dev.marionette.dev скористаємось bitcoin-cli. Наприклад, перевіримо найвищий блок в ноді:
For dev.marionette.dev , use bitcoin-cli to check the highest block in the node.Для demo.marionette.dev скористаємось curl. Як приклад, перевіримо баланс гаманця в ноді:
For demo.marionette.dev , use curl. Foe example, lets check the wallet balance in the node:
де замість **** в http://*****:*****@10.116.0.3:8332 вказується ім'я та пароль rpc-користувача, визначеного в конфігураційному файлі bitcoin-ноди (як правило, це bitcoin.conf)
Replace ****
in the http://*****:*****@10.116.0.3:8332 with the RPC username and password defined in the Bitcoin-node configuration file (bitcoin.conf)
Також для прикладу, що доступ до bitcoin-ноди лише на рівні VPC мережі забезпечений, використаємо curl, щоб перевірити баланс гаманця в ноді, вказавши в запиті зовнішню IP-адресу dev.marionette.dev:
Additionally, to verify that access to the Bitcoin-node is limited to the VPC network, use curl to check the wallet balance in the node by specifying the external IP address of dev.marionette.dev.
3. Для будь-якого іншого випадку, візьмено власний ноут або інший сервер та відправимо запит на отримання найвищого блоку в ноді:
For any other case, use your own laptop or another server and send a request to get the highest block in the node.
Оскільки відповідь: "Failed to connect to 157.230.93.53 port 8332: Connection timed out
", то реалізація безпеки bitcoin-ноди виконана.
If the response is "Failed to connect to 157.230.93.53 port 8332: Connection timed out
" the Bitcoin-node security implementation is successful.
Додатково: забезпечення комунікації BITCOIN-PI на demo.marionette.dev з bitcoin-нодою
Additional: Ensuring BITCOIN-PI Communication on demo.marionette.dev with Bitcoin-Node
З огляду на реалізацію доступу до bitcoin-ноди на dev.marionette.dev з внутрішньої VPC мережі лише по 8332 порту для RPC-комунікації, потрібно в Configurator в файлі global/config.yaml в секції BITCOIN-PI: змінити змінну rpchost :
Given that access to the coin node on dev.marionette.dev from the internal VPC network is restricted to port 8332 for RPC communication, update the Configurator
variable in the global/config.yaml
file under the BITCOIN-PI section in Configurator.
Після рендерінга global/config.yam перезапуск демона BITCOIN-PI - обов'язковий. Перезапуск відбувається по CI-CD, налаштованому в gitlab.tunex.io для configurator, або вручну:
After making this change, rendering the global/config.yam
file and restarting the BITCOIN-PI daemon is mandatory. This restart can be done via the CI/CD pipeline configured in gitlab.tunex.io for Configurator or manually.
>>>>>>>>TO APROVE<<<<<<<<
Task Description:
For security reasons, access to the Bitcoin node located on dev.marionette.dev
should be restricted to only two servers: dev.marionette.dev
and demo.marionette.dev
.
Implementation Involves:
Configuring the Network Firewall:
Set up the network firewall on Digital Ocean, where the dropletsdev.marionette.dev
anddemo.marionette.dev
are located.Configuring the Docker-Compose File:
Modify the Docker-Compose file for the Bitcoin node ondev.marionette.dev
.
Note:
Additionally (not related to the Bitcoin node), for interactions with the demo environment (specifically the BITCOIN-PI service on this deployment), the internal IP address of dev.marionette.dev
should be configured in the VPC network.
Implementation Details:
Internal IP Address of
dev.marionette.dev
in VPC:10.116.0.3
Internal IP Address of
demo.marionette.dev
in VPC:10.116.0.9
Firewall Configuration:
The following firewall inbound rules have been created, allowing port 8332 only for IP 10.116.0.9
:
These rules have been applied to the dev.marionette.dev
droplet:
For deploying the Bitcoin node on dev.marionette.dev
, port 8332 is mapped from the Docker container bitcoind
to port 8332 on the host. Since the docker-compose.yaml
used in Configurator has been modified from the cryptonodes.yaml.t
template by adding a port mapping section:
After rendering on dev.marionette.dev
, the resulting file is cryptonodes.yaml
:
After rendering cryptonodes.yaml
, restarting the Bitcoin daemon is mandatory. This restart can be done via the CI/CD pipeline configured in gitlab.tunex.io
for Configurator or manually:
Verification:
To ensure the Bitcoin node daemon is accessible only from the two droplets, use bitcoin-cli
, curl
, and the RPC API for the Bitcoin node (RPC API Reference — Bitcoin).
For dev.marionette.dev
, use bitcoin-cli
. For example, check the highest block in the node:
For demo.marionette.dev
, use curl
. For example, check the wallet balance in the node:
Replace ****
in the <http://*****:*****@10.116.0.3:8332
> with the RPC username and password defined in the Bitcoin node configuration file (usually bitcoin.conf
).
To verify that access to the Bitcoin node is restricted to the VPC network, use curl
to check the wallet balance by specifying the external IP address of dev.marionette.dev
:
For any other case, use your own laptop or another server and send a request to get the highest block in the node:
If the response is "Failed to connect to 157.230.93.53 port 8332: Connection timed out", the Bitcoin node security implementation is successful.
Additional: Ensuring BITCOIN-PI Communication on demo.marionette.dev
with Bitcoin Node
Given that access to the Bitcoin node on dev.marionette.dev
from the internal VPC network is restricted to port 8332 for RPC communication, update the Configurator variable in the global/config.yaml
file under the BITCOIN-PI section in Configurator:
After rendering global/config.yaml
, restarting the BITCOIN-PI daemon is mandatory. This restart can be done via the CI/CD pipeline configured in gitlab.tunex.io
for Configurator or manually: