Powered by SmartDoc

情報通信ネットワーク論[演習] (2005/11/08)
Ver. 1.1a

2005年11月8日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2005/ccna/ccna-ex/ccna-ex.html
情報通信ネットワーク論(演習)2005/11/08 の資料

目次

目的

この演習の目的は通りです。

Linux Server管理(復習)
Linux での Server Software の Install( rpmコマンドの利用法)など。
ssh Serverの構築(新規)

ssh ( Secure remote SHell )は、secureなtelnetです。secureの意味は、次の二点からなります。

この他にも様々な機能が充実しているために、いまでは、remote shellの代表的なコマンド(2)として利用されています。

port forwarding (新規)
sshのport fowarding機能を利用して、private networkの中にあるServerをアクセスできるようにしてみます。
  1. 例えば、公開鍵暗号方式に基く認証。残念ながら今回はしない。
  2. この為に、当然のことながらcrackerのターゲットになっています。「secureにする積りでsshにしたら、そのsshにsecurity holeがあって、侵入されてしまった」という笑えない話がありますが、sshのversionには、できるだけ、注意を払いましょう。

    もちろん、演習で利用したVersionは「もっての他」であることは、言うまでもありません。

ssh Server / Client 構築

概略

ssh Serverの構築もDHCP Server の構築と同様、次のような手順を踏むことになります。

また、sshは、clientもあった方が便利なので、serverのinstallと同時に、ssh clientのinstallも同時に行うことにします。

rpm ファイルの入手

rpmファイルの入手は、DHCP Server の構築と同様に、ftpを用いて、おこないます。

Nameに対しては、"ftp"と入力して[Enter]を、Passwordに対しては、単に[Enter]で答えます。

ftp によるファイルの入手
[root@Linux-X /root]# ftp 192.168.3.49
Connected to 192.168.3.49.
220 h49.private.media.cst.nihon-u.ac.jp FTP server (Version \
    wu-2.6.1-18) ready.
Name (192.168.3.49:ccna): ftp
331 Guest login ok, send your complete e-mail address as \
    password.
Password:
230-The response '' is not valid
230-Next time please use your e-mail address as your password
230-        for example: joe@h10.private.media.cst.nihon-u.ac.jp
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

必要なファイルは、pubの下の更にsslの下においてあるので、まず、そこに移動します。

pub/ssl へ移動
ftp> cd pub/ssl
250 CWD command successful
ftp>

そして、そこにあるファイルのリストをとってみます。

ls で、ファイルのリストを確認
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for directory listing.
total 3130
-rw-r--r--   1 501      501          3505 Oct 13  2001 CA.sh
-rw-r--r-- 1 root root 201698 Nov 8 03:20 \
    openssh-3.1p1-1.i386.rpm
-rw-r--r-- 1 root root 273389 Nov 8 03:20 \
    openssh-clients-3.1p1-1.i386.rpm
-rw-r--r-- 1 root root 151073 Nov 8 03:20 \
    openssh-server-3.1p1-1.i386.rpm
-rw-r--r-- 1 root root 962725 Nov 8 03:20 \
    openssl-0.9.6-9.i386.rpm
226 Transfer complete.
ftp>

この結果から、ファイルが、5つおいてあることが理解ります(3)が、今回必要なのは、この内の下の4つだけです。

この4つをまとめて取るには、次のようにmgetコマンドにファイル名のパターンを指定します。

mget でファイルをまとめて download
ftp> mget open*
mget openssh-3.1p1-1.i386.rpm? y
200 PORT command successful.
150 Opening BINARY mode data connection for \
    openssh-3.1p1-1.i386.rpm (201698 bytes).
226 Transfer complete.
201698 bytes received in 0.228 secs (8.7e+02 Kbytes/sec)
mget openssh-clients-3.1p1-1.i386.rpm? y
200 PORT command successful.
150 Opening BINARY mode data connection for \
    openssh-clients-3.1p1-1.i386.rpm (273389 bytes).
226 Transfer complete.
273389 bytes received in 0.351 secs (7.6e+02 Kbytes/sec)
mget openssh-server-3.1p1-1.i386.rpm? y
200 PORT command successful.
150 Opening BINARY mode data connection for \
    openssh-server-3.1p1-1.i386.rpm (151073 bytes).
226 Transfer complete.
151073 bytes received in 0.147 secs (1e+03 Kbytes/sec)
mget openssl-0.9.6-9.i386.rpm? y
200 PORT command successful.
150 Opening BINARY mode data connection for \
    openssl-0.9.6-9.i386.rpm (962725 bytes).
226 Transfer complete.
962725 bytes received in 1.29 secs (7.3e+02 Kbytes/sec)
ftp>

すると、パターンにマッチするファイルのを一つずつ表示しますので、これに対してy [Enter]とすれば、そのファイルを一つずつ転送します。

転送が終ったら、quitでftpコマンドを抜けます。

quit で ftp を終了
ftp> quit
221-You have transferred 1588885 bytes in 4 files.
221-Total traffic for this session was 1590716 bytes in 5 \
    transfers.
221 Thank you for using the FTP service on \
    h49.private.media.cst.nihon-u.ac.jp.
[root@Linux-X /root]# 
  1. 念を押しておきますが、これらは、実験用に用いているので、非常に古いものです。実際に利用する場合は、きちんとsecurity holeのない、最新版を入手してinstallすべきです。

ssh の install

ssh の rpm ファイル

sshのinstallには、rpmコマンドを利用します。今回のinstallでは、次の4つのファイルパッケージをinstallします。

  1. ssh Server *のみ*にする場合は、これは不要ですが、まあ、入れておいた方がよいでしょう。
  2. ssh Client *のみ*にする場合は、これは不要です。

Install 済のファイルの確認

installを開始する前に、まず、既に、install済かどうかを確認してみましょう。この為に、rpmコマンドに-qオプションを付けます。

rpm による openssl パッケージの確認
[root@Linux-X /root]# rpm -q openssl
package openssl is not installed
[root@Linux-X /root]#

すると、opensslというパッケージがinstallされていないことが理解ります。

DHCP Server の構築をしていれば、dhcpパッケージがinstall済ですから、次のようになります。

rpm による dhcp パッケージの確認
[root@Linux-X /root]# rpm -q dhcp
dhcp-2.0-4
[root@Linux-X /root]#

既に、install済であれば、敢て、install作業を行う必要はないわけです。

rpm による一括 install

パッケージのinstall原則として、rpmを使います。その意味では、4つのファイルがあるので、一つずつrpmを起動して、installをすればよいわけです。

ところが、ソフトウェアパッケージには、依存関係があります。上記の例であれば、ssh-server, ssh-clientは、sshパッケージを必要とし、sshパッケージはsslパッケージを必要とします。

例えば、sshパッケージをinstallする前に、ssh-serverパッケージをinstallしようとすると、不足しているパッケージがあるという警告が表示され、installされません(6)

パッケージが不足の時
[root@Linux-X /root]# rpm -Uhv openssh-server-3.1p1-1.i386.rpm
error: failed dependencies:
        openssh = 3.1p1-1 is needed by openssh-server-3.1p1-1
        libcrypto.so.1 is needed by openssh-server-3.1p1-1
[root@Linux-X /root]#

上記の例では、openssh-3.1p1-1 ( openssh-3.1p1-1.rpmに入っている)と、libcrypto.so.1 ( openssl-0.9.6-9.i386.rpmに入っている)がないので、ssh-serverがinstallできないといっているわけです。

したがって、もし、一つずつinstallするならば、最初にopenssl,次にopenssh、そして、その後に、ssh-client, ssh-server (この間には、依存関係がないので、順番はどちらでもよい.. )をinstallすればよいわけです。

しかし、rpmには、もっと便利な機能があります。実は、依存関係があるようなrpmファイルを複数指定すると、自動てきに、そのファイルの依存関係を調べて、正い順番にinstall作業をおこなってくれます。

パッケージの一括 install
[root@Linux-X /root]# ls openss*.rpm
openssh-3.1p1-1.i386.rpm          openssh-server-3.1p1-1.i386.rpm
openssh-clients-3.1p1-1.i386.rpm  openssl-0.9.6-9.i386.rpm
[root@Linux-X /root]# rpm -Uhv openss*.rpm
Preparing... ########################################### [100%]
1:openssl ########################################### [ 25%]
2:openssh ########################################### [ 50%]
3:openssh-clients ########################################### [ \
    75%]
4:openssh-server ########################################### \
    [100%]
[root@Linux-X /root]# 

勿論、すでにinstall済の場合は、何もしませんし、仮に古い版がinstallされていた場合は、update (古いパッケージを削除して、その後で新しいパッケージを入れる)等も行ってくれます。

  1. このように書くと、否定的に聞こえますが、実は、これが、いわゆるパッケージ管理システム( rpm )の真骨頂です。このように、何かをするには、別に何が必要かきちんと管理し、報せてくれるので、install時に迷うことが減るわけです。

    もちろん、「何が足りないのかが解っていれば、ついでにそれも」と思うことでしょうし、実は、最近の( rpmの代替や、rpmの後継の.. )パッケージ管理システムは、そのような機能を実現しています。

ssh の設定

sshの設定は、/etc/sshの下にあるssh_config ( client用)とsshd_config用の二つです。

ssh の設定ファイル
[root@Linux-X /root]# ls -al /etc/ssh
total 108
drwxr-xr-x    2 root     root         4096 Jan  1 01:27 .
drwxr-xr-x   30 root     root         4096 Jan  1 01:06 ..
-rw-------    1 root     root        88039 Mar 15  2002 moduli
-rw-r--r-- 1 root root 1144 Mar 15 2002 ssh_config
-rw------- 1 root root 2500 Mar 15 2002 sshd_config
[root@Linux-X /root]# 

もちろん、server管理の設定で変更が必要になるのは、sshd_configの方です。ただし、今回は、defaultの設定で問題ないので、これに関する作業はありません。

sshd の起動

ssh serverを運用するということは、sshd (ssh daemon)を起動するということです。この為には、起動scriptを実行します。

初めて、sshdを起動すると、sshでの暗号通信のための公開鍵を自動生成しようとするのでしばし時間がかります。二度目以降は、一度生成した鍵を利用しますので、待たされることはありません。

起動 script による sshd の起動(初回)
[root@Linux-X /root]# /etc/rc.d/init.d/sshd start
Generating SSH1 RSA host key: [ OK ]
Generating SSH2 RSA host key: [ OK ]
Generating SSH2 DSA host key: [ OK ]
Starting sshd: [ OK ]
[root@Linux-X /root]# 

作成された鍵は、/etc/sshの下に作成されます。

暗号の為の鍵ファイル
[root@Linux-X /root]# ls -al /etc/ssh
total 132
drwxr-xr-x    2 root     root         4096 Jan  1 01:34 .
drwxr-xr-x   30 root     root         4096 Jan  1 01:06 ..
-rw-------    1 root     root        88039 Mar 15  2002 moduli
-rw-r--r-- 1 root root 1144 Mar 15 2002 ssh_config
-rw------- 1 root root 668 Jan 1 01:34 ssh_host_dsa_key
-rw-r--r-- 1 root root 590 Jan 1 01:34 ssh_host_dsa_key.pub
-rw------- 1 root root 515 Jan 1 01:33 ssh_host_key
-rw-r--r-- 1 root root 319 Jan 1 01:33 ssh_host_key.pub
-rw------- 1 root root 887 Jan 1 01:33 ssh_host_rsa_key
-rw-r--r-- 1 root root 210 Jan 1 01:33 ssh_host_rsa_key.pub
-rw------- 1 root root 2500 Mar 15 2002 sshd_config
[root@Linux-X /root]# 

これらのファイルがあれば、二度目は、すぐに起動します。

sshd の停止と起動
[root@Linux-X /root]# /etc/rc.d/init.d/sshd stop
Shutting down sshd: [ OK ]
[root@Linux-X /root]# /etc/rc.d/init.d/sshd start
Starting sshd: [ OK ]
[root@Linux-X /root]#

実験 1 : ssh を使ってみる

次のような実験を行う。

実験 2 : sshd の管理

port fowarding

概要

sshには、様々な機能がありますが、その内の一つは、TCP tunnelによるport fowardingです。

port fowardingというのは、端的に言えば、一つのportへの通信があった場合、そのportへのパケットを他のPCやportに自動的に転送( forwading )する仕組の事です。

それ自身は、sshの機能とは直接は無関係なのですが、sshで通信すると、その「転送された通信部分が暗号化される」ということに重要な意味があります。

例えば、tcpdump の利用法で学んだように、httpやtelnet, popを利用してのpasswordの送信は、tcpdumpを利用して、簡単に覗視ることができます。これでは、何のためにid/passwordが必要なのかよくわかりません(7)

ところが、sshのport forwardingを利用することによって、この問題を回避する(8)ことができます。

また、通信が、一旦ssh serverを経由するので、もし、clientからは直接接続できないが、ssh serverからなら接続できるようなHostがある場合に、このport forwardingを使って、接続が可能(9)になります。

  1. 銀行のATMで、預金を下す時に、暗証番号を大声で読み上げているようなものです。
  2. まあ、実を言えば、8桁程度のpasswordでは、計算機に虱つぶしされてしまえば、そこ迄なのですが..。できれば、公開鍵暗号方式を選択したいものです。
  3. このような目的には、一般な、VPN接続を行うという方法もあります。実は、sshとpppを組み合わせて利用することにより、VPN接続を実現することができます。

Local Port の forwading

Local Portのforwardingは、Local Hostへ接続された通信をsshのtunnelを通して、remoteへforwardします。

実験 2: local port の forwading

実験 Network

次のようなNetworkを構成する。


	    Linux-C           Linux-T
                |                 |
        >-------+-----------------+----<
                |	               192.168.1.0/24
              Linux-G 
                |
        >-------+----------------------<
                |	               192.168.2.0/24
             Linux-S

確認

実験の前に以下の点を確認する。

実験内容

Remote Port の forwading

Local Portのforwardingでは、Local Hostへの接続を、他のHostへ結び付けることができた。これは、自分のHost (Local Host)上で、Client Softwareを動かす場合を想定している。

それに対して、今度は、Remote Hostへの接続を、自分のHostへの接続にForwardする方法について説明する。

この方法は、自分のHost (Local Host)上で、Server Softwareを動かす場合を想定している。

実験 3: Remote port の forwading

実験 Network

次のようなNetworkを構成する。


	    Linux-C
                |
        >-------+----------------------<
                |	               192.168.1.0/24
              Linux-G 
                |
        >-------+----------------------<
                |	               192.168.2.0/24
             Linux-S

確認

実験の前に以下の点を確認する。

実験内容

Remote forwading の意義

Remote fowardingでは、折角のsshの暗号通信の機能は利用されていません。実際、確かめてみれば、Linux-CからLinux-Gへの通信(これは、結果的に、Linux-Sへforwardingされる)は、簡単に覗視が可能です。

しかし、Local PortのForwadingでは、Forwadingを行わなくても、Linux-CとLinux-Sは直接、通信ができたわけなのですが、Remote Portの例では、Linux-CとLinux-Sが直接通信ができないにも拘らず、forwardingによって、通信が可能になりました。

つまり、Localの場合は、sshの暗号化を利用するためにforwardingが利用され、Remoteの場合は、forwadingをするために、sshの暗号通信が利用されているわけです。

Localであれ、Remoteであれ、Forwadingは、IPのRoutingと独立に、しかも、Userが指定できるRouting Controlなので、色々な使い通があります。

例えば、上記のLocalとRemoteを組合せて利用することにより、本来は、通信できない所に、暗号通信を実現することができます。

実験 4: Local / Remote forwading の組み合わせ

sshのLocal/Remoteを組み合わせることにより、直接接続できないHostと暗号通信をおこないなさい。

参考資料