概要
stunnelとAWS Network Load Balancer(NLB)等のLoad Balancer TLS終端サービスを使って暗号化通信を行います
何がいいの?
既存のアプリケーションを修正することなくTLS暗号化が可能です。
方法1.AWS NLB TLS終端を使用
PC内のクライアントソフトは同じPC内のstunnelと通信します。
PC内のstunnelはNLBを経由して通信を転送します。
以下の例ではサーバーはRedisを使用しています。
NLB設定
- AWSコンソールからEC2>>ロードバランサー>>ロードバランサーの作成を押下
- ロードバランサーはNLBを選択
- NLBを作成
- ロードバランサー名
- スキーム:インターネット向け
- IPアドレスタイプ:IPv4
- ネットワークマッピング:既存VPCのパブリックサブネットを指定
- セキュリティグループ:リスナーポートを許可するセキュリティグループを指定
- リスナーとルーティング:プロトコルTLS,ポートはリッスンするポートを指定(上図の例では6376),ターゲットグループの作成を選択
- グループ:インスタンスまたはIPアドレスを選択
- ターゲットグループ名
- プロトコル ポート:サーバーアプリケーションのリッスンポート(上図の例ではTCP 6379)
- IPアドレスタイプ:IPv4
- VPC:既存VPC
- ヘルスチェック:TCP
- 「次へ」を押下
- インスタンス選択またはIPアドレスを入力して「保留中として以下を含める」を押下
- 「ターゲットグループの作成」を押下
- 作成されたターゲットグループの属性を確認してクライアントIPアドレスの保持を確認(オンの場合はクライアントIPが保持され、オフの場合はNLBにてクライアントIPがNATされる)
- リスナーの編集に戻って作成されたターゲットグループを選択
- セキュリティポリシー:適切なポリシー(TLS1.3等)を選択
- デフォルトSSl/TLSサーバー証明書:パブリックドメインのサーバー証明書登録のためACMの登録済み証明書や証明書インポートを選択
- 「ロードバランサーの作成」を押下
Route53設定
インターネット上からNLBの名前解決できるようAレコードを登録します
- Route53で登録したドメインのAレコードを追加
- レコードタイプ:A
- エイリアス:On
- トラフィックのルーティング先:作成したNLBを選択
クライアント設定
- stunnel downloadからダウンロードしてインストール
- stunnel Service Startを実行しConfiguration>Edit Configurationを選択
- アプリケーション登録
例)app.example.com[example] client = yes accept = 127.0.0.1:6375 connect = app.example.com:6376
- Configuration>Reload Configurationを選択して設定反映
接続確認
- PCからtelnetを使用してサーバーに接続確認
C:\path\to>telnet 127.0.0.1 6375 ping +PONG ping +PONG
- PC-NLB間のIPパケット取得するとTLS1.3で暗号化されたことが確認できます
方法2.OCI FLB TLS終端を使用
PC内のクライアントソフトは同じPC内のstunnelと通信します。
PC内のstunnelはOCI FLBを経由して通信を転送します。
以下の例ではサーバーはRedisを使用しています。
FLBおよびDNS設定
以下の設定を参考にします。FLBのリッスンポートは上図の例では6378を指定します。
OCI LoadBalancerを使ってNATとSSL/TLS終端を行う
クライアント設定
- stunnel downloadからダウンロードしてインストール
- stunnel Service Startを実行しConfiguration>Edit Configurationを選択
- アプリケーション登録
例)app.example.com[example] client = yes accept = 127.0.0.1:6377 connect = app.example.com:6378
- Configuration>Reload Configurationを選択して設定反映
接続確認
-
PCからtelnetを使用してサーバーに接続確認
C:\path\to>telnet 127.0.0.1 6377 ping +PONG ping +PONG
-
PC-FLB間のIPパケット取得するとTLS1.3で暗号化されたことが確認できます