この簡単なチュートリアルでは、SSLHとは何か、SSLHをインストールする方法、およびhttpsと同じポートを共有するようにSSLHを構成する方法、およびLinuxおよびUnixライクなオペレーティングシステムでのsshについて説明します。
SSLHとは何ですか?
一部のインターネットサービスプロバイダーや企業は、ほとんどのポートをブロックし、ポート80や443などの特定のポートのみにセキュリティを強化することを許可している可能性があります。
このような場合、選択の余地はありませんが、複数のプログラムに同じポートを使用します。たとえば、HTTPSポート 443 、ブロックされることはめったにありません。ここがSSLH 、SSL/SSHマルチプレクサが役立ちます。
SSLHは、ポート443で着信接続をリッスンします。これを簡単に言うと、SSLHを使用すると、Linuxシステムのポート443で複数のプログラムまたはサービスを実行できます。したがって、同じポートを同時に使用してSSLとSSHの両方を使用できます。
ほとんどのポートがファイアウォールによってブロックされている状況になったことがある場合は、SSLHを使用してリモートサーバーにアクセスできます。
LinuxにSSLHをインストールする
SSLHはほとんどのLinuxディストリビューションにパッケージ化されているため、デフォルトのパッケージマネージャーを使用してインストールできます。
Debian 、 Ubuntu 、 Linux Mint およびポップOS 、実行:
$ sudo apt install sslh
SSLHのインストール中に、sslhをinetdからのサービスとして実行するか、スタンドアロンサーバーとして実行するかを確認するメッセージが表示されます。
それぞれの選択には独自の利点があります。 1日あたりの接続数が少ない場合は、リソースを節約するためにinetdからsslhを実行することをお勧めします。
一方、接続が多い場合は、着信接続ごとに新しいプロセスが生成されないように、sslhをスタンドアロンサーバーとして実行する必要があります。

Arch Linux Antergos、Manjaro Linuxなどの派生物は、以下に示すようにPacmanを使用してインストールします。
$ sudo pacman -S sslh
RHEL 、 CentOS 、 AlmaLinux およびRockyLinux 、 EPELを追加する必要があります リポジトリを作成してから、以下に示すようにSSLHをインストールします。
$ sudo dnf install epel-release
$ sudo dnf install sslh
Fedora :
$ sudo dnf install sslh
デフォルトのリポジトリで使用できない場合は、ここで説明されているように、SSLHを手動でコンパイルしてインストールできます。 。
ApacheまたはNginxWebサーバーを構成する
すでにご存知のように、ApacheおよびNginx Webサーバーはすべてのネットワークインターフェイス(つまり、 0.0.0.0:443
)でリッスンします。 )デフォルトで。この設定を変更して、ローカルホストインターフェースでのみリッスンするようにウェブサーバーに指示する必要があります(つまり、 127.0.0.1:443
またはlocalhost:443
。
これを行うには、Webサーバー(nginxまたはapache)構成ファイルを編集して、次の行を見つけます。
listen 443 ssl;
そして、次のように変更します:
listen 127.0.0.1:443 ssl;
ApacheでVirutalhostsを使用している場合は、それも変更していることを確認してください。
VirtualHost 127.0.0.1:443
構成ファイルを保存して閉じます。サービスを再起動しないでください。まだ終わっていません。
SSLHの構成
ローカルインターフェイスでのみリッスンするようにWebサーバーを作成したら、SSLH構成ファイルを編集します。
$ sudo vi /etc/default/sslh
次の行を見つけます:
Run=no
そして、次のように変更します:
Run=yes
次に、少し下にスクロールして次の行を変更し、SSLHが使用可能なすべてのインターフェイスのポート443でリッスンできるようにします(例:0.0.0.0:443
。
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
どこで、
--user sslh
:この指定されたユーザー名で実行する必要があります。--listen 0.0.0.0:443
:SSLHはポート443
でリッスンしています 利用可能なすべてのインターフェースで。-
--sshs 127.0.0.1:22
:SSHトラフィックをポート22
にルーティングします ローカルホストで。 -
--ssl 127.0.0.1:443
:HTTPS/SSLトラフィックをポート443
にルーティングします ローカルホストで。
ファイルを保存して閉じます。
最後に、sslh
を有効にして開始します 変更を更新するサービス。
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
テスト
SSLHデーモンが443
をリッスンしているかどうかを確認します 。
$ ps -ef | grep sslh sslh 2746 1 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sslh 2747 2746 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sk 2754 1432 0 15:51 pts/0 00:00:00 grep --color=auto sslh
これで、ポート443
を使用してSSH経由でリモートサーバーにアクセスできます。 :
$ ssh -p 443 [email protected]
出力例:
[email protected]'s password: Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Wed Aug 14 13:11:04 IST 2019 System load: 0.23 Processes: 101 Usage of /: 53.5% of 19.56GB Users logged in: 0 Memory usage: 9% IP address for enp0s3: 192.168.225.50 Swap usage: 0% IP address for enp0s8: 192.168.225.51 * Keen to learn Istio? It's included in the single-package MicroK8s. https://snapcraft.io/microk8s 61 packages can be updated. 22 updates are security updates. Last login: Wed Aug 14 13:10:33 2019 from 127.0.0.1

見る?デフォルトのSSHポート22
であっても、SSH経由でリモートサーバーにアクセスできるようになりました。 ブロックされています。上記の例でわかるように、私はhttpsポート443
を使用しました SSH接続用。また、同じポート443
を使用できます openVPN接続の場合も。
Ubuntu 18.04 LTSサーバーでSSLHをテストしましたが、上記のように正常に機能しました。保護されたローカルエリアネットワークでSSLHをテストしたので、セキュリティの問題を認識していません。本番環境で使用している場合は、下のコメントセクションでSSLHを使用することの長所と短所をお知らせください。
詳細については、以下のGitHubの公式ページを確認してください。