以下の環境でクラウドにリモート デスクトップ接続したい場合を想定して、stunnel の利用法を確認してみました。
- クライアントからクラウドのポート 3389 には接続できない
- クライアントからクラウドのポート 80 に RDP では接続できない
- クライアントからインターネットのポート 443 への SSL 接続はできる
- ポート 443 で SSL 接続した先が HTTP ではなく RDP でも接続できる
- SSH でも接続できると便利なんですが…
- SSL MITM Proxy が導入されていて、クライアント証明書を使えない
- stunnel サーバーは Ubuntu Server 24.04 LTS
注意
- パスワードは強力なものにしてください
- クラウドのセキュリティー設定も組み合わせてください
- 以下では省きましたが Authentication の PSK の設定も実施してください
サーバー (Ubuntu) 側
証明書などの配置
ZeroSSL で IP アドレスの証明書を発行されているので、以下のページを参考に certificate.crt と ca_bundle.crt、/etc/ssl/private/ に private.key を配置しました。
しかし、stunnel には中間証明書を末端の証明書と別に指定する方法がないようなので、以下のように concatenate しておきます。key は root しか読めなくしておきます。
$ sudo cat /etc/ssl/certificate.crt /etc/ssl/ca_bundle.crt > /etc/ssl/chained.crt
$ sudo chown root:root /etc/ssl/private/private.key
$ sudo chmod o-r /etc/ssl/private/private.key
インストールと設定
インストールと設定を行います。まずはサンプルをコピーして配置し、編集を開始します。
$ sudo apt install stunnel4
$ sudo cp -i /usr/share/doc/stunnel4/examples/stunnel.conf-sample /etc/stunnel/stunnel.conf
$ sudo vim /etc/stunnel/stunnel.conf
以下の部分はコメントを外します。
setuid = stunnel4
setgid = stunnel4
以下の部分はコメントを外して、stunnel4 を挿入します。
pid = /var/run/stunnel4/stunnel.pid
以下のセクションを追加します。
rdp-server と書いた部分は適切な IP アドレスなどに置き換えてください。
[RDP over SSL]
accept = 443
connect = rdp-server:3389
cert = /etc/ssl/chained.crt
key = /etc/ssl/private/private.key
TIMEOUTclose = 0
ここでは動作確認しかしないのでサンプルのクライアント設定を残しましたが、運用時は不要な設定を削除することを推奨します。
$ sudo systemctl start stunnel4.service
再起動後も動くようにするには以下のようにします。
$ sudo systemctl enable stunnel4.service
クライアント (Windows) 側
インストール
以下の設定でインストールし、実行しました。
- Install just for me
- Tools > openssl.exe もチェックしたままにしました
- トラブルシューティングで使います
- これによりインストーラーが証明書を作ろうとしますが、Ctrl+C で中断できます
証明書の配置
%LOCALAPPDATA%\Programs\stunnel\config
フォルダーに SSL MITM Proxy で使われる証明書 (MITM.pem) を配置します。
設定
以下のセクションを追加し、トレイ アイコンの Reload Configuration を実行し、Show Log Window で LOG5 より低い数字のものが出ていないことを確認します。
my-ip と書いた部分はパブリック IP に置き換えてください。
[RDP over SSL]
client = yes
accept = 3389
connect = my-ip:443
verifyChain = yes
CAfile = MITM.pem
checkIP = my-ip
ここでもサンプルのクライアント設定を残しましたが、運用時は不要な設定を削除することを推奨します。
接続
リモート デスクトップの接続先として localhost と入力してください。MITM が認めてくれていれば接続できるでしょう。
トラブルシューティング
OpenSSL で接続できるか確かめてみると良いようです。
$ openssl s_client -CAfile MITM.pem -connect my-ip:443 -showcerts -status