内部ドメインの Webサーバを、遠隔地から安全に利用する為の前提条件
- 遠隔地に設置する想定の OpenBlocks 上の ssh を使って、目的のWebサーバと同一ネットワークの踏台サーバ、または Webサーバ自身に接続できること。
- OpenBlocks にて、Dnsmasq が動いていること。
この手順のメリットは、追加ソフトウェアをインストールすることなく、素の OpenBlocks だけで 比較的安全・容易に Webサーバを遠隔利用できるということです。
完全な VPN のように 全ての TCPポートやプロトコルを使えるわけではありませんが、逆に言うと、OpenBlocks側のネットワーク セキュリティリスクを 全体が被る必要が無くなるので、ある意味で、VPN よりも安全性が高いと考えることも出来ます。
1. OpenBlocks に対して ssh で rootログインし、キーペアを作成する
OpenBlocks の root で、ssh-keygen を使い、パスフレーズなしの キーペアを作成する。
root@ob_skurioka:~# ls -la .ssh/
total 20
drwx------ 2 root root 4096 Mar 8 16:03 .
drwx------ 4 root root 4096 Mar 8 21:10 ..
-rw------- 1 root root 1679 Mar 8 16:03 id_rsa
-rw-r--r-- 1 root root 414 Mar 8 16:03 id_rsa.pub
root@ob_skurioka:~#
2. Webサーバと同一ネットワークの ログイン先のサーバ(踏台サーバ)にて、作成した公開キーを追加する。
[user@Server ~]$ vim .ssh/authorized_keys
3. OpenBlocks に対して ssh で rootログインし、ポートフォワード用のスクリプトを作成する。
#!/bin/sh
ulimit -n 1006500 # ssh のバグ?により、ファイルディスクリプタを 食い尽くすバージョンがある為、念の為の暫定処置
while(true) do
if [ `ps ax | grep auto_session_to_xx.sh | grep -v grep | wc -l` = "0" ]; then
/root/auto_session_to_xx.sh & # 任意のファイル名に変更する
fi
sleep 10
done
/root/auto_session_to_xx.sh は、任意のファイル名に変更する。
2ファイルとも、chmod で 実行権限を付けておく。
#!/bin/sh
sleep 10
ssh -t -t -o 'ExitOnForwardFailure=yes' -o 'ServerAliveInterval=10' -o 'ConnectTimeout=10' -L 192.168.0.xxx:80:192.168.yyy.zzz:80 -R ttttt:192.168.0.xxx:880 -R sssss:localhost:22 user@aaa.bbb.ccc.ddd
exit $?
指定するパラメータ | 説明 |
---|---|
192.168.0.xxx | OpenBlocks 自身のプライベートIP |
192.168.yyy.zzz | 公開したい Webサーバの 内部IPアドレス |
ttttt | 踏台サーバから OpenBlocks の管理画面(WEB UI)を開くときのポート |
sssss | 踏台サーバから OpenBlocks に sshログインするときのポート |
aaa.bbb.ccc.ddd | OpenBlocks から見た、踏台サーバのグローバルIP |
user | 踏台サーバ上の ログインアカウント |
4. auto_session_to_xx.sh を実行し、OpenBlocks から 踏台サーバへ 自動sshログインできることを 確認したあと、ssh の接続オプションを変更する。
root@ob_skurioka:~# ./auto_session_to_xx.sh
Last login: Sat Mar 14 20:10:23 2020 from xxx.xxx.xxx.xxx
[user@Server ~]$
確認後、以下のように オプション変更。
~
ssh -t -t ~
~
↓
~
ssh -N ~
~
「-t -t」を「-N」に変更しておく。
5. OpenBlocks の管理画面(WEB UI)にログインし、[拡張]=>[スクリプト編集]より、起動スクリプトを編集する。
echo "192.168.0.xxx hoge.fuga.jp" >>/etc/hosts
/etc/init.d/dnsmasq restart
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.xxx -p tcp --dport 80 -j ACCEPT
nohup /root/auto_session_wrap.sh &
指定するパラメータ | 説明 |
---|---|
192.168.0.xxx | OpenBlocks 自身のプライベートIP |
hoge.fuga.jp | 公開したい Webサーバの 内部FQDN |
192.168.0.0/16 | OpenBlocks でサービス提供したい、内部IPアドレス帯 |
OpenBlocks を再起動することにより、OpenBlocks の内側にいる 全てのPC に対して、Webサーバのサービス提供をし、遠隔地から安全に利用できます。
概要は わかったと思いますが、Dnsmasq を使うことで、OpenBlocks を 内部FQDN として振る舞わせています。
単純に sshポートフォワードで、自分自身に向けた http(80番)を転送しているだけです。