ITの教科書検索
入門読了 約11分

踏み台サーバとは ― 内部のサーバへ安全に入る中継の仕組み

踏み台サーバは、非公開のサーバへ入る経路を1台に絞る中継サーバです。置き場所と通信の絞り方、ssh -J の使い方、VPNなど踏み台を置かない方式が分かります。

目次
  1. 踏み台サーバとは
  2. なぜ必要か
  3. 構成と通信の絞り方
  4. 規則を変えて確かめる
  5. SSHで経由する方法
  6. 運用で守ること
  7. 踏み台を置かない方式
  8. 攻撃の「踏み台」との違い
  9. 参考にした資料
  10. 練習問題

踏み台サーバとは、内部のサーバへ入るときに経由する中継用のサーバ

踏み台サーバは、内部のサーバへ入るときに必ず経由する中継用のサーバです。手順書に「踏み台サーバにSSHしてから作業する」と書いてあれば、そのシステムの内部のサーバにはインターネットから直接入れません。ジャンプサーバやBastionとも呼び、クラウドの構成図に Bastion と書かれた1台があれば、たいていこのサーバを指します。

データベースのように外へ公開しないサーバでも、更新や調査のために担当者は接続します。その経路をサーバごとに開けると、攻撃者が狙える場所がサーバの数だけ増えます。踏み台サーバを置けば、外から入れる場所が1台になり、守る対象がはっきりします。置き場所、通信の絞り方、SSHでの接続方法、踏み台を置かない方式の順に説明します。

Bastion はもともと、強く守ったホストを指す言葉です。NISTのSP 800-123は、bastion host を、防御を特に強め、機能を最小限にしたホストと説明しています。いまのクラウドの文書では、外からの接続を受けて内部へ中継するサーバをこの名前で呼ぶことが多く、Google Cloudの文書も同じ意味で使っています。

なぜ踏み台サーバが必要か:外から入れる場所を1台に絞る

踏み台サーバの効果は、内部のサーバを外から見えなくしたまま、管理の接続だけを通せることです。DMZは公開するサーバを区画で分ける仕組みで、踏み台サーバは担当者の通り道を1本にまとめる仕組みです。1本にまとめると、次の3つの対策を1か所で行えます。

  • 接続元の制限:会社のIPアドレスなど、決まった場所からだけ接続を受け付ける
  • 認証:公開鍵や多要素認証を、踏み台サーバへの接続で必ず通す
  • 記録:誰がいつ接続したかを、踏み台サーバのログに集める

NISTのSP 800-123も、サーバの遠隔管理では、強い認証と、管理に使える端末の制限を求めています。インターネットからファイアウォールを越えて管理することは、VPNのような強い仕組みを使わない限り許可しないよう書いています。踏み台サーバは、この強い認証と接続元の制限を1か所にまとめて行う作り方の1つです。

踏み台サーバの構成:公開側に1台置き、内部は非公開にする

クラウドでは、ネットワークを公開側と非公開側のサブネットに分けます。踏み台サーバは、インターネットから届く公開側に置きます。WebサーバやDBサーバは非公開側に置き、グローバルIPアドレスを持たせません。サブネットの分け方はAmazon VPCの記事で確かめられます。

インターネット公開側非公開側担当者のPC外部の攻撃者踏み台サーバWebサーバDBサーバグローバルIPなしSSH 22番踏み台からだけ接続元で拒否直接は届かないインターネット担当者のPC外部の攻撃者踏み台サーバ公開側非公開側WebサーバDBサーバグローバルIPなしSSH 22番踏み台からだけ接続元で拒否直接は届かない
内部のサーバへ届く線は、踏み台サーバを通る経路だけです。外から狙える場所が1台に絞られ、その1台も接続元を制限します。

配置だけでは足りず、ファイアウォールの規則で接続の相手も絞ります。規則は次の3か所に書きます。

踏み台サーバの構成で設定するファイアウォールの規則
設定する場所許可する通信相手
踏み台サーバの受信SSH(22番)会社やVPNのIPアドレスだけ
踏み台サーバの送信SSH(22番)内部サーバの範囲だけ
内部サーバの受信SSH(22番)踏み台サーバだけ

AWSのセキュリティグループのように、IPアドレスの代わりに踏み台サーバのグループを相手に指定できる仕組みもあります。踏み台サーバを作り直してIPアドレスが変わっても、規則を書き換えずに済みます。Windowsのサーバなら、SSHの22番の代わりにリモートデスクトップの3389番を同じように絞ります。

押してみる:規則を変えると、どの接続が止まるか

次の図で2つの規則を選ぶと、前の図の構成のどの接続が止まるかが分かります。最初の状態は、どちらも広く開けた設定です。

踏み台サーバのSSHを受け入れる接続元
内部サーバのSSHを受け入れる接続元
  • 担当者のPCから踏み台サーバへ通る接続元を問わないので通ります。
  • 外部の攻撃者から踏み台サーバへ届くログインの画面まで届きます。この先を守るのは認証だけです。
  • 外部の攻撃者から内部サーバへ直接止まる内部サーバにはグローバルIPアドレスが無いので、規則の設定に関わらず届きません。
  • 乗っ取られたWebサーバからDBサーバの22番へ届く同じネットワークの中なので届きます。1台が乗っ取られると、隣のサーバも狙われます。
  • 担当者のPCから踏み台サーバ経由でDBサーバへ通る踏み台サーバも同じネットワークの中にあるので通ります。
2つの弱点が残っています。上のボタンを切り替えて、結果の変化を確かめられます。

内部サーバの規則を絞る効果は、外からの攻撃より、中に入られたあとに表れます。隣のサーバからの接続を止めておくと、1台の被害が次のサーバへ広がりにくくなります。

SSHで踏み台を経由する方法:ProxyJumpとポートフォワーディング

いちばん素朴な方法は、踏み台サーバにSSHでログインし、そこからもう一度 ssh を打つやり方です。ただしこの方法では、内部サーバ用の秘密鍵を踏み台サーバに置くことになります。踏み台サーバが乗っ取られると、その鍵も一緒に奪われます。そこで、手元のPCから1回のコマンドで経由する方法を使います。

ProxyJumpで内部のサーバへ接続する

OpenSSHでは、-J を付けると踏み台サーバを経由して接続できます。自分のPCのターミナルで次のように打ちます。

ssh -J踏み台サーバを経由して接続する
$ ssh -J ops@bastion.example.com ops@10.0.2.20
# bastion.example.com は踏み台サーバ、10.0.2.20 は内部のDBサーバです。
# 鍵はどちらも手元のものを使います。

SSHはまず踏み台サーバへ接続し、そこから内部サーバまでのTCPの転送を作ります。その転送の中を通して、手元のPCと内部サーバが直接SSHでつながります。2本目のSSHは手元のPCで暗号化されるので、踏み台サーバは中身を読めません。内部サーバへの認証も手元のPCで行うので、内部サーバ用の秘密鍵を踏み台サーバに置かずに済みます。

手動でログインし直す自分のPC踏み台内部サーバSSH接続1SSH接続2鍵1鍵2を置く中身を読めるProxyJump自分のPC踏み台内部サーバSSH接続1SSH接続2鍵1・鍵2鍵を置かない中身は読めない手動でログインし直す自分のPC踏み台内部サーバSSH接続1SSH接続2鍵1鍵2を置く中身を読めるProxyJump自分のPC踏み台内部サーバSSH接続1SSH接続2鍵1・鍵2鍵を置かない中身は読めない
手動では踏み台で接続が切れるので、内部サーバ用の鍵を踏み台に置くことになります。ProxyJumpでは2本目のSSHが手元から内部サーバまでつながり、踏み台は暗号化された通信を渡すだけです。

毎回 -J を打つ代わりに、設定ファイルに書いておくこともできます。次のように書くと、ssh db の一言で同じ接続になります。この設定は、ファイルを運ぶ scp や sftp にも効きます。

~/.ssh/config の例
Host bastion
    HostName bastion.example.com
    User ops

Host db
    HostName 10.0.2.20
    User ops
    ProxyJump bastion

接続先によっては、踏み台サーバが2段になっていることもあります。-J にはカンマで区切って複数の踏み台を書けるので、手動でログインを重ねずに済みます。

ポートフォワーディングでデータベースへ接続する

SSHではなく、手元のツールからデータベースへ接続したいこともあります。このときはSSHの記事で説明した -L のポートフォワーディングを使います。次の例は、手元の15432番を、DBサーバのPostgreSQLの5432番につなぎます。

ssh -L手元のポートを内部へ転送する
$ ssh -N -L 15432:10.0.2.20:5432 ops@bastion.example.com
# -N はリモートのコマンドを実行せず、転送だけを行う指定です。
# この間、手元のツールは localhost の 15432番 へ接続します。

ProxyJumpと違い、この方法でSSHの暗号化があるのは手元のPCと踏み台サーバの間だけです。踏み台サーバからDBサーバまでは、データベース自身の通信のまま流れます。この区間も守りたいときは、データベースの接続にTLSを使います。踏み台サーバの送信とDBサーバの受信の両方の規則で、5432番の許可も必要です。

踏み台サーバの運用で守ること

踏み台サーバは、インターネットから届く場所にあり、内部へ接続できる1台です。乗っ取られると影響が内部全体に及ぶので、外から狙われる前提で運用します。

  • 秘密鍵を踏み台サーバに置かない。ProxyJumpなら置かずに済みます
  • 共有のアカウントを使わない。人ごとに分けると、ログから誰の接続かが分かります
  • パスワードのログインを止める。OpenSSHの既定では許可なので、PasswordAuthentication を no にして、公開鍵や多要素認証に絞ります
  • SSH以外のサービスやソフトを入れず、OSの更新を続ける。データも踏み台サーバには保存しません
  • 転送先を絞る。OpenSSHの PermitOpen で、転送できる宛先を内部の決まったサーバに限れます
  • 使うときだけ起動する。止めている間は狙われず、起動時間で課金されるサーバなら費用も減ります
  • ログを別の場所へ送る。乗っ取られるとログを消されることがあるので、Syslogなどで外へ運びます

ProxyJumpにも注意点があります。踏み台サーバに残るのは接続の記録で、内部サーバで打ったコマンドは残りません。操作まで記録したいときは、内部サーバ側でも記録を取るか、セッションを記録する製品やサービスを使います。

秘密鍵を踏み台サーバに置かない別の方法として、ssh -A のエージェント転送もあります。OpenSSHの文書は、この機能を慎重に使うよう注意しています。転送中は、踏み台サーバの管理者権限を取った攻撃者が、鍵の中身は取れなくても、その鍵で別のサーバへ認証できるためです。踏み台を経由するだけなら、ProxyJumpで足ります。

踏み台を置かない方式:VPNとクラウドの接続サービス

踏み台サーバは、サーバを1台増やして運用し続ける方式です。同じことを、踏み台サーバなしで行う方式もあります。代表はVPNと、クラウド事業者の接続サービスです。

踏み台サーバ・VPN・クラウドの接続サービスの違い
方式外に開くもの運用する人向く場面
踏み台サーバSSHを受ける1台のサーバ利用者がOSの更新まで行うクラウドの種類に関わらず、SSHだけで同じように入りたいとき
VPNVPNの装置やサービス利用者か、VPNサービスの事業者管理の接続以外にも、社内のシステムをまとめて使いたいとき
クラウドの接続サービス事業者の窓口だけ事業者。権限の設定は利用者クラウドのサーバを管理するとき

VPNは、担当者のPCを社内やクラウドのネットワークにつなぐ方式です。つないだあとは内部のアドレスへ接続できるので、踏み台サーバを通さずに済みます。その分、VPNに入った端末から届く範囲を、ファイアウォールで絞っておきます。

接続サービスは、クラウド事業者のIDと権限で接続を認める方式です。SSHのポートをインターネットに向けず、サーバを外部から見えないままにできます。主要なクラウドには、次のサービスがあります。

  • AWSのSession Manager:サーバのエージェントがAWSへHTTPSでつなぐので、受信のポートもSSHの鍵も要りません
  • Azure Bastion:事業者が運用する踏み台のサービスです。TLSの443番で接続でき、VMにグローバルIPアドレスは要りません
  • Google CloudのIAP TCP転送:暗号化されたトンネルでVMへ接続します。ファイアウォールで、IAPのアドレス範囲からの受信だけを許可します

クラウドのサーバを管理するだけなら、サーバを1台持たずに済む接続サービスを先に検討します。Google Cloudの文書も、踏み台サーバは、セッションの記録などの事情でIAPを使えないときの選択肢として挙げています。ただし記録できる範囲はサービスごとに違います。Session Managerは、SSHやポートフォワーディングを通したセッションの操作を記録できません。Azure Bastionでセッションを録画するには、上位のPremiumが必要です。

画面だけを手元へ転送して、データを持ち出させない方法もあります。社内の業務で使う方式は、シンクライアントとVDIの記事で比べています。

攻撃に使われる「踏み台」との違い

「踏み台」という言葉は、攻撃の説明にも出てきます。不正アクセスの話で出てくる踏み台は、攻撃者が乗っ取り、別の標的を攻撃するための中継に使う機器です。踏み台サーバは管理者が用意し、担当者の接続を中継します。中継という仕組みは同じでも、誰が何のために使うかが違います。

この2つはつながっています。踏み台サーバが乗っ取られると、そのまま攻撃の踏み台になり、内部のサーバへの攻撃に使われます。ニュースで「踏み台にされた」と書かれていれば、攻撃の中継に使われたという意味です。

参考にした資料

練習問題(全5問)

Q1踏み台サーバを置く主な目的として、適切なものはどれ?
Q2内部のサーバのファイアウォールで、SSHの接続元として指定するのに適切なものはどれ?
Q3ssh -J を使う接続の説明として、正しいものはどれ?
Q4踏み台サーバへ ssh -L 15432:10.0.2.20:5432 で接続したとき、手元の15432番に届いた通信の説明として正しいものはどれ?
Q5管理者が用意する踏み台サーバと、攻撃の踏み台の違いとして、適切なものはどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

クラウドの記事を続けて読む

クラウド 全36本中30本目