さくらVPSのDebian6環境で動作するVirtualBox上のUbuntu10.04にSSHトンネリング

[話者] さくらVPS 1Gを借りて、VirtualBox上にUbuntu10.04をインストールしますぞ。そしてそのUbuntu10.04にアクセスするのです。


Debian6インストール

さくらVPS借りる。

さくらのVPSの基礎
http://dotinstall.com/lessons/basic_sakura_vps

の最初のほう #1 - #4 を参考にした。
送付されてきた仮登録メール見て

さくらインターネットVPSコントロールパネル
https://secure.sakura.ad.jp/vpscontrol/

でさっそく[OS再インストール→カスタムOSインストール→Debian 6 i386(32bit)]をインストール。

この「カスタムインストール」、インストール中に apt-get install upgrade する。インストール後は

apt-get install update; apt-get install upgrade

してもアップデート0であった。


この後は「さくらインターネットVPSコントロールパネル」の「リモートコンソール」画面でおこなう。

SSH

まずSSHの設定。

/etc/ssh/sshd_config

Port 23422
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024

SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

RSAAuthentication no
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no

PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication no

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM no

http://d.hatena.ne.jp/chabom/20120413/1334245017
を参考にした。
その記事の 25622 というポート番号はなんだろうと思ったけど、SSHのデフォルト 22 に 256を足しただけだね。
PasswordAuthentication の値だけは yesのままにして、puttyでアクセスしたら「Unable to use key file」とか「Server refused out key」とか出てうまく公開鍵認証できない。パスワード認証になってしまう。
調べたら、puttyLinuxssh-keygenで作成した id_dsa.pub をそのままでは認識しない。

  • puttygen.exeで(SSH2 DSA項目をチェックしてから)[load]ボタンで id_dsa.pub を読み込む(PassPhrase欄に入力したらパスワード必要になる。PassPhrase空にしたらパスワード入力しなくても公開鍵認証できる。両方作っておくといい)
  • [save public key]をクリックして id_dsa_putty.pubとかのファイル名で保存。
  • [save private key]をクリックして id_dsa_putty.ppkとかのファイル名で保存。
  • puttygen.exeのウィンドウに表示される文字列をコピーして $HOME/.ssh/authorized_keys というファイルにペーストする。
  • putty.exeのほうで[SSH - Auth - privateKey] に id_dsa_putty.ppk を指定

これでパスワードなしでも認証できた。


ただし、PassPhraseをputtygen.exeで指定した場合も、putty.exeのショートカットの[リンク先] を
Z:\app\putty060_jpini\putty.exe -load "your_putty_save_name" -l your_debian_user -pw your_pass_phrase
にすればアイコンクリックだけでパスワード入力なしにログインできる。


iptables

次にiptablesの設定。
http://d.hatena.ne.jp/chabom/20120413/1334245017
を参考にした。すると DNSサーバーにアクセスできなくなったようで、wget http://www.google.com がアクセス不可になる。
iptablesを無効にしようと思って、Google検索で適当に見たコマンド

# iptables -F

とするとネットワークにアクセスできなくなった。「これはOS再インストールか?」と思ったけど

さくらインターネットVPSコントロールパネル
https://secure.sakura.ad.jp/vpscontrol/

仮想マシンを[停止→開始]すると iptables -F する前の状態に戻せた。


http://jitsu102.hatenablog.com/entry/2012/04/29/062417
のものに変えると DNSサーバーにもアクセスできる。これで問題なし。
/etc/network/if-pre-up.d/
に配置したスクリプトはOS再起動したとき自動的に実行されるようなので、iptables-persistentはインストールしなくてもよい。
そこに配置した firewall というテキストファイルの中身は具体的には

/etc/network/if-pre-up.d/firewall

#!/bin/sh

IPTABLES='/sbin/iptables'

# Accept Loopback
$IPTABLES -A INPUT  -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPTABLES -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# PING
$IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 8 -j ACCEPT

# SSH
$IPTABLES -A INPUT -p tcp --dport 20022 -j ACCEPT

# Dropbox LANSync
$IPTABLES -A OUTPUT -p tcp --dport 17500 -j DROP
$IPTABLES -A OUTPUT -p udp --dport 17500 -j DROP

# Other
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Log
$IPTABLES -N LOGGING
$IPTABLES -A LOGGING -j LOG --log-prefix "IPTABLES DROP: " --log-level 7
$IPTABLES -A LOGGING -j DROP
$IPTABLES -A INPUT -j LOGGING

# Drop ALL
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

VirtualBox

次に VirtualBoxのインストール。
http://d.hatena.ne.jp/chabom/20120413/1334245017
を参考にした。
そのページはdpkgでインストールしているけど、それだと「動作させるために必須のパッケージ(Required)」をいっしょにインストールしてくれないかも‥‥と心配になった。man dpkgしたけどよくわからない。virtualboxGUIアプリだけど、さくらVPSに用意されてるDebianはServer版なので、GUI、つまりX window system関連のパッケージはインストールされてない。

apt-get install なら確実にRequiredは自動的にインストールしてくれる。できればapt-get install使いたい。公式サイトの
https://www.virtualbox.org/wiki/Linux_Downloads
にしたがい、

/etc/apt/sources.list の末尾行に

deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free

と一行たした。(Debian 6はSqueezeという名前もあるのでそれを選んだ)
そして

sudo apt-get update

するとGPG errorとかなる。

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc
sudo apt-key add oracle_vbox.asc

してから

sudo apt-get update

するとvirtualboxをapt-getからインストール可能になる。

sudo apt-cache search virtualbox
sudo apt-cache show virtualbox-4.1

でバージョンを確認して、

sudo apt-get install virtualbox-4.1

で必須のもの全部インストール完了。

Ubuntu 10.04 Serverのインストール

VirtualBox上にUbuntu 10.04 Serverをインストールする。

http://www.ftp.ne.jp/Linux/packages/ubuntu/releases-cd/
あたりのミラーサイトで isoイメージを入手。

wget http://www.ftp.ne.jp/Linux/packages/ubuntu/releases-cd/10.04.4/ubuntu-10.04.4-server-i386.iso

VirtualBoxを起動して[New]をクリック。

  • 名前 ub1004
  • メモリ 512M
  • HDD 80G
  • ネットワーク1 NAT
  • Audio Disable
  • USB Disable(DisableにしてもDisableにならない)

で設定して Ubuntuのisoを指定し、[Start]。


Ubuntuインストールでは

  • Language: English
  • Location: Asia - Japan
  • Keyboard: Japan

などを指定する。


インストール終了後、一度shutdownして、

$ cd /home/foo/VirtualBox\ VMs
$ XZ_OPT="-9e" tar Jcvf ub1004-1st.txz ub1004/

で保存しておく。スナップショット代わりである。あとでこれを展開すれば、インストール作業を省ける。


VirtualBoxの[Settings]をクリックして、ネットワーク2 Host-only を追加する。
f:id:itouhiro:20120922213801p:plain


Ubuntuを起動してネットワーク設定する。

$ sudo ifconfig -a

eth0 だけでなく eth1 もあればネットワーク2は認識されている。

$ sudo vi /etc/network/interfaces

書き換える。その内容は

ub1004% diff -u interfaces.orig interfaces
--- interfaces.orig     2012-09-07 10:44:40.275459970 +0900
+++ interfaces  2012-09-07 14:46:30.399945617 +0900
@@ -8,3 +8,11 @@
 # The primary network interface
 auto eth0
 iface eth0 inet dhcp
+
+# Host-only
+auto eth1
+iface eth1 inet static
+  address 192.168.56.102
+  netmask 255.255.255.0
+  network 192.168.56.0
+  broadcast 192.168.56.255
ub1004%

そしてついでに環境設定

$ sudo apt-get install zsh lv openssh-server
$ which zsh
$ chsh

一度ログオフして再ログインしてzshを設定する。

$ sudo visudo

末尾に

foo ALL=(ALL) NOPASSWD:ALL

を追加。


リモートコンソールの中でVirtualBox操作してると、文字が何十文字もまちがって入力されてしまうことがあり、2文字入力してはエコーバックを数秒待つ入力方法で しのいだ。
f:id:itouhiro:20120907153915p:plain


Ubuntu再起動。
これでUbuntuはOK。


[合いの手] 最初からさくらVPSにUbuntu10.04を入れればよいのでは?

[話者] いや、まあDebian6とUbuntu10.04はよく似てるんだが、サポートするFontForgeのバージョンのためUbuntu10.04を使いたかっただけなんだ。

SSHトンネリング

ここまででネットワークは以下の構成でアクセスしている。

[自宅 Windows] → [さくらVPS Debian] → [VirtualBox Ubuntu]


putty で [自宅 Windows] → [さくらVPS Debian] のSSH文字端末アクセスはできる。

putty で [自宅 Windows] →→ [VirtualBox Ubuntu] のダイレクトアクセスするために、SSHトンネリングを設定する。


[自宅 Windows] → [さくらVPS Debian] のSSH文字端末アクセスを実行しているputtyで、[Connections - SSH - Tunnels]に

L23422   192.168.56.102:22

と追加する。

そのputtyで接続状態を維持したまま、別のputtyを立ち上げ、 127.0.0.1:23422 にsshでアクセスする。すると、Ubuntuにアクセスできる。
f:id:itouhiro:20120907160250p:plain


反応速度は [自宅 Windows→さくらVPS Debian]のSSHも、[自宅 Windows→→VirtualBox Ubuntu]のSSHも同じ感じ。


[合いの手] SSHトンネリングの設定は、アクセス先のVirtualBox内の「Ubuntu」には何の設定も必要ないのか。「Host-onlyネットワーク」を追加しているだけなんだね。あと VNCとかSSHのサーバ起動してるのもあるけど。
中継する「Debian」も何も変更してない。
アクセス元の「Windows」でSSHクライアント putty にTunnel設定してるだけだね。


[話者] セキュリティ的に外部からアクセスするには、DebianSSHの公開鍵認証しか開いていないので、VirtualBox内のWindowsUbuntuは安全と言える。


[合いの手] しかし、このUbuntu10.04を操作するためには、必要な手順が多くなるね。

  • Debian上のVirtualBoxを起動して、Ubuntu10.04を起動する
  • puttyDebianに接続したウインドウを開いたままで、puttyでUbuntu10.04をアクセスする


[話者] DebianSSH公開鍵認証はパスワード入力なしでいけるし、Ubuntu10.04のアクセスは puttyのショートカットアイコンのリンク先を Z:\app\PuTTYPortable\PuTTYPortable.exe -load "127.0.0.1" -l foo -pw MyPass とするとやはりパスワード入力なしでいける。だからラクなものだよ。


このVirtualBox内のUbuntu10.04と、Debian6は、以下のコマンドでファイルをやりとりできるぞ。Debian6のグローバルIPアドレスを49.212.123.45とする。

# Debian6 → Ubuntu10.04
ub1004$ scp -i .ssh/id_dsa -P 23422 foo@49.212.123.45:/home/foo/.zshrc .

# Ubuntu10.04 → Debian6
ub1004$ scp -i .ssh/id_dsa -P 23422 .gitconfig foo@49.212.123.45:/home/foo/





 

UbuntuLinux入門キット12.04対応 (INTRODUCTION KIT SERIES)

UbuntuLinux入門キット12.04対応 (INTRODUCTION KIT SERIES)