運用サーバーのリモートPowershell(別名PSRemoting)エンドポイントをインターネットからアクセスできるようにすることはどの程度安全ですか?
私たちは銀行などではありませんが、サーバーは企業の機密データを保持しています。
私はそれを次の方法で確保するつもりです:
LanguageMode
がNoLanguage
に設定されているPSSessionConfigurationを使用して、スクリプトのみを実行できるようにしますSet-ExecutionPolicy RemoteSigned
)一方:
だから、私の質問は次のとおりだと思います:これは「安全」ですか、それとも私がここで見逃している攻撃ベクトルはありますか?
ちなみに、私は無料の電子ブックから私の情報のほとんどを持っています Powershellリモーティングの秘密 。
一般的に言って、あなたは決してあなたが望むサービスでない限り、インターネットから本番サーバーまで何でも開くべきです使用するパブリック。マシンがWebサーバーの場合、ポート80のみがWebサーバーに対して開かれている必要があります。ファイアウォールを介して他のポートが開いていない場合、攻撃者が侵入する方法はありません。
VPNは最良のソリューションであり、ユーザーが認証してから、insideからのみ本番システムにアクセスする必要があります。 VPNは、他のどの方法よりもはるかに柔軟で安全です。
役立つかもしれないいくつかのこと:
クライアントを TrustedHosts リストに追加します。
Set-Item wsman:\localhost\Client\TrustedHosts -Value Server01.Domain01.Fabrikam.com
ログから不正なIPを取得し、それらのIPをブロックするファイアウォールルールを作成するログスキャンスクリプトを作成します。 (私のPSライティングテクニックを失礼します:-))
アクティビティログにリストされている不正なIPを持つファイルの内容を取得します。独自のWebログファイルをスキャンするスクリプトを作成し、クライアントがWebサーバーをプローブしているのを見つけたので、クライアントのIPをbadips.txtファイルにドロップしました。
$ips = get-content c:\powershell\utilities\badips.txt
次に、不正なIPアドレスをブロックするファイアウォールルールを作成します
foreach ($i in $ips){
[string]$rulename = "disallow-" + $i
[string]$remoteip = $i + "/32"
[string]$description = $i
すでにブロックルールを持っている悪いIPのリストを取得する
$processed = get-content c:\powershell\utilities\processedips.txt
リストをチェックして、IPがすでにブロックされているかどうかを確認します
$count = ($processed|select-string $i).count
これが新しいIPアドレスの場合は、ファイアウォールルールを作成し、処理済みリストのテキストファイルにIPを追加します。
if ($count -lt 1){
invoke-expression ("netsh advfirewall firewall add rule name=" + $rulename + " action=block enable=yes
localip=any dir=in profile=public remoteip=" + $remoteip + " description=" + $description)
$i|add-content c:\powershell\utilities\processedips.txt
}}
これは、サーバーがどの程度保護されるかについての質問には実際には答えませんが、潜在的な脅威を制限するためにさらに2つの項目を提供します。