では、今日も授業を始める。今日のテーマはTelnet(テルネット)とSSH(エスエスエイチ)だ。
SSHって、リモートログインのときに使うの?
うむ。今日はサーバにSSHで接続して、コマンドを打ってもらう。
SSHって何なの?
SSHは、Secure Shell(セキュアシェル)の略で、サーバと通信するためのプロトコルだ。
例えば、自分のパソコンからサーバへログインするときにSSHを利用する。
SSHを利用すれば、クライアントとサーバでの通信パケットが平文ではなく、
すべて暗号化される。よって、セキュアに(安全に)リモート接続することができる。
平文って何?
平文とはクリアテキストのことで、暗号化されていない文字列のことだ。
つまり、クライアントとサーバの間で流れているパケットが
平文ということは、パケットをキャプチャしてパケットの中身を見ると、どのような内容が流れているか
分かってしまうということね。
暗号化されていれば、パケットキャプチャされても
内容がわからないが、平文で通信している場合は暗号化されていないから中身が見えてしまうってことね。
うむ。SSHなら誰かにパケットを盗聴されても中身が見られることはないからセキュアな通信ができる。
以前は、Telnetが利用されていたんだけど、Telnetだと平文で中身が見えるからセキュリティ上、よくない。
だから今はSSHの暗号通信でリモート接続するのが通常になった。
TelnetもSSHもリモート接続するときに利用するプロトコルだけど、
Telnetは暗号化されずに通信するってことね。
例えば、CentOSなどを構築して、クライアントPCからCentOSのサーバにログインするときには、
CentOS側にあらかじめSSHの設定を行って、クライアントPCのTeraterm(テラターム)などを使って、クライアントPCから
CentOSへSSHでログインする。
次にSSHの設定についてみていこう。
SSHは以下の2つのファイルで、アクセス制限ができる。
例えば、あるIPアドレスからのみSSH接続を許可するというような設定が可能だ。
/etc/hosts.allow
/etc/hosts.deny
この2つのファイルを利用して、アクセス制限を行うことを
TCP Wrapper(ティーシーピーラッパー)の設定によってアクセス制限するという。
TCP Wrapperで、クライアントからのアクセスを制御するのね。
TCP Wrapperを設定するための設定ファイルが、/etc/hosts.allow、/etc/hosts.denyね。
例えば、クライアントからサーバへSSHでログインするときは、SSHのデーモン(サービス)がこの2つのファイルを参照する。
SSH以外にもこの2つの設定ファイルを参照するアプリケーションがある。
どのアプリケーションがこの/etc/hosts.allow、/etc/hosts.denyを利用するかは、アプリケーションによって決まっている。
TCP Wrapperを利用しないアプリケーションもあれば、利用するアプリケーションもある。
SSHされるサーバ側でのアクセス制御の例を説明しよう。
/etc/hosts.allowファイルに、許可したいクライアントのIPアドレスを記述する。
以下の例だと、192.168.1.xxxもしくは192.168.2.xxxのIPアドレスが設定されているクライアントからのSSH接続を許可するということになる。
ALL : 192.168.1. 192.168.2.
そして、次に、/etc/hosts.denyファイルに、以下のようにすべてのアクセスを拒否するように記述する。
ALL : ALL
/etc/hosts.denyファイルではすべて拒否する設定にしておいて、
/etc/hosts.allowファイルに許可したいクライアントIPアドレスを設定するのね。
あと、SSHには接続方法がいくつかある。
・パスワード認証
・公開鍵認証
・チャレンジレスポンス認証
サーバ側でこれらのどの認証方式を許可するかの設定は、SSHの設定ファイルを編集して反映すればいいのね。
パスワード認証と、チャレンジレスポンス認証は、ログインIDとパスワードを知っていれば誰でもログインすることができるが、
公開鍵認証は、クライアント側が秘密鍵を持っていないとログインできないから、公開鍵認証の方がセキュリティ上、良い。
例えば、負荷分散装置として有名なBIG-IP(ビッグアイピー)へSSHログインしたいときは
チャレンジレスポンス認証が使われる。これはBIG-IPのデフォルト設定(初期設定)が、SSHの認証はチャレンジレスポンス認証となっているからだ。
ユーザ名とパスワードはデフォルトでは以下になっている。
・ユーザ名:root
・パスワード:default
そうすると、クライアントはTeratermを使って、許可されている認証方式でSSHできるようになるのね。
クライアントから初めてSSHすると、Teratermの場合、サーバ(接続先)の公開鍵をknown_hostsファイルにまず登録するか聞かれる。
具体的には、「Are you sure you want to continue connecting (yes/no)?」のようなメッセージが表示される。
これは、サーバの公開鍵の情報がクライアントのknown_hostsファイルの中にないよっていう意味だ。
Yesを選択すると、known_hostsに登録(記述)されて、サーバにSSHで接続できる。
次回からは、SSHのときに、known_hostsに登録するか?ということは聞かれなくなる。
known_hostsに登録されれば、以前SSH接続したサーバだけど、
初めてSSHログインするサーバは、本当にそのサーバにログインしていいのか、なりすましされたサーバではないか、注意した方がいいっていうことね。
known_hostsファイルに記述されるサーバ側の公開鍵は、finger print(フィンガープリント)といわれている。
finger printは、公開鍵からハッシュ関数を使って作成されるユニークな文字列だ。
このfinger printがknown_hostsファイルに記述される。
Linuxサーバを構築したときは、SSHの設定をすることになるけど、公開鍵認証の設定をしておくのが良い。
鍵を持っていない人(クライアント)はログインできないからセキュリティ上、良いもんね。
TelnetとSSHの違いは理解できたかな?
リケジョをなめんなよ。
1.SSHもTelnetもサーバにログインする時に利用するプロトコル
2.SSHは暗号化通信
3.SSHは、Secure Shellの略
4.Telnetは平文通信(暗号化されていない)
5.平文とはクリアテキスト(暗号化されていない)
6./etc/hosts.allow、/etc/hosts.denyでTCP Wrapperの設定
7.known_hostsにはサーバ(ホスト)の公開鍵(finger print)が記述される
8.Linuxサーバを構築したら公開鍵認証でSSH設定すると良い