LoginSignup
9
8

More than 1 year has passed since last update.

図解で、Windows共有フォルダにSSH接続(SMB over SSH)

Last updated at Posted at 2021-05-16

Windows Server 2019 に "SMB over SSH" でマウントする

要件

自宅PCのエクスプローラーに、クラウド側Windowsサーバーの共有フォルダをネットワークドライブとして割り当てする。ユースケースは、Windowsサーバーを保守するときにファイルを保存・読み取りするのだが、訳あってscpやsftpを使わずに普段使っているWindowsエクスプローラーを使う。

実現手法

SSH接続(SSH鍵)してWindowsエクスプローラー経由でファイルを保存・読み取りする。

セキュリティ

ランサムウェアの攻撃を避けるためTCP 445ポートを防御しなければならない。そのためインターネット向けに許可するのはSSH(TCP22)だけとし、TCP 445は許可しない。共有フォルダにアクセスできるのはSSH秘密鍵を持っているユーザだけになる。

環境

  • ネットワーク経路:自宅PC → インターネット → クラウドのサーバー(IBM Cloud)
  • 自宅PC : Windows 10, SSHクライアント(Putty), vNIC(ループバックアダプタ)
  • サーバー: Windows Server 2019, Windows機能(SMBv2/v3, OpenSSH)
  • 接続手段: SMB over SSH
  • セキュリティ: TCP ポートは22番のみ(TCP 445は攻撃の為のスキャンされるのでSSH鍵を持つPCに限定する)
  • 前提: 前提条件として、Windows Server側のOpenSSH(TCP22)が設定済み、Puttyを使ってSSH接続が出来ていること。この説明は省きます。まだの人はWindows ServerにSSH接続する(→)を参照方(https://qiita.com/1Kano/items/ea018abaae7ce5edbf73)。

ネットワーク構成(IBM Cloud の場合)

クラウド側ファイアウォール(セキュリティグループ)はTCP 22のみ許可する。
【1】パソコンを起動したら、Putty(SSHクライアント)を起動してWindowsサーバーにSSH接続する。
【2】Windowsエクスプローラーを立ち上げて、ネットワークドライブを割り当てする。
image.png

自宅PC側のエクスプローラー

Windows10のエクスプローラーでファイルを保存、読み取り、書き換え、削除できる。
image.png

参考サイト

Mounting home directory using SSH for Windows 10 (https://www.nikhef.nl/~janjust/CifsOverSSH/Win10Loopback.html)

クラウドのサーバーをNAS的に使う

ランサムウェア対策のためインターネット経路はSSH接続(TCP22)のみとしSSH鍵を併用する。今回用意したサーバーはIBM CloudのVPC仮想サーバー。ファイアウォール(セキュリティグループ)周辺の設定が異なるかもしれないが他のクラウド(AWS/Azureなど)でもSMB over SSHで共有フォルダに接続可。
image.png

セキュリティグループ(ファイアウォール)はtcp22のみで可。
image.png

1. Windows サーバー側の設定

1-1. ユーザー(アカウント)を作る

共有フォルダにアクセスするにはWindows Server のユーザ名とパスワードが必要です。共有フォルダ用に作ります。このユーザ名とパスワードは、共有フォルダにアクセスするときの認証に使います。
image.png

1-2. フォルダを共有する

フォルダを右クリックしてプロパティの[共有]タブを選ぶ。最初は「共有されていません」と表示される。
[共有(S)...]をクリックして、Windows Server側のユーザーを選ぶ(この例では、BatMobileさん)。
次の画面へ進むと「ユーザーのフォルダーは共有されています」と表示される。
image.png

フォルダを共有できたので、ファイル書き込み・読み取りをテストする。まずはテスト用ファイルを作成してみて...。
image.png

1-3. SMBv2/v3を有効にする

SSH接続した後の話だが「ネットワークの場所の追加 入力したフォルダーは有効ではないようです。別のフォルダーを選択してください」とエラーが表示される場合がある。Windows Server 2019はSMBv1がデフォルトでは無効になっているのでサーバー側でネットワークドライブとしてマウントできない様だ。SMBv1は脆弱性があるので非推奨。従ってSMBv2/v3を有効にする。
image.png
サーバーのSMB v2/v3を有効にする(PowerShellを管理者権限で実行すること)。

■有効なのか無効なのか、確認する
PS C:\Windows\system32> Get-SmbServerConfiguration | Select EnableSMB2Protocol
EnableSMB2Protocol
------------------
               False

■有効にする
PS C:\Windows\system32> Set-SmbServerConfiguration -EnableSMB2Protocol $true

■有効になったことを確認する
PS C:\Windows\system32> Get-SmbServerConfiguration | Select EnableSMB2Protocol
EnableSMB2Protocol
------------------
              True

■SMBv1, SMBv2が有効か無効なのか、確認する
 PS C:\Windows\system32> Get-SmbServerConfiguration
EnableSMB1Protocol              : False
EnableSMB2Protocol              : True 

2. パソコン(Windows10)側の設定

2-1. 前提(SSH接続)

繰り返しになるがPuttyでWindowsサーバーにSSH接続できていること。
まだの場合はこちら→(https://qiita.com/1Kano/items/ea018abaae7ce5edbf73)

2-2. ループバックアダプタ(仮想NIC)を追加

パソコンのLANやwifiとは別のネットワークドライブ接続用のIPアドレスが必要なので、下図の流れでマイクロソフトの[KM-TEST Loopback Adapter]を追加する。

[コントロールパネル] → [ハードウェアとサウンド] → [デバイスとプリンター] → [デバイスマネージャー] → [レガシーハードウェアの追加] → [インストール方法:一覧から選択] → [ネットワークアダプター] → [Microsoft KM-TEST Loopback Adapter]
image.png

2-3. ループバックアダプタの初期設定

[ネットワークと共有センター]を開く。先ほど追加したループバックアダプタのイーサネット(たぶん2)が追加されているはず。そのイーサネット2をクリックしてプロパティを2箇所変更します。
【1】ネットワーク用ファイルとプリンター共有のチェックを外します。
【2】IPv4のプロパティでIPアドレスを設定します。
image.png
IPv4のIPアドレスにDHCPや固定割り当てしていない、空いているローカルIPアドレスを設定する。
【3】[詳細設定]をクリックして、[NetBIOS over TCP]を無効にする。
image.png

2-4. Windows10 [LanmanServer]ドライバの調整

ループバックアダプタのIPアドレスが[192.168.255.2]の場合、DOSプロンプトでTCP 445の待ち受けを設定する。

▼[LanmanServer]ドライバーを調整する。
自動起動を無効にする(空白の位置に注意)
> sc config lanmanserver start= delayed-auto

▼[iphlpsvc]は起動時に実行する。
> sc config iphlpsvc start= auto

▼TCPポート445を
> netsh interface portproxy add v4tov4 listenaddress = <vNICのアドレス> listenport = 445 connectaddress = <vNICのアドレス> connectport = 44445

つまりこの例では
> netsh interface portproxy add v4tov4 listenaddress = 192.168.255.2 listenport = 445 connectaddress = 192.168.255.2  connectport = 44445

image.png

2-5. PuttyにSMBポートフォワードを設定

[RDP over SSH]の要領で、[SMB over SSH]を実現するよう設定する。

PuttyのSSHトンネル設定にポートフォワードを追加する。
■源ポート:192.168.255.2:44445
■送り先:10.244.128.4:445
[追加]する

下図の場合、Windows Server にSSH接続後、RDP接続(RDP over SSH, TCP 445)とSMB接続(SMB over SSH, TCP 3389)の両方ができるように設定してある。
image.png

共有フォルダ(SMB)を使う手順

パソコン Windows10 の ファイルエクスプローラーを起動して、「ネットワークドライブの割り当て」もしくは「ネットワークの場所の追加」を実行する。接続先は、ループバックアダプタに設定したローカルIPアドレス。源ポート(TCP 44445)にアクセスするとクラウドのサーバー(Windows Server 2019 on IBM Cloud)へポートフォワードされ共有フォルダ(TCP 445)に転送される。

ネットワークの場所の追加

image.png

ネットワークドライブの割り当て

image.png

(参考)パソコン側のSMBポートフォワード待ち受けの検査

ループバックアダプタのIPアドレスが[192.168.255.2]の場合、Puttyを起動してSSHセッションを開く。DOSプロンプトを起動して、クライアントPCが源ポート44445をリッスン(待ち受け)していることをCLIコマンド「netstat -an | find "192.168.255"」で検査する。
image.png

(参考)Windows10, SMBv1が無効になっている事

コントロールパネル > プログラム > プログラムと機能 > Windows の機能の有効化または無効化
Windows機能の[SMB1.0]を無効にします。「SMB1.0/CIFS ファイル共有のサポート」のチェックを外します。
image.png

9
8
2

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
9
8