Vpnだけでアクセス可能なウェブサイトの作り方

こんにちは、

AWS VM上にホストしているウェブアプリがあります。これを特定の人だけがアクセスできるようにしたいです。公開したくありません。

私の考えでは、これはローカルネットワークの拡張のようなものです。VMがローカルネットワークの役割を果たし、そのネットワークにいるユーザだけがVMがホストしているウェブサーバにアクセスできると想定しています。

約15-25人がアクセスできるようにしたいです。

これは理解できるでしょうか?

私はVPNについて詳しくありません。OpenVPN、CloudFlareトンネル、Wireguardについて調べてきましたが、少し圧倒されています。

エンドユーザが設定しやすいものが欲しいです(無料が理想ですが、価格がリーズナブルなら検討します)

何か提案はありますか?

ZeroTierとWireGuardはどちらも動作しやすく、設定も比較的簡単です

逆プロキシのNginxを使えば、すべてのIPをブロックして、ローカルとVPNのIP範囲だけを開放することができます。設定は2〜3行です。

https://www.cyberciti.biz/faq/linux-unix-nginx-access-control-howto/

# 192.168.1.0/24からのアクセスを許可
allow   192.168.1.0/24;
# その他は拒否
deny    all;

他のプロキシでも同様に機能する可能性があります。

私のネットワークではZeroTierを設定しています。やり方は以下の通りです。

externalApp.mydomain.comは私のサーバの実IPにポイントし

internalApp.mydomain.comは同じサーバのZeroTier内部IPにポイントします。

例えば、私の個人ブログサイトmysite.comはインターネットでアクセス可能ですが、bitwarden.mysite.comにアクセスするには先にZeroTierネットワークに接続している必要があります。

これにより、リバースプロキシの設定に手を加える必要がなく、デバイス(スマホ・ノートパソコン・PC)がZeroTierに接続していればどこからでもアクセスできます。ZeroTierは非常に簡単に設定できます。

皆さん、重要な点を無視しています。あなたが守りたいのはすでにAWS上にあります。なので、そのVPCへの外部アクセスをすべて遮断し、そのVPC内にWireguardとリバースプロキシ(Caddyやnginxがおすすめ)を動かす小さなEC2インスタンスを追加します。UDPのポート51820(または使用している番号)だけを開き、wg用だけにして、それ以外は閉じてください。そしてVPC間のピアリングを有効にします。

また、必要に応じてdnsmasqを動かして、これらのサイトに関連するドメイン名を(プライベートに)解決させることもできます。サーバのIPをWireguardのDNS設定と同じにし、そのIPに解決させる設定です。その後、リバースプロキシが各ホスト名を同じサーバにフォワードしつつ、上流のDNSを使って対応する内部IPを取得します。

具体的なガイドやブログはほとんどありませんが、それぞれの部分は確実に独立して存在します。必要があれば各部分について詳しく説明できます。

私も同様の設定に取り組んでいましたが、まだ完成させる時間がありませんでした。

基本的には、WireguardをVPNとして使用し、Nginx Proxy Managerをプロキシにしていました。全部Docker上で動かしています。

理論的には、Docker内に内部ネットワークを作成し、そのネットワーク内にすべてのコンテナを配置すれば良いです。

あなたの場合、AWS VPSにTLS/SSL終端とクライアント証明書を配置したNginxをリバースプロキシとしてデプロイするのが良いと思います。Easy-RSAスクリプトを使ってCAとSSL証明書を簡単に生成でき、それを許可したい15-25人に配布します。彼らはブラウザに証明書をインポートし、それだけがウェブアプリにアクセスできるようになります。

私のやり方はnginxを使っています。公開したくないドメインの場所はVPNとローカルサブネットに制限しています。サブネット外からは403エラーを返します。

Apacheのような他のWebサーバでもできる可能性はありますが、私はあまり詳しくありません。私はWireGuardとZeroTierをアクティブにしており、これらを許可しています。WireGuardが一番良い選択ですが、TailscaleやZeroTierもとても設定が簡単です。

Kernel WireGuardとセルフホスティングを使う場合、Netmakerが最速の選択肢です。

主な問題はSSL証明書です。VPNまたはLAN限定のWebアプリでは、CAによる証明が得られず、ブラウザ(Chromeなど)は自己署名証明書をサポートしなくなっています。企業用Webアプリには問題があります。

かなり簡単です。

Step 1: tailscaleを全ての端末にインストール

Step 2: あなたのドメインを100.x(tailscaleのIP)にポイント

Step 3: 以上です

これにより、tailscaleアカウントにアクセスできる人だけがそのウェブサイトにアクセス可能です。

追加: 必要に応じてpublic.mydomain.netやvpn.mydomain.netのような公開サブドメインを設定できます。