第3章: SSHの設定などセキュリティの設定に配慮した設計を行う
前章ではVirtualBoxによる仮想マシンのネットワークの設定を行い, LAN内でIPアドレスを固定化しました. この章では仮想マシンへのSSHを可能にするだけでなく, 実際にインターネットに公開した際を考慮したセキュリティの設定を行います.
SSH設定
実際にSSHで仮想マシンへ接続してみましょう.前章の例では
- IPアドレス:
192.168.111.200
- ユーザー名:
jtwp470
でした. 実際にやってみましょう.
$ ssh [email protected]
The authenticity of host '192.168.111.200 (192.168.111.200)' can't be established.
ECDSA key fingerprint is SHA256:xw7n7gK4W1dXn0ZxVgEDeRS9lmVkjANGve5yYhsZsV0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.111.200' (ECDSA) to the list of known hosts.
[email protected]'s password: # パスワード入力
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-22-generic x86_64)
* Documentation: https://help.ubuntu.com/
0 packages can be updated.
0 updates are security updates.
Last login: Thu Jun 2 00:33:36 2016
jtwp470@ubuntu:~$
簡単ですね.しかし今はパスワード認証だけでログインする際は毎度毎度パスワードを入力しなければなりませんし, パスワード入力ができるということは他者でもログインできてしまうおそれがあるということです.
そこでSSHでは公開鍵認証を利用できますのでこれを利用してセキュリティを高めます.
SSH鍵の作成
まずクライアントでSSH鍵を作成します.もし作成してある場合は次の節まで飛ばしてください.
鍵を作成するにはssh-keygen
コマンドを利用します.
MacのデフォルトのSSHコマンドは少し古いため,対応していない場合がありますがRSA鍵以外にECDSA鍵やEd25519鍵を作成することができます.
ECDSA鍵やed25519鍵?
ECDSAは楕円曲線暗号を利用したアルゴリズムで離散対数問題の困難性を根拠にしています.小さな鍵長で高速な操作をすることができます.OpenSSH 5.7から導入されました. 次にEd25519鍵はECDSA鍵よりも強固な楕円曲線暗号を利用した方法でOpenSSH 6.5から利用することができます.
個人的に新たな鍵を作成する場合はこれらの鍵を利用した方がRSA鍵に比べて更に安全で高速に動作することが期待できるため,これらの鍵の利用を推奨しますが古いシステムにアクセスする際にこれらのアルゴリズムがサポートされていないため,使えない場合があります.
これらの鍵を作成する際は以下のように作ります.
$ ssh-keygen -t ed25519
$ ssh-keygen -t ecdsa
SSH鍵を登録
RSA鍵で作成する場合は以下のように作成します.
$ ssh-keygen -t rsa -b 4096
後ろの-b 4096
を忘れないようにしてください というのも, デフォルトでの鍵長は2048ビットですが安全性に少し疑問があります.そこで4096ビットにしておきましょう.
パスフレーズに関しては登録してもよいですし, 登録しなくても良いと思います.
勿論パスフレーズがあったほうがセキュアですがその分認証時にパスワード入力を求められてしまうので少し不便かなと思います.ただし一定時間パスワードをキャッシュしておくプログラムssh-agent
などもあるので使ってみるのも良いかと思います.
とりあえず今回は鍵にパスフレーズをかけないとします.
さて, 鍵が作成されると ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub
が作成されます.
pubの方は公開鍵なのでバレても問題ありませんが秘密鍵の方はきちんと保管しておきましょう.これが盗まれた場合, 公開鍵認証の前提そのものが覆ります.
公開鍵認証のみへの変更
ではサーバーにSSH公開鍵を登録します.適当に ~/.ssh/id_rsa.pub
の中身をコピーします.Macなら
$ cat ~/.ssh/id_rsa.pub | pbcopy
でクリップボードにコピーされるので便利だと思います. 次に仮想マシンにログインし,
$ mkdir ~/.ssh
を実行します.そして適当なエディタを開き, ~/.ssh/authorized_keys
に先ほどの鍵を追加します.
これで再度SSHしてみましょう.
$ ssh [email protected]
でパスワード無しにログインできるはずです.
さて今は鍵がなくてもパスワード認証を使ってログインすることが可能です. それはセキュリティ的に良くないという話をしました.そこで公開鍵認証のみにしてみます.
まず仮想マシンにログインし,
$ sudo vim /etc/ssh/sshd_config
を実行します. そして
#PasswordAuthentication yes
PasswordAuthentication no
と変更したのち, SSHサーバーを再起動します. ちなみに設定を間違っているとこの後SSHサーバーが起動せず, セッションが切断されます.今回の場合, 仮想マシンですので間違えても修正するのが簡単ですが万が一DCなどにあるサーバーでSSH以外の代替アクセスがない場合現地に行かない限りログインできなくなるため,きちんと確認してから再起動するようにしましょう.
$ sudo service ssh restart
これでログインできるようになっていれば問題ありません.
ポート番号を変更する
さて, みなさんはSSHのポート番号をご存知でしょうか?
答えは22です.しかしあまりにも有名なため,攻撃者は22番に対して攻撃を仕掛けてきます.個人的にはSSHサーバーを22で動かしていても公開鍵認証のみしかサポートしなければ安全だと思いますが更に安全度を上げるために他のポートに変えてみましょう.
例えば22から65022 にしてみます.
まず /etc/ssh/sshd_config
を開き
Port 22
を
Port 65022
に書き換えて, sudo service ssh restart
でSSHサーバーを再起動します.
すると以下のようになります.
$ ssh [email protected]
ssh: connect to host 192.168.111.200 port 22: Connection refused
22番でSSHをすると弾かれますね. SSHコマンドのオプションでポート番号を指定します.
$ ssh -p 65022 [email protected]
これでログインできればよいでしょう.
以上でおしまいです.この章ではSSHのみに絞って設定を行っていますが,更にセキュリティを高めるには
などを参考にするとよいでしょう.
TIPS
SSH公開鍵を登録する便利なコマンド
いちいち自分の公開鍵をコピーしてログイン先の~/.ssh/authorized_keys
に追加するのは面倒ですね.もしパスワード認証が使えるのであれば以下のコマンドで簡単に登録できます.
$ ssh-copy-id [email protected]
この後, パスワード認証を切ってしまえば最強のサーバーの出来上がりですねw
SSHのエイリアスを書く
SSHは実はエイリアス的なものを作成できます. 詳しくは~/.ssh/config
にかけばいいので適当に調べてみてはいかがでしょうか.