1.1 SSH とは
SSH は PC を遠隔でリモート操作するためのものです。サーバは基本、サーバルーム、データセンターなどで運営されることが一般的です。その為、遠隔操作する技術が必要になります。
いままでは TELNET というプロトコルが使われてましたが、TELNET はデータを平文で送るという欠点があり、サーバを安全に運営する事ができません。安全な通信に求められるものは、以下の2つに集約できます。
- 盗聴されてもデータが読み取られないこと(暗号化)
- 確実なユーザ・ホスト認証
この2点を実現したものが SSH プロトコルです。
1.1.1 SSH プロトコル
SSH プロトコルの大きな特徴は以下の3つになります。
- 暗号化されたデータで通信
- TCP/22 ポートを使用
- クライアント・サーバ方式で実現
1.1.2 OpenSSH
現在、使われている SSH の中でも主流となっているのが OpenSSH です。 これは、OpenBSD プロジェクトが開発した OpenSSH パッケージです。 CentOS では、SSH サーバと SSH クライアントを利用する為には、以下のパッケージが必要になります。
- opnessh
- ssh 本体
- opnessh-client
- クライアント用
- opnessh-server
- サーバ用
- opnessl
- 暗号化用
1.2 OpenSSH クライアント
1.2.1 SSH クライアントの利用
Linux のシェルから ssh を利用する場合は、以下のような書式になります。
- 例) 172.16.0.1 にユーザ user でログインする場合
- ssh user@172.16.0.1
SSH クライアントは、Windows の場合 putty, TeraTerm などが主流となっています。
1.2.2 ホスト間認証
通信を暗号化しても全てが安全になるわけではありません。攻撃者のとる手法として、「なりすまし」があります。接続先のホストになりますし、重症なデータを奪うというものです。 このなりすましからクライアントを守るために、1回目の接続時にホスト間認証用の公開鍵を送信します。この公開鍵は、固有のペアとなる秘密鍵を持ちそれを使いなりますましを防止します。 ある SSH サーバに対して、SSH コマンドを使用して、通信を開始する場合初回ログインにおいては、ホスト間認証用の鍵がサーバから送られてきた事を示すメッセージが表示されます。 Linux の場合、ユーザのホームディレクトリにある .ssh/know_hosts ファイルに順次追記されていきます。
- 参考) 現在、SSH ログイン中のユーザを表示するコマンド
- w
1.2.3 UNIX パスワード認証
SSH を用いた通信は、サーバのホスト間認証が終了した後、ユーザーの認証が行われます。認証方法は、通常のアカウントとパスワードを用いた UNIX パスワード認証が行われます。
1.3 OpenSSH サーバ
1.3.1 SSH サーバ
OpenSSH のサーバプログラムは、openssh-server パッケージによりインストールされます。実行プログラムは、/usr/sbin/sshd であり、sshd デーモンが SSH サーバの役割を担います。
sshd に関する設定ファイルは、/etc/ssh/ssh_config です。
- 参考) 現在、接続待ちポートを確認できるコマンド(22番を確認)
- netstat -atn
1.3.2 SSH サーバの設定
sshd の設定は、/etc/ssh/ssh_config に配置されています。重要な項目は、以下の通りです。
| 設定項目 | 詳細 |
|---|---|
| Port | sshd の Listen するポート番号。デフォルトは22。 |
| Protocol | sshd がサポートする SSH プロトコルのバージョン。1と2があるが、ほとんどが2を使う。両方使う事もできる。 |
| HostKey | クライアント側に送信するホスト認証鍵を納めたファイル名。 |
| PermitRootLogin | root のログインを許可するかを指定。特に理由がない場合は、拒否するのが望ましい。 |
| PasswordAuthentication | UNIX パスワード認証を許可するかどうかを指定。 |
設定を変更した場合は、sshd を再起動して、設定を有効にする必要があります。
- 書式) sshd 再起動
- service sshd restart または /etc/init.d/sshd restart
1.3.3 SSH サーバへのアクセス制限
デフォルトでは、全てのホストからの SSH サーバへのアクセスが許可されています。SSH による通信を信頼できるホストのみ許可する場合は Tcpwrappers を利用して制限をかけます。 下記の設定ファイルを使って設定します。
- /etc/hosts.allow
- /etc/hosts.deny
hosts.allow には、アクセスを許可する IP アドレスまたは FQDN を記述します。逆に hosts.deny には、アクセスを拒否する IP アドレスまたは FQDN を記述します。
- 書式) hosts.allow, hosts.deny の設定
- sshd: 設定するホスト1 設定するホスト2 ...
hosts.allow と hosts.deny は、先に hosts.allow が読み込まれ許可 IP の対象となっていた場合は、すぐに許可されます。 許可 IP の対象となっていない場合は、hosts.deny を読み込み、拒否 IP となっていた場合はアクセスが拒否されます。 hosts.allow と hosts.deny どちらのファイルにも対象とされていない IP はアクセスが許可されます。
- 参考) hosts.allow, hosts.deny の特殊設定例
- sshd: 172.16.0.0/255.255.0.0 サブネットの利用
sshd: 172.16. サブネットの利用
sshd: ALL 全ての IP が対象