Cloudflare Access+Cloud9IDE構築

ハッキング騒ぎが続いていますので、期間限定(9/27(日)まで
有料部分を公開します。対策を考えている方はぜひ参考にしてください。
※Cloudflareの画面が変わってるページがあるため随時更新します。
Azure,GCP,ConoHa,さくらのVPSでCloud9を使いたい場合にこの構築方法で作ることができます。
現在はAWS Tokyoリージョンで普通にcloud9も使えるのでそのまま使うこともできます。
AWSのアカウントを2段階認証などにしておくことをおすすめします。

VPCをレンタルしてサーバーを動かしてる方で、セキュアにしたいなと
思う方向けの設定ガイドになります。
個人でも2段階認証を設定して使うことが出来ます。

Cloudflare Accessの使用料が月額5〜10ドル程度かかりますが、セキュアな環境を作りたい方におすすめです。
メールでのワンタイムパスワードログインが可能になります。
SSH接続はインバウンドではなくアウトバウンドからの通信になり、
よりセキュアになります。
Cloud9IDE構築、Python環境も同時に作成できます。
こちらはスクリプトをダウンロードできます。
※SSHに関しては、sshの鍵、メールアドレスワンタイムの2つが揃わないと接続できません。
※インバウンド通信設定がなければハッカーも入ることは出来ません。
※持ってるドメインを利用または取得が必要です。
※クライアントはMacで構築しています。(Windowsはそのうち追加します。)

目次
・ドメインの取得
・Cloudflare アカウントの作成
・Cloudflare ドメインの登録
・Cloudflare 初期設定
ここから有料
・AWS EC2構築(ネットワーク、サーバ)
・Cloud9 IDE構築
・https化の手順
・Cloudflare Accessの設定
・Argo tunnelの設定
・EC2インスタンスのサイズ変更

用意するもの
・ドメイン
・VPC(今回はAWSで構築します。)

Cloudflareに移管できるドメインは以下
https://www.cloudflare.com/tld-policies/
※最低単価で維持できます。jpなどは移管できません。
※移管には移動するのに60日以上でないといけないなどあります。

レジストラでドメインの取得
・ムームードメイン
https://muumuu-domain.com/
・バリュードメイン
https://www.value-domain.com/
ドメインの取得がまだの方はなにか取得してください。
※説明ではバリュードメインを使っています。

Cloudflare でアカウントを作成
https://www.cloudflare.com/
https://dash.cloudflare.com/sign-up

アカウント作成を押して進めます。

画像1

言語を日本語に変更します。

画像2

サイトを追加します。

画像3

ドメイン名を入力してサイトを追加します。

画像4

プランの選択をします。Freeプランを選択します。

画像5

DNSレコードをレビューします。
※元のDNSレコードをコピーしてきたものです。必要に応じて書き換えてください。

画像6

問題なければ続行を押します。

画像7

レジストラでネームサーバーを書き換えます。
※1 バリュードメインの場合
※2 ネームサーバーの名前はドメインごとに変わります。下記は参考例。

画像8

バリュードメインにログインして、[ドメインの設定操作]を選択
※バリュードメインの場合

画像9

[ネームサーバー]を選択します。

画像10

書き換えたら保存します。

画像11

Cloudflareに戻って
[完了しました、ネームサーバーをチェックしてください]を押します。

画像12

クイックスタートガイドを始める。

画像13

[お客様のSSL/TLS 暗号化モード フル]
このまま保存します。

画像14

[常にHTTPSを使用]
443以外のポートで利用する場合などはそのままにしておいたほうが良いです。ただし、暗号化したい場合は有効にしてください。

画像15

[パフォーマンスを最適化]
好みで選択してください。

画像16

[Brotli]
Brotli圧縮を適用すると対応したブラウザからのロード時間が短縮されます。

画像17

終了です。

画像18

登録が終わりました。

画像19

Cloudflare Accessを有効にします。

画像20

Access Basicを選択します。

画像21

クレジットカードの情報を入力します。

画像22

Cloudflare Teams(現在は選択すると以下のように出てきます。)

スクリーンショット 2020-09-22 10.36.49

Cloudflare Accessをセットアップします。

画像23

[準備完了です]を押します。

画像24

[Accessポリシーを追加]します。

画像25

[Access ポリシーを作成]します。
[アプリケーション名] bot01
[サブドメイン] bot01
[セッション時間] 6Hours ※自分に合わせて選択してください。

ポリシー
[ポリシー名] bot01-allow ※同じ名前のものは作成できない。
[包含]メール
認証に使いたいメールアドレスを登録します。
[保存]で終了です。

画像26

登録されました。

画像27

Cloudflare Argo を有効にします。
※セキュアなsshで接続する場合に利用します。

画像28

アカウントでArgoを有効にします。

画像29

5ドル/月の請求が発生します。
※転送量によっては上限します。

画像99

Cloud9 IDE構築

ここではAWS VPCに構築します。
※初めての人向けのため、わかる方はインスタンスの構築から読んでください。

AWSアカウント作成
https://portal.aws.amazon.com/billing/signup#/start

画像99

連絡先を入力します。全部入力します。名前、住所は英語表記です。

画像99

クレジットカード情報を入力します。

画像99

本人確認

画像99

cサポートプランの選択

画像35

登録は終了です。コンソールにサインインします。

画像36

東京リージョンであることの確認します。

画像37

VPC サブネットの作成
デフォルトのVPCを削除します。
選択して、アクションから[VPCを削除]を選択

画像38

入力フォームに[delete default vpc]と入力して[削除]を押します。

画像39

VPCの作成をします。

画像40

名前: [my-vpc-01]
IPv4 CIDR ブロック: [10.0.0.0/16] ※192.168.0.0/16などでも良い。

画像41

インターネットゲートウェイの作成
左のインターネットゲートウェイを選択し、
[インターネットゲートウェイの作成]を選択します。

画像42

インターネットゲートウェイの作成

画像104

VPCにアタッチします。
アクションからVPCにアタッチを選択

画像44

使用可能なVPCから上記で作成したVPCを選択して
[インターネットゲートウェイのアタッチ]をします。

画像45

インターネットゲートウェイにアタッチされました。

画像104

サブネットの作成
左からサブネットを選択

画像47

VPC: [作成したものを選択]
アベイラビリティゾーン: [ap-northeast-1a] 
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
IPv4 CIDR ブロック: [10.0.1.0/24] ※利用したいブロックを入力。

画像48

サブネットが作成されました。

画像49

ルートテーブルの作成

画像50

ルートテーブルが作成されました。

画像51

サブネットの関連付け

画像52

サブネットの関連付けを編集

画像53

サブネットが追加されました。

画像54

インターネットゲートウェイを接続します。
ルートの編集から
送信先: [0.0.0.0/0] ※インターネット向けの通信
ターゲット: [igw-**] ※インターネットゲートウェイで作成したものを選択。

画像55

ルートの作成が出来ました。

画像56

上のサービスから[ec2]を検索して選択します。
※他のサービスもここから検索できます。

画像57

EC2 インスタンスの作成

画像58

ステップ1: Amazon マシンイメージ (AMI)の選択をします。
Amazon Linux 2 AMI (ami-0053d11f74e9e7f52)を選択します。

画像59

ステップ2: インスタンスタイプの選択
※無料枠であるt2.microを選択します。性能の良いインスタンスが欲しい場合はあとで変更もできます。
価格についてはこちらを参考にしてください。
https://aws.amazon.com/jp/ec2/pricing/on-demand/
東京リージョンの価格を確認してください。

画像60

ステップ3: インスタンスの詳細の設定
[ネットワーク]と[サブネット]を選択します。

画像61

ステップ4: ストレージの追加
サイズ: [30GB]
ボリュームタイプ: [マグネティック] ※IOPSを選択すると上限に達すると性能がでなくなるため選択はしません。お金がある場合は拡張もできます。

画像62

ステップ5: タグの追加
キー: [Name] 
値: [bot-1] 

画像63

ステップ6: セキュリティグループの設定
SSHでつなぐIPを絞ります。
マイIPを選択すれば自分のネットワークのIPを絞れます。

画像104

汎用(SSD)から起動する
[マグネティックを選択]

画像65

ステップ7: インスタンス作成の確認
問題なければ[起動]をします。

画像104

新しいキーペアを作成します。
作成して、キーペアをダウンロードして保存してください。

画像67

作成ステータス
[インスタンスの表示]を押してください。

画像68

左のメニューから[Elastic IP]を選択

画像69

[Elastic IP アドレスの割り当て]を押します。

画像70

Elastic IP アドレスの割り当て
※実行中のインスタンスのIPを固定することができます。
[割り当て]を押します。

画像71

作成されました。
[割り当てられたIP]を選択します。

画像72

[Elastic IP アドレスの関連付け]を選択します。

画像73

Elastic IPアドレスの関連付け
インスタンスから起動している[bot-1]を選択します。

画像74

関連付けされました。

画像104

ターミナルソフトをインストールします。
iterm2のインストールをします。
※インストールしない方は飛ばしてください。

Macの場合ターミナルで以下を実行します。
Launchpadからterminalを検索

install brew

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Warning: The Ruby Homebrew installer is now deprecated and has been rewritten in
Bash. Please migrate to the following command:
 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The Xcode Command Line Tools will be installed.

Press RETURN to continue or any other key to abort
==> Searching online for the Command Line Tools
==> /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
==> Installing Command Line Tools for Xcode-11.5
==> /usr/bin/sudo /usr/sbin/softwareupdate -i Command\ Line\ Tools\ for\ Xcode-11.5
Software Update Tool

Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode

brew install cask

==> Downloading https://github.com/cask/cask/archive/v0.8.4.tar.gz
Already downloaded: /Users/zephel01/Library/Caches/Homebrew/downloads/121a93f0ed3911e7b82f880ad29b6991ceaf1a446922fec310966262ebbc150b--cask-0.8.4.tar.gz
==> Reinstalling cask 
==> Caveats
Emacs Lisp files have been installed to:
 /usr/local/share/emacs/site-lisp/cask
==> Summary
🍺  /usr/local/Cellar/cask/0.8.4: 14 files, 169.6KB, built in 2 seconds

brew cask install iterm2
brew reinstall iterm2

zephel01:cloud9ide $ brew cask install iterm2
Warning: Cask 'iterm2' is already installed.

To re-install iterm2, run:
 brew reinstall iterm2
zephel01:cloud9ide $ brew reinstall iterm2
==> Downloading https://iterm2.com/downloads/stable/iTerm2-3_3_12.zip
Already downloaded: /Users/zephel01/Library/Caches/Homebrew/downloads/d660d36176976af9c510e8b8bf822887dd243be2f2c1d983fb4eca620bebc2c8--iTerm2-3_3_12.zip
==> Verifying SHA-256 checksum for Cask 'iterm2'.
==> Uninstalling Cask iterm2
==> Backing App 'iTerm.app' up to '/usr/local/Caskroom/iterm2/3.3.12/iTerm.app'.
==> Removing App '/Applications/iTerm.app'.
==> Purging files for version 3.3.12 of Cask iterm2
==> Installing Cask iterm2
==> Moving App 'iTerm.app' to '/Applications/iTerm.app'.
🍺  iterm2 was successfully installed!

Launchpadからitermを検索​

$ mkdir ~/.ssh
$ cp zephel01-key.pem ~/.ssh
$ chmod 600 zephel01-key.pem

sshでec2へ接続します。
fingerprint を付けます。[yes]と入力します。

$ cd ~
$ ssh -i .ssh/zephel01-key.pem ec2-user@18.177.195.108
The authenticity of host '18.177.195.108 (18.177.195.108)' can't be established.
ECDSA key fingerprint is SHA256:hXV56miOS9Uu7jyw9j7d0sU6VPUEaQ7ckxd2etHjvO4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '18.177.195.108' (ECDSA) to the list of known hosts.

sudo yum install git

$ sudo yum install git
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                   | 3.7 kB  00:00:00
amzn2extra-docker                                                            | 3.0 kB  00:00:00
(1/5): amzn2-core/2/x86_64/group_gz                                          | 2.5 kB  00:00:00
(2/5): amzn2-core/2/x86_64/updateinfo                                        | 253 kB  00:00:00
(3/5): amzn2extra-docker/2/x86_64/updateinfo                                 |   69 B  00:00:00
(4/5): amzn2extra-docker/2/x86_64/primary_db                                 |  68 kB  00:00:00
(5/5): amzn2-core/2/x86_64/primary_db                                        |  44 MB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ git.x86_64 0:2.23.3-1.amzn2.0.1 を インストール
--> 依存性の処理をしています: perl-Git = 2.23.3-1.amzn2.0.1 のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: git-core-doc = 2.23.3-1.amzn2.0.1 のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: git-core = 2.23.3-1.amzn2.0.1 のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: emacs-filesystem >= 25.3 のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: perl(Term::ReadKey) のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: perl(Git::I18N) のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: perl(Git) のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> 依存性の処理をしています: libsecret-1.so.0()(64bit) のパッケージ: git-2.23.3-1.amzn2.0.1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ emacs-filesystem.noarch 1:25.3-3.amzn2.0.1 を インストール
---> パッケージ git-core.x86_64 0:2.23.3-1.amzn2.0.1 を インストール
---> パッケージ git-core-doc.noarch 0:2.23.3-1.amzn2.0.1 を インストール
---> パッケージ libsecret.x86_64 0:0.18.5-2.amzn2.0.2 を インストール
---> パッケージ perl-Git.noarch 0:2.23.3-1.amzn2.0.1 を インストール
--> 依存性の処理をしています: perl(Error) のパッケージ: perl-Git-2.23.3-1.amzn2.0.1.noarch
---> パッケージ perl-TermReadKey.x86_64 0:2.30-20.amzn2.0.2 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ perl-Error.noarch 1:0.17020-2.amzn2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
Package                   アーキテクチャー
                                          バージョン                     リポジトリー         容量
====================================================================================================
インストール中:
git                       x86_64          2.23.3-1.amzn2.0.1             amzn2-core          135 k
依存性関連でのインストールをします:
emacs-filesystem          noarch          1:25.3-3.amzn2.0.1             amzn2-core           64 k
git-core                  x86_64          2.23.3-1.amzn2.0.1             amzn2-core          5.0 M
git-core-doc              noarch          2.23.3-1.amzn2.0.1             amzn2-core          2.4 M
libsecret                 x86_64          0.18.5-2.amzn2.0.2             amzn2-core          153 k
perl-Error                noarch          1:0.17020-2.amzn2              amzn2-core           32 k
perl-Git                  noarch          2.23.3-1.amzn2.0.1             amzn2-core           47 k
perl-TermReadKey          x86_64          2.30-20.amzn2.0.2              amzn2-core           31 k

トランザクションの要約
====================================================================================================
インストール  1 パッケージ (+7 個の依存関係のパッケージ)

総ダウンロード容量: 7.9 M
インストール容量: 41 M
Is this ok [y/d/N]: y
Downloading packages:
(1/8): git-2.23.3-1.amzn2.0.1.x86_64.rpm                                     | 135 kB  00:00:00
(2/8): emacs-filesystem-25.3-3.amzn2.0.1.noarch.rpm                          |  64 kB  00:00:00
(3/8): git-core-doc-2.23.3-1.amzn2.0.1.noarch.rpm                            | 2.4 MB  00:00:00
(4/8): git-core-2.23.3-1.amzn2.0.1.x86_64.rpm                                | 5.0 MB  00:00:00
(5/8): libsecret-0.18.5-2.amzn2.0.2.x86_64.rpm                               | 153 kB  00:00:00
(6/8): perl-Git-2.23.3-1.amzn2.0.1.noarch.rpm                                |  47 kB  00:00:00
(7/8): perl-Error-0.17020-2.amzn2.noarch.rpm                                 |  32 kB  00:00:00
(8/8): perl-TermReadKey-2.30-20.amzn2.0.2.x86_64.rpm                         |  31 kB  00:00:00
----------------------------------------------------------------------------------------------------
合計                                                                 29 MB/s | 7.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 インストール中          : git-core-2.23.3-1.amzn2.0.1.x86_64                                  1/8
 インストール中          : git-core-doc-2.23.3-1.amzn2.0.1.noarch                              2/8
 インストール中          : 1:perl-Error-0.17020-2.amzn2.noarch                                 3/8
 インストール中          : perl-TermReadKey-2.30-20.amzn2.0.2.x86_64                           4/8
 インストール中          : libsecret-0.18.5-2.amzn2.0.2.x86_64                                 5/8
 インストール中          : 1:emacs-filesystem-25.3-3.amzn2.0.1.noarch                          6/8
 インストール中          : perl-Git-2.23.3-1.amzn2.0.1.noarch                                  7/8
 インストール中          : git-2.23.3-1.amzn2.0.1.x86_64                                       8/8
 検証中                  : 1:emacs-filesystem-25.3-3.amzn2.0.1.noarch                          1/8
 検証中                  : git-2.23.3-1.amzn2.0.1.x86_64                                       2/8
 検証中                  : libsecret-0.18.5-2.amzn2.0.2.x86_64                                 3/8
 検証中                  : perl-TermReadKey-2.30-20.amzn2.0.2.x86_64                           4/8
 検証中                  : git-core-2.23.3-1.amzn2.0.1.x86_64                                  5/8
 検証中                  : 1:perl-Error-0.17020-2.amzn2.noarch                                 6/8
 検証中                  : perl-Git-2.23.3-1.amzn2.0.1.noarch                                  7/8
 検証中                  : git-core-doc-2.23.3-1.amzn2.0.1.noarch                              8/8

インストール:
 git.x86_64 0:2.23.3-1.amzn2.0.1

依存性関連をインストールしました:
 emacs-filesystem.noarch 1:25.3-3.amzn2.0.1          git-core.x86_64 0:2.23.3-1.amzn2.0.1
 git-core-doc.noarch 0:2.23.3-1.amzn2.0.1            libsecret.x86_64 0:0.18.5-2.amzn2.0.2
 perl-Error.noarch 1:0.17020-2.amzn2                 perl-Git.noarch 0:2.23.3-1.amzn2.0.1
 perl-TermReadKey.x86_64 0:2.30-20.amzn2.0.2

完了しました!

git clone https://github.com/zephel01/cloud9ide.git

$ git clone https://github.com/zephel01/cloud9ide.git
Cloning into 'cloud9ide'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 23 (delta 3), reused 22 (delta 2), pack-reused 0
Unpacking objects: 100% (23/23), done.

cloud9ideをインストールします。
cd cloud9ide  
vi cloud9core.sh

$ cd cloud9ide
$ vi cloud9ide

user:password の行を変更してください。
httpsで接続した場合のログイン用です。
置換する場合は以下
:s/置換前/置換後/g
:s/user/user01/g
:s/password/password01/g​

cloud9ideをインストールします。

$ ~/cloud9ide
$ ./cloud9core.sh

port を開けます。

80 Let's Encrypt用(変更時のみ0.0.0.0/0で開けないとうまく行かない)
22 ssh接続用(自分のGlobal IPのみ)
443 https接続用(自分のGlobal IPのみ)
※curl ifconfig.io, 確認くんでIPを調べてください

画像104

CloudflareでDNSを登録します。
IPv4 にElastic IPで取得したIPを入力します。
このとき、プロキシステータスの雲は灰色にしてください。

スクリーンショット 2020-09-09 0.49.16

ec2 コンソールで
サイト証明書を発行します。
sudo ~/.pyenv/shims/certbot certonly

$ sudo ~/.pyenv/shims/certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Obtain certificates using a DNS TXT record (if you are using Cloudflare for
DNS). (dns-cloudflare)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 2
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): メールアドレス

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A を入力

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y を入力
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): bot01.zephel.com ドメイン名を入力
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for bot01.zephel.com
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: hideki@zephel.com).

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/bot01.zephel.com/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/bot01.zephel.com/privkey.pem
  Your cert will expire on 2020-12-07. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. To non-interactively renew *all* of your certificates, run
  "certbot renew"
- Your account credentials have been saved in your Certbot
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Certbot so
  making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

- We were unable to subscribe you the EFF mailing list because your
  e-mail address appears to be invalid. You can try again later by
  visiting https://act.eff.org.

nginxの設定をします。
viの使い方
矢印キーで移動
i 挿入モード
:wq 保存
https://ja.wikipedia.org/wiki/Vim

$ cd /etc/nginx/conf.d/
$ vi nginx-ssl.conf

bot01.example.comとなっている部分を置換します。
:%s/置換前/置換後/g
:%s/example.com/zephel.com/g
%が付く場合はtext内の該当文字を置換します。
わからない場合は、直接編集しても構いません。

upstream bot {
 server 127.0.0.1:8080 fail_timeout=0;
}

server {
 listen 443 ssl;
 server_name bot01.zephel.com;
 ssl_certificate     /etc/letsencrypt/live/bot01.zephel.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/bot01.zephel.com/privkey.pem;

 #ssl_verify_client on;
 #ssl_client_certificate  /etc/nginx/clientcerts/client.crt;

 location / {
       proxy_redirect  off;

       proxy_set_header   Host              $host;
       proxy_set_header   X-Real-IP         $remote_addr;
       proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
       proxy_set_header   X-Forwarded-Proto $scheme;

       proxy_pass         http://bot;
 }
}

nginx の起動をします。

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

このままブラウザで
https://bot01.zephel.com を叩いてみましょう。

スクリーンショット 2020-09-09 2.54.55

Cloud9 installer -> Next

スクリーンショット 2020-09-22 10.02.35

エラーは出てしまいますが終了はしています。

スクリーンショット 2020-09-22 10.04.23

このままですと、IP制限とポップアップでのパスワードの認証のみです。
今回はCloudflareで接続したいので以下の設定を追加します。

[セキュリティグループを作成]を選択します。

スクリーンショット 2020-09-09 3.03.33

セキュリティグループ名を入力します。
セキュリティグループ名: Cloudflare-https
説明: Cloudflare-https
インバウンドルール
タイプ: HTTPS
ソース: カスタム 以下を追加します。
[IPv4]
173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/12,172.64.0.0/13,131.0.72.0/22

[IPv6]
2400:cb00::/32,2606:4700::/32,2803:f800::/32,2405:b500::/32,2405:8100::/32,2a06:98c0::/29,2c0f:f248::/32

https://www.cloudflare.com/ips/

スクリーンショット 2020-09-09 3.03.10

作成したものは以下のようになります。

画像76

セキュリティグループ bot-1 から該当を削除します。
HTTP,HTTPSを削除して[ルールを保存]します。
SSHのみを残します。

画像104

左のメニューからインスタンスに移動して、
[ネットワーキング] -> [セキュリティグループの変更]

スクリーンショット 2020-09-09 3.15.01

セキュリティグループの変更
[bot-1]と[Cloudflare-https]を選択して[セキュリティグループの割り当て]を押します。

スクリーンショット 2020-09-09 3.15.51

Cloudflare DNSでproxyをオンにします。
[プロキシ済み]にして保存します。

スクリーンショット 2020-09-09 3.17.39

※タイムラグが数分ある場合があるので少しおいてから接続してみてください。

URLで接続してみます。
https://bot01.zephel.com
認証画面が出ましたら登録したメールアドレスを入力します。

画像77

メールにワンタイムコードが書いてあります。

画像78

ワンタイムコードを入力します。

画像79

サイトに繋がりました。
ユーザーとパスワードを入力します。

画像80

Cloud9 IDEに接続できました。

画像81

おまけ

Cloudflare Argo Tunnelの設定

クライアント(Mac)のインストール

$ brew install cloudflare/cloudflare/cloudflared

or

$ curl https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-darwin-amd64.tgz | tar xzC /usr/local/bin

Windows,Mac,Linuxとパッケージはあります。
https://developers.cloudflare.com/argo-tunnel/downloads

以下はAWS ec2で設定を行います。

$ wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.tgz
--2020-09-08 18:33:03--  https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.tgz
bin.equinox.io (bin.equinox.io) をDNSに問いあわせています... 52.54.124.219, 52.73.16.193, 54.145.200.136, ...
bin.equinox.io (bin.equinox.io)|52.54.124.219|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 18290807 (17M) [application/octet-stream]
`cloudflared-stable-linux-amd64.tgz' に保存中

100%[=========================================================================================================================================>] 18,290,807  3.59MB/s 時間 5.8s

2020-09-08 18:33:09 (3.03 MB/s) - `cloudflared-stable-linux-amd64.tgz' へ保存完了 [18290807/18290807]

$ tar xvzf cloudflared-stable-linux-amd64.tgz
cloudflared

$ sudo mv cloudflared /usr/local/bin/
$ /usr/local/bin/cloudflared tunnel login
Please open the following URL and log in with your Cloudflare account:

https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.argotunnel.com%2F3dVEJIXkEDetEI90tGLK5Qrkir3yXFVRKahZvTDufWU%3D

Leave cloudflared running to download the cert automatically.

ここの
https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.argotunnel.com%2F3dVEJIXkEDetEI90tGLK5Qrkir3yXFVRKahZvTDufWU%3D
をブラウザに貼り付けます。

Argo Tunnel を認証する
ここではzephel.comを選択します。

画像104

[認証する]を押します。

スクリーンショット 2020-09-09 3.36.43

成功しました。

スクリーンショット 2020-09-09 3.36.58

成功しましたのでcert.pemがダウンロードされています。

INFO[2020-09-08T18:36:47Z] Waiting for login...
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/ec2-user/.cloudflared/cert.pem

cloudflareの起動設定を作成します。

$ sudo mkdir /etc/cloudflared
$ sudo cp ~/.cloudflared/cert.pem /etc/cloudflared

$ sudo vi /etc/cloudflared/config.yml
hostname: bot01ssh.zephel.com
url: ssh://localhost:22
logfile: /var/log/cloudflared.log
loglevel: info
proto-loglevel: info
pidfile: /var/run/cloudflared.pid

起動スクリプトをインストールします。

$ sudo /usr/local/bin/cloudflared service install
$ sudo systemctl enable cloudflared
$ sudo systemctl start cloudflared
$ sudo systemctl status cloudflared
● cloudflared.service - Argo Tunnel
  Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: disabled)
  Active: active (running) since 火 2020-09-08 18:42:17 UTC; 1s ago
Main PID: 19544 (cloudflared)
  CGroup: /system.slice/cloudflared.service
          └─19544 /usr/local/bin/cloudflared --config /etc/cloudflared/config.yml --origincert /etc/cloudflared/cert.pem --no-autoupdate

908 18:42:05 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:05Z] Version 2020.8.2
908 18:42:05 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:05Z] GOOS: linux, GOVersion: go1.14.7, GoArch: amd64
908 18:42:05 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:05Z] Environment variables map[config:/etc/cloudflared/config.yml host...
908 18:42:05 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:05Z] Starting metrics server on 127.0.0.1:38411/metrics
908 18:42:05 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:05Z] Proxying tunnel requests to http://127.0.0.1:36863
908 18:42:06 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:06Z] Connected to SIN
908 18:42:17 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:17Z] Each HA connection's tunnel IDs: map[0:966i2g8rv5iyp3ftndh...kr6tk0]
908 18:42:17 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:17Z] Route propagating, it may take up to 1 minute for your new...ctional
908 18:42:17 ip-10-0-1-237.ap-northeast-1.compute.internal systemd[1]: Started Argo Tunnel.
908 18:42:17 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:17Z] Connected to NRT
Hint: Some lines were ellipsized, use -l to show in full.

Cloudflare Accessで以下のルールを作成

スクリーンショット 2020-09-09 3.43.51

ルールが2個になりました。

スクリーンショット 2020-09-09 3.44.13

AWS EC2のセキュリティグループ bot-1のインバウンドを削除します。

画像104

インバウンドルールが無くなりました。
Cloudflare-https のルールのみ接続できるようになります。

画像104

~/.ssh/config を作成

Host bot01ssh
 HostName bot01ssh.zephel.com
 User ec2-user
 IdentityFile ~/.ssh/zephel01-key.pem
 ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

iterm やterminalで

$ ssh bot01ssh
A browser window should have opened at the following URL:

https://bot01ssh.zephel.com/cdn-cgi/access/cli?redirect_url=https%3A%2F%2Fbot01ssh.zephel.com%3Ftoken%3Dz29aEA5i74TE2B2o3YeA6R4b1CNps1z0eGcVj0Oj3FQ%253D&token=z29aEA5i74TE2B2o3YeA6R4b1CNps1z0eGcVj0Oj3FQ%3D

If the browser failed to open, please visit the URL above directly in your browser.​

ブラウザが立ち上がり、メールアドレスの入力画面または下のような画面が表示されます。
※前述でメールアドレスで認証を行っているため、下記のような認証確認になっています。時間切れしたあとはメール認証になります。

スクリーンショット 2020-09-09 3.50.03

Approveします。

スクリーンショット 2020-09-09 3.51.54

terminal にもどります。fingerprint でyesを入力します。
接続できました。

he authenticity of host 'bot01ssh.zephel.com (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:hXV56miOS9Uu7jyw9j7d0sU6VPUEaQ7ckxd2etHjvO4.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Last login: Tue Sep  8 17:23:03 2020 from hoge.hoge.jp

      __|  __|_  )
      _|  (     /   Amazon Linux 2 AMI
     ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

こちらはメンテナンスで利用して、普段はCloud9IDEで作業という感じです。

※cloudflaredが落ちてしまうと繋がらなくなるため、
monitなどのツールで監視して自動起動をした方が良いかもしれません。​
https://mmonit.com/monit/

EC2インスタンスの変更の仕方
インスタンスを選択して、[右クリック]して
[インスタンスの状態] -> [停止]
※終了は削除なのでしないでください。

スクリーンショット 2020-09-10 13.03.22

インスタンスを選択して、[右クリック]して
[インスタンスの設定] -> [インスタンスタイプの変更]

スクリーンショット 2020-09-10 13.04.39

インスタンスタイプの変更が出来ます。

画像102

 適用を押せば変更されます。

スクリーンショット 2020-09-10 13.06.53

変更されました。起動して確認して終了です。

スクリーンショット 2020-09-10 13.07.40



この記事が気に入ったらサポートをしてみませんか?