松本linux勉強会 ssh 暗号化と認証のプロトコル
TRANSCRIPT
自己紹介
大原 慎一郎 https://twitter.com/ohhara_shiojiri
(有)トラストネットワークス 塩尻インキュベーションプラザ108号室
・長野県塩尻市に活動拠点を置く、市内プログラマー有志による団体・「オープンな環境でオープンな活動を目指す」を合言葉に集う・CoderDojo Shiojiri 開催 ・小学生高学年向けRuby教室開催・IT技術書をリブライズで貸し出し、また市立図書館と協力
http://shiojiri-osslabo.com/
アジェンダ
● SSHについて再確認しよう● 検証環境● クライアントソフト● 通信経路の暗号化● パスワード認証● 公開鍵認証● セキュリティ的に設定すべき項目
SSHについて再確認しよう
● SecureShell(セキュアシェルの略称)● 通信経路間を暗号化してリモートから安全にコ
ンピューターを操作できる。● 複数の認証方式が提供されている。● 通信経路間の暗号化と認証は別と考える。● クラウドのインスタンス(仮想サーバー)への接
続はsshが基本です。
SSHについて再確認しよう
● サーバーソフトの実装としては、オープンソースのOpenSSHが広く利用されている。
● 平文でやりとりされるtelnetやrloginの代替として利用される。
● ファイル転送においても、平文でやりとりされる rcp,ftpに変わって、scp,sftpが利用可能
検証環境
● VirtualBox 4.3.14(2014/09/03時点)○ https://www.virtualbox.org/wiki/Downloads○ CPUの仮想マシン支援機能が必要(BIOS設定)○ Windowsの場合、システムのPATH設定が必要
■ 4.2系 C:\Program Files\Oracle VM VirtualBox■ 4.3系 C:\Program Files\Oracle\VirtualBox
検証環境
● Vagrant 1.6.5(2014/09/05時点)○ http://www.vagrantup.com/downloads.html○ Windowsの場合、システムのPATH設定が必要
■ C:\HashiCorp\Vagrant\bin■ C:\HashiCorp\Vagrant\embedded\mingw\bin
○ コマンドプロンプトの代わりにmingw32が使用できる。■ C:\HashiCorp\Vagrant\embedded\mingw\mingw32env.cmd
● BOXファイル CentOS 6.5○ https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3
/centos65-x86_64-20140116.box
検証環境
● Vagrantfileを編集してIPアドレスを割り当てたノードで起動させます。
● Vagrant入門の資料を参照して下さい。○ http://www.slideshare.net/ShinichiroOhhara/solavagrantver2
Virtual Box 環境
検証環境
クライアント側Ubuntu 14.04
ホストPC
ルーター192.168.33.1
サーバー側CentOS6.5
192.168.33.22
クライアントソフト
● 主なSSHプロトコルを使用するソフト○ OpenSSH○ PuTTY○ Tera Term○ WinSCP○ FFFTP
クライアントソフト
● コマンドラインのOpenSSHをここでは使用● OpenSSHクライアントのインストール
○ CentOS → yum install openssh-client○ Ubuntu → apt-get install ssh
通信経路の暗号化
● vagrantで起動させたCentOS6.5のノードにパスワード認証でログインします。○ ssh [email protected]
● ノードに割り当てたIPアドレスを指定します。● アカウントはvagrantです。● パスワードも同じです。● 確認できたらログアウトします。
通信経路の暗号化
● パケットキャプチャソフト Wireshark● ログインパケットを監視してみる。● 暗号化されていないTelnetの中身を確認● ここで実演● 暗号化したSSHの中身を確認● ここで実演● 通信経路間の暗号化の重要性を認識しよう
パスワード認証
● 外部からrootアカウントでログイン出来る状態は大変危険です。
● rootアカウントでログインして確認してみます。● パスワードはvagrantと同じです。● 確認できたら、そのままログイン状態からノード
のsshサーバー設定を変更します。● 2重セッションで設定するのがコツ
パスワード認証
SSHクライアント SSHサーバー
最初の接続(設定用)
2つ目の接続(確認用)
SSHサーバーの設定変更が有効になるのは、設定変更後からの新規接続なので、設定を間違えた場合を想定して、最初の接続は切らずに2つ目の新規接続で動作確認しよう!
パスワード認証
● rootログインを禁止設定しましょう。○ /etc/ssh/sshd_config
PermitRootLogin no
service sshd reload
● sshサーバーを再設定してサービスを再起動。
パスワード認証
● rootログインが出来るか再確認してみます。● rootアカウントで正しいパスワードを入力しても
ログイン出来ない事を確認しましょう。
パスワード認証
● rootアカウントのログインを禁止します。● クラウドのインスタンスは設定済みの場合が多
いですが、利用前に確認しましょう。● rootの初期パスワードを必ず変更しましょう。● 安易なパスワードはリスト攻撃に対して脆弱で
す。● パスワード認証は基本的に使用しない事。
公開鍵認証
● クラウドのインスタンス認証方式の標準● 公開鍵と秘密鍵のペアで作成される。● 公開鍵は相手に渡して公開しても良い。● 秘密鍵は絶対に非公開にして厳重管理。● 公開鍵で暗号化して、秘密鍵で復号化する。● RSAアルゴリズムは逆方向にも使えるが、他の
公開鍵認証で使用出来るとは限らない。
公開鍵認証
● 公開鍵および秘密鍵を作成します。
● RSA2048bitが一般的なアルゴリズムです。● パスフレーズ無しでも作成できます。
ssh-keygen -t rsa -C “コメント”
ssh-keygen -N “” -t rsa -C “コメント”
公開鍵認証
● 2つの鍵ファイルを確認します。○ 秘密鍵 /home/user/.ssh/id_rsa○ 公開鍵 /home/user/.ssh/id_rsa.pub
● サーバー側へ公開鍵を登録します。● ホームディレクトリ以下の隠しディレクトリ.sshの
authorized_keysファイル● 1行につき1つの公開鍵を登録できる。
公開鍵認証
● 登録方法は様々あります。○ 2つのコンソール画面でコピペ編集する。○ 公開鍵をファイル転送して、編集する。○ 専用コマンドssh-copy-idを使用する。
● ssh-copy-id○ サーバー側の .ssh/authorized_keysファイルへ追記
ssh-copy-id -i 公開鍵ファイル user@host
公開鍵認証
● パスワード認証を禁止設定しましょう。○ /etc/ssh/sshd_config
PasswordAuthentication no
service sshd reload
● sshサーバーを再設定してサービスを再起動。
公開鍵認証
ssh -i 秘密鍵ファイル user@host
● 秘密鍵を使用してログインしてみます。
● パスワード入力が出来なくてログインが出来ない事を確認しましょう。
● 予めホスト設定ファイル(.ssh/config)を用意すれば、毎回のログインコマンドが短く出来ます。
セキュリティ的に設定すべき項目
● sshサーバーの設定で、セキュリティ的に設定を推奨する項目を紹介します。
● 組織やプロジェクトに応じて運用は変わりますが、確固たるセキュリティポリシーを事前に決めておきましょう。
セキュリティ的に設定すべき項目
● Port 22○ TCP 22番ポートが標準ですが、変更が推奨されます。
○ 特定用途に割り当てられるウェルノウンポート以外で
IANA管理外の49152番以降ならば自由。
○ ノードの設置状況によってファイヤーウォール等を考慮
する必要があります。
○ 今日ではIPv4アドレスの全域を約45分でポートスキャン
が可能なので、ポート番号の変更は気休め程度です。
セキュリティ的に設定すべき項目
● Protocol 2○ 脆弱性のあるバージョン1は使用しない事。○ 1,2と併記されている場合は2のみに変更します。
● ChallengeResponseAuthentication no○ 質問の回答で認証するオプションです。
○ 質問はパスワードの場合が多いので、パスワード認証
の禁止と同様に禁止しないと、パスワード認証が出来て
しまいます。
セキュリティ的に設定すべき項目
● UsePAM no○ PAM認証ではユーザー毎に認証を変えられます。○ ChallengeResponseAuthenticationと併用されます。
○ パスワード認証とrootログインの恐れがあるので、禁止
します。
● MaxStartups 10:30:100○ 未認証の接続数を制限します。○ 開始時の数:超えた時の制限率:拒否する数○ ログの抑制にも効果があります。