DockerでSSLH!貴重な443番ポートでHTTPS、OpenVPN、SSHを同時に待ち受ける方法

DockerでSSLH!貴重な443番ポートでHTTPS、OpenVPN、SSHを同時に待ち受ける方法 自宅サーバー
DockerでSSLH!貴重な443番ポートでHTTPS、OpenVPN、SSHを同時に待ち受ける方法

★10/11 sslhコマンドのパラメタ形式の変更に伴い記事を修正しました

DockerでSSLH!貴重な443番ポートでHTTPS、OpenVPN、SSHを同時に待ち受ける方法

外出先から自宅サーバにアクセスしたいことってありますよね?
そんな時は、443番ポートでOpenVPNを利用すれば安全&便利という記事を以前紹介しました。

しかし、 HTTPSで既にWEBページを公開していた場合、443番ポートが使えない場合があります。この場合、通常は443番ポートをHTTPSで使うか、OpenVPNで使うかどちらかを選ぶ必要があります。
これは、究極の選択ですよね。。

しかし、SSLHを使えば443番ポートで HTTPSとOpenVPNを同時に待ち受けることができるのです。加えて、SSHも同時に443番ポートで待ち受けすることもできます。

イメージはこんな感じです。

つまり、SSLHは443番ポートでHTTPSとOpenVPNとSSHを同時待ち受けて、プロトコルレベルでリバースプロキシを実現してくれるのです。これは本当に便利!

本記事では、そんなSSLHをLinux(ubuntu 18.04LTS)とDockerを使ってインストール方法をご紹介します。 「Dockerを使って」というところがこの記事のミソなので、サーバ環境を汚さずに構築したい場合にぜひ参考にしてください。

事前準備

事前準備

既に443番ポートを使ったアプリケーションを使っている場合は、待ち受けポートを変更してください。443番ポートはSSLHに明け渡します。

例えば、私の以下の記事を読んでdockerでOpenVPN-ASを導入した場合は、docker-compose.ymlのポート設定を修正する必要があります。修正例を次に示します。 これから、新しいサーバにSSLHを導入する方は特にありません。

LinuxにDockerでOpenVPNを簡単にインストールする方法
外部からインターネットを経由して自宅サーバにアクセスしたいと思ったことはないですか?例えば、職場や出張、外出時に自宅サーバからスマホにファイル転送したいとかSSHでログインしてサーバを操作したい...

私と同じ環境で構築される場合、構築で躓いた際にサポートできると思います。メモリ8GB以上を選択すればエンコード等しても性能的に問題はないと思います。Windows10マシンですが、私はUbuntuを上書きインストールして自宅サーバを構築しています。

ECS Windows 10 Home Sモードを搭載した小型デスクトップパソコン LIVAZ-16/120-W10S(N4200)TS メモリ16GB ストレージ120GB+64GB

OpenVPNのdocker-compose.ymlの修正

OpenVPNのコンテナが起動している場合は、一旦停止します。


そして、docker-compose.ymlを以下のように修正してください。

18行目のports部分を9443:9443修正しています。ホスト側の443番ポートを避けて、9443番ポートとコンテナ側の9443番ポートを紐づけます。

他にもホスト側の443番ポートを使っているサービスがある場合は、設定変更をしておきます。

設定が終わったら、コンテナを再開します。

インストール方法

では、早速DockerでSSLHをインストールしていきます。

前提

git、dockerおよびdocker-composeがインストールされていることが前提です。
もし、まだインストールしていない場合はこちらを参照してインストールしましょう。

また、dockerプロジェクトのディレクトリを適当な場所と名前で作成しておきます。

このあと作成するファイルは、docker-compose.yml、Dockerfile、entry.shの3つです。
最終的に以下のディレクトリ構成になります。

では、順番に作成していきます。

docker-compose.yml

docker-compose.ymlを作成します。エディタは何でもOKです。

以下の内容をdocker-compose.ymlファイルにコピー&ペーストします。

environment

443番ポートでsslhが受けたセッションをproxyする先を環境変数で指定します。
例えば、OpenVPNのプロトコルのプロキシ先は、OPENVPN_HOSTとOPENVPN_PORTで設定します。この例では、10.29.3.7:9443に転送する例となっています。
上記のOpenVPNで設定した場合は OPENVPN_HOSTのみ環境に合わせて変更すればOKです。

こんな感じで、SSH_HOST、SSH_PORT、HTTPS_HOST、HTTPS_PORTも 環境に合わせて変更します。

Dockerfile

次に、Dockerfileを作成します。sslhディレクトリの配下に作成します。

以下の内容をDockerfileファイルにコピー&ペーストします。

こちらは特に修正する部分はありません。

entry.sh

次に、entry.shを作成します。こちらも、sslhディレクトリの配下に作成します。

以下の内容をentry.shファイルにコピー&ペーストします。

★10/11 sslhコマンドのパラメタ形式の変更に伴い記事を修正しました

こちらも、 特に修正する部分はありません。

作成するファイルは以上です。

コンテナ起動

以下のコマンドでコンテナを起動します。

1分~待てばSSLHコンテナの出来上がりです。

このあと、インターネット側から443番ポートに対してOpenVPNとSSHが正常に接続できれば成功です!wifi(同じNW)からだと、インターネット経由にならないので、スマホのテザリング等で別NWから試してみてください。

まとめ

まとめ

SSLHを使って、OpenVPNとHTTPS、SSHを443番ポートで同時待ち受けする方法を紹介しました。
貴重な443番ポートを複数サービスでシェアすることで、より便利かつ安全に自宅サーバにアクセスることができます。
今回は、DockerコンテナでSSLHを導入する手順を紹介しました。この方法なら、途中で失敗しても簡単にやり直しすることができますし、再現性が高いのでサーバ環境が変わっても簡単に導入することができます。
これでまた便利になりましたね!

他にもいろいろなサービス導入方法をご紹介しています。よかったら参考にしてください。

ECS Windows 10 Home Sモードを搭載した小型デスクトップパソコン LIVAZ-16/120-W10S(N4200)TS メモリ16GB ストレージ120GB+64GB

コメント

タイトルとURLをコピーしました