2016年5月6日金曜日

外部からsshでログインその2

さて、外部からsshログインが出来る環境は作れた。
但し、ユーザID/パスワードのペアを知っているだけでログイン出来てしまう。
それではセキュリティ的に甘いので、外部からのログインは鍵認証方式だけにしよう。

その前に、認証について…。
色々言われているけど、認証は大きく3つのタイプが存在する。
  1. 知っていること
    パスワードや生年月日等、「この人なら知っているはず」の情報をベースに認証する行為だ。
  2. 持っていること
    USBドングルや、物理的な鍵等、「持っていること」によって認証する行為。コンピュータの世界では、「暗号鍵を格納したUSBデバイスを持っていること」とか「ある特定のファイルを持っていること」が認証に必要な要素になる。
  3. 生体認証
    よく知られている「指紋認証」や「静脈認証」「網膜認証」「虹彩認識」等だ。
そして、認証レベルを高めるためには、これら3つのうち2つ以上を組み合わせると良い、と言われている。(と、テレビで見たw)
普段良く使われているパスワード形式の認証は1のみでありまた、外部に知られてしまえば完全に意味が無くなってしまう認証レベルだ。

対して、sshの鍵認証は、2の「持っていること」に依存する。鍵ペアのうち、「秘密鍵」を持っているかどうかが重要になり、秘密鍵が無ければ利用することが出来ない。
但し、秘密鍵は単なるファイルであり、電子的にはコピーすることが容易だ。そこで、秘密鍵にパスフレーズを付与しておくべきとなる。
秘密鍵にパスフレーズを付与しておけば、2の「(秘密鍵を)持っていること」と、1の「(パスフレーズを)知っていること」の2つの組み合わせでの認証となり、多少なりともセキュリティが強固になる。​

ちなみに、3の「生体認証」を実現するためには、網膜スキャナとか指紋スキャナが必要になり、それを認証システムと組み合わせる必要が有るため、かなりメンドウだ。

話を戻して、The Internet側からのアクセスを鍵認証のみに絞り込む方法だが…。

アプローチとしては、
  • The Internet側からのアクセスでパスワード認証を禁止する
ではなく、
  • デフォルトでパスワード認証を禁止し
  • ローカル(宅内LAN)からのアクセスのみパスワード認証を許可する
の方針を取りたいと思う。
デフォルトでパスワード認証を禁止しておいた方が、何か設定ミスがあっても乗っ取られる可能性は低く出来るからだ。

では順番に設定していこう。
  • デフォルトでパスワード認証を禁止し
    sshdの挙動は、sshd_config(/etc/ssh/sshd_config)に記載する。
    当該ファイルを見てみると、以下の記載が見つかるはずだ。(Ubuntu 16.04の場合)

    # Change to no to disable tunnelled clear text passwords
    #PasswordAuthentication yes

    コメントを見てみれば分かると思うが、PasswordAuthenticationがデフォルトではyesとなっているため、パスワード認証が有効になっている。
    このエントリを有効に(先頭の#を外)し、yesをnoに書き換えれば、パスワード認証が無効になる。
    以下のように書き換えて、sshdの設定ファイルを再読み込みしてみよう。

    # Change to no to disable tunnelled clear text passwords
    #PasswordAuthentication yes

    # Change to no to disable tunnelled clear text passwords
    PasswordAuthentication no

    sshdの設定再読み込みは以下のコマンドだ。(root権限で実行して欲しい)
    # systemctl reload sshd

    これで、パスワード認証が出来なくなったはずだ。実際にログインして試してみて欲しい。
  • ローカル(宅内LAN)からのアクセスのみパスワード認証を許可する
    続いて、宅内LAN(家の中)からのアクセスはパスワード認証が通る用に設定したい。
    これには、sshd_configにMatch句を追加して対応する。

    具体的には、sshd_configに以下のような内容を追記することになる。

    Match Address 192.168.??.0/24
            PasswordAuthentication yes
    Match Address 127.0.0.0/8
            PasswordAuthentication yes


    実際には 192.168.??.0/24 は、それぞれの宅内IPアドレス設計に合わせて設定して欲しい。
    (宅内が 192.168.1.0~192.168.1.255 なら、Match Address 192.168.1.0/24 という具合に)
    127.0.0.0/8はローカルホスト接続用だ。あまり気にしないでいい。

    この状態で設定の再読み込みを行えば、「The Internet側からはパスワード認証出来ない」「宅内からはパスワード認証出来る」という環境が出来上がるはずだ。

    # systemctl reload sshd

    設定が終わったら、宅外、宅内いずれからもログイン確認してみて欲しい。
    期待した通りに動いているはずだ。(ルータ側のポート転送設定もお忘れなく) 
これで、多少なりともセキュリティレベルを維持出来たと思われる。

次は、sshトンネルを使ったWindows Remote Desktopかな?

0 件のコメント:

コメントを投稿