Fedora Core 2にはデフォルトでOpenSSHと呼ばれるSSH用サーバ・クライアントプログラムのパッケージが含まれています。OpenSSHのサーバプログラムはsshdです。サーバプログラムは常に接続を待ちながら動作し続けるためデーモンと呼ばれます。
[hoge@localhost hoge]# rpm -qa | grep ssh openssh-server-3.6.1p2-34 openssh-3.6.1p2-34 openssh-clients-3.6.1p2-34
openssh-server-3.6.1p2-34がOpenSSHのサーバプログラムが含まれたパッケージです。
[hoge@localhost hoge]$ rpm -ql openssh-server /etc/pam.d/sshd /etc/rc.d/init.d/sshd /etc/ssh /etc/ssh/sshd_config /usr/libexec/openssh/sftp-server /usr/sbin/sshd /usr/share/man/man5/sshd_config.5.gz /usr/share/man/man8/sftp-server.8.gz /usr/share/man/man8/sshd.8.gz /var/empty/sshd
このパッケージに含まれているsshdデーモンの設定ファイルは/etc/ssh/sshd_configです。
sshdデーモンが動いているかどうか確認します。
[hoge@localhost hoge]$ ps aux | grep sshd root 2922 0.0 0.4 4340 1116 ? S Jun28 0:00 /usr/local/sbin/sshd
[root@localhost root]$ /etc/init.d/sshd 使い方: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
iptablesを設定するにはlokkit等のGUIツールがありますが、GUIツールを利用した場合、直感的に設定を行うことができる反面、複雑な設定がし難い欠点があります。今回はファイアウォールの理解をより深めるため、エディタで直接設定ファイルを編集します。
ファイアウォールを設定するにあたり、次のようなポリシーで実施することにします。
SSHサーバに必要なポートは22(tcp)です。Fedora Coreで利用されるファイアウォールの設定は、/etc/sysconfig/iptablesに保存されています。ファイアウォールのための起動スクリプト(/etc/init.d/iptables)によって、起動時に設定をロード、終了時に設置状況が保存されます。
実際に設定ファイルを編集する前に、誤って設定ファイルを設定してしまった時のためにバックアップを取っておいてください。
※ 設定ファイルのバックアップは別のアプリケーションを構築する時などでも必ず行うようにしてください。
[root@localhost root]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.default
それではエディタを使って次のように編集します。
[root@localhost root]# vi /etc/sysconfig/iptables *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -p icmp --icmp-type any -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT <- この行を追加 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
*filter | 定型部 |
---|---|
:INPUT DROP [0:0] | 定義されていない入力パケットをすべて破棄 |
:FORWARD DROP [0:0] | 定義されていないフォワード用パケットをすべて破棄 |
:OUTPUT ACCEPT [0:0] | 定義されていない出力パケットをすべて許可 |
-A INPUT -i lo -j ACCEPT | ループバックアドレスからの入力パケットをすべて許可 |
-A INPUT -p icmp --icmp-type any -j ACCEPT | すべてのICMP用入力パケットを許可 |
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT | SSHD用入力パケットを許可 |
-A INPUT -m state --state ESTABLISHED、RELATED -j ACCEPT | セッションが確立しているかそれに関連がある入力パケットを許可(注: 実際の設定ファイルではESTABLISHEDとRELATEDの間の句読点は半角のカンマです。) |
-A INPUT -j REJECT --reject-with icmp-host-prohibited | すべての入力パケットを拒絶 |
COMMIT | 定型部 |
今回紹介した以外のiptablesの利用方法は、各自Google等で調べてください。
設定ファイルはroot以外のユーザに参照されるべきではありません。設定ファイルのパーミッションを変更します。
[root@localhost root]# chmod 600 /etc/sysconfig/iptables
編集した設定を反映するにはiptablesを再起動する必要があります。
[root@localhost root]# /etc/init.d/iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ]
ここで[ FAILED ]が出てしまった場合は、ファイアウォールが機能していない状態になるため、有効になるまで次に進んではいけません。今一度、設定ファイルを見直してください。
PuTTYはWindows用のsshクライアントプログラムです。
ノートPCを使って各自のサーバマシンのSSHサーバにアクセスしてみます。ノートPCを持って演習室スクリーン下の中央テーブルに来てください。
同じネットワーク内なので、踏み台サーバの経由はせずにダイレクトにアクセスします。
カテゴリ | 設定項目 | 値 |
---|---|---|
セッション | ホスト名 | 各自のサーバマシンのIP(上記『xx』にはマシン番号が入ります) |
ポート | 22 | |
プロトコル | SSH | |
変換 | 受信されるデータの文字セット変換 | UTF-8 |
接続 | 自動ログインのユーザ名 | 自分で作った一般ユーザ名 |
以上の設定ができたら、一度セッションに戻って、保存してください。
新たに作ったセッションをダブルクリックして接続します。
自分のサーバマシンと付属品一式を持ってそのテーブル担当のRATの人と一緒にB1に移動してください。
B1ではRATの人の指示に従ってマシンを置いてください。
設置作業が終わったら、マシンの電源を入れて、共通に戻ります。
ここからは隣の教室(W311教室)での作業です。
構築したSSHサーバはB1のLAN内に配置されています。
外から直接アクセスすることはできないので、踏み台サーバ(step.cis.k.hosei.ac.jp)を経由してアクセスします。
踏み台サーバを利用するには、情報科学部サーバ(ラボ教室用アプリケーションサーバ)用の公開鍵登録を済ませている必要があります。
リテラシ環境では以下のようなポートフォワードを行います。
ポートフォワード:localhost:10022 -> 踏み台サーバ -> 自分のサーバマシン:22
踏み台マシンにログインするためのPuTTYの設定を行います。
カテゴリ | 設定項目 | 値 |
---|---|---|
セッション | ホスト名 | step.cis.k.hosei.ac.jp |
ポート | 22 | |
プロトコル | SSH | |
変換 | 受信されるデータの文字セット変換 | UTF-8 |
接続 | 自動ログインのユーザ名 | 自分のアプリケーションサーバのログイン名 |
接続-SSH-認証 | 認証のためのプライベートキーファイル | 自分の秘密鍵を指定してください |
接続-SSH-トンネル | 源ポート | 10022 |
送り先 | [自分のサーバマシンのIPアドレス]:22 |
※送り先、のチェックはローカルです。
※トンネルの部分は値を入れたら追加ボタンを押してください。
以上の設定ができたら、一度セッションに戻って、保存してください。
新たに作った踏み台へのセッションをダブルクリックして接続します。
※ログイン名とパスフレーズは情報科学部アカウントと同じになります。
上記のPuTTYのアクセスで次のような接続が可能となります。
ノートPC(localhost):10022 -> 踏み台サーバ -> 自分のサーバマシン:22
ポートフォワードをしているので、接続先のホスト名はlocalhostでポート番号は設定した10022になります。
新しくPuTTYを起動してください。
カテゴリ | 設定項目 | 値 |
---|---|---|
セッション | ホスト名 | localhost |
ポート | 10022 | |
プロトコル | SSH | |
変換 | 受信されるデータの文字セット変換 | UTF-8 |
接続 | 自動ログインのユーザ名 | 自分で作った一般ユーザ名 |
以上の設定ができたら、一度セッションに戻って、保存してください。
この時点でPuTTYは、「踏み台サーバ」と「各自のサーバマシン」の2つの接続を行っています。踏み台サーバのPuTTYを終了すると各自のサーバマシンへの接続は切断されてしまいますので注意してください。
[hoge@localhost hoge]$ mkdir ~/.ssh [hoge@localhost hoge]$ vi ~/.ssh/authorized_keys
『 i 』を押して、viを『インサートモード』にします。公開鍵をコピーし、vi上でマウスの右クリックで貼り付けます。
このとき、インサートモードで貼り付けが行われていないと、正しく公開鍵が貼り付けられません。貼り付けた鍵の先頭が『ssh…』で始まっていることを確認してください。
※ 『 ~ 』はユーザのホームディレクトリを指します。
.sshフォルダには公開鍵以外にも利用方法によっては重要なファイルが配置されるため、パーミッションのチェックが厳しいです。次のように所有者以外のユーザアクセスができないようにしないと公開鍵認証方式でのログインが拒絶されます。
[hoge@localhost hoge]$ chmod 700 ~/.ssh [hoge@localhost hoge]$ chmod 600 ~/.ssh/authorized_keys
安全にsshdを運用できるように設定を変更する必要があります。設定ファイルで『 # 』を先頭につけるとコメントアウトすることができます。コメントアウトされている設定はデフォルトの設定です。
デフォルトではrootのログイン等を許可しているので、設定を変更する必要があります。
デフォルトのSSHサーバの設定は、以下の点でセキュリティ上問題があるので変更してください。
設定 | 値 | 説明 | 問題点 |
---|---|---|---|
PermitRootLogin | yes/no | rootでのログインを許可するかどうか | 直接rootユーザのパスワードを解析される可能性がある |
PasswordAuthentication | yes/no | パスワードログインを許可 | 許可した場合、公開鍵を使用しなくてもログインできる |
ChallengeResponseAuthentication | yes/no | チャレンジ・レスポンス認証を許可 | 推奨されていない |
sshdデーモンの設定ファイルは/etc/ssh/sshd_configです。設定を編集する前にiptablesの設定ファイル同様バックアップを取っておいてください。
[root@localhost root]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default [root@localhost root]# vi /etc/ssh/sshd_config
次の様に変更します。
PermitRootLogin no PasswordAuthentication no ChallengeResponseAuthentication no
変更した設定を反映するにはsshdデーモンを再起動する必要があります。
[root@localhost root]# /etc/init.d/sshd restart
公開鍵の登録に失敗している可能性もあるので、現在のターミナル(PuTTYのウインドウ)を閉じないでおいて、新しくPuTTYのウインドウを開きましょう。
上での設定に加えて、秘密鍵の指定を追加したセッションを作る。
カテゴリ | 設定項目 | 値 |
---|---|---|
セッション | ホスト名 | localhost |
ポート | 10022 | |
プロトコル | SSH | |
変換 | 受信されるデータの文字セット変換 | UTF-8 |
接続 | 自動ログインのユーザ名 | 自分で作った一般ユーザ名 |
接続-SSH-認証 | 認証のためのプライベートキーファイル | 自分の秘密鍵を指定してください |
以上の設定ができたら、一度セッションに戻って、保存してください。
公開鍵認証方式でのログインが成功した場合は、次のように出力されます。
login as: user1 Authenticating with public key "user1@localhost" Passphrase for key "user1@localhost":
user1はログインする一般ユーザ名。
SSHサーバを構築したことにより、今後ネットワーク経由で各自のサーバマシンにログインすることができるようになりました。しかし今回のサーバリテラシでは必要最小限のことしか説明しておらず、今後サーバを運用していくにはまだまだLinuxやサーバについて多くのことを学ぶ必要があります。実際にグローバルIPを持った環境でサーバを構築する際は、各自でさらにスキルを向上させ、安全に運用するためにはどうしたら良いのかについて十分理解してから実施するようにしてください。