sshでセキュアネットワーク構築

宗近龍一郎(ハンドル名:まいパパ)
株式会社デジタルデザイン
Project BLUE
2000/12/15

おもな内容
sshとは
sshの入手とインストール
Linuxクライアントからのログイン
Windowsクライアントからのログイン
sshを利用するツール
One-Timeパスワードでより安全に

 昨今は家庭でもインターネットに常時接続できる環境が整ってきました。職場や学校から自宅のサーバへリモートでログインしておられる方も多いのではないでしょうか。そのような場合皆さんはどういった方法でログインされていますか? Windowsマシンからtelnetコマンドを使ってログインしていませんか?

 ちょっと待ってください。現実社会と同じように、ネットワーク社会にも悪者はたくさんいます。彼らはあなたのログインアカウントやパスワード、特にrootのパスワードを虎視眈々と狙っています。そして、入手したアカウントであなたの大事な情報を盗んだり、はたまたあなたのサーバを踏み台にして別のサーバに悪戯をしようとたくらんでいます。そうならないためにも、安全な方法を使ってログインしなくてはなりません。その安全なログイン方法こそ、これから紹介するsshなのです。

sshとは

 ssh(Secure SHell)とはネットワークを介してインターネット上に置かれているサーバにログインしたり、 コマンドを実行したり、ほかのマシンへファイルを移動 (コピー) したりするためのプログラムです。パスワードやデータを暗号化して通信内容の漏洩を防ぐほか、データを圧縮するので送受信を効率化できます。そのため、安全性が保障されない経路上(たとえばインターネット)でも安全な通信が行えるというわけです。具体的には、rsh(リモートシェル)やrlogin(リモートログイン)、rcp(リモートファイルコピー)などのr系コマンドに代わるものとして作られており、それぞれssh、slogin、scpといったコマンドが用意されています。

 sshにはssh-1.x系とssh-2.x系の2種類があります。1.xと2.xには、暗号化を行うプロトコルや使用ライセンスに違いがあります。1.x系は個人的な非商用の使用については無償であるという緩やかなライセンス形態をとっているのですが、2.x系はおおむね有償となっています。ただし、1.x系も全ての用途について無償というわけではないので、さらに緩やかなライセンス形態を持つフリーな実装であるOpenSSHも出てきています。

sshの入手とインストール

 TurboLinux Serverなど、比較的新しいディストリビューションには、あらかじめOpenSSHがインストールされています。OpenSSHがインストールされていない場合は、RPMパッケージで導入することができます。ただし、OpenSSHを導入するにはあらかじめOpenSSLがインストールされている必要があります。

 OpenSSHは面倒だと思われる方で、個人的に非商用で使用するのであればssh-1.xをコンパイルしてインストールするのがよいと思います。その場合、ssh-1.2.26以下のバージョンについてはセキュリティ的に問題があるので、それ以降のバージョンを使ってください。ここではssh-1.2.30を前提に話を進めることにします。

 2000年12月3日現在、ssh-1.2.30.tar.gzのパッケージは以下のFTPサイトなどに登録されてます。

ftp://ftp.cs.hut.fi/pub/ssh/(一次配布サイト)
ftp://ftp.kyoto.wide.ad.jp/pub/security/ssh/
ftp://ftp.riken.go.jp/pub/security/ssh/

 コンパイルは非常に簡単です。以下のように、ssh-1.2.30.tar.gzを/usr/local/srcなどのディレクトリにコピーして(GNU)tarで展開、configure、makeを行ったあとにsuでrootになり、インストールを実行します。

$ cp ssh-1.2.30.tar.gz /usr/local/src
$ cd /usr/local/src
$ tar xvfz ssh-1.2.30.tar.gz
$ cd ssh1.2.30
$ ./configure
$ make
$ su
# make install

 インストールが終了したら、sshのデーモン(sshd)を起動します。標準では、sshdは/usr/sbinディレクトリにインストールされるので、

# /usr/sbin/sshd

で実行します。

 sshは安全なログインを行うために、ログインしてくる経路を制限します。関連するファイルは/etc/hosts.allowおよび/etc/hosts.denyの2つです。viなどのエディタで2つのファイルを編集します。

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# See man hosts_access(5) for more information.

ALL: ALL
リスト1 /etc/hosts.deny

 経路の制限はまず/etc/hosts.denyを優先しますので、「ALL: ALL」の1行が有効かどうかを確認してください。

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# See man hosts_access(5) for more information

ALL : 127.0.0.1 <- (1)
ALL : 192.168.1.1 <- (2)
ALL : 192.168.0. <- (3)
ALL : machine1.hogehoge.com <- (4)
ALL : .hogehoge.net <- (5)
リスト2 /etc/hosts.allow

 /etc/hosts.allowには、実際にログインする可能性のあるマシンおよびネットワークのアドレスを列挙します。

(1)はローカルホストの指定。必ず指定しておくこと
(2)はログインを許可するマシンを特定する場合(IPアドレスで指定)
(3)はログインを許可するネットワークの指定方法。リスト2の例では、192.168.0.1〜192.168.0.254のマシンがログインできる
(4)はログインを許可するマシンを特定する場合(ホスト名で指定)
(5)はログインを許可するネットワークの指定方法。例ではhogehoge.netに属するホストがログインできる

 そのマシンを管理する管理者のみがログインできるように、経路をなるべく制限するようにしましょう。

Linuxクライアントからのログイン

 Linuxからログインする場合、ssh(/usr/bin/ssh)コマンドを使用します。

[munetika@donald munetika]$ ssh host1.hogehoge.com
The authenticity of host 'host1.hogehoge.com' can't be established.
Key fingerprint is 1024 3a:ee:7e:0d:5d:f2:50:55:52:e0:ac:89:b1:81:5f:bd.
Are you sure you want to continue connecting (yes/no)?

 sshで最初にログインした場合、ログインするサーバの鍵をクライアントに作成します。“yes”と答えてログインを継続します。

Warning: Permanently added 'host1.hogehoge.com,211.x.yyy.zzz' to the list of known hosts.
munetika@host1.hogehoge.com's password:

 パスワードを聞いてきたら、通常のログインと同様にパスワードを入力します。

Last login: Sun Dec 3 10:11:04 2000 from 210.x.yyy.zzz
No mail.
[munetika@donald munetika]$

 プロンプトが出たらログインは成功です。

Windowsクライアントからのログイン

 Windowsクライアントから、sshでLinuxサーバにログインするにはTera Term ProとTTSSH(Teraterm SSH Extension)を使用するのが一番簡単です。

・Tera Term Pro(http://hp.vector.co.jp/authors/VA002416/
・TTSSH(http://www.zipworld.com.au/~roca/ttssh.html

 Tera Term ProとTTSSHのインストール/使用方法については、よくまとまったドキュメントが以下のURLにありますので参考にしてください。

http://stingray.sfc.keio.ac.jp/security/ssh/ttssh.html

 TTSSHを起動し、“Host:”欄に接続先ホスト名、“Passphrase:”欄にパスワードを入力すると、Telnetと同様にログインできます。

sshを利用するツール

 scpコマンドはファイルのコピーを安全に行うことができます。cpコマンドと同様の手順で使えるので、筆者には欠かせないツールになっています(笑)。

 scpコマンドの使用方法は

scp [-r] [コピー元サーバ]:[コピーするファイル/ディレクトリ] [コピー先サーバ]:[コピー先ファイル/ディレクトリ]
-r:指定ディレクトリ以下を再帰的にコピーする場合に付加する
例)
scp /home/munetika/aaa.txt 192.168.1.2:/home/munetika

となります。

 また、2つのサーバ間を同期させるコマンドrsyncについても、sshを使用すれば安全に同期できます。たとえば手元のマシンからリモートのマシンhost2に~/public_html以下を同期させるには

rsync -auvvzb -e ssh --exclude '*~' ~/public_html host2:

とします。ここで引数の意味は

-a archive (ファイルの更新情報を保つ)
-u update (コピー先のファイルが新しければ更新しない)
-v verbose (-vv more verbose)
-z compress (圧縮する)
-b backup (古いファイルを~の付いた名前で保存)

です。なお、“-e ssh”はsshを使用する指定です。

One-Timeパスワードでより安全に

 安全にログインする方法としてsshを紹介しましたが、それでもまだ心配だという方はOne-Timeパスワードと併用することをお勧めします。

http://www.feedmania.org/~yasu/linux/ssh/lj.html

を参考にしてください(編注)。

編注:2004年6月現在、上記URLはリンク切れになっている。

 自分のマシンをクラックされることは、自分自身の被害以上に、それが踏み台になってほかのマシンにまで迷惑をかけることに留意すべきです。セキュリティの確保はインターネット全体に対する義務であるという自覚が必要でしょう。

 それでは、安全なインターネットライフをお過ごしください。

Linux Square全記事インデックス


 Linux Squareフォーラム セキュリティ関連記事
連載:習うより慣れろ! iptablesテンプレート集(全4回)
初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう
連載:ゼロから始めるLinuxセキュリティ(全11回)
奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見
特集:WebDAV時代のセキュリティ対策[前編]
WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる
特集:FreeS/WANによるIPSecの導入と運用[前編]
LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう
特集:Linux以外のIPSecスタックとの相互接続[前編]
別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる
特集:sshでセキュアネットワーク
サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間