特にモノアイと関係ないけど暗号通貨周りとかで気になったことを適当に書くブログ

FXか暗号通貨辺りの気になったことをたまに書きます。

VPNを使わずにシンガポールのIPアドレスから海外Webサイトにアクセスする(約500円/月・無料期間あり)

前書き

日本からのアクセスお断りという海外サイトがある時、まずはVPNの利用を検討すると思いますが「どこのVPN業者が信用できるの?」という問題にまずぶち当たると思います。

こういう記事を読んだりするとVPNのサービスを使うこと自体ためらってしまいます。
gigazine.net

「海外のVPNサービスを使うとマルウェア(悪意のあるプログラム)を仕込まれたり、通信内容を盗まれたりするんじゃないか」と漠然と不安に思う方も多いと思います。

そうなると「自分でVPNサーバーを立てて使おうぜ!」という話になってきますが、それもそこそこの知識と手間がかかります。

なので、この記事では開き直って、「IPアドレスさえ変わればいいんだから、適当な格安サーバーを借りて必要最低限の設定をしたら、それを踏み台にして使おうぜ!」という方針で行きます。
具体的にはSSHのダイレクトポートフォワーディングとSOCKSプロキシを使っていきます。

環境はWindows10、(もちろんMacで応用可、というかMacの方が設定簡単)でいきます。

コマンドプロンプトやviエディタを使う箇所が出てくるので、基本的な使い方が分からない方は適宜ググってください。親切な先達が沢山いらっしゃいます。Qiitaとかの記事がおススメ。

本文

1)サーバーを借りて準備する(VPSを契約)

過去記事で紹介したDigitalOceanを使っていきます(EC2使っている人はEC2の方が多分いい)。
踏み台のためのサーバーなので、月5ドルのプランで良いでしょう。
下記リンクから登録して貰えれば、60日間使える100ドル分のクレジットが貰えますので(2021年11月現在)、月50ドルくらいのプランで豪遊していただいても大丈夫です(2か月後にサーバーを削除するのを忘れないように)。私にも少し報酬が入るので投げ銭感覚で登録して貰えると泣いて喜びます。
m.do.co


mono-i-love.hatenablog.com

登録が終わったら、過去記事の以下の項目を実行してください。
Macを想定した記事ですが、Windowsでも基本は同じなので適宜読み替えてもらえればと思います。
また、後述しますが、サーバーのOSやリージョン(国)は目的に合わせて適宜変更します。

1-2)SSH鍵作成とDigitalOceanへの登録
1-3)DigitalOceanのDropletを作成
2-1)root権限での初期作業
2-2)root権限でSSHのセキュリティを設定する
3)新ユーザでログインしてセキュリティを設定


Windowsではコマンドプロンプトを使えばOKです。

f:id:mono_i_love:20211121192457p:plain
コマンドプロンプトの起動

Windowsでの秘密鍵生成などは、こちらの記事等が分かりやすいです。
qiita.com


過去記事ではUbuntu18.04.3でNYのサーバーでしたが、今回はUbuntu20.04でシンガポールを選択していきます。
(20211122付記)シンガポールからだとログインできなかったり何かしらの制限がある所も多いそうなので、その場合は別の国でもOKです。

f:id:mono_i_love:20211121191832p:plain
DigitalOcean Droplets選択画面 OSとスペック
f:id:mono_i_love:20211121192006p:plain
DigitalOcean Droplets選択画面 リージョン

2)SSHのダイレクトフォワーディングを使って、借りたサーバーに接続

前項でサーバーの準備が出来たら、コマンドプロンプトから-Dオプションを使ってSSH接続しましょう。

ssh -D 1080 -p <任意のport番号> <任意のユーザ名>@<IPアドレス>

※1080の部分は1080でも8888でも任意のもので構いませんが、分かりやすいように今回は1080としています。

f:id:mono_i_love:20211121193913p:plain
Windowsコマンドプロンプト SSHのダイレクトフォワードを使ってサーバーにログイン
  • fNオプションをつけてバックグランドで起動しても良いですが、ここでは分かりやすいようにコマンドプロンプトで開きっぱなしにしておきます。

※閉じるときはexitコマンドを入力して閉じてください(入力後もしばらく応答が無ければCtrl + Cで閉じる)。

3)Windows10 or Macのプロキシを設定する

では、この1080のポートを経由してWebサイトに繋げるようプロキシを設定していきます。

実はここが結構な詰まりポイントでして…
SSHのダイレクトフォワードでSOCKSプロキシを使おうというのが今回の目的なんですが、Windows10だとHTTPプロキシの設定などと分けて設定するのが上手くできなくて手こずりました。
結果から書くと、下記のように設定して貰えれば大丈夫です。

f:id:mono_i_love:20211121194305p:plain
Windows10のスタートメニュー>歯車アイコンの「設定」>ネットワークとインターネット>プロキシ

・手動プロキシセットアップから、「プロキシサーバーを使う」をON
・アドレス欄に「http://socks=localhost」と入力
・ポートにダイレクトフォワードで設定したポート番号を入力。ここでは1080

ただ、ここで設定してもなぜか設定が元に戻ってしまう事が頻発したので、その時のためにコントロールパネルからインターネットオプションを開いてプロキシ設定する方法を併記しておきます。

f:id:mono_i_love:20211121194834p:plain
Windows10でコントロールパネルを起動
f:id:mono_i_love:20211121194908p:plain
コントロールパネル>ネットワークとインターネット>ネットワークと共有センター>インターネットオプション
f:id:mono_i_love:20211121195050p:plain
インターネットオプションからプロキシを設定する

なお、Macの場合は、設定 > ネットワーク > 詳細 > プロキシ で下記のように設定すればOKです。

f:id:mono_i_love:20211122231617j:plain
Mac OSでのSOCKSプロキシ設定

3)ブラウザから自分のIPアドレスが変わっている事を確認

自分のIPアドレスを確認できるWebサイト(https://myip.ms/https://www.ugtop.com/spill.shtmlなど)で確認する。

f:id:mono_i_love:20211121195836p:plain
自分のIPアドレスシンガポールが借りているサーバーと同じになっているか確認

4)おまけ(SSH用のconfigファイル)

コマンドプロンプトを開いた後に毎回ssh -D 1080だなんだを入れるのは面倒なので、Windows端末でのssh用にconfigを設定しておきます。
サーバーに接続するために公開鍵や秘密鍵を「c:\Users\XXXXX\.ssh」フォルダ等に保存していると思うので、同じフォルダにconfigという名前のファイルを作ります(拡張子不要)。

f:id:mono_i_love:20211121200603p:plain
SSHの公開鍵・秘密鍵が保存されている場所にconfigファイルを作る

ファイルの中身は以下のようにしてもらえればOKです。
ホスト名は任意のものを、他は設定した接続先のサーバーの情報を入力します。

#踏み台
Host <任意のホスト名>
  HostName <接続先サーバーのIPアドレス>
  Port <接続先のポート番号>
  User <接続先のユーザー名>
  DynamicForward 1080

秘密鍵を明示的に指定する場合は「IdentityFile <秘密鍵の保存場所(例えば~/.ssh/id_rsa)」の行も追加してください。

f:id:mono_i_love:20211121201743p:plain
configファイルの内容

以降はコマンドプロンプトで<任意のホスト名>でSSH接続すれば自動的にダイナミックフォワードを使ってくれます。

ssh <任意のホスト名>

上記の画像のconfig設定例であれば「ssh test」と入力すればOKです。


以上です。

国内仮想通貨取引所のビットコイン積立の手数料無料が実質嘘なのでFTXで実質手数料無料の自動積立をする話

FTXは日本人の新規アカウント開設を停止しました。2022年3月に国内取引所のLiquidを買収・移管し新規にFTX Japanとして営業しています。その際、Quant Zoneを利用できるのか・どうUSD入金が可能か・JPYで入金が可能か等は不明です…


====2022/6/23追記====
 FTX JPでもQuant Zone(クオンツゾーン)が利用可能になりました。USDの入出金は難しいようです。JPYは入出金OK。

前書き

国内大手のbitFlyerさんでもビットコインの積立サービスが始まりましたね。

ところが内容を読むと

積立手数料
無料*1

※1 「かんたん積立」は販売所同様、実質的に 0.1% ~ 6.0% の手数料を含んだ購入・売却価格をお客様に提示しております。販売所手数料の詳細はこちらをご覧ください。

積立手数料を無料と書いていますが、販売所価格で購入させられることになるので、実質的に0.1%〜6.0%の取引手数料がかかるようです。
積立サービスでそれはしんどい。
国内取引所をdisって海外取引所に誘導するような形になるので抵抗があったのですが、流石にこれはしんどいので海外の板取引で自動で買える方法の紹介をしていきます。

方法は香港を拠点にしたFTXという取引所でのQuant Zone(クオンツゾーン:プログラム知識がない人でも簡単に自動売買できる機能)を利用します。
これを使って売買手数料なし、板取引で指値買い、1口数ドル〜数万ドル、毎週/毎日/特定の曜日などの好きなタイミングで自動積立が可能になります。
本記事ではQuant Zoneでの自動積立のサンプルを公開していきます。

諸々分かっているぜという方はサンプルは記事の下の方にあるので、ガッツリ下にスクロールするか目次から飛んでください。

FTXを使っていない人向けの前置き

海外取引所ってやばそう…という方、はい。やばいです。ピンキリで自己責任の世界です。裁判沙汰になるとほとんどの人は手が出なくなるリスクがあると思います。
ヤバいなと思ったらすぐお金を抜く覚悟で使う必要があるので、その辺りに抵抗がある人は利用を控えてください。

しかしその中でも運営の身元がハッキリしていて、お金持ちで破産や夜逃げしなさそうな所を一社あげろと言われたら自分はFTXに一票入れます。
CEOがバイデン大統領にもガッツリ献金している(GoogleAmazonよりも高額の献金!)ので2021年時点ではまぁ大丈夫だと思います。
少なくともBitMEXのような日本人締め出しやCEOに令状とか規制でやられるとしたらBinanceのほうが先かなぁ…というのが個人的な印象。

2022/6/23追記:現在は日本在住の方はFTX Japanが利用できるようになりました(というかFTX JP側しか利用できなくなった)。

ブルームバーグの参考記事
www.bloomberg.co.jp


あと、基軸の通貨がUSDです。米ドル。この記事もUSDで積み立てる事を前提としています。
なので、どちらかというとアルトコインのトレードとかでUSDやUSDTを儲けた人がそれを原資にビットコインを積み立てる場合や、Funding RateやレンディングでUSD定期収入を得ている人がBTCを積み立てるというのに向いた記事です。

…よく考えたら既存のFTXユーザー向けの記事では。

FTXに登録

メールアドレスでの登録は即日、各種の機能をフルに使うにはKYCレベル2を推奨しますが、日本の免許証でKYC2まで登録可能です。
この場合、海外の取引所に自分の個人情報を預けるという意味をよく考えてから申請してください。
いやまぁ国内取引所でパスポート画像とか流出しちゃった可能性のある所もあるのでまぁアレなんですけど。

自分の場合、KYC2は申請翌日に通りました。2020年のまだ利用者が少なかった頃の話なので、今は数日かかると思います。
2週間以上連絡が無かったのでサポートにメールで督促したら使えるようになった、という話も聞いたのでご参考まで。

以下のリンクから登録すると手数料5%オフで使えるようになります。まぁこれ読んでいる人はもう使っているか、もっと良い条件のリンクを踏んでますね…
(※登録してくれた人が支払った手数料の25.00%がFTXから紹介した人に支払われるので、その辺りがモヤモヤする人は直接登録してください。広告費が浮いてFTXが喜びます。)

ftx.com
↑ FTX JPのサイトに飛びます


あとGoogle検索で開こうとするとたまに偽サイトが広告に出てくるのでクリックしないように注意してください!

サブアカウントの作成

FTXではサブアカウントという機能があって、自分の口座を細かく分別できます。わざわざメールアドレスを複数作って複数アカウント登録したりする必要がありません。
それぞれのサブアカウントは証拠金なども独立しており、どれか1つのサブアカウントがゼロカットされてもメインのアカウントや他のサブアカウントに影響が出ません。
そのため、メインアカウントからサブアカウントに少額入金してハイレバで遊ぶ人も多いと聞きます。
(極端にUSD残高がマイナスになったサブアカウントがあったりすると、全体で出金が制限されたりはします。)

今回はBTC積立専用のサブアカウントを作ります。
後述するQuant Zoneで何かしらミスがあってもメインのアカウントに影響がでないようにするためです。
人間、「0.01BTC買うつもりが0.1BTC買ってしまった」…みたいなミスもあるので念のためですね。
後は売買の履歴もサブアカウント毎に独立しているので、後々管理が楽というのもあります。

積立用サブアカウントの作成01:サブアカウント作成画面を開く
積立用サブアカウントの作成02:サブアカウント作成ボタンを押す
積立用サブアカウントの作成03:サブアカウント名(任意)を入力して作成ボタンを押す
積立用サブアカウントの作成04:メインアカウントから作成したサブアカウントに送金する。図は1000USD送金する場合の例
積立用サブアカウントの作成05:メインアカウントから作成したサブアカウントに移動する

売買手数料を安くする

2021年2月時点でFTXの売買手数料はMakerであれば0.02%です。
Makerなので、指値買い注文で買い板をだし、他の人がその買い板を食ってくれれば(≒成行で売り注文をぶつけてくれれば)0.02%という事です。
「リンクを踏むと手数料5%オフ」というのはここに効きます。0.02 × 95% = 0.019% になる感じです。成行ならTakerで0.07 × 95% = 0.0665%

FTX売買手数料

https://help.ftx.com/hc/en-us/articles/360024479432-Fee


国内の大手取引所は板取引の売買手数料が0.15%からの所もあるので0.02%で十分お安いですが、FTXの場合は同取引所が発行しているFTTトークンを25枚保有してステーキング(正確ではないですが、シンプルに言うと一定期間売買や送金できない状態にロックする事)するとそのMaker手数料もゼロになります。
「実質手数料無料」と表題で謳っていたのはこの点ですね。

FTT Stake画面

上記のようなステーキング用の画面が用意されているので、25FTTを購入してここでステーキングするとMaker手数料がゼロになります。
ただし、現在の相場は地合いが良く、FTTの知名度や人気も向上してきたのでFTTは高騰気味です。

FTT/USDの日足

現時点だと 15USD/FTT × 25FTT = 375 USD 程かかります。
手数料を無料にするために4万円近く支払うかは十分に検討をしてください。
積み立てのためだけであれば高い買い物になると思います。
ただし、積み立て以外でも頻繁にFTXを利用するのであれば十分検討の価値はあるでしょう(BTCのレバレッジ20倍取引で成行注文を多く使う、IEOに参加したい、等々)。

2021/2/20 追記:FTT/USD価格が高騰して30ドルを超えてしまいました…25FTTで割引を受けるためには8万円必要です…つらい

Quant Zoneについて

「プログラム知識がない人でも簡単に自動売買できる機能」と説明しましたが、その通りで簡単な計算式を入力して売買ルールを作っておくだけで最短15秒間隔で売買をしてくれます。
後述しますが、この15秒はかなり当てになりません。

Roughly 15 seconds, each rule is intended to check whether its trigger is true. If so, it is intended to execute its action.
https://help.ftx.com/hc/en-us/articles/360041683831-Quant-Zone-Rules-FAQ

今回はこの機能を使って、「板取引で指値買い」「1口数ドル〜数万ドル」「毎週/毎日/特定の曜日」で購入するためのサンプルを紹介します。

基本的には以下の2つのルールを作成して実行します。

2つ目の購入ルールは「毎週/毎日」の2種類紹介するので、ご自身の積み立てプランに合わせたものをコピペして改変してください。
では積み立て用のサブアカウントに移動しているのを確認してからQZの画面を開いてルールを作っていきましょう。

Quantz Zone画面を開く

Quant Zone(QZ)のサンプル

共通で使用する 「ビットコインの残高をチェックするルール」

1つ目のルールです。このルールは毎日指定した時刻にサブアカウントの口座の中にあるBTCの残高を記録します。
この記録した残高に基づいて当日にBTCを積み立てていきます。
ここでは日本時間午前9時頃に残高をチェックするルール「BTC残高チェック(日次)」を示します。(Rule Nameは自分が分かりやすい名前を付けてOKです。)

Trigger

まずは実行条件(Trigger)を設定していきます。
この条件を満たしていると最短15秒おきにルールを実行してくれるというわけです。

Ruleを作成する
ビットコインの残高をチェックするルール_01

↓コピペ用

hour == 0
Actions

条件を入力できたら続いて実行内容(Action)を入力します。ここではActionを2つ作ります。
1つ目はBTCの残高を記録するAction、2つ目は翌日までルールを実行しないように一時停止(Pause Rule)するActionです。
2つ目のActionがないと、最短15秒おきに延々とルールを実行し続けるので気をつけてください。

ビットコインの残高をチェックするルール_02

※上図のようにActionを2つ以上設定する場合は、「ADD ACTION」ボタンを押下してAcitonを増やします。
※Pause Ruleを「24Hours」や「1day」にすると毎日少しずつ実行時間が後ろにずれます。これはQZの実行タイミングがあくまで最短15秒おきのためです。30秒以上の間隔になる事もざらです。
(実行間隔はかなりばらつくため、ピッタリ24時間だと「9:00:00実行→翌日9:00:30実行→翌々日→9:01:02実行」のようにずれていきます。何かしらの障害で数分止まるケースも頻繁にあるので余裕を持った設計がおススメです。)

↓コピペ用

today_btc_balance
balance("BTC")

ルール作成が終わったら「SAVE AND RUN」で実行が開始されます。
(ルールは保存したいが実行したくない場合は「SAVE DRAFT」で下書き保存をしておきましょう。)

毎日10ドル積み立てる場合のサンプル

2つ目のルールです。ここでは日本時間正午12時以降に毎日BTCの指値買い注文をだす「BTC積み立て」ルールを示します。
正午にしている意味は特にありませんが、先に書いた通りQZの実行時間はずれやすいので、少なくとも1つ目のルールの実行時間から1時間以上は後にしておくとトラブルが少ないのでおススメです。

Trigger

まずはTriggerから。
時刻の指定と、USD残高の確認と、1つ目のルールで確認したBTC残高と・保有しているBTCの枚数の比較を条件として入力します。
具体的には「正午12時以降で、口座の残高が10USDより多く、朝に確認した時よりBTCの枚数が増えていない時(に買い注文を出す)」という条件です。

毎日10ドル積立ルール_01

↓コピペ用

hour >= 3
and balance("USD") > 10
and get_variable("today_btc_balance") + max(10/bid_price("BTC/USD"),0.0001) > balance("BTC")
Actions

続いてActionを。このルールではBTCの指値買い注文を出すActionの1つだけです。

毎日10ドル積立ルール_02

↓コピペ用

get_variable("today_btc_balance") + max(10/bid_price("BTC/USD"),0.0001) - balance("BTC")

→ max(10/bid_price("BTC/USD"),0.0001) とすることで、最低でも0.0001BTCを買い付けるというCondition(条件)にしています。
なので、BTC価格が10万ドルを超えてしまった場合は毎日0.0001BTCを買い付けるようになってしまいます…つらい

bid_price("BTC/USD")

Post Onlyなどの細かい部分は画像を参考にしてください。

1つ目のルールと2つ目のルールを組み合わせた実行例です。

毎日10ドル積立ルール_実行結果

BTCの呼び値が0.0001BTCなので7ドルくらいしか積み立てできていないですね…
こういう場合は1回ごとに積み立てる金額を増やすしかないので、ちゃんとドルコスト平均法したい方は額を増やすか、頻度を下げて毎週100ドル積立などを検討してください。

また、Order TypeLimit OrderからMarket Orderに変更すれば指値注文ではなく、成行注文に変更可能です(Post Onlyも外しておく)。
手数料を多少払っても(Max: 0.07%)指定した時間に購入したい場合はこちらがおススメです。うまくアレンジしてください。
時刻を指定する「hour >= 3」 「hour == 3」 「hour >= 3 and hour <= 6」 などに限定して、意図しない時間帯に動かないよう安全を図るのも良いと思います。
このあたりを個人の裁量で決めれるのがQZで自動積立する場合の魅力の1つです。

毎週月曜日に100ドル積み立てる場合のサンプル

こちらは2つ目の「BTC積み立て」ルールとほぼ同じです。上で作った2つ目のルールのTriggerとActionを以下のように書き換えればOKです。

Trigger

↓コピペ用(conditionにday_of_weekの設定を追加し、10ドルの部分を100ドルに書き換える)

day_of_week() == 0
and hour >= 3
and balance("USD") > 100
and get_variable("today_btc_balance") + max(100/bid_price("BTC/USD"),0.0001) > balance("BTC")

※day_of_week() : UTC day of the week as an integer, where Monday is 0 and Sunday is 6UTC day of the week as an integer, where Monday is 0 and Sunday is 6

平たく言うと月曜日は0、火曜日は1、…日曜日だと6の値を返します。
day_of_week() == 0 なら「月曜日の時」という条件になりますが、UTC基準なので日本時間だと「月曜日午前9時から火曜日午前9時までの間」という条件になります。
なので、上記のConditionだと
 ・日本時間の月曜日午前9時~火曜日午前9時の間、かつ
 ・日本時間正午12時以降、かつ
 ・USD残高が100より多い、かつ
 ・今日の朝チェックしたBTC残高から100ドル分のBTCが増えていない時
という意味になります。

Actions

↓コピペ用(order_sizeの10ドルの部分を100ドルに書き換えるだけ)

get_variable("today_btc_balance") + max(100/bid_price("BTC/USD"),0.0001) - balance("BTC")


このようにQZの自動積立はアレンジがかなり効きます。
毎週月・水・金に買い付ける、日足更新確定前に毎日買い付ける、指値ではなく成行で買い付ける…などなど戦略に合わせて独自のルールをお使いください。
みんなが同じルールで一斉にやりだすと…こう…あれなので…

また、ルールを読めば分かっていただける通り、このルールだとサブアカウント口座内のBTCを他所に送ったりするとガンガンBTCを買うので気をつけてください。
その場合は、2つ目の指値買いする方のルールを止めておく必要があります(再稼働させる場合は翌朝9時以降にONにすればOK)。



末筆ですが、書くまでもなくこれらは自己責任で行う必要があります。
Ruleの書き間違い等でQZが暴走したり、それによって損失を被る可能性は十分にあるので気をつけてください……はい、私も結構暴走させて冷や汗を流しながら使っています…

この辺の諸々のリスクを背負ってくれるならそれなりに手数料を払っても国内取引所で良いかな、と判断されるならそれはそれでアリだと思います。
というか、この記事を読んでよく分からんなと感じたら国内取引所を使った方が良いです。

以上です。

GoogleスプレッドシートでSUM関数の結果が0になるので対処した話

自分用の備忘。Google検索で引っかかって、ここにたどり着いた人の役に立てば嬉しいです。

事象

確定申告用に仮想通貨取引所から履歴を取得してGoogleスプレッドシートで計算していたらSUM関数の結果が0になった。

ググっても「表示形式を数字にすればよいのでは?」という役に立たないアドバイスしかなかったので対処する。

f:id:mono_i_love:20200212203624j:plain
SUM関数の結果が0になる

原因

取引所の履歴は数字に単位(USD、JPY、BTC、XBT…etc)がつくのでそれを取り除くためにLEFT関数等を使っていた。

「0.00252869 XBT」というセルの「 XBT」4文字(半角スペース含む)を削るために
=(LEFT(A1,len(A1)-4)"
というような記述をしていた。

そのため内部的に数字ではなく文字列として扱われていた。
他にも似たような文字列を操作する関数等を使うと同じような事象が発生すると思われる。

”+”や"-"といった四則演算を噛ませば自動的に数字と判断して計算してくれるが、SUM関数だと文字列と判断され「0」として計算される。

画面上部のツールバーから表示形式を数字等に変えても表面的な書式しか変わらないので意味がない。

対応

VALUE関数を使って無理やり数字に変換する。普通に考えれば型変換すればいいじゃんという簡単な話だった。

f:id:mono_i_love:20200212202509j:plain
セルの中身

上図の右側Q列が失敗したケース。
左側P列がVALUE関数で数字に変換したケース。
それぞれのセルの中身をS列とT列に明記する。

数字が左寄せになっていたら文字列として扱われているケースを疑ってください。

参考用の公式ドキュメント

support.google.com



以上です。

Twitterに電話番号を預けると危険なので別の2要素認証に切り替える手順

前書き(何が危険なのか?)

詳しい内容はこちらのGigazineの翻訳記事を読むのが良さそうです。
gigazine.net

この脆弱性で具体的にどんな危険があるかというと

  1. 自分の電話番号を知っている人に自分のTwitterアカウントが特定される
  2. 知らない人に自分のTwitterアカウントと電話番号が特定される

などが思い当たります。
要は「知り合いに裏アカがバレた」とか「自撮りをTwitterにアップしたら知らないおじさんから電話がかかってきた」みたいな事象が起きる可能性があるわけです。

この記事の対象と目的

iOSアプリでTwitterを使っている人向けに対処方法の手順を伝えることが目的です。
Android端末でもPCでもほぼ対処方法は同じなので参考になると思います。
なるべく広い層に届くように詳しくかつ平易に書きますが、「分かっている」層には回りくどい書き方になると思うので予め謝っておきます。

ていうか2要素認証(あるいは二段階認証、2FA)ってなに

IDとパスワードの組合せだけだとセキュリティ的によわよわなので、ID/PW以外にもう一つ認証の仕組みを使おうぜ、というのが2要素認証です。
Twitterでは一般的に携帯電話番号を登録して、その番号にSMS(ショートメッセージサービス)で使い捨てのログインコードを送信して入力させる2要素認証が使われていると思います。
下の画像みたいなの。

f:id:mono_i_love:20191225171139j:plain
Twitterで電話番号宛のSMSを使った2要素認証

今回は「Twitterに電話番号を登録するのやめよーぜ」という話なので、このSMSとは別の2要素認証に切り替える必要があります。
以下、手順を説明していきます。

手順

  1. 2要素認証用のアプリを端末に入れる(今回はGoogle Authenticatorを使います)
  2. Twitterの公式アプリから↑で入れた認証アプリで2要素認証用のワンタイム・パスコードが発行できるようにする
  3. Twitterの公式アプリで「認証アプリ」の2要素認証を設定する
  4. Google Authenticatorを入れた端末を紛失した時に備えてバックアップコードを控える
  5. 電話番号を削除する

では順を追って説明していきます。

2要素認証用のアプリを端末に入れる

お使いのスマートフォンGoogleの二段階認証アプリを入れます。
普段から手元にある端末が良いでしょう。
iPhone

Google Authenticator

Google Authenticator

  • Google LLC
  • ユーティリティ
  • 無料
apps.apple.com
Android
play.google.com

インストールに手間取ることは無いと思いますが、Googleの公式も掲載しておきます。
Google 認証システムのインストール - iPhone と iPad - Google アカウント ヘルプ

Twitterの公式アプリからGoogle Authenticatorで2要素認証用のワンタイム・パスコードが発行できるようにする

分かりやすく画像で順に追っていきます。

f:id:mono_i_love:20191225174201j:plain
Twitter公式アプリで左上のプロフィール画像から設定メニューを開く

f:id:mono_i_love:20191225174320j:plain
「設定とプライバシー」を開く

…モザイク要る?

f:id:mono_i_love:20191225174638j:plain
「アカウント」を開く

f:id:mono_i_love:20191225174753j:plain
「セキュリティ」を開く

f:id:mono_i_love:20191225175003j:plain
「2要素認証」を開く

f:id:mono_i_love:20191225175155j:plain
「認証アプリ」のスイッチをONにする

f:id:mono_i_love:20191225175426j:plain
認証アプリの登録画面で「始める」を押す

f:id:mono_i_love:20191225175333j:plain
現在使っているTwitterのパスワードを訊かれたら入力して「認証する」を押す

f:id:mono_i_love:20191225175639j:plain
「Link app now」を押す(多分翻訳が追いついていない…そのうち治ると思います)

f:id:mono_i_love:20191225175749j:plain
Google Authenticatorを開こうとするので「開く」

f:id:mono_i_love:20191225175832j:plain
Google Authenticatorが開かれ、自動的にワンタイムパスコードが追加される(Tiwtterアカウント毎)

Twitterの公式アプリで「認証アプリ」の2要素認証を設定する

上記の操作でAuthenticatorが開かれると自動的にTwitterアカウント用のワンタイム・パスコード追加されます。
ここに表示される6桁のワンタイム・パスコードをタップするとクリップボードにコピーされるのでTwitterの画面に戻って入力しましょう。

ちなみにワンタイム・パスコードは30秒おきに変化します(もちろんAuthenticatorアプリを閉じている時も)。
右下に表示される円グラフみたいなのが有効な残り時間を示しています。
有効時間が残り僅かになると数字が赤字になるので、そのときは慌てずに次の6桁の番号になるのを待ちましょう。

※このパスコードはTwitterアカウント毎に用意する必要があるので、複数アカウントを持っている方は同様の作業でアカウント毎に追加して下さい。

脱線しますが、仕組みを知りたい人はこちらをどうぞ。
sekika.github.io

f:id:mono_i_love:20191225175957j:plain
Twitter公式アプリに戻って先程のワンタイムパスコードを入力する

f:id:mono_i_love:20191225180112j:plain
時間内にパスコードを入力できれば成功。「OK」を押して戻る

Google Authenticatorを入れた端末を紛失した時に備えてバックアップコードを控える

上記で2要素認証の設定は完了ですが、例えばパスコードを表示するGoogle Authenticatorが入ったスマホを紛失した or 機種変したりすると詰みます。
そういったときに備えて「バックアップコード」をメモしておきましょう。

これは2要素認証が使えない時に使える1度限りの使い捨てのコードです。奥の手としてきちんと保管しておきましょう。

f:id:mono_i_love:20191225181003j:plain
「バックアップコード」を開く

f:id:mono_i_love:20191225181051j:plain
バックアップコードをメモやスクリーンショットを撮って控える

スクショを撮る、紙のメモを取る等々ご自分に合った方法で保管しておきましょう。
個人的にはこういったバックアップコード専用の小さいメモ帳を1つ用意して、財布や鍵を保管している引き出しや緊急時の持ち出し袋に入れておくのが良いと思います。
(家族に乗っ取られるケースも実際にあるので、その辺は上手いことやってください…)

電話番号を削除する

新しい2要素認証を用意して、バックアップコードも控えたら憂いなく電話番号を消しましょう。

f:id:mono_i_love:20191225180310j:plain
先程の「アカウント」の画面に戻り「電話番号」を押して削除する

f:id:mono_i_love:20191225180421j:plain
電話番号が消えて「追加する」という表記になっていることを確認する

f:id:mono_i_love:20191225180538j:plain
同じく先程の「アカウント」>「セキュリティ」>「2要素認証」と開き、ショートメールがOFF・認証アプリがONなのを確認する

作業内容は以上です。

これで今後IDとパスワードを入力してTwitterにログインする際は、Authenticatorに表示される6桁のワンタイム・パスコードの入力も求められるようになります。

補足(SIMスワップについて)

日本ではあまり話題になりませんが、海外では「SIMスワップ」「SIMスワッピング」(SIM Swapping Attacks)という携帯電話の番号を乗っ取るタイプの詐欺が盛んです。
暗号通貨クラスタ向けにアラタさんの記事を引用しておきますね。

SIMスワッピングを利用し、SNS乗取り、仮想通貨窃盗を行った米国男性2名を逮捕 | CRYPTO TIMES


したがって、電話番号とSMSによる2要素認証というのは今後「セキュリティ的に脆弱な認証」という認識が広まっていくのは明らかなので今のうちに慣れておきましょう。
最近になってようやくTwitterが対応しだしたのもその辺りが背景にあると思います。

Twitterが「アカウントセキュリティを強化するための2要素認証に電話番号の登録が不要になった」と、2019年11月22日(金)に発表しました。

gigazine.net

月500円の格安VPSでMT4を稼働させてFX自動売買する時の備忘録(DigitalOcean × Ubuntu18.04)

前書き

MT4を動かしていたWindows端末が天寿を全うしたので、これを機に安いレンタルサーバーやVPS(Virtual Private Server)環境で24時間EAを稼働させたいな…と思って構築しました。自分が次回構築する時用の備忘ですが、ご参考になれば幸いです。

f:id:mono_i_love:20191207130157j:plain
MT4構築環境
f:id:mono_i_love:20191207132347j:plain
こういう感じのことがしたい

※上図のようにMacユーザーの場合はTerminal、Windowsユーザーの場合はコマンドプロンプトを使える前提の記事です。

本文

1-1)DigitalOceanに登録

  • メールアカウントで登録

ではまず格安VPS会社に登録します。
下記の紹介リンクから登録してもらうと1ヶ月間50ドル(≒5400円)分無料で使えるのでお試ししたい方は活用してください。
50ドルだとだいたいメモリ8GBの環境を1ヶ月無料で使えます(2019年12月現在)。
私の方にもDigitalOceanから謝礼が出るので、この記事への投げ銭代わりに登録してもらえると泣いて喜びます。
m.do.co

登録は「Sign up with email」つまりメールアカウントが良いと思います。
Google連携やGitHub連携だとそちらのアカウントが凍結されたりした時困るし作り直すのが面倒なので。

f:id:mono_i_love:20191207132536j:plain
DigitalOceanのサインアップ

その後に確認メールが飛んで来るので登録作業を進めます。
この辺は指示通り進めれば大体わかると思うので省略させて下さい。
(プロジェクト名とかは適当で)

  • 支払い方法について(クレジットカード or PayPal

海外のVPS会社なので支払い周りに不安がある人もいるかも知れませんが、普通に国内のクレジットカード(VISA、MasterCard、American Express)が使えるので安心してください。
クレジットカード情報を直接渡したくない方は銀行口座(大体の銀行は行ける)やクレカと紐付けたPaypalあたりがお勧めです。
なにかと便利なので、Pyapalは1つ用意しておくといい感じです。
そういえば何とかMAXさんのサロンでPaypal払いした人がPaypalに返金依頼したら応じてくれた云々とかいう話があったな…

1-2)SSH鍵作成とDigitalOceanへの登録

自宅のPCからVPSに接続する際はSSHという規格で暗号通信します。その際の認証に

  • パスワード認証
  • 公開鍵認証

のいずれかを使うことになりますが、セキュリティと毎回パスワード入力する手間(+パスワード管理の手間)を考えれば後者一択です。
なので公開鍵認証をしてSSH接続するために公開鍵と秘密鍵を作成し、作成した公開鍵(.pubファイル)の方のみをDigitalOceanに登録します。
(正確には.pubファイル内に記載されている文字列を登録します。)

当然ですが、秘密鍵の方は絶対に他人に渡さないでください。
ざっくり書くと、公開鍵が錠前・秘密鍵が鍵そのものと認識しておけばとりあえずOKです。
錠前の方をDigitalOceanに預けて、鍵本体は自分でしっかり保管しておくイメージです。

f:id:mono_i_love:20191208153307j:plain
公開鍵と秘密鍵

基本はターミナル(Windowsならコマンドプロンプト)からコマンドを打って鍵を作成することになります。
すでに作成済みの方は登録だけで大丈夫です。

鍵の作成方法はこちらの記事が
qiita.com

作成した公開鍵のDigitalOcean登録方法はこちらの記事が大変参考になりました。ぜひ活用していいねを押してきて下さい。
qiita.com

1-3)DigitalOceanのDropletを作成

SSH鍵の作成(自PCのターミナル上)→作成した公開鍵の方をDigitalOceanに登録」が終わったらいよいよ仮想環境を構築していきます。

DigitalOceanでは仮想環境(つまりVPSインスタンス)をDropletと呼んでいます。
今回は1ヶ月5ドルで運用できるDropletを1つ作り、その中でMT4を稼働させたいと思います。

まずは画面右上の「Create」を押し、

f:id:mono_i_love:20191207140951j:plain
CreateDroplet

「Droplets」を選択します。

f:id:mono_i_love:20191207141135j:plain
Create選択メニュー

Create Droplets画面になるので構成を選んでいきましょう。
まずはUbuntuの64bit環境を選びます。今回は18.04.3を選択しました。バージョンによって使うコマンドが変わるケースがあるので留意して下さい。

f:id:mono_i_love:20191207141723j:plain
OSの選択
f:id:mono_i_love:20191207142115j:plain
OSのバージョン選択

次にメモリやCPUの構成を選びます。メモリ特化256GBじゃー!とかもできますが、おとなしくStandardのメモリ1GBの$5/mo、つまり月5ドルの一番安い環境を選びます。
構成は後からいくらでも変更できるので、容量やメモリに不足が出てきたら財布と相談して後々から足していきましょう。

f:id:mono_i_love:20191207140426j:plain
価格表

構成を選んだらどこの国のデータセンターを使うか選びます。
通信速度を考慮して日本に一番近いシンガポールでも良いのですが、障害時等のことを考えると機材と人員が豊富そうなお膝元のNYあたりが無難でしょう。
FXの約定速度を考慮するなら、ご利用予定のFX会社のサーバが一番近い所を選ぶのが良いと思います。

f:id:mono_i_love:20191207142611j:plain
リージョンの選択

認証方式はSSH keys、つまり先程登録した公開鍵での認証を選びます。
Eメールでワンタイムパスワードを送ってくれる方式もありますが、手間とセキュリティ的に非推奨です。
この後の作業もSSH keys前提で記述していきます。
(ちなみに秘密鍵をなくしてログインできなくなってしまった場合は、Webブラウザのコンソールからパスワードでログインしたりrootパスワードのリセット等いくらでも復旧方法があるので安心です)

f:id:mono_i_love:20191207142935j:plain
SSH鍵の登録

最後に作成するDropletの個数と生成する仮想環境のホスト名を決めます。
Dropletはもちろん1つで大丈夫です。
ホスト名は環境のスペックやリージョンがひと目で分かるデフォルトのものがついていますが好みで変えてOKです。

Add tagsとありますが、これは複数のDropletsを作成した際にわかりやすく識別するためのタグです。
後からもタグは付けられますので特に付ける必要はないでしょう。
(画面では「MT4」「Ubuntu」と付けています。)

f:id:mono_i_love:20191207143218j:plain
Dropletsの個数とホスト名とタグの設定

以上が終わったら最下部の「Create Droplet」を押せば仮想環境の構築が始まりますが、数分で終わります。

f:id:mono_i_love:20191207143842j:plain
Dropletの作成画面

作成が完了するとIPアドレスipv4)が表示されます。
以後はこのIPアドレスの仮想環境に対して作業をしていきます。
一応先述したとおりブラウザ上からコンソールを開いて操作は可能ですが、使いにくいので非常時以外は個人的にオススメできないです。

f:id:mono_i_love:20191207143939j:plain
Droplet作成完了

ここまでは引用しているQiitaの記事と大体おなじです。

2-1)root権限での初期作業

ログイン

では作成した仮想環境へ自宅のPCからターミナルで接続します。WinodowsユーザはコマンドプロンプトTeraterm辺りを使ってください。

「Tera Term」定番のターミナルエミュレーター - 窓の杜

先程Dropletを作成した時のIPアドレスに向かってroot権限で公開鍵認証を使ってログインします。

$ ssh root@<IPアドレス>

…念の為書いておきますが、例えばIPアドレスが「127.0.0.1」なら「ssh root@127.0.0.1」という感じで読み替えてください。
また、秘密鍵の保存場所を明確に指定してログインする場合は「$ ssh -i ~/.ssh/id_rsa root@<IPアドレス>」としてください。

最新の状態にアップデート

Ubuntuを最新の状態にして再起動をします。

# apt-get update
# apt-get dist-upgrade
# reboot

再起動が完了したら再びroot権限でログインします。

2-2)root権限でSSHのセキュリティを設定する

Port番号の変更(任意)

SSHのポート番号22は広く知られており、悪意のあるハッカーなどはこのポートへ攻撃を仕掛けてきます。
もちろん今作成したてのDropletはIPアドレスさえわかっていればインターネット上から誰でもアクセス可能な状態なので、結構な頻度で22に向けてアクセスされます。
なので、このSSHに割り当てられているポート番号をデフォルトの22から変えておきましょう。
(頻繁に使用するので自分が覚えやすいものが吉)

任意の数字でOKですが、WELL KNOWNポート番号の(0-1023)、登録済みポート番号(1024-49151)は他で使われる可能性があるので、空いている49152〜65535番で指定します。
参考:TCPやUDPにおけるポート番号の一覧 - Wikipedia

以下、viエディタでポート番号を書き換えてください。

# vi /etc/ssh/sshd_config
PasswordAuthentication no
Port <任意のポート番号>  → 22 以外にしておく

変更を保存したら、SSHを再起動させて変更を反映します。

# service ssh restart

成功していれば以下のコマンドで、任意のポート番号に変更できたか確認します。
# lsof -i:<任意のポート番号>
ファイアーウォール(ufw)の設定

続いてUbuntuのファイアーウォールを設定します。
先程設定したSSHのポート番号以外へのアクセスを弾くようにしましょう。

viエディタでSSH用のポート番号を先程指定したものに変更します。

vi /etc/ufw/applications.d/openssh-server
[OpenSSH]
title=Secure shell server, an rshd replacement
description=OpenSSH is a free implementation of the Secure Shell protocol.
ports=<任意のポート番号>/tcp

SSH接続を許すように設定し、ファイアーウォールを起動します。

許可する対象の一覧を確認
# ufw app list

SSHを許可するように設定
# ufw allow OpenSSH
※今後他のアプリ(mysqlとか)使うならそちらで必要なPort番号も許可しておく。後々に上手く通信できないトラブル原因の個人的No.1

ファイアーウォールを有効化
# ufw enable
ファイアーウォールの状態を確認
# ufw status
  →Status: activeになっていればOK
普段遣いのユーザを追加+sudo権限

今までroot権限で作業してきましたが、何でも可能なrootを普段から使うわけにはいかないので作業用のユーザを追加し、sudo権限を付けてあげます。
ユーザ名は任意のものでOKです。パスワードを設定するように求められるので控えておいて下さい(もちろんそれ以外の情報は特に設定する必要ないのでEnterキーで飛ばしてください)。
公開鍵認証を使うので普段パスワードを使用することはないと思いますが、sudoの際に求められたり、緊急時はこのパスワードでWebブラウザ上からDigitalOceanのコンソールでログインします。

# adduser <任意のユーザ名>
# usermod -aG sudo <任意のユーザ名>

3)新ユーザでログインしてセキュリティを設定

ログイン端末の公開鍵を設定

新しく作ったユーザでも先程生成した秘密鍵でログインできるように、公開鍵を登録します。

# su - <任意のユーザ名>
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
$ vi .ssh/authorized_keys # 公開鍵をコピペする(さっきDigitalOceanに登録したやつと同じ文字列
$ chmod 600 .ssh/authorized_keys

登録したら一度ログアウトして、新ユーザでもログインできるか確認しましょう。
ポート番号は先程変更したものを忘れずに指定します。

$ ssh  -p <任意のPort番号> <任意のユーザ名>@<IPアドレス>

秘密鍵の保存場所を明示する場合は「$ ssh -p <任意のPort番号> -i <秘密鍵の保存場所> <任意のユーザ名>@<IPアドレス>」

続いて、root権限で外部からSSHログインされるのを禁止するために該当箇所の設定を書き換えます。

$ sudo vi /etc/ssh/sshd_config
PermitRootLogin no

SSHの再起動をして変更を反映

$ sudo service ssh restart

root権限でログアウトできなくなった事を確認しましょう。
「$ ssh -p <任意のPort番号> root@<IPアドレス>」でログインしようとすると Permission deniedなどと表示されてログインできなくなっているはずです。

※DigitalOcean公式によると、2つ以上のファイアーウォールを使うことは非推奨なのでCloud Firewallsは使わないでおきます。

端末側でログインしやすいようにssh_configを準備(任意)

主にMacの場合です。(WindowsTeratermとかLogmeTTで上手いことやってね)
ssh -p <Port番号> <ユーザ名>@<IPアドレス> と毎回入力してログインするのは大変なので設定します。
こちらは仮想環境からログアウトして、自分の端末側で行います。

vi ~/.ssh/config
# 仮想環境のサーバ
Host <任意のホスト名>
  HostName <IPアドレス>
  Port <任意のポート番号>
  User <任意のユーザ名>
  IdentityFile <秘密鍵の保存場所(例えば~/.ssh/id_rsa)>

以後はssh <任意のホスト名>で仮想環境にログインしましょう。
参考:
.ssh/configファイルでSSH接続を管理する - Qiita

4)VNCサーバを仮想環境に導入

VNCをインストール

さて仮想環境の構築とセキュリティの設定がおわりましたが、仮想環境にはWindowsのような画面(いわゆるGUI)がまだありません。
そのためVNC(Virtual Network Computing)を導入してデスクトップ環境を構築する必要があります。

仮想環境に先程作成したユーザでログインし、Xfceデスクトップ環境をインストールします。

$ sudo apt install xfce4 xfce4-goodies

完了したら、次にTightVNC serverをインストールします。

$ sudo apt install tightvncserver

vncserverコマンドで初期設定を行います。この時、パスワードの作成と確認のための再入力を求められます。
自分のPC端末から仮想環境のデスクトップ画面に接続する際に必要になるものなので、必ずメモっておいてください。
先程のユーザ作成時のパスワードとは全く別モノです。
ちなみにこのパスワードは6〜8文字と非常に中途半端なものが求められます。8文字より多い場合は切り捨てられます。なんだこの仕様

$ vncserver

また、この後に閲覧専用のパスワードを作成するか訊かれますが、n(NO)と回答して大丈夫です。要りません。

Would you like to enter a view-only password (y/n)? n

設定ファイルを編集してvncserverを再起動

この時点でvncserverが起動し自動的にデスクトップ画面「:1」が作成されます。(「:2」「:3」…と複数の画面を作成することも可能)

この「:1」を終了し、設定を変更していきます。

$ vncserver -kill :1

設定ファイルを書き換える前にバックアップを取ります。

$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

viエディタで新規にファイルを作成して編集します。

$ vi ~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

作成した新規ファイルに実行権限を付与します。

$ sudo chmod +x ~/.vnc/xstartup

VNCサーバを再起動します。

$ vncserver

これで仮想環境のデスクトップ画面ができあがりました。

VNCデスクトップにローカル端末からSSHトンネルで接続できるようにする

では仮想環境のデスクトップにアクセスして…と行きたい所ですが、このVNCで使われている通信は暗号化がなされていません。
そのため安全に接続するためにSSHトンネル(ポートフォワーディング)を使ってやる必要があります。
ざっくり書くと、
自分のPC端末→(VNC通信)→ターミナル→(SSH通信)→仮想環境→(VNC接続)→VNCデスクトップ環境
という感じで通信を転送させます。
記事の最初の画像を見てもらった方が早いですね。

f:id:mono_i_love:20191207130157j:plain
MT4構築環境

次のコマンドを使用して、ターミナル経由で上記の「SSH」部分を構築します。

% ssh -p <任意のポート番号> -L 5901:127.0.0.1:5901 -C -N -l <任意のユーザ名> <IPアドレス>
※ターミナルは開きっぱなし。秘密鍵の保存場所(以下略

これでこのターミナルが開いている間は、ターミナル経由でSSH通信をしてVNCデスクトップ環境にアクセスできるようになります。
ちなみに5901はVNCの通信で使われるポート番号、127.0.0.1は自分のPC端末を指しています。
自分の端末で起動しているターミナルにポート番号5901で通信が来たら、外部の<IPアドレス>に<任意のポート番号>でSSH通信を転送するぞー、という意味ですね。ややこしい

~/.ssh/configに記載する場合(任意)

ちなみにこちらも自分の端末のssh_configを設定することで、入力を簡易化できます。
ただし、この場合はターミナルは開きっぱなしというか、そのまま仮想環境にログインしちゃいます。
以下の内容を追記すればOKです。

vi ~/.ssh/config
Host <任意のホスト名。ただし先程とは別名で>
HostName <IPアドレス>
Port <任意のポート番号>
User <任意のユーザ名>
IdentityFile <秘密鍵の保存場所(例えば~/.ssh/id_rsa)>
LocalForward 5901 127.0.0.1:5901
Compression yes
VNCデスクトップに接続

Macの場合はデフォルトの「画面共有.app」でアクセス可能です。
Finderを開き、上のバーから「移動」>「サーバへ接続」を選択します。(ショートカットキーは「⌘K」)

f:id:mono_i_love:20191208171640j:plain
サーバへ接続1

サーバアドレスに「vnc://localhost:5901」と入力して「接続」を押します。

f:id:mono_i_love:20191207164808j:plain
サーバへ接続2

上記の「4)VNCサーバを仮想環境に導入」で設定したパスワードを入力します。

f:id:mono_i_love:20191207165457j:plain
VNCデスクトップのパスワード入力画面

初回アクセス時にパネルの設定について尋ねられますが取り敢えずデフォルトでOKです。

f:id:mono_i_love:20191207165023j:plain
X desktop初回ログイン


Windowsの場合は、VNCクライアントが必要になります。
RealVNCかUltraVNCあたりで良いでしょう。
接続先のIPアドレスは仮想環境のIPアドレスではなく、上記のMacのように「localhost」もしくは「127.0.0.1」になることは留意してください。

Download VNC Viewer | VNC® Connect
「UltraVNC」PCリモート操作ソフト - 窓の杜

これでデスクトップ環境の構築は完了です。次はここでMT4を使えるようにしていきます。

5)UbuntuにWineを導入する

MT4はWIndows用のソフトなので、それをUbuntuの環境で起動できるようにWineを導入します。

$ sudo dpkg --add-architecture i386
$ wget -nc https://dl.winehq.org/wine-builds/winehq.key
$ sudo apt-key add winehq.key
$ sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
$ sudo apt update
$ sudo apt install --install-recommends winehq-stable

Ubuntuのバージョンによってリポジトリが違うので要注意。バージョンが違う場合は公式Wikiを参照して下さい。
Ubuntu - WineHQ Wiki

日本語が文字化けするのでwinetricksを使います。

$ sudo apt install -y winetricks
$ winetricks cjkfonts

※場合によってはwinetricks allfonts とした方が良いかも。

6)MT4をUbuntuに導入

MT4を入手

どこのFX会社から入手してもOKです。
大概のFX会社はデモ口座を登録すればDLできます。
今回はOANDA JAPANでダウンロードした「oanda4setup.exe」使います。

f:id:mono_i_love:20191207163421j:plain
Oanda JapanのMT4入手先

仮想環境にMT4のsetup.exeを送る

SFTP通信に対応しているソフトを使うのが良いでしょう。
Windowsの人なら「WinSCP」等、Macなら「Cyberduck」等を使えば良いと思います。

「WinSCP」SCP/SFTP/FTPS対応のFTPクライアント - 窓の杜
Cyberduck for Mac - 無料・ダウンロード

留意点としては、上述の手順でSSHのPort番号を変更・rootログインの禁止・公開鍵認証を設定しているので以下の点に気をつけてください。

  • Port番号を変更したものに設定する
  • 自分の端末内の秘密鍵格納先を設定する

具体的には下記の画像のようになると思います(※Cyberduckで、<任意のユーザ名>が「mt4」の場合)

f:id:mono_i_love:20191207163630j:plain
Cyberduckでファイルを送信する
f:id:mono_i_love:20191207170108j:plain
Cyberduckで仮想環境のフォルダにアクセスしている図

無事に仮想環境のフォルダにアクセスできたらsetup.exeファイルを仮想環境にアップロードします。

MT4をインストール

Windowsでインストールする時とほぼ同じです。
先程アップロードしたsetup.exeをダブルクリックして起動します。

f:id:mono_i_love:20191207164234j:plain
setup.exe実行時
f:id:mono_i_love:20191207164321j:plain
setup.exe実行時2
f:id:mono_i_love:20191207170650j:plain
MT4インストール完了
お疲れさまでした。これで環境構築は完了です。

備考

今回はDigitalOceanの一番安いプランで使い倒す内容ですが、仮想マシンの構成も任意のタイミングで自由に変えれて、かつ時間制の従量課金なので、MT4のバックテストする時だけメモリとCPUを追加する等々かなり応用が効きます。

他にもクラスタを組んだりドメインを設定したりロードバランサー付けたりデータベース組んだりバックアップを設定したり…etcとおよそサーバを立ててやりたいことは全部できますので、ちょっとしたWebサービスを作ったり、botを動かしたりするにも良好な環境なのでかなりオススメです。

m.do.co

仮想通貨でアルトコインを買ったまま放置して損している人も確定申告で納税義務があるぞという話

 

前置き

まず、下記の問題を読んでみて下さい。 

 

 

問.Aさんは2018/1/1に約158万円1ビットコイン(BTC)買いました。

同1/5に「調べてみたらリップル凄い、こないだ1XRPが200円から400円まで上がった。よーし全部リップルXRP)に変えよう」と思ってその1BTCを海外の取引所で6775XRPに変えました。

しかし、相場は大きく下落し、2018年11月22日現在のXRP/JPYは約48円になりました。

Aさんの6775XRP時価33万円ほどです。

Aさんは158万ー33万=125万円の損失を出した事になります。

Aさんは「価格は落ちてしまったが、リップルのファンダは素晴らしい。いずれまた400円を超す筈だ」と考えて手元の6775XRPをガチホする事にしました。

さて、このまま2018/12/31を迎えた場合、損失を出したAさんは確定申告をして2018年分の納税をする必要があるでしょうか?

 (なお、総平均法を使うものとする)

 

・・・

 

 

 

・・・

 

 

 

・・・

 

 

 

・・・

 

 

 

・・・

 

答え.あります(※国税庁Excelに従って申告する場合)

 

答えとその理由がわかっていた方はもうこの記事読む必要ないです。

ブラウザバックしていただいて大丈夫です。

 

 

 

え?損しているのに納税しなきゃいけないの?と思われた方へ。

 

2018年の年始、仮想通貨はバブル絶頂でした。

その時にビットコインを購入し、更にそのビットコインアルトコインイーサリアムリップル、etc)を購入された方も多いと思います。

 

そして2018年11月現在は相場が大きく下落しており、損切りできずアルトコインを塩漬けにしている人、いわゆるガチホをされている方もいらっしゃるはずです。

 

将来また上がるかも?と期待して取引所やウォレットに置きっぱなしにしていませんか。大きく損失を出してしまったから、自分は税金関係ないやと思っていませんか。

 

・・・残念ながら、上記の例のように納税が必要なケースがあります。

本記事は上記の内容に思い当たる人向けに書いています。

 

 

サンプルの取引を整理

では、上記で示したサンプルの取引内容を整理してみましょう。

(レートはinvesting.comを参照しています。@:単価)

 

①2018/1/1:BTC/JPYペア 1BTC@1,587,760円 購入

②2018/1/5:XRP/BTCペア 6557XRP@0.0001476BTC 購入

(1/5のレートで計算すると、6557XRP=1BTC=1,819,531円)

 

この2つの取引に整理できます。

ポイントは②で、これは「仮想通貨同士の交換」にあたります。

国税庁的には、「BTCを売って得たお金でXRPを買った」のと同じ扱いになります。

 

1/5のXRP単価は 0.0001476BTC × 1,819,531円=268円 なので

 

1BTC買った(@158万円)1BTC売った(@181万円)6557XRP買った(@268円)

 

と解釈できます。

 

この流れの「1BTC売った(@181万円)」時に

「おぅ、ワレ23万円の利益出してるやんけ。20万円以上の雑所得だから確定申告して税金払えや」

国税庁は仰っています。

 

ちなみに仮想通貨同士の交換ではなく、仮想通貨で決済した場合も同じ扱いになります。(例:モナコインでコーヒーを買った、飲食店でNEMを使って決済した…etc)

 

国税庁Excelにサンプル内容を記帳

では、実際に国税庁が公開した仮想通貨の計算用Excelに記帳してみましょう。

(手数料や経費は省略します。)

 

「仮想通貨関係FAQ」の公表について|国税庁

 

Excelは仮想通貨の種類ごとに分類する必要があるので、まずはビットコインの分です。(摘要は分かりやすい表現にしました)

f:id:mono_i_love:20181123080052p:plain

上記のように仮想通貨の売買内容を記帳します。

円でBTCを買った分は「2.年間取引報告書に関する事項」、BTCでXRPを買った分は仮想通貨同士の交換なので「3.上記2以外の取引に関する事項」に書きます。

去年買った仮想通貨が残っている人は「4.仮想通貨の売却原価の計算」に残高を記入します。

 

するとExcelが自動で売却価額・売却原価・所得金額を計算してくれます。

ここでは231,771円の所得があったと示されます。

 

f:id:mono_i_love:20181123080528p:plain

 

リップルの分も別のシートに記帳してみましょう。

f:id:mono_i_love:20181123081053p:plain

 

こちらは、BTCでXRPを買った分だけ記帳します。

当然買っただけなので、所得金額は0のままです。

 

f:id:mono_i_love:20181123081129p:plain

 

合計すると、231,771円0円 = 231,771円の所得です。

 確定申告は20万円以上の雑所得があった場合に申告義務が発生するので、今回のケースでは確定申告が必要となります。

 

税率は累進で5%~45%。他の所得(例えば給与所得等)と合算した額に応じて決まります(いわゆる総合課税)。

一般的なサラリーマンの方なら20~30%は余裕で持っていかれるかと。

更に、ここへ住民税の10%や復興特別所得税(原則としてその年分の基準所得税額の2.1%)が追加されます。

No.2260 所得税の税率|所得税|国税庁

 

じゃぁ、どうすんの

損失を確定して下さい。

 

サンプルの例で言えば、保有している6775XRPを他の通貨に変えたり、1度日本円にします。

Aさんの様に真剣にXRPの将来に期待をして保有し続けるなら、再度XRPを買い直すのも良いです。

その場合、次のようになります。

 

f:id:mono_i_love:20181123082954p:plain

 

サンプルのExcelには、bitbank.ccの取引所でXRPを一度日本円に変えてから同値でXRPを買い直したことを想定して記帳しました。

 

そうすると、一度XRPを売却して損失を確定した事になるので、所得金額は以下のように-744,415円となります。

 

f:id:mono_i_love:20181123083206p:plain

 

これで所得金額の合計は、231,771円ビットコイン)ー 744,415円リップル)= -512,644円

 

晴れて収支マイナスになったので、確定申告の必要はなくなりました。

 

手元に残るのは同じ6775XRPですが、損失を確定するかしないかだけで、確定申告義務が発生するか否かが大きく変わります。

 

 

補足:損失を確定し過ぎるのも良くない

というのも、株やFXと違って、仮想通貨で出た損失は翌年に繰り越せません。

例えば株なら

 

  •  2017年 -50万円
  •  2018年 +40万円 → 前年の損失を繰り越して40万ー50万=-10万円なので納税不要

という事が出来ますが、仮想通貨では出来ません。

 

今年はもう利益でなさそうだなと思ったら翌年の頭に損失を確定して、その後に出る利益(出るとは限らないが…)と相殺させた方が節税になります。

 

なので、12月になったら納税額を試算し、所得金額をプラマイゼロになるよう調整するのが良さそうです。

 

 

以上、税理士でもなんでもない個人のメモ書きみたいな内容なので、あくまで参考程度にしていただければ幸いです。

 

ていうか間違っていたらTwitterで教えて下さい。お願いします、なんでもしま…

 

国内の仮想通貨取引所まとめ(2017年9月時点)

この記事の目的

2017年5月頃にまとめ記事を書きましたが、仮想通貨の世界は日進月歩、取引所も切磋琢磨しており、大分記事の情報が古くなってきました。

なので、更新版を書こうと思います。

 

前回の記事で「投げ銭代わりにバナーから取引所登録してくれー」と書いたら、結構登録してくれた方がいらっしゃったので、その還元の意味も込めています。

 

mono-i-love.hatenablog.com

まとめ

いきなり結論から行きます。

 

赤字:一番良い感じの所

取引所

資本金

BTC現物取引高2017年8月

取扱暗号通貨数

BTC売買手数料

アフィリエイト単価

BTC送金速度

BTC送金手数料

日本円出金手数料

盗難補償

bitFlyer

41億238万円

409,928

5

0.01〜0.15%

最大10,000円

普通

0.0005BTC以上選択可

(≒230円〜)

216〜756円

10万円〜500万円

但し、不正な日本円出金のみ

Coincheck

9,200万円

1,115,086

13

0.00%

最大10,000円

(金額相当の

BTC等)

普通

0.001BTC

(≒460円)

→0.0005BTCに引き下げ(2017/9/20)

400円

1件の支払いにつき最大100万円

Zaif

8億3,013万円

136,173

12(トークン含む)

-0.01%

最大2,850円

早め

0.0001BTC以上選択可

(≒46円〜)

350〜756円

なし

QUOINEX

20億円

138,286

3

0%

なし

極端に遅い

無料

500円+銀行手数料

なし

 

え、レバレッジの比較が載っていない?火傷するぞ…

仮想通貨はにわか、暗号通貨だろm9(^Д^)プギャーと言ってくれる位に界隈に詳しい方なら、この表を見て大凡の事は分かると思いますので、もうブラウザバックして頂いて大丈夫です。

 

以下、この表の説明を詳しく述べていきます。

 

1)資本金

ここは変わらずです。

SBI系列が出資している事もあってbitFlyerがダントツで安定です。

 

2)BTC現物取引高(2017年9月)

どれだけその取引所で取引が活発に行われているか、どの位の人が参加しているかの目安になります。

また、出来高が少ないと値が飛びやすく、思った価格で売買することが困難です。

 

下記のグラフの面グラフ部分に注目して下さい。

f:id:mono_i_love:20170914200232j:plain

赤い面のCoincheckが大きく出来高を伸ばし、他の取引所を圧倒している事がよく分かります。

前回の記事ではbitFlyer(青の面グラフ)が一位でしたが、それを大きく突き放しています。

 

bitFlyerビットコイン出来高で国内最大…

f:id:mono_i_love:20170924061127j:plain

…既にそれは過去のものになりました。 

 

 

現在、USD建て取引量世界トップがBitfinexで、およそ24h出来高が50,000BTC(≒200億円)に対し、Coincheckがおよそ30,000〜50,000BTC弱です。

この点、出来高において、Coincheckが世界有数の仮想通貨取引所になったと言って良いでしょう。

 

bitFlyer FXの出来高を足せばbfがトップになりますが、現物とリンクしていないため、ここでは考慮しません。あれマネーゲームですから…

 

更に、昨今の中国取引所閉鎖の報道が話題ですが、そんな中でいち早くCoincheckが中国語対応し、 中国からのユーザーの受け皿になりつつあります。

今後も出来高の増加が見込めそうです。

 

 

f:id:mono_i_love:20170924063416p:plain

 

トレードにおいて、出来高 ≒ 板の厚さ は重要な要素です。火傷したことのある方(株クラスタは新興株、FXクラスタはマイナーな通貨、暗号通貨クラスタは草コイン)には実感頂けると思います。

 

3)取引暗号通貨数(と スプレッド)

 BTC、ETH、ETC、LTC、BCH

 

 BTC、ETH、ETC、LSK、FCT、XMR、REP、XRP、ZEC、XEM、LTC、DASH、BCH

 ※以前は送金出来ないものもありましたが、改善した模様。開発お疲れ様です!

 

 BTC、MONAXEM、BCH

 トークン:ZAIFXCP、BCY、SJCX、FSCC、PEPECASH、CICC、NCXC

 

  • QUOINEX

 BTC、BCH、ETH

 

ここはCoincheckの圧勝です。但し、手数料がお高いのは変わらず。

およそ3%〜5%程取られています。

海外大手のBitfinexでは0〜0.2%なので、これは暴利と言って良いかと。

f:id:mono_i_love:20170924042544j:plain

 

なお、上記画像では、moyashi (@hitoriblog)さんのUserScript「CCSpreadVisualizer」を使用しています。

hitoriblog.com

f:id:mono_i_love:20170924060932j:plain

 

Tampermonkeyを使ったUserScriptの導入方法は過去記事にも書いたので、必要な方は参照してみて下さい。

 

mono-i-love.hatenablog.com

 

最後の導入のところで、スクリプトをコピペする必要がありますが、基本は同じです。

 

f:id:mono_i_love:20170924044303j:plain

 

f:id:mono_i_love:20170924044313j:plain

 

f:id:mono_i_love:20170924044321j:plain

 

f:id:mono_i_love:20170924044523j:plain

 

4)BTC売買手数料

以下の内容で変化なし。

 

bitFlyer→Lightning現物は、取引高に応じて手数料値引き。下は10万円未満、上は5億円以上。普通の人は0.1%位に落ち着くと思います。

Coincheck無料

Zaif手数料マイナス。取引すると逆にお金が貰える。身銭を切ってでも出来高増やしたいんや

QUOINEX→無料

 

5)アフィリエイト単価

bitFlyerが値上げに踏み切りました。Coincheckと同額の最大1万円です。

TVCM等で結構宣伝していたのですが、出来高を見る限り、高額アフィリエイトで誘引したCoincheckが広報で勝利したのは火を見るより明らかです。

 

 これは、

 TVを見る層 → ビットコイン怪しい、怖い

 アフィリエイトリンクを踏む層 → 仮想通貨で一攫千金じゃーッ!

 という事なのでしょう。(UIが使い易いとかも要素ではあると思いますけど)

 

それを踏まえた上で、bitFlyerCoincheckに対抗してアフィ報酬を引き上げたのは想像に難くありません。

ただ、bitFlyer側はアフィに審査があり、支払いも日本円です。(Coincheckは無審査、報酬は任意の仮想通貨建て)

 

今後もCoincheck推しの薄っぺらい記事の氾濫は続くでしょう。

f:id:mono_i_love:20170924060621j:plain

 

 追記)日本仮想通貨交換業協会(JVCEA )の自主規制の意向(具体的には「勧誘及び広告等に関する規則」あたり )を受けて、「bitFlyer アフィリエイトプログラム」は2018年11月30 日(金)をもって提供を終了したようです。

6)BTC送金速度

私の体感ですが、現在はほぼ差がなくなっている気がします。

全体のトランザクションの混み次第、という所でしょうか。

ただ、Zaifの着金トラブルがたまにTwitter上で目に付くので要注意です。

 

7)BTC送金手数料

BCH分裂後の高騰時、2017/8/23にCoincheckが送金手数料を2倍に値上げしました。

 0.0005BTC → 0.001BTC

当時の時価で、およそ460円です(1BTC≒460,000円)。

界隈で相当ブーイングが上がったのは記憶に新しいです。

 

f:id:mono_i_love:20170924060141j:plain

 

 漸く先日2017/9/20に元の手数料に戻しましたが、これで「高騰したりトランザクションが混むとCoincheckは値上げする」という前例が出来たので、結構なマイナスイメージを植え付けた印象です。

 

 Coincheckにかぎらず、各社早めにSegwit対応して頂きたい所です。

 

8)日本円出金手数料

各社変わらず。今後も大きく変わることは無いと思われます。

 

9)盗難補償

ここが一番の大きな変化があった場所です。

bitFlyerCoincheckが、不正ログインで盗難被害に遭った場合、損失を一定額のみ補償するサービスを開始しました。

 

bitflyer.jp

 

corporate.coincheck.com

 

詳細は省きますが、要点をまとめておきます。

 

bitFlyer

「二段階認証登録しているユーザのみ」

 →二段階認証していない人は対象外

 

「不正に日本円で出金された場合の補償金支払いサービスを提供」

 →下手人が仮想通貨に変えて他のウォレットに送った場合は対象外。

 →犯人はほぼ確実に仮想通貨に変えて出金すると考えられるので、「クソの役にも立たねー」と界隈で散々叩かれました。私もそう思います。

 違うんです。そうじゃないんですよ、bitFlyerさん…

f:id:mono_i_love:20170924055700j:plain

 

「預かり資産の合計が円換算にて 100 万円を超える場合、補償額は500万が上限。それ以外は10万円が上限」

 →500万円相当以上は取引所に保管しないように。また、90万円預けていて全額盗られても10万円しか補償されません。

 

「 期間内の補てんは 1 ユーザーにつき 1 年あたり1 事故まで。1 回の不正な日本円出金を 1 事故とみなす」

 →犯人が分散して出金したら泣き寝入りするしかないです。まぁ、仮想通貨で複数のウォレットに出金すると思うけど。

 

Coincheck

「二段階認証登録しているユーザのみ」

 →bitFlyerと同様。二段階認証しない人間に人権はない模様。無慈悲。

 

「不正ログインよる損失補償」

 →仮想通貨で出金されてしまった場合も対応してくれる模様。

 

「1回の請求で最大100万円」

 →「1回の請求」の定義がよく分かりません。取り敢えず、100万円以上は取引所に置かないほうが良さそう。

 

 

まとめると「あんまり当てにならないけど、Coincheckで少額の方なら恩恵受けれそう」というのが正直な所。

無いよりは全然良いですね。

 

まとめ(2回目)

総合すると、Coincheckがセキュリティやサービスに力を入れてbitFlyerを追い抜き始めた」と言った所でしょうか。

なんか、アフィリエイトのバナーも「仮想通貨女子歓迎!」といった感じでライトな層向けに力を入れていて勢いがあります。

 

(以下、アフィリエイトリンクなので、アレルギーがある人は踏まないよう気をつけて下さい。

「この記事参考になったから投げ銭してやるか」くらいでないと、最悪、命を落とします)

2018/11/30追記:各社消しました。 

 

 

 

==========================================================

2018/1/27追記:

2018年1月27日、CoincheckからXEMが盗難される事象が発生しました。

・マルチシグ使っていない

・コールドウォレットに保管していない

 ちょっと今の段階でここのアフィリエイトのリンクを貼っているのは、あまりに無責任過ぎる気がするので、バナーは消します。

==========================================================

 

 

 

 最近COMSAで勢いのあるZaifさん…サーバー増強ほんま頼んます…

==========================================================

2018/4/26追記:

最近のZaifは目に余るので、補足。アフィリエイトのリンクを消す代わりに、金融庁へのリンク貼っておきますね

テックビューロ株式会社に対する行政処分:財務省近畿財務局

 

==========================================================

 

 え? Btcboxやbitbankは紹介しないのか?

スプレッドが異様に広かったり、BTC出来高が極端に少ないところを人に勧めるのはちょっと…

 

あと、Coincheckの仮想通貨貸出サービス再開も書きたかったのですが、金利とか考えると正直微妙なので辞めておきます。 

 

あ、「よつばと」は本当に面白いからオススメです。

仮想通貨で消耗した心を癒やして下さい。

 

 

 

以上です、それでは良い仮想通貨ライフを。