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
アカウント作成を押して進めます。
言語を日本語に変更します。
サイトを追加します。
ドメイン名を入力してサイトを追加します。
プランの選択をします。Freeプランを選択します。
DNSレコードをレビューします。
※元のDNSレコードをコピーしてきたものです。必要に応じて書き換えてください。
問題なければ続行を押します。
レジストラでネームサーバーを書き換えます。
※1 バリュードメインの場合
※2 ネームサーバーの名前はドメインごとに変わります。下記は参考例。
バリュードメインにログインして、[ドメインの設定操作]を選択
※バリュードメインの場合
[ネームサーバー]を選択します。
書き換えたら保存します。
Cloudflareに戻って
[完了しました、ネームサーバーをチェックしてください]を押します。
クイックスタートガイドを始める。
[お客様のSSL/TLS 暗号化モード フル]
このまま保存します。
[常にHTTPSを使用]
443以外のポートで利用する場合などはそのままにしておいたほうが良いです。ただし、暗号化したい場合は有効にしてください。
[パフォーマンスを最適化]
好みで選択してください。
[Brotli]
Brotli圧縮を適用すると対応したブラウザからのロード時間が短縮されます。
終了です。
登録が終わりました。
Cloudflare Accessを有効にします。
Access Basicを選択します。
クレジットカードの情報を入力します。
Cloudflare Teams(現在は選択すると以下のように出てきます。)
Cloudflare Accessをセットアップします。
[準備完了です]を押します。
[Accessポリシーを追加]します。
[Access ポリシーを作成]します。
[アプリケーション名] bot01
[サブドメイン] bot01
[セッション時間] 6Hours ※自分に合わせて選択してください。
ポリシー
[ポリシー名] bot01-allow ※同じ名前のものは作成できない。
[包含]メール
認証に使いたいメールアドレスを登録します。
[保存]で終了です。
登録されました。
Cloudflare Argo を有効にします。
※セキュアなsshで接続する場合に利用します。
アカウントでArgoを有効にします。
5ドル/月の請求が発生します。
※転送量によっては上限します。
Cloud9 IDE構築
ここではAWS VPCに構築します。
※初めての人向けのため、わかる方はインスタンスの構築から読んでください。
AWSアカウント作成
https://portal.aws.amazon.com/billing/signup#/start
連絡先を入力します。全部入力します。名前、住所は英語表記です。
クレジットカード情報を入力します。
本人確認
cサポートプランの選択
登録は終了です。コンソールにサインインします。
東京リージョンであることの確認します。
VPC サブネットの作成
デフォルトのVPCを削除します。
選択して、アクションから[VPCを削除]を選択
入力フォームに[delete default vpc]と入力して[削除]を押します。
VPCの作成をします。
名前: [my-vpc-01]
IPv4 CIDR ブロック: [10.0.0.0/16] ※192.168.0.0/16などでも良い。
インターネットゲートウェイの作成
左のインターネットゲートウェイを選択し、
[インターネットゲートウェイの作成]を選択します。
インターネットゲートウェイの作成
VPCにアタッチします。
アクションからVPCにアタッチを選択
使用可能なVPCから上記で作成したVPCを選択して
[インターネットゲートウェイのアタッチ]をします。
インターネットゲートウェイにアタッチされました。
サブネットの作成
左からサブネットを選択
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] ※利用したいブロックを入力。
サブネットが作成されました。
ルートテーブルの作成
ルートテーブルが作成されました。
サブネットの関連付け
サブネットの関連付けを編集
サブネットが追加されました。
インターネットゲートウェイを接続します。
ルートの編集から
送信先: [0.0.0.0/0] ※インターネット向けの通信
ターゲット: [igw-**] ※インターネットゲートウェイで作成したものを選択。
ルートの作成が出来ました。
上のサービスから[ec2]を検索して選択します。
※他のサービスもここから検索できます。
EC2 インスタンスの作成
ステップ1: Amazon マシンイメージ (AMI)の選択をします。
Amazon Linux 2 AMI (ami-0053d11f74e9e7f52)を選択します。
ステップ2: インスタンスタイプの選択
※無料枠であるt2.microを選択します。性能の良いインスタンスが欲しい場合はあとで変更もできます。
価格についてはこちらを参考にしてください。
https://aws.amazon.com/jp/ec2/pricing/on-demand/
東京リージョンの価格を確認してください。
ステップ3: インスタンスの詳細の設定
[ネットワーク]と[サブネット]を選択します。
ステップ4: ストレージの追加
サイズ: [30GB]
ボリュームタイプ: [マグネティック] ※IOPSを選択すると上限に達すると性能がでなくなるため選択はしません。お金がある場合は拡張もできます。
ステップ5: タグの追加
キー: [Name]
値: [bot-1]
ステップ6: セキュリティグループの設定
SSHでつなぐIPを絞ります。
マイIPを選択すれば自分のネットワークのIPを絞れます。
汎用(SSD)から起動する
[マグネティックを選択]
ステップ7: インスタンス作成の確認
問題なければ[起動]をします。
新しいキーペアを作成します。
作成して、キーペアをダウンロードして保存してください。
作成ステータス
[インスタンスの表示]を押してください。
左のメニューから[Elastic IP]を選択
[Elastic IP アドレスの割り当て]を押します。
Elastic IP アドレスの割り当て
※実行中のインスタンスのIPを固定することができます。
[割り当て]を押します。
作成されました。
[割り当てられたIP]を選択します。
[Elastic IP アドレスの関連付け]を選択します。
Elastic IPアドレスの関連付け
インスタンスから起動している[bot-1]を選択します。
関連付けされました。
ターミナルソフトをインストールします。
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を調べてください
CloudflareでDNSを登録します。
IPv4 にElastic IPで取得したIPを入力します。
このとき、プロキシステータスの雲は灰色にしてください。
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 を叩いてみましょう。
Cloud9 installer -> Next
エラーは出てしまいますが終了はしています。
このままですと、IP制限とポップアップでのパスワードの認証のみです。
今回はCloudflareで接続したいので以下の設定を追加します。
[セキュリティグループを作成]を選択します。
セキュリティグループ名を入力します。
セキュリティグループ名: 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/
作成したものは以下のようになります。
セキュリティグループ bot-1 から該当を削除します。
HTTP,HTTPSを削除して[ルールを保存]します。
SSHのみを残します。
左のメニューからインスタンスに移動して、
[ネットワーキング] -> [セキュリティグループの変更]
セキュリティグループの変更
[bot-1]と[Cloudflare-https]を選択して[セキュリティグループの割り当て]を押します。
Cloudflare DNSでproxyをオンにします。
[プロキシ済み]にして保存します。
※タイムラグが数分ある場合があるので少しおいてから接続してみてください。
URLで接続してみます。
https://bot01.zephel.com
認証画面が出ましたら登録したメールアドレスを入力します。
メールにワンタイムコードが書いてあります。
ワンタイムコードを入力します。
サイトに繋がりました。
ユーザーとパスワードを入力します。
Cloud9 IDEに接続できました。
おまけ
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を選択します。
[認証する]を押します。
成功しました。
成功しましたので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
9月 08 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
9月 08 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
9月 08 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...
9月 08 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
9月 08 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
9月 08 18:42:06 ip-10-0-1-237.ap-northeast-1.compute.internal cloudflared[19544]: INFO[2020-09-08T18:42:06Z] Connected to SIN
9月 08 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]
9月 08 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
9月 08 18:42:17 ip-10-0-1-237.ap-northeast-1.compute.internal systemd[1]: Started Argo Tunnel.
9月 08 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で以下のルールを作成
ルールが2個になりました。
AWS EC2のセキュリティグループ bot-1のインバウンドを削除します。
インバウンドルールが無くなりました。
Cloudflare-https のルールのみ接続できるようになります。
~/.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.
ブラウザが立ち上がり、メールアドレスの入力画面または下のような画面が表示されます。
※前述でメールアドレスで認証を行っているため、下記のような認証確認になっています。時間切れしたあとはメール認証になります。
Approveします。
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インスタンスの変更の仕方
インスタンスを選択して、[右クリック]して
[インスタンスの状態] -> [停止]
※終了は削除なのでしないでください。
インスタンスを選択して、[右クリック]して
[インスタンスの設定] -> [インスタンスタイプの変更]
インスタンスタイプの変更が出来ます。
適用を押せば変更されます。
変更されました。起動して確認して終了です。
この記事が気に入ったらサポートをしてみませんか?