0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

踏み台サーバでトンネリングしてSQLserverに接続する

0
Posted at

踏み台サーバでトンネリングしてSQLserverに接続する。
この仕組みを構築しましたので備忘として残します。

構成としては以下のようになります。

image.png

要件としては、特定のSSHユーザに対して以下の設定をおこなうようにしました。
① ポートフォワーディングのみを許可し、その他コマンド実行を許容しない(ポートフォワーディング専用とする)
② 特定のIPアドレスからのみ通信を許可する
③ 特定の場所へのみアクセスを許可する
④ 鍵認証の強制(パスワード認証を許可しない)

このための設定を以下に記載します。


1. OpenSSHのインストールと起動確認

Amazon Linuxにログインし、OpenSSHをインストールします(Amazon Linuxでは通常標準でインストールされていますが、念のため確認・起動します)。

# インストール(既に入っている場合は更新のみ)
sudo dnf install -y openssh-server
# 起動と自動起動設定
sudo systemctl enable --now sshd

2. トンネル専用ユーザーの作成

シェルログインやsudo権限を持たない専用ユーザーを作成します。

# ログインシェルを /sbin/nologin にしてユーザー作成
sudo useradd -m -s /sbin/nologin tunnel-user

# .sshディレクトリの作成と権限設定
sudo mkdir -p /home/tunnel-user/.ssh
sudo chmod 700 /home/tunnel-user/.ssh
sudo touch /home/tunnel-user/.ssh/authorized_keys
sudo chmod 600 /home/tunnel-user/.ssh/authorized_keys
sudo chown -R tunnel-user:tunnel-user /home/tunnel-user/.ssh

3. 接続元PC(クライアント)で鍵ペアを作成する

PCで以下のコマンドを実行します(今回はWindowsで実行)。

# 暗号化強度の高い ed25519 形式で作成
ssh-keygen -t ed25519 -f ./id_ed25519_tunnel

生成されるファイル:

  1. id_ed25519_tunnel (秘密鍵)
  2. id_ed25519_tunnel.pub (公開鍵)

4. 公開鍵の内容を確認する

作成された公開鍵(.pubの方)の中身を表示して、コピーします。

cat id_ed25519_tunnel.pub

ssh-ed25519 AAAA... という文字列が表示されるので、これをコピーしておきます。


5. サーバー側(Amazon Linux)へ登録する

Amazon Linuxにログインし、先ほど作成した tunnel-user の設定ファイルに書き込みます。

# rootまたはsudo権限のあるユーザーで実行
sudo vi /home/tunnel-user/.ssh/authorized_keys

ファイルの中に、制限オプション + コピーした公開鍵 を1行で貼り付けます。

restrict,port-forwarding,permitopen="xx.xx.xx.xx:1433" ssh-ed25519 AAAAC3NzaC1...(ここにコピーした公開鍵を貼り付け)...

貼り付けたら保存(:wq)します。
xx.xx.xx.xx は接続先のホスト名、IPアドレスに書き換えて入力してください。

各オプションの説明:

  • restrict:
    no-pty, no-agent-forwarding, no-X11-forwarding, no-user-rc などをまとめて無効化します。
  • port-forwarding:
    restrict で一旦すべて禁止された機能のうち、ポートフォワーディングだけを明示的に許可します。
  • permitopen="ホスト:ポート":
    接続先をSQL ServerのIPまたはホスト名とポートだけに制限します。

6. OpenSSH設定(sshd_config)の編集

/etc/ssh/sshd_config の 末尾に設定を追加します。特定のユーザー・IPからの接続に対して、鍵認証を強制します。
また、指定外のIPからアクセスした場合、サーバー側は「このユーザーに許可された認証方法がない」と判断し、接続を拒否します。

sudo vi /etc/ssh/sshd_config

ファイルの最下行に以下を追記してください。

# ファイル末尾に追加
Match User tunnel-user Address xx.xx.xx.xx
    PasswordAuthentication no
    PubkeyAuthentication yes
    AuthenticationMethods publickey

xx.xx.xx.xx は接続元(オフィスや自宅)のIPアドレスに書き換えて入力してください。
Match ブロックはファイルの最後に書く必要があります(それ以降の設定がすべてMatch対象になるため)。

設定を反映させます。

sudo systemctl restart sshd

クライアントからの接続方法

上記設定後、以下のコマンドでSSHトンネリングができるようになります。

# -N: コマンドを実行しない(トンネル専用)
# -L: ローカルの1433番をRDSの1433番に転送
ssh -i ./id_ed25519_tunnel -N -L 1433:xx.xx.xx.xx:1433 tunnel-user@踏み台のIP

xx.xx.xx.xx は接続先のホスト名、IPアドレスに書き換えて入力してください。

何もエラーが出ずにコマンドが待機状態(プロンプトが戻ってこない状態)になれば成功です。

この状態でSSMSからSQLserverへ接続してみます。
接続する際はサーバー名に127.0.0.1を指定し、サーバー証明書を信頼するにチェックを入れてください。

image.png

接続できました。

image.png

この設定のほかに、SQLserverで権限を絞ったユーザを作成することや、セキュリティグループにてNW側でアクセスを制御する等も必須になるとは思いますが、今回は踏み台サーバ上の設定のみ記録しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?