2018年09月05日

セキュリティが不安なら仮想マシンにすりゃよかった

マスターノードのインストール手順をスクリプト化して、きちんと作り直そうと思った。
スクリプトなら手元のPCの仮想マシンで linux を使って....

あれ?
セキュリティが不安だったら、最初から仮想マシンでやれば済んだのか? 
どうせウォレットは常時接続が不要だし orz

もう寝る。
posted by とーふ at 20:02| マスターノード

Vultrでマスターノード増設 (その2)

まず、新しいサーバ側で操作
1.ソフトを準備する
# 自分用の実行ファイルを保存するディレクトリを作る
mkdir ~/bin
#ダウンロード
wget http://charitycoin.live/resources/charitycoin.linux.zip
#展開
unzip charitycoin.linux.zip
unzip linux.zip
cd linux-master
unzip charityd.zip
chmod +x charityd charity-cli
mv charityd charity-cli ~/bin
#一旦ログアウトしてログインしなおす
# または、単にログイン処理をやり直す
. .profile
2.ファイアウォールの解除
# charity のポートを許可する
sudo ufw allow 3300
sudo ufw reload
​実行例

masternodes@bjsoftab4:~$ sudo ufw allow 3300
[sudo] password for masternodes:
Rule added
Rule added (v6)
masternodes@bjsoftab4:~$ sudo ufw reload
Firewall reloaded
3.マスターノード準備
# 起動すると、最小限必要なファイルを作成する
charityd
# 指示に従って、rpcuser と rpcpassword の行のファイルを作成する。
# charity.conf ファイルの内容を参照して、rpc で通信するので、表示されるとおりで問題なし。
# 気になるなら、pwgen 64 1 とかで再生成してもいいです。(パスワードを覚えておく必要はなし)
nano ~/.charity/charity.conf
# デーモンとして起動する
charityd -daemon
# これをやっておけば、ログアウトしてもデーモンは動き続けます。
# コマンドラインで、動作状態をチェックする
# 何回か実行して、blocks が増えていれば、同期中です。
charity-cli getinfo
4.ウォレット側準備
ここからはウォレット側。古いほうの linux サーバを使います。
# 同期している間に、送金先の新アドレスを作成します
charity-cli getaccountaddress mn2
# ウォレットのアドレスがでるので、メモする。
# マスターノードのプライべートキーを作成する。
charity-cli masternode genkey
# プライベートキーがでるので、メモする。
さっき作成したウォレットのアドレスに、CryptBridge などから
​​「ぴったり 1000 コインを一回で送金する」​​
getinfo していると、そのうち送金が完了し、
balance が、さっき送信したのと合わせ、 2000 以上になるはず。
また、outputs の結果が変わります。
charity-cli masternode outputs
{
    "4f40008f84a7544509283c3c419a91ab9ec5d5fb74c6818b294fca2ccce87c98" : "0"
}
一つ増えました
charity-cli masternode outputs
{
    "4f40008f84a7544509283c3c419a91ab9ec5d5fb74c6818b294fca2ccce87c98" : "0",
    ​"b3aa01b5d322a02546dc5d03b86c8ffe60d79e2a955e72cc61df3dfe57c71f8b" : "0"​
}
5.新マスターノードの設定ファイルを編集する
新マスターノード側で操作します。
# まず、止める
charity-cli stop
# ifconfig とかで、 IPアドレスを確認する
例えば、10.10.10.10
# .charity/charity.conf を編集する
rpcallowip=127.0.0.1
server=1
listen=1
daemon=1
maxconnections=256
masternode=1
masternodeprivkey=さっき作ったマスターノードのプライべートキー
externalip=IPアドレス
# 再起動
charityd -daemon
6.マスターノードを追加する
今度は、ウォレット側で操作します。
# .charity/masternode.conf を編集する
# 今度は、mn2 の行を追加します。
mn2 IPアドレス:3300 マスターノードのプレイべートキー output_txid output_index
mn1 10.10.10.10:3300 jfafdkfjadfjadfjdf 4f40008f84a7544509283c3c419a91ab9ec5d5fb74c6818b294fca2ccce87c98 0
​mn2 10.20.20.20:3300 afht3dfhshsfhjfaff b3aa01b5d322a02546dc5d03b86c8ffe60d79e2a955e72cc61df3dfe57c71f8b 0​
みたいな感じ
charity-cli stop
charityd -daemon
# 設定確認
charity-cli masternode list-conf
{
    "masternode" : {
        "alias" : "mn1",
        "address" : "153.126.134.220:3300",
        "privateKey" : "7UVHachN1M86zVBaEGDrherxvbwsHFcjVZqyfW6xsr7x4ptssSo",
        "txHash" : "4f40008f84a7544509283c3c419a91ab9ec5d5fb74c6818b294fca2ccce87c98",
        "outputIndex" : "0",
        "status" : "ENABLED"
    },
    "masternode" : {
        "alias" : "mn2",
        "address" : "45.32.53.231:3300",
        "privateKey" : "7Vt2znS5xB4LjNKbKt1UAJXFaAT7s5zLvbGj66D123hPZQY6ckv",
        "txHash" : "b3aa01b5d322a02546dc5d03b86c8ffe60d79e2a955e72cc61df3dfe57c71f8b",
        "outputIndex" : "0",
        "status" : ​"MISSING"​
    }
}
7.マスターノードを起動する
ウォレット側で操作します。
ウォレット側から、マスターノードに対し、スタート指示を出します。
# マスターノード起動
charity-cli masternode start-alias mn2
{
    "alias" : "mn2",
    "result" : "successful"
}
8.マスターノード状態を確認
新サーバーで操作します。
# マスターノード状態確認
charity-cli masternode status
{
    "vin" : "CTxIn(COutPoint(0000000000000000000000000000000000000000000000000000000000000000, 4294967295), coinbase )",
    "service" : "[::]:0",
    "status" : "Not capable masternode: Hot node, waiting for remote activation."
}
# この場合は、起動できてないので、7.に戻って、起動指示を出しなおしてみます。
# 以下になれば、OKです。
# マスターノードの同期待ちなどかかるので、気長に。
charity-cli masternode status
{
    "vin" : "CTxIn(COutPoint(b3aa01b5d322a02546dc5d03b86c8ffe60d79e2a955e72cc61df3dfe57c71f8b, 0), scriptSig=)",
    "service" : "45.32.53.231:3300",
    "pubkey" : "CMwKq5wopZAHs2DB5PuTF8DpuFXvFKB6QT",
    "status" : "Masternode successfully started"
}
posted by とーふ at 20:01| マスターノード

Vultrでマスターノード増設 (その1)

前提OS:
Vultr Ubuntu 16.04 LTS
契約のやり方は、後で追記するので、とりあえずは、各自確認ください(汗

ということで、ちゃんと、HTML ファイルにしました。
http://www.geocities.jp/bjsoftab4/MasterNodes/Vultr.htm




事前準備:
1.ユーザ追加
root でリモートログインできたままにすると踏み台にされたりするので、ユーザーを作る。
# masternodes というユーザを作る
adduser masternodes
# masternodes が、sudo を使えるようにする。
usermod -aG sudo masternodes
画面表示
Adding user `masternodes' ...
Adding new group `masternodes' (1000) ...
Adding new user `masternodes' (1000) with group `masternodes' ...
Creating home directory `/home/masternodes' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for masternodes
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y
# ここで、いったんログアウト
# masternodes でログインして、sudo が、できることを確認します。
masternodes@bjsoftab4:~$ sudo id
[sudo] password for masternodes:
uid=0(root) gid=0(root) groups=0(root)
masternodes@bjsoftab4:~$ sudo bash
# ssh で リモートログインできないように設定します。
sed -e "/^PermitRootLogin/cPermitRootLogin No" -i /etc/ssh/sshd_config
# 念のため、再起動
reboot now
2.セキュリティ設定
#まずファイアウォール自体を無効にしておく
ufw disable 
#デフォルトはアクセス禁止にする
ufw default deny
# sshは、制限付きで許可する
ufw limit 22
# ファイアウォールを有効にする
ufw enable 
3.スワップを追加する
Vultr のサーバーは、スワップが設定されてないので、追加する
#状況確認
root@bjsoftab4:~# free -m
              total        used        free      shared  buff/cache   available
Mem:            992          60         119           6         811         724
Swap:             0           0           0
# スワップはファイルとして作成する
sudo bash
dd if=/dev/zero of=/swapfile count=2048 bs=1M
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile        none        swap    sw    0        0" >> /etc/fstab
実施例
root@bjsoftab4:~# dd if=/dev/zero of=/swapfile count=2048 bs=1M
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 6.21286 s, 346 MB/s
root@bjsoftab4:~# chmod 600 /swapfile
root@bjsoftab4:~# mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=6673ff4d-68c5-4980-85cc-b1d28beff382
root@bjsoftab4:~# swapon /swapfile
root@bjsoftab4:~# free -m
              total        used        free      shared  buff/cache   available
Mem:            992          60          72           6         859         740
Swap:          2047           0        2047
4.必要なパッケージを入れる
この辺は、さくらのVPSと同じ
root権限で実行してください。
sudo bash
apt-get -y  update
apt-get -y  upgrade
apt-get -y  install unzip
apt-get -y  install git
apt-get -y  install pwgen
apt-get -y dist-upgrade
apt-get -y install software-properties-common nano  libzmq3-dev libssl-dev libevent-dev
# 実行に必要そうなもの
apt-get -y  install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libboost-all-dev unzip libminiupnpc-dev python-virtualenv
apt-get -y  install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
# 仮想通貨関連リポジトリ追加
add-apt-repository ppa:bitcoin/bitcoin
apt-get -y  update
apt-get -y  install libdb4.8-dev libdb4.8++-dev
5.ソースからビルドする場合
git clone お好みのコイン
コンパイルに必要なパッケージを入れる。まぁ、以下を入れれば、足りるようです。
apt-get install miniupnpc
./autogen.sh
./configure
posted by とーふ at 20:00| マスターノード

2018年09月04日

ウォレットとマスターノードを別マシンにする理由

技術的には全く問題ないけど、管理の手間とセキュリティが問題のようだ。

1.管理面
マスターノードを立てるには、細かいウォレットでの操作が、いろいろと発生する。
マスターノードのプライベートキー作成とか、入金とか、masternode.conf ファイルの作成とか。
それを考えると、Windows PCで操作するのが楽。
マスターノードにするサーバーにはGUIは無い(必要がない)から、送金操作をコマンドラインで実行するのは慣れてないとキツイ。

2.セキュリティ
ウォレットの操作をするには、wallet.dat ファイルが必要。
一方、マスターノード自体は、wallet.dat ファイルは不要。
ということは、ネットに常時接続しているサーバには、ウォレット機能を持たせない方が、安全。

また、wallet.dat を暗号化しても、ウォレット操作するときにパスフレーズが必要なのだが、注意しないと、コマンド履歴が残って、パスフレーズが丸見えのケースもある。

ということで、chroot jail で分離するのは正解だった模様。
posted by とーふ at 20:00| マスターノード

2018年09月03日

Vultr のVPS構築中

やはり、メジャーどころも構築手順を作ったほうがいいかな。

ということで、構築中。



セキュリティ設定したところで、疲れた。

追加のIPアドレスを $2 で作れるので、同じコインで複数のマスターノード立ち上げるには、さくらよりも、安上がりかもしれない。
posted by とーふ at 20:00| マスターノード