【Windows】ファイヤーウォールのポートを閉じてリモートデスクトップで接続できない
いろいろあって、
FTPSの通信に使われているポートの
検証のためにWindowsサーバーの
ファイヤーウォールのポート
1024から65536までを閉じる設定をして
ファイヤーウォールを有効にする
ボタンを押した瞬間、
「ブツッ」
リモートデスクトップが切断される…
リモートデスクトップで使用されている
3389ポートを閉じてしまったのだから
当然だが、途方もないやっちまった感と
素人丸出し感に多少の自虐を覚える
きっと誰もが通る道だ
と言い聞かせながら解決策をさぐる
その1 net use と sc コマンド
コマンドプロンプトからサービスの
制御ができる net コマンドと
sc コマンドがあるらしい
どうやらnetコマンドは自身のみ
scコマンドはネットワークのPCの
サービスを制御できるっぽい
でもネットワーク上のPCに
ログインするためには
net use コマンドを使う
このへんはよく理解してない
まずネットワーク上のPCにadmin権限でログイン net use \\192.168.0.10 /user:[ユーザー名] [パスワード] PCを指定してサービスをストップ sc \\192.168.0.10 stop mpssvc (mpssvcはファイヤーウォールのサービス名) ログアウトする net use \\192.168.0.10 /delete
意外と簡単にリカバリできたじゃん
と思いきや
通信ができなくなる
pingも通らない
電源はON
つまりハングってる状態
AWSのようなクラウド環境だったので
コンソールからの再起動で
最悪の状態からは復帰できたが
しかし、原因は不明
たまたまだったのか
サービスを起動するときの
アカウントが
LocalServiceになっていることが
関係しているのだろうか…
その2 Telnet
なんとなく古風な通信方式のイメージ
しかしポートはLinuxのSSHでおなじみの
22ポート、ということはわりと
何でもできるのでは?と期待大
telnet 192.168.0.10
が、事前にサーバーにTelnetをインストール
しておく必要があるらしく
NG
その3 PowerShell (WinRM)
名前はよく聞くけど実は理解していない
「今どきはbatchじゃなくてpowershell
だよな!」なんて話を聞いた
batchよりもっと複雑な処理ができる、
みたいなイメージなんだけど
合ってるだろうか
こんなかんじでリモートでbatchを起動できるようだ
PS> Invoke-Command -ComputerName 192.168.0.10 -Credential [user] {C:\test.bat}
が、これも事前にファイヤーウォールの
Windows リモート管理 (HTTP 受信)
を有効にしておく必要があるらしい
しかもポートは5985…
どちらにしてもNG
その4 WMI
わりと簡単な手順とコマンドで
いろんなことができそうなサービス
以前に別のところで使ったことがあるので
いけるのではないかと思ったが
WMIC /NODE:192.168.0.10 /user:[user] /password:[pass] process call create "C:\test.bat"
これも事前にファイヤーウォールの
Windows Management Instrumentation (WMI)
グループを有効化しておく必要がある
やむなくNG
その4 PsExec
Windows純正のソフトをクライアントに
入れて実行するといろいろできるらしい
が、使用するのは
135ポート
445ポート
1025~65535ポート
ということでNG
使用する場合には
PsExec.exe -u [user] -p [pass] \\192.168.0.10 C:\test.bat
のようにするみたい
その5 タスクスケジューラ
atコマンド
at \\192.168.0.10 09:00 C:\test.bat
のようなかんじで
タスクスケジューラを外部から
操作できるらしい
しかし事前にファイヤーウォールの
ファイルとプリンターの共有
グループを有効化しておく必要がある
ファイルの共有自体はできていたので
グループのなかの必要な項目が
有効になっていなかったのだと思われる
atコマンドより高機能なschtasksコマンドが
あるらしい
schtasks /Create /S 192.168.0.10 /U [user] /P [pass] /TN sample /SC ONCE /SD 1900/01/01 /ST 00:00 /TR C:\test.bat schtasks /Run /S 192.168.0.10 /U [user] /P [pass] /TN sample
のように使う
こちらもファイヤーウォールの
スケジュールされたリモート タスク管理
グループを有効化しておく必要があり
やっぱりNG
しかしまだタスクスケジューラを
あきらめない、あきらめたら試合終了だ
幸いにもファイル共有はいきているので
net use \\192.168.0.10 /user:[ユーザー名] [パスワード]
でログインしたあと
エクスプローラーのアドレスバーに
\\192.168.0.10\C$
と打ち込むとサーバーの
ディレクトリが表示されて
読み込みも書き込みもできる
タスクスケジューラのタスクは
下記のフォルダにxml形式で
保存されているので
開いて中身を確認できる
C:\Windows\System32\Tasks
たまたま毎日定時に実行している
どうでもいいbatchがあった
(ちなみにここのファイルを直接編集しても
反映されずエラーになるので都合のいい
タスクがないとお手上げ)
batchファイルの最初の行に
netsh advfirewall set allprofiles state off
を追加してbatchが起動したら
ファイヤーウォールをすべて
無効化するように仕込む
これでスケジューラが起動したら
ファイヤーウォールが無効化されて
復旧完了、と翌朝ウキウキして
確認すると
batchがうごいていない…
こればっかりは謎のまま
それはともかくとして
万策が尽きてくる
その6 リモートでレジストリを変更
レジストリエディタを開き、
ファイル⇒ネットワークレジストリへの接続 "選択するオブジェクト名を選択してください"に \\192.168.0.10を入力⇒OK
これでサーバーのレジストリを開ける
これもおそらくファイヤーウォールで
リモートレジストリを受け付けるか
どうかの設定があるのだろうけど
意外にも有効になっていたらしい
\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\PublicProfile \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
がそれぞれファイヤーウォールの
・パブリックプロファイル
・ドメインプロファイル
・プライベートプロファイル
に相当すると思われる
それぞれの
EnableFirewallのデータ値を(0)に設定
することでファイヤーウォールが
無効になる
ただし設定値を有効にするには
再起動が必要
実はいろいろあって再起動しておらず
というのは結局クラウドのコンソールから
復旧できたりしたので顛末は不明のまま
しかし、不測の事態に備えて
リモートデスクトップ以外でも
ある程度操作できるようにしておいた
ほうがいいのではと思う反面、
セキュリティホールにもなり得るので
ある意味ジレンマなのだと思う
(今回の件もどうにかして侵入して
ファイヤーウォールを無効化とか
ハッキングにも通ずる気がするし)
ともあれ
トラブルの対策がいちばん技術の
上達に役立つという話