sslhを利用したSSHとHTTPSの共存


443番ポートは貴重

ホテルのインターネットなどのファイヤーウォールが厳しくて通過できるポートがかなり限れれるという経験はないでしょうか。SSHはこういう制限を受けるとまず開いてない事がほとんどです。そこでSSHのポート番号を一般的な物に変更すると通過できる可能性が上がります。一般的なポートと言えば80番や443番が挙がります。

しかし、80番ポートはHTTP PROXYなどが間に入り仲介する際にHTTPプロトコルでないと通過できない事がほとんどです。対して443番のHTTPSはクライアントのブラウザで暗号化される関係でファイヤーウォールなどがあったとしても素通りする事がほとんどです。

それならSSHのポート番号を443番に変更・・・・と行きたいのですが、自宅サーバーなどを運用していると既に443番ポートは使われているという事も多いです。

今回はWebサーバーを残しつつSSHを443番で開放するsslhというものを紹介します。

sslhとは

TCP層よりも上のレイヤで動作するツールです。このツールは443番でLISTENし、通信を受け付けてその内容に応じてWebサーバーとSSHサーバーに再度振り分けるものです。要はリバースプロキシです。

大変便利なのですがその性質上下記の欠点が存在します。

この欠点を承知した上で今回は導入します。

sslhのインストール

今回Debian 10.xを使っています。aptにパッケージが存在するので下記のコマンドを実行するだけです。

# apt install sslh

その後設定をします。設定は1つのファイルを編集するだけです。

# cat /etc/default/sslh~default 
(略)
DAEMON_OPTS="--user sslh --listen <change-me>:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

主な変更点は下記の通りです。

設定が完了したら自動起動するように設定した上で起動します。

# systemctl enable sslh
# systemctl start sslh

以上で完了です。適当なSSHクライアントソフトから443番ポートで接続でき、ブラウザで接続したらWebサイトが表示されるか確かめてみましょう。