コピペでSSH設定をすると危険だということを「OpenSSH実践入門」から学んだ

OpenSSHを基礎から学ぶことができる「OpenSSH実践入門」を読みました。ローカルで編集したコードをGitHubにpushするためにSSHのKeyを登録する必要があるなど、身近なところで頻繁に利用されている技術ですが、毎回コピーアンドペースト(以下、コピペ)で何も考えることなく作業しているため、体系的な知識をつけようと読むことにしました。

約400ページと厚みのある書籍ですが後半は設定に関する話が多いため、必要になった時に参照するのがいいと思いました。3章で学ぶことが多かったです。

本書は、OpenSSH入門書のため公開鍵認証といった基礎知識を深く解説していません。難しいと感じる場合は、結城さんの暗号技術入門を事前に読むことをお勧めします。

OpenSSH[実践]入門 (Software Design plus)

目次

  • 第1章 SSHとOpenSSHの概要

  • 第2章 OpenSSHの基本的な使い方

  • 第3章 一歩進んだOpenSSHの使い方

  • 第4章 SSHクライアントの設定

  • 第5章 SSHサーバの設定

  • 第6章 OpenSSHの落とし穴

  • 第7章 設定事例集

  • 付録

OpenSSHには付属コマンドがある

OpenSSHに関係するのは、sshコマンドだと思っていましたが付属コマンドとしてscp ssh-agent ssh-keygen ssh-keyscan ssh-copy-idなどが使えます。scpは、Linuxの基本的なコマンドだと思っていたので驚きました。

3つのTCPポートフォワード機能

TCPポートフォワードは、TCPセッションをあるマシーンのあるポートに転送させる機能です。

クライアントからログインホストを通してターゲットにポートフォワードを行うLocalForward。逆のことを行うRemoteForwardがあります。また、アドレスやポートを動的に指定できるDynamicForwardがあります。

LocalForwardは、踏む台サーバーを経由してデータベース(DB)をローカルで確認したい時に便利そうだと思いました。

ポートフォワードは、ポートを転送する機能だということを忘れるとLocalForwardとRemoteForwardを勘違いしてしまうので、AWSなどを使って実験し知識を定着させる!

プロキシと多段SSH

学生時代、研究室のサーバーは所属学部のサーバーからアクセスする必要があったので、2回コマンドを実行する必要がありました。多段SSHを利用することによってこの問題を解決できると知りました。

また、sshコマンドには-Wオプションがサポートされていて、sshをnetcatのように振る舞わせることできることを知りました。

制御ソケットにアクセス権を与えてはいけない

TCP同時接続数という制約があるため、sshは無限にセッションを確立できません。コントロールマスターは、1つの接続で複数のセッションを共有することでセッションを節約できます。

コントロールマスターは、制御用のソケットを管理することで上記のことを可能にするのですがアクセス権が奪われてしまうと、リモートホストへ入り放題になってしまいます。

Batchmode

クライアントの設定で、yesにすると対話的に処理が行われなくなります。

PasswordAuthentication

パスワード認証を行うかを設定します。デフォルトは、noです。

NumberOfPasswordPrompts

パスワードを何度、尋ねるかを設定します。デフォルトは、3回です。

チャレンジ・レスポンス認証

ユーザーしか知らない情報を元に、認証を行います。「小学生の時の担任の先生の名前は?」のような認証です。OpenSSHにおいては、パスワード認証との明確な違いがわかっていないので調査します。

ログファイル

sshdにアクセルできる状態では、総当たり攻撃(ブルートフォースアタック)が行われてしまうためデフォルトのポートを使わないなどの戦略が取られます。

ログにアクセスしてきたIPアドレスが書き込まれるので、Denyするとよいと思いました。

まとめ

  • OpenSSH実践入門を読んだ
  • SSHは、設定次第で思わぬ危険を生んでしまう
  • OpenSSHを本当に理解するために、AWSなどでインフラ構築をして実験する必要がある
  • 本書は、SSH設定のコピペを辞めたいと思っているエンジニアにオススメ

OpenSSH[実践]入門 (Software Design plus)

OpenSSH[実践]入門 (Software Design plus)

入門OpenSSHもオススメです。

入門OpenSSH

入門OpenSSH