LoginSignup
2
1

More than 1 year has passed since last update.

OpenBlocks を使い、遠隔地のインターネット公開されていない内部ドメインのWebサーバを、SSL-VPN装置を使わずに 安全に利用するには(OpenBlocks を、簡易VPN機器っぽく使う)

Last updated at Posted at 2020-03-14

内部ドメインの Webサーバを、遠隔地から安全に利用する為の前提条件

  • 遠隔地に設置する想定の OpenBlocks 上の ssh を使って、目的のWebサーバと同一ネットワークの踏台サーバ、または Webサーバ自身に接続できること。
  • OpenBlocks にて、Dnsmasq が動いていること。

この手順のメリットは、追加ソフトウェアをインストールすることなく、素の OpenBlocks だけで 比較的安全・容易に Webサーバを遠隔利用できるということです。

完全な VPN のように 全ての TCPポートやプロトコルを使えるわけではありませんが、逆に言うと、OpenBlocks側のネットワーク セキュリティリスクを 全体が被る必要が無くなるので、ある意味で、VPN よりも安全性が高いと考えることも出来ます。
ob_skurioka.jpg

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ログインし、ポートフォワード用のスクリプトを作成する。

/root/auto_session_wrap.sh
#!/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 で 実行権限を付けておく。

/root/auto_session_to_xx.sh
#!/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 ~]$

確認後、以下のように オプション変更。

/root/auto_session_to_xx.sh
~
ssh -t -t ~
~

 ↓

/root/auto_session_to_xx.sh
~
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番)を転送しているだけです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1