はじめに
会社や学校、公共のWi-Fiなど、80, 443番ポートといった一般的なポートしか通過させない環境では、通常の22, 1194番ポートを用いたSSH, OpenVPNは使用することができない。
また、常にインターネットに公開されているサーバーでは、いくつもポートを開放したくない。
そこで、それらを全てまとめて443番ポートで受け付けてしまおうとするのがこれから紹介するSSLHだ。
今回はHTTPS, SSH, OpenVPNを443番ポートで待ち受けするための設定を行う。
環境
- Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)
- sslh-fork 1.20-1
- nginx/1.18.0
- OpenSSH_8.2p1
- OpenVPN 2.4.7
手順
既存のアプリケーションのポート変更
すでに443番ポートを使用しているアプリケーションがある場合には、設定を変更し適用しておく必要がある。
nginxなら、serverディレクティブの listen 443 ssl;
を listen 9443 ssl;
など別のポートに変更しておく。
SSLHのインストール
sudo apt update
sudo apt install sslh
SSLHの設定
SSLHの設定は /etc/default/sslh
にあるので、これをお好みのエディタで編集する。
sudo vi /etc/default/sslh
HTTPSが9443番、SSHが22番、OpenVPNが1194番の場合、下記のように編集する。
RUN=yes
DAEMON=/usr/sbin/sslh
DAEMON_OPTS="--user sslh --listen [サーバーのIPアドレス]:443 --ssl 127.0.0.1:9443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid"
他にもいくつかのプロトコルに対応しており sslh -h
で確認できる。
対応していないプロトコルも --anyprot [IPアドレス]:[ポート番号]
とすることで転送できる。
ポート開放
TCPを指定してポートを開放する。
また、もともと使用していたポートを閉じる。
# まだ開けていない場合
sudo ufw allow 443/tcp
# 既存の設定確認
sudo ufw status numbered
# 既存の設定の削除
sudo ufw delete [SSH, OpenVPNの設定の番号]
# 設定の適用
sudo ufw reload
デーモン化
systemctlの設定を行いデーモン化する。
sudo systemctl start sslh
sudo systemctl enable sslh
疎通確認
sslhで設定したものに問題なく接続できるか確認する。
curl [サーバーのURL(HTTPS)]
ssh -p 443 [ユーザー名]@[サーバーのIPアドレス]
vi client.ovpn # OpenVPNのポート設定を修正する
openvpn --config client.ovpn
おわり
みんなで仲良く貴重な資源、443番ポートを使っていこう。